實(shí)習(xí)終于結(jié)束了,現(xiàn)把實(shí)習(xí)期間做的基于人體姿態(tài)估計(jì)的模型小型化的工作做個(gè)總結(jié)。
現(xiàn)在深度學(xué)習(xí)模型開始走向應(yīng)用,因此我們需要把深度學(xué)習(xí)網(wǎng)絡(luò)和模型部署到一些硬件上,而現(xiàn)有一些模型的參數(shù)量由于過大,會(huì)導(dǎo)致在一些硬件上的運(yùn)行速度很慢,所以我們需要對(duì)深度學(xué)習(xí)模型進(jìn)行小型化處理。模型小型化旨在保證模型效果不會(huì)明顯下降的情況下降低模型的參數(shù)量,從而提高模型的運(yùn)算速度。
以下是幾種模型小型化的方法:
1、修改某些卷積層的num_output
其實(shí)很多模型的參數(shù)都有冗余,有些層根本不需要很多的卷積核,所以,通過修改該參數(shù)可以降低一部分的參數(shù)量。
2、使用分離通道卷積(depthwise separable convolution)
對(duì)某些卷積層使用分離通道卷積的方法。使用分離通道卷積可以去掉一部分冗余的參數(shù)。分離通道卷積與常用卷積的不同之處在于,標(biāo)準(zhǔn)卷積操作中,每個(gè)卷積核都要對(duì)輸入的所有通道的特征進(jìn)行卷積,然后結(jié)合生成一個(gè)對(duì)應(yīng)的特征。分離通道卷積中,分為兩步,第一步使用分離通道卷積,每個(gè)卷積核只對(duì)一個(gè)通道進(jìn)行卷積。第二步,使用1x1的標(biāo)準(zhǔn)卷積整合分離通道卷積輸出的特征。分離通道卷積時(shí),各個(gè)通道之間的特征信息沒有交互,之后會(huì)采用一個(gè)1*1的標(biāo)準(zhǔn)卷積運(yùn)算,使分離通道卷積輸出的特征的通道之間的信息有了一個(gè)交互。在tensorflow中,有對(duì)應(yīng)的tf.nn.depthwise_conv2d接口可以很方便地實(shí)現(xiàn)分離通道卷積。
標(biāo)準(zhǔn)卷積和分離通道卷積的示意圖如下
參考論文:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
3、使用channel shuffle方法
channel shuffle方法是在分離通道卷積方法的基礎(chǔ)上做的改進(jìn),將分離通道卷積之后的1*1的全卷積替換為channel shuffle。
參考論文:ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices
4、使用ThiNet方法
ThiNet方法是尋找一些對(duì)輸出特征貢獻(xiàn)較小的卷積核,將其裁剪掉,從而降低參數(shù)量。屬于第一種方法的延伸。
參考論文:ThiNet: A Filter Level Pruning Method for Deep Neural Network Compression
5、改變網(wǎng)絡(luò)結(jié)構(gòu)
現(xiàn)在常見的網(wǎng)絡(luò)結(jié)構(gòu)有:以VGG為代表的單支流網(wǎng)絡(luò)結(jié)構(gòu),GoogLeNet的Inception類型的網(wǎng)絡(luò)結(jié)構(gòu),ResNet的殘差結(jié)構(gòu),還有DenseNet的結(jié)構(gòu)(類似殘差結(jié)構(gòu),把殘差結(jié)構(gòu)中特征的相加變?yōu)樘卣髌唇樱T谠?jīng)的ImageNet的比賽中,GoogLeNet取得了比VGG更好的成績(jī),但是GoogLeNet的參數(shù)量卻比VGG小很多,這說明通過改變網(wǎng)絡(luò)結(jié)構(gòu),我們不僅可以減低模型的參數(shù)量,還可能會(huì)提升模型的效果。
前四種方法都是在原有網(wǎng)絡(luò)上進(jìn)行的操作,一般不會(huì)對(duì)網(wǎng)絡(luò)結(jié)構(gòu)造成太大改變。而第五種方法則是徹底改變了網(wǎng)絡(luò)的結(jié)構(gòu)。
我們將模型的參數(shù)量降低后,如果隨機(jī)初始化,模型由于參數(shù)量較小,很難達(dá)到原有的效果,所以構(gòu)造了新的網(wǎng)絡(luò)之后還會(huì)涉及到重構(gòu)。
重構(gòu)其實(shí)是為了得到一個(gè)較好的初始化模型。我們一般去重構(gòu)網(wǎng)絡(luò)的倒數(shù)第二層的輸出特征,因?yàn)樽罱K的結(jié)果都是在倒數(shù)第二層的輸出特征上得到的。但有時(shí)我們還會(huì)去重構(gòu)其他卷積層輸出的特征,比如一個(gè)較深的網(wǎng)絡(luò),我們單純地去重構(gòu)倒數(shù)第二層的特征也很難得到一個(gè)較好的初始化模型,因?yàn)楸O(jiān)督信息(即重構(gòu)時(shí)的loss)太靠后,前面的層很難學(xué)習(xí)到,所以有時(shí)我們可以將網(wǎng)絡(luò)分為幾個(gè)部分,依次重構(gòu),先重構(gòu)前面的,然后使用重構(gòu)好的模型去重構(gòu)后面的部分。
使用ThiNet方法,每裁剪完一層之后都要做finetunign,然后再裁剪下一層。我們也可以每裁剪完一層之后去做重構(gòu),全部都裁剪完之后,做姿態(tài)估計(jì)訓(xùn)練。
我們還可以重構(gòu)和姿態(tài)估計(jì)訓(xùn)練一起做,使用兩個(gè)監(jiān)督信息(即重構(gòu)和姿態(tài)估計(jì)兩個(gè)loss)使模型邊重構(gòu)邊訓(xùn)練,我們將其稱為mimick。
這就是我在模型小型化的工作中使用到的一些方法。但如何使用這些方法才能得到一個(gè)好的結(jié)果,這還需要親自去嘗試。
-
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5500瀏覽量
121109
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論