王策仁,彭亞雄,陸安江
(貴州大學(xué) 大數(shù)據(jù)與信息工程學(xué)院,貴陽(yáng) 550025)
計(jì)算機(jī)視覺(jué)學(xué)科領(lǐng)域發(fā)展至今,圖像分類問(wèn)題一直是此領(lǐng)域的重要內(nèi)容。隨著互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,網(wǎng)絡(luò)上的圖像無(wú)論從數(shù)據(jù)大小、數(shù)量基數(shù)和種類的豐富都呈現(xiàn)指數(shù)式的增長(zhǎng)。近幾年,機(jī)器學(xué)習(xí)在圖像識(shí)別領(lǐng)域發(fā)展迅速,便于進(jìn)行矩陣和浮點(diǎn)計(jì)算的GPU性能快速進(jìn)步,而作為機(jī)器學(xué)習(xí)的重要分支,其可以通過(guò)大量數(shù)據(jù)和GPU硬件加速來(lái)增強(qiáng)深度學(xué)習(xí)快速在學(xué)習(xí)科研[1]、工業(yè)應(yīng)用[2]、醫(yī)學(xué)診斷[3]等領(lǐng)域得到廣泛的運(yùn)用。
深度學(xué)習(xí)擁有比較優(yōu)秀的建模和分析能力,在圖形分類中優(yōu)勢(shì)明顯。為此需要兩個(gè)前提條件:一是足夠深且合適的網(wǎng)絡(luò)模型,二是質(zhì)量好且標(biāo)注優(yōu)秀的數(shù)據(jù)集提供訓(xùn)練[4]。此外,對(duì)實(shí)驗(yàn)的硬件要求很高。
飲食的種類豐富多樣,又是人們?nèi)粘I畹谋匾蛩?,隨著國(guó)家、民族、地域的不同,其種類風(fēng)格也大相徑庭。由于食物圖片的數(shù)量之多,采用傳統(tǒng)的深度學(xué)習(xí)方法,對(duì)硬件和數(shù)據(jù)集的質(zhì)量要求太高,花費(fèi)的時(shí)間較多,并難以得到較好的結(jié)果。人們?nèi)粘=佑|到的食物圖像數(shù)據(jù)樣本大多質(zhì)量一般,要么是樣本的數(shù)量較少,要么是樣本中無(wú)效數(shù)據(jù)或標(biāo)注較少[5]。但是,這些通過(guò)卷積神經(jīng)網(wǎng)絡(luò)提取出來(lái)的特征信息部分,具有不錯(cuò)的泛化能力,可通過(guò)對(duì)遷移學(xué)習(xí)合理運(yùn)用增加模型性能。
深度學(xué)習(xí)是機(jī)器學(xué)習(xí)領(lǐng)域的一個(gè)重要分支,2012年Hinton等人[6]構(gòu)建全連接網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)結(jié)合的模型,并獲得了當(dāng)年ImageNet 大規(guī)模視覺(jué)識(shí)別挑戰(zhàn)大賽(ImageNet Large Scale Visual Recognition Competition, ILSVRC)[7]圖像分類目標(biāo)的冠軍,同時(shí)文獻(xiàn)[6]中首次使用了GPU來(lái)加速模型的訓(xùn)練,借以尋求更優(yōu)的網(wǎng)絡(luò)和更準(zhǔn)確的算法,從此奠定了卷積神經(jīng)網(wǎng)絡(luò)在圖像分類領(lǐng)域的領(lǐng)先。
本文采用在ILSVRC大賽圖像分類項(xiàng)目中具有不同特性的VGG16[8]、ResNet50[9]和MobileNetV2[10]網(wǎng)絡(luò),用于特征提取,遷移其在ImageNet(源域)上訓(xùn)練出的特征和權(quán)重知識(shí)到飲食圖像分類(目標(biāo)域)中[11],通過(guò)Pre-training + Fine-Tuning(預(yù)訓(xùn)練+微調(diào))方式再訓(xùn)練。
VGG16網(wǎng)絡(luò)模型是由牛津大學(xué)視覺(jué)幾何組在2014開(kāi)發(fā)的,整個(gè)網(wǎng)絡(luò)共16層,由13層conv卷積層和3層fc全連接層共同組成(5層maxpool池化層不計(jì)入層數(shù))。最后通過(guò)3層全連接層輸出1 000個(gè)分類。
文獻(xiàn)[8]中指出,網(wǎng)絡(luò)的核心思路是通過(guò)堆疊對(duì)多個(gè)3x3卷積核來(lái)取代尺寸更大的卷積核,即通過(guò)感受野(receptive field)[12]的方式,由兩個(gè)3x3卷積核堆疊取代5x5的卷積核;3個(gè)3x3的取代7x7的卷積核,如圖1所示。計(jì)算公式為:
圖1 感受野
N(i)=[N(i+1)-1]·S+K
(1)
其中:N(i)是第i層感受野;S是步距;K為卷積核大小。
ResNet50在2015年由微軟提出,其在結(jié)構(gòu)上的優(yōu)越性可以讓網(wǎng)絡(luò)突破1 000層組成超深的網(wǎng)絡(luò)。得益于文獻(xiàn)[9]中提出的殘差(residual)結(jié)構(gòu),配合使用了BN(Batch Normalization)[13]來(lái)加速訓(xùn)練,減少了依賴dropout等擬合的方法。
如圖2所示,網(wǎng)絡(luò)由多組殘差模塊構(gòu)成。ResNet50先通過(guò)一個(gè)7x7,步距為2的卷積層,再經(jīng)過(guò)3x3,步距為1的最大池化層,后由4種不同的共16組殘差模塊組成。
圖2 殘差結(jié)構(gòu)
其中,F(xiàn)(x)為正常通過(guò)卷積層的輸出;H(x)為正常卷積層輸出與捷徑輸出之和;ReLu函數(shù)是較為主流的非線性激活函數(shù)。[14]如圖3所示,其公式定義為:
圖3 ReLu函數(shù)圖像
f(x)=max(0,x)
(2)
文獻(xiàn)[13]中提出的方式,可以使每個(gè)batch的數(shù)據(jù)滿足均值為0,方差為1的分布規(guī)律。公式如下:
batch均值:
(3)
batch的方差:
(4)
標(biāo)準(zhǔn)化:
(5)
最后得出:
(6)
其中,u、σ2由正向傳播統(tǒng)計(jì)得到;γ、β由反向傳播訓(xùn)練得到;m為一個(gè)batch總數(shù)。
MobileNetV2是由Google團(tuán)隊(duì)在2018年研發(fā)的網(wǎng)絡(luò)模型,相比其它的卷積神經(jīng)網(wǎng)絡(luò),沿用了文獻(xiàn)[15]的DW(Depthwise Convolution),卷積可以大量的減少網(wǎng)絡(luò)的參數(shù)使用量和計(jì)算量,且僅犧牲小幅的精確度,相比VGG16精確度減少了0.9%,模型參數(shù)只有VGG16的1/32[15]。
該網(wǎng)絡(luò)首次提出Inverted Residuals倒殘差結(jié)構(gòu)(圖4)和采用ReLu6非線性激活函數(shù)(圖5)提高準(zhǔn)確度,使模型變的更小。
圖4 倒殘差結(jié)構(gòu)
圖5 ReLu6函數(shù)圖像
本文以文獻(xiàn)[8-10]提出的3種網(wǎng)絡(luò)結(jié)構(gòu)為基礎(chǔ),遷移ImageNet上的特征信息。首先載入不同的飲食數(shù)據(jù)集,對(duì)圖像預(yù)處理和數(shù)據(jù)增強(qiáng),然后通過(guò)對(duì)CNN網(wǎng)絡(luò)接入分布式微調(diào)的方式進(jìn)行訓(xùn)練。流程如圖6所示。
圖6 深度遷移學(xué)習(xí)加微調(diào)流程圖
本文共使用2個(gè)數(shù)據(jù)集,數(shù)據(jù)來(lái)源于kaggle機(jī)器學(xué)習(xí)競(jìng)賽網(wǎng)站公開(kāi)的飲食分類數(shù)據(jù)集。飲食11數(shù)據(jù)集中共12 000張圖片,選取其中9 000張作為訓(xùn)練集,3 000張為驗(yàn)證集,數(shù)據(jù)集共11種分類,其中包括日常飲食中真實(shí)拍攝的食物,具有較好的代表性。飲食101數(shù)據(jù)集是一個(gè)涵蓋范圍更廣的飲食數(shù)據(jù)集,共101類食物100 000張圖,通過(guò)python編寫(xiě)的小程序?qū)?shù)據(jù)進(jìn)行隨機(jī)切分(比例控制在8:2),即其中80 000張作為訓(xùn)練集,20 000張為測(cè)試集。
由于數(shù)據(jù)集中圖片都是日常拍攝,其像素和尺寸不一,甚至有的圖片的主體并不是目標(biāo)物。所以,在訓(xùn)練之前需將圖像進(jìn)行預(yù)處理。首先進(jìn)行統(tǒng)一的水平裁切處理(驗(yàn)證集不需進(jìn)行裁切),將圖片等比例填充成280 x 280的純黑色圖片,再還原成分辨率統(tǒng)一裁剪為224 x 224的彩色圖片,并提高一定量的對(duì)比度和亮度,然后對(duì)數(shù)據(jù)集進(jìn)行標(biāo)準(zhǔn)化和歸一化處理后,再進(jìn)行旋轉(zhuǎn)變換、平移變化和隨機(jī)組合,達(dá)到增強(qiáng)數(shù)據(jù)的效果。
本文采用特征遷移的方式進(jìn)行遷移學(xué)習(xí)[16],通過(guò)ResNet50、VGG16和MoblieV2網(wǎng)絡(luò)對(duì)數(shù)據(jù)集進(jìn)行特征提取,對(duì)最后幾層全連接層失活,后接入分布式微調(diào)網(wǎng)絡(luò),通過(guò)微調(diào)網(wǎng)絡(luò)進(jìn)一步學(xué)習(xí)。
因本文所采用的數(shù)據(jù)集均是對(duì)特定類別的細(xì)化分類,通過(guò)原網(wǎng)絡(luò)中學(xué)習(xí)的先驗(yàn)知識(shí)并不能完全的用于提取數(shù)據(jù)集的的特征,從而導(dǎo)致精確度下降,花費(fèi)的訓(xùn)練時(shí)間還很多,所以需要對(duì)原網(wǎng)絡(luò)全連接層進(jìn)行失活,接入分布式微調(diào)網(wǎng)絡(luò),使用復(fù)雜度不一的微調(diào)網(wǎng)絡(luò),分布式的載入模型中,進(jìn)而提高準(zhǔn)確度,該方法即為分布式微調(diào)網(wǎng)絡(luò)。
圖7~9即為本文分布式微調(diào)網(wǎng)絡(luò)結(jié)構(gòu)。通過(guò)失活原CNN網(wǎng)絡(luò)全連接層和分類器,再分布式加入具有不同特征的微調(diào)網(wǎng)絡(luò),對(duì)比不同形式的微調(diào)網(wǎng)絡(luò)帶來(lái)不同的結(jié)果進(jìn)行分析。
圖7 微調(diào)1網(wǎng)絡(luò)結(jié)構(gòu)
圖9是失活原網(wǎng)絡(luò)全連接層后,直接通過(guò)一個(gè)256神經(jīng)元的全連接線性層后,接入分類器;圖10同樣接入一個(gè)256神經(jīng)元的全連接線性層后,進(jìn)行激活和Dropout[17],Dropout數(shù)值設(shè)為0.5(即隨機(jī)失活一半的神經(jīng)元),最后接入分類器;圖11則是接入1 024神經(jīng)元的全連接線性層后,進(jìn)行激活,再接入512神經(jīng)元的全連接線性層后激活,逐級(jí)減半,最后接入265神經(jīng)元的線性層后接入分類器。
圖8 微調(diào)2網(wǎng)絡(luò)結(jié)構(gòu)
圖9 微調(diào)3網(wǎng)絡(luò)結(jié)構(gòu)
圖10 ResNet50飲食11分類精確度對(duì)比圖
圖11 VGG16飲食11分類精度對(duì)比圖
本文實(shí)驗(yàn)基于深度學(xué)習(xí)pytorch庫(kù),實(shí)驗(yàn)?zāi)P秃蛿?shù)據(jù)在Windows 10平臺(tái)完成訓(xùn)練,計(jì)算機(jī)CPU為intel i7 9750H,主頻2.6 GHz,最高睿頻4.5 GHz,GPU使用NVIDIA GTX 1660Ti,計(jì)算機(jī)內(nèi)存為16 GB。采用CPU和GPU并行計(jì)算,加速模型訓(xùn)練。
分別搭建ResNet50、VGG16、MoblieNetV2網(wǎng)絡(luò)并載入該網(wǎng)絡(luò)在ImageNet上訓(xùn)練得到的特征權(quán)重信息,對(duì)數(shù)據(jù)集進(jìn)行特征提取。失活CNN網(wǎng)絡(luò)中的全連接層后接入微調(diào)網(wǎng)絡(luò),對(duì)不同的微調(diào)網(wǎng)絡(luò)訓(xùn)練結(jié)果記錄并對(duì)比分析。
使用torchvision工具[18]對(duì)數(shù)據(jù)集進(jìn)行邊緣裁剪、標(biāo)準(zhǔn)化和歸一化等預(yù)處理后,對(duì)圖片進(jìn)行數(shù)據(jù)增強(qiáng)。
實(shí)驗(yàn)中各組CNN和微調(diào)網(wǎng)絡(luò)組成的深度遷移學(xué)習(xí)網(wǎng)絡(luò)模型中,Batchsize均設(shè)置為64。通過(guò)CrossEntropy(交叉熵)[19]來(lái)計(jì)算損失函數(shù),公式如下:
(7)
其中,p是真實(shí)值,q是預(yù)測(cè)值,p值經(jīng)過(guò)ReLu函數(shù)激活后在0~1之間。同時(shí)實(shí)驗(yàn)使用Adam優(yōu)化器來(lái)優(yōu)化梯度下降過(guò)程。其可通過(guò)梯度的一階二階矩估計(jì),自適應(yīng)調(diào)節(jié)學(xué)習(xí)率。表達(dá)式如下:
mt=u·mt-1+(1-u)·gt
(8)
(9)
(10)
(11)
(12)
公式(8)、(9)分別是對(duì)梯度的一階矩估計(jì)和二階矩估計(jì)。其中,t為梯度時(shí)刻;g是梯度;u和v是指數(shù)衰減率。而公式(10)、(11)是對(duì)一階、二階矩估計(jì)的校正,近似對(duì)期望的無(wú)偏估計(jì)。公式(12)則是對(duì)學(xué)習(xí)率η的動(dòng)態(tài)約束。其中,ε是一個(gè)極小值數(shù),避免分母為0。實(shí)驗(yàn)優(yōu)化器默認(rèn)學(xué)習(xí)率設(shè)置為0.000 1。
本實(shí)驗(yàn)基于3種CNN網(wǎng)絡(luò),通過(guò)遷移學(xué)習(xí)技術(shù),遷移特征權(quán)重信息對(duì)數(shù)據(jù)特征提取后,接入分布式微調(diào)網(wǎng)絡(luò)進(jìn)行再學(xué)習(xí)和分類。經(jīng)過(guò)上述實(shí)驗(yàn)設(shè)置,得到不同網(wǎng)絡(luò)搭配的精確度和迭代時(shí)間。
圖10~12分別對(duì)應(yīng)ResNet50、VGG16、MobileNetV2分布式接入微調(diào)網(wǎng)絡(luò)及傳統(tǒng)CNN訓(xùn)練的飲食11分類精確度對(duì)比圖。
從圖中可以看出,分布式微調(diào)的3種方式在經(jīng)過(guò)2-4次迭代后都可以達(dá)到精度較高且平穩(wěn)上升的結(jié)果,同時(shí)訓(xùn)練出的精確度比傳統(tǒng)CNN訓(xùn)練有很大提升。分步式微調(diào)的3種方式隨著微調(diào)網(wǎng)絡(luò)復(fù)雜度的變換,精確度也在提升。其中微調(diào)3方式效果最好。
圖12 MobileNetV2飲食11分類精度對(duì)比圖
圖13~15則是對(duì)飲食101分類數(shù)據(jù)集的精確度對(duì)比圖,其精確度對(duì)比結(jié)果同食物分類數(shù)據(jù)集的結(jié)果相似,遷移加分布式微調(diào)的可以快速且平穩(wěn)得到一個(gè)優(yōu)秀的效果且領(lǐng)先于傳統(tǒng)CNN網(wǎng)絡(luò)訓(xùn)練。對(duì)比飲食11分類,訓(xùn)練出的效果同樣優(yōu)勢(shì)明顯,且同樣是微調(diào)3網(wǎng)絡(luò)精確度更好。
圖13 ResNet50飲食101分類精度對(duì)比圖
圖14 VGG16飲食101分類精度對(duì)比圖
通過(guò)上述精度對(duì)比圖可以看出,遷移加微調(diào)3網(wǎng)絡(luò)從精度上看,兩個(gè)數(shù)據(jù)集都可以得到不錯(cuò)的精確度,遠(yuǎn)超原CNN訓(xùn)練的結(jié)果。ResNet50、VGG16、MobileNetV2這3種網(wǎng)絡(luò)在微調(diào)3模式下對(duì)比原網(wǎng)絡(luò),在50組迭代下飲食,11分類分別提升15%、13.5%和24.4%,飲食101分類分別提4.8%、3.5%和5.1%。MoblieNetV2提升最大,VGG16提升較少。
圖15 MoblieNetV2飲食101分類精度對(duì)比圖
對(duì)網(wǎng)絡(luò)進(jìn)行更深層次訓(xùn)練,精度對(duì)比結(jié)果見(jiàn)表1。3種網(wǎng)絡(luò)進(jìn)行微調(diào)3模式下訓(xùn)練200組后,對(duì)比原網(wǎng)絡(luò)的精度,結(jié)果與50組迭代相似,ResNet50的精確度最高,VGG16次之,而在提升幅度上ResNet50提升最大,MoblieNetV2次之。
表1 200組迭代精確度對(duì)比表
本文評(píng)價(jià)網(wǎng)絡(luò)性能的參考因素:一是網(wǎng)絡(luò)的精確度,二則是網(wǎng)絡(luò)的訓(xùn)練時(shí)間(時(shí)間性能)。實(shí)驗(yàn)記錄了每次迭代的平均訓(xùn)練時(shí)間作為參考,見(jiàn)表2。在兩個(gè)飲食分類數(shù)據(jù)集中,隨著微調(diào)網(wǎng)絡(luò)的復(fù)雜度增加,各個(gè)模式下花費(fèi)的時(shí)間均有不同程度的增加,VGG16的網(wǎng)絡(luò)復(fù)雜度最高,故花費(fèi)時(shí)間最多,ResNet50次之,而以精簡(jiǎn)著稱的MoblieNetV2時(shí)間最少。同樣飲食11分類數(shù)據(jù)量和分類的復(fù)雜度都遠(yuǎn)小于飲食101分類,故飲食101分類的花費(fèi)時(shí)間度遠(yuǎn)小于飲食11分類。
表2 平均單位迭代時(shí)間
3種CNN網(wǎng)絡(luò)搭配3種微調(diào)模式共9種模式,在花費(fèi)時(shí)間上都遠(yuǎn)小于原CNN訓(xùn)練的結(jié)果。在飲食11分類中3種網(wǎng)絡(luò)時(shí)間性能分別平均提升25.5%、64.3%和38.8%,在飲食101分類中提升更大,分別為78.6%、110.7%和56.9%。3種CNN網(wǎng)絡(luò)中,對(duì)硬件性能要求最高、使用參數(shù)量最多的VGG16網(wǎng)絡(luò)的時(shí)間性能提升最大,而網(wǎng)絡(luò)最為精簡(jiǎn)的MoblieNetV2所花費(fèi)的時(shí)間最少。當(dāng)然這和其精簡(jiǎn)的網(wǎng)絡(luò)結(jié)構(gòu),更少的參數(shù)使用量和對(duì)設(shè)備性能的依賴性息息相關(guān)。
綜合對(duì)比本實(shí)驗(yàn)的精確度和時(shí)間性能,在精確度層面,ResNet50配合微調(diào)3模式得到的效果最好,200組迭代后提升達(dá)到10%和7.6%,提升幅度最大;VGG16網(wǎng)絡(luò)的精度第二,提升幅度第三;MoblieNetV2提升幅度第二,但精度最差。在對(duì)時(shí)間性能分析結(jié)果表明:VGG16時(shí)間性能提升最大,平均時(shí)間性能提升在兩個(gè)數(shù)據(jù)集分類中分別達(dá)到64.3%和110.7%,ResNet50次之。可見(jiàn),本實(shí)驗(yàn)采用的CNN復(fù)雜網(wǎng)絡(luò)引入遷移學(xué)習(xí)預(yù)訓(xùn)練進(jìn)行特征提取,后接入微調(diào)網(wǎng)絡(luò)進(jìn)行再訓(xùn)練,對(duì)復(fù)雜的網(wǎng)絡(luò)、硬件設(shè)備要求越高的網(wǎng)絡(luò)和數(shù)據(jù)復(fù)雜度越大的網(wǎng)絡(luò)的提升就越大,無(wú)論是時(shí)間性能還是網(wǎng)絡(luò)精度都有很好的效果。
學(xué)習(xí)配合分布式微調(diào)網(wǎng)絡(luò)的策略可在極短的時(shí)間內(nèi)獲得優(yōu)秀的結(jié)果。無(wú)論是精確度還是時(shí)間性能都遠(yuǎn)優(yōu)于文獻(xiàn)[8-10]CNN網(wǎng)絡(luò)的零基礎(chǔ)訓(xùn)練。
本文選用遷移學(xué)習(xí)解決深度學(xué)習(xí)中的飲食圖像分類問(wèn)題,提出一種CNN網(wǎng)絡(luò)配合遷移學(xué)習(xí)的方法,采用分布式微調(diào)的方式增加網(wǎng)絡(luò)的性能。本文采用3種不同的CNN網(wǎng)絡(luò),配合分布式微調(diào)網(wǎng)絡(luò)對(duì)數(shù)據(jù)集分類訓(xùn)練。實(shí)驗(yàn)結(jié)果表明,本文采用的方法在精確度和時(shí)間性能上都遠(yuǎn)強(qiáng)于原網(wǎng)絡(luò)訓(xùn)練的結(jié)果。綜合對(duì)比下,VGG16配合微調(diào)3模式的性能最好,時(shí)間性能和精度都有不錯(cuò)的結(jié)果。下一步將建立更多的微調(diào)模式對(duì)不同的數(shù)據(jù)集進(jìn)行訓(xùn)練,提高分類方法的性能和實(shí)用性。