武 凌, 王 浩, 張曉春, 周 健, 段愛(ài)華
(安徽財(cái)經(jīng)大學(xué) 管理科學(xué)與工程學(xué)院, 安徽 蚌埠 233030)
隨著深度學(xué)習(xí)的持續(xù)火熱,計(jì)算機(jī)視覺(jué)以及自然語(yǔ)言處理等領(lǐng)域通過(guò)引入深度神經(jīng)網(wǎng)絡(luò)而得到了快速的發(fā)展.卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural networks,CNN)是一種包含卷積計(jì)算,具有深度結(jié)構(gòu)的前饋神經(jīng)網(wǎng)絡(luò).近幾年CNN在推薦系統(tǒng)、遙感科學(xué)、大氣科學(xué)等領(lǐng)域也有較好的應(yīng)用,文獻(xiàn)[1]提出了一種基于卷積神經(jīng)網(wǎng)絡(luò)的多樣性關(guān)鍵數(shù)據(jù)并行推薦算法,文獻(xiàn)[2]從遙感圖像中學(xué)習(xí)特定特征并對(duì)圖像進(jìn)行分類(lèi),文獻(xiàn)[3]提出了一種結(jié)合3D卷積網(wǎng)絡(luò)異常檢測(cè)的方法,修改了分類(lèi)網(wǎng)絡(luò)的3D卷積網(wǎng)絡(luò)結(jié)構(gòu),提升了分類(lèi)網(wǎng)絡(luò)的性能.
在深度學(xué)習(xí)模型的應(yīng)用開(kāi)發(fā)中多采用遷移學(xué)習(xí)的方式通過(guò)預(yù)訓(xùn)練模型來(lái)訓(xùn)練自己的模型,使用預(yù)訓(xùn)練模型進(jìn)行微調(diào)是深度遷移學(xué)習(xí)中非常重要的方式.隨著我國(guó)城市生活垃圾產(chǎn)生量的迅速增長(zhǎng),如何做到垃圾的無(wú)害化、資源化處理是急需解決的問(wèn)題,對(duì)垃圾進(jìn)行有效地分類(lèi)是分類(lèi)處理的前提.目前垃圾識(shí)別分類(lèi)的主要技術(shù)是利用傳統(tǒng)的機(jī)器視覺(jué)算法,或者采用傳感器進(jìn)行篩選識(shí)別[4],人工分揀垃圾環(huán)境差、任務(wù)繁重且分揀效率低.隨著深度學(xué)習(xí)的發(fā)展,利用遷移學(xué)習(xí)識(shí)別垃圾種類(lèi)是完全可行的,而且自動(dòng)智能識(shí)別可以在很大程度上提高垃圾識(shí)別的準(zhǔn)確率和工作效率.陳宇超等[5]使用MobileNet模型對(duì)醫(yī)療垃圾進(jìn)行分類(lèi)和識(shí)別,向偉等[6]提出一種改進(jìn)CaffeNet的卷積神經(jīng)網(wǎng)絡(luò)模型對(duì)水面垃圾進(jìn)行識(shí)別.利用預(yù)訓(xùn)練模型的優(yōu)點(diǎn)在于不需要原數(shù)據(jù)與新的圖像數(shù)據(jù)一致,只是將模型的自動(dòng)提取特征的能力移植過(guò)來(lái),對(duì)相關(guān)參數(shù)進(jìn)行微調(diào),構(gòu)建適合新數(shù)據(jù)的神經(jīng)網(wǎng)絡(luò).
典型的CNN分類(lèi)器包括卷積基和分類(lèi)器2個(gè)部分,重用預(yù)訓(xùn)練模型時(shí),先刪除原始的分類(lèi)器,然后添加一個(gè)適合的新分類(lèi)器,最后根據(jù)圖1所示的3種策略[7]中的一種或多種對(duì)模型進(jìn)行微調(diào).
VGGNet是牛津大學(xué)計(jì)算機(jī)視覺(jué)組和Google DeepMind公司一起研發(fā)的深度卷積神經(jīng)網(wǎng)絡(luò),其成功地搭建了16~19層的深度卷積神經(jīng)網(wǎng)絡(luò).從2014年后搭建層數(shù)更深的網(wǎng)絡(luò)模型成為卷積神經(jīng)網(wǎng)絡(luò)的一個(gè)重要研究方向,谷歌團(tuán)隊(duì)提出了同時(shí)加深網(wǎng)絡(luò)模型的深度和寬度的思想,設(shè)計(jì)出一系列的Inception模型.受到ResNet優(yōu)越性能的啟發(fā),谷歌在2016年設(shè)計(jì)并開(kāi)發(fā)了InceptionResNetV2,在Inception模塊中引入Resnet的殘差結(jié)構(gòu),緩解了增加深度帶來(lái)的梯度消失問(wèn)題.VGG16、InceptionV3和InceptionRes Netv2這3種模型的性能參數(shù)如表1所示.
圖1 使用預(yù)訓(xùn)練模型的3種微調(diào)策略
表1 VGG16、InceptionV3和InceptionResNetv2準(zhǔn)確率和網(wǎng)絡(luò)結(jié)構(gòu)的對(duì)比[8]Table 1 Comparison of VGG16、InceptionV3 and InceptionResNetv2 accuracies and network structures
數(shù)據(jù)集中有6類(lèi)可回收垃圾,共2 527張垃圾圖像,其中紙板(cardboard)403張、玻璃(glass)501張、金屬(metal)410張、紙張(paper)594張、塑料(plastic)482張、其他垃圾(trash)137張,每張圖像高度為384像素、寬度為512像素、顏色為3通道.所有的圖像按照類(lèi)別放在不同的目錄中,數(shù)據(jù)集總大小近47 MB.
使用Anaconda3搭建了開(kāi)發(fā)和運(yùn)行環(huán)境,硬件設(shè)備為Intel(R) CoreTMi5-4460 CPU @3.20 GHz、16 GB內(nèi)存、8 GB NVIDIA顯卡2070,采用了64位Windows 10系統(tǒng)、Python 3.6、Tensorflow-gpu 1.15.1、Keras 2.2.4,使用Jupyter Notebook作為開(kāi)發(fā)環(huán)境.
首先讀入6個(gè)子目錄,生成文件清單列表list.txt,文件中包含了所有的圖像文件所在的相對(duì)路徑和對(duì)應(yīng)類(lèi)別.將數(shù)據(jù)集按照8∶2分割為訓(xùn)練集和測(cè)試集,訓(xùn)練集為2 022張(訓(xùn)練過(guò)程中還會(huì)將訓(xùn)練集按8∶2分割出驗(yàn)證集)、測(cè)試集為505張,將list.txt隨機(jī)分割為訓(xùn)練集文件清單list_train.txt和測(cè)試集文件清單list_test.txt.讀入list_train.txt和list_test.txt文件中的每一行,通過(guò)keras.preprocessing.image中的load_img函數(shù)加載每一幅圖像,通過(guò)keras.preprocessing.image的img_to_array函數(shù)轉(zhuǎn)換為多維數(shù)組,最后通過(guò)模型自帶的preprocess_input函數(shù)處理為模型可以使用的4D張量,訓(xùn)練集x_train的形狀為(2022, 384, 512, 3),測(cè)試集x_test的形狀為(505, 384, 512, 3).
采用了3種模型來(lái)構(gòu)建和訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)用于可回收垃圾圖像的分類(lèi), 對(duì)于較淺層的VGG16和InceptionV3直接使用全部的層進(jìn)行訓(xùn)練, 對(duì)于層數(shù)較多的InceptionResNetV2則采用2種方式進(jìn)行微調(diào). 模型測(cè)試過(guò)程共進(jìn)行4次, 如表2所示, 下面給出了這3種模型搭建過(guò)程中的要點(diǎn)并對(duì)訓(xùn)練結(jié)果的性能進(jìn)行了分析和對(duì)比.
表2 3種模型及其使用策略Table 2 Three models and their strategies
3種模型在數(shù)據(jù)預(yù)處理和模型架構(gòu)方面有以下3點(diǎn)相同的地方:①都使用模型自帶的預(yù)處理函數(shù)對(duì)圖像進(jìn)行預(yù)處理,如上述的3種模型都自帶Processing預(yù)處理模塊,其處理過(guò)程可以更好地使進(jìn)入模型的張量適用于這種模型;②代碼采用Keras進(jìn)行設(shè)計(jì),加載模型時(shí)使用參數(shù)include_top=False設(shè)定為不使用最后一層,并添加全連接層更換為需要識(shí)別的分類(lèi)數(shù),最后的全連接層輸出的類(lèi)別數(shù)為6,使用softmax激活函數(shù);③通常的全連接層由于參數(shù)很多,大約占整個(gè)神經(jīng)網(wǎng)絡(luò)參數(shù)的80%,在近期一些性能優(yōu)異的網(wǎng)絡(luò)模型對(duì)全連接層進(jìn)行了優(yōu)化或替代,例如GoogLeNet和ResNet等新興網(wǎng)絡(luò)都是采用全局平均池化替代全連接層來(lái)融合學(xué)到的深度特征,用全局平均池化替代全連接層的網(wǎng)絡(luò)通常有較好的預(yù)測(cè)性能,我們?cè)谠O(shè)計(jì)模型時(shí)也采用了全局平均池化.
試驗(yàn)1 使用VGG16預(yù)訓(xùn)練模型
一開(kāi)始搭建了十幾層到幾十層的CNN網(wǎng)絡(luò),經(jīng)過(guò)多次調(diào)參,效果都很差;后來(lái)使用了經(jīng)典的VGG16網(wǎng)絡(luò),分類(lèi)效果還是較差,甚至結(jié)果曲線都不收斂,圖2給出了VGG16模型的訓(xùn)練過(guò)程,訓(xùn)練過(guò)程中batch_size的大小為16,用訓(xùn)練集中的20%作為驗(yàn)證集,Epoch為50.從圖中可以看出訓(xùn)練過(guò)程中損失值和準(zhǔn)確率從第2輪訓(xùn)練開(kāi)始就不再發(fā)生變化,這是由于相對(duì)此數(shù)據(jù)集而言,VGG16網(wǎng)絡(luò)的層數(shù)還是較淺.
圖2 VGG16的損失值和準(zhǔn)確率不收斂Fig.2 The loss value and accuracy of VGG16 do not converge
試驗(yàn)2 使用InceptionV3預(yù)訓(xùn)練模型
如圖3所示是使用InceptionV3網(wǎng)絡(luò)的損失值與準(zhǔn)確率的變化,訓(xùn)練過(guò)程中batch_size的大小為16,用訓(xùn)練集中的20%作為驗(yàn)證集,Epoch為50.雖然訓(xùn)練出來(lái)的模型已經(jīng)可以識(shí)別,但識(shí)別率比較低,只有80%左右,這是因?yàn)樵摾鴶?shù)據(jù)集圖像均為高384像素,寬512像素,3通道的圖像,并且有些類(lèi)別的垃圾特征比較接近且特征較多,較淺的網(wǎng)絡(luò)仍然無(wú)法達(dá)到理想的識(shí)別效果.在訓(xùn)練集和驗(yàn)證集上的準(zhǔn)確率都不高,模型處于欠擬合狀態(tài).
(a) 損失值曲線(b) 準(zhǔn)確率曲線
試驗(yàn)3 使用InceptionResNetV2以策略1微調(diào)和訓(xùn)練
根據(jù)策略1的要求將卷積基全部?jī)鼋Y(jié),由于InceptionResNetV2網(wǎng)絡(luò)層數(shù)較深,batch_size較大會(huì)出現(xiàn)顯存不夠的現(xiàn)象,訓(xùn)練過(guò)程中batch_size的大小為4,用訓(xùn)練集中的20%作為驗(yàn)證集,Epoch為50,訓(xùn)練過(guò)程中的損失值和準(zhǔn)確率變化如圖4所示,可以看出這種方式在驗(yàn)證集上準(zhǔn)確率只能達(dá)到81%左右,與InceptionV3相當(dāng),在訓(xùn)練集和驗(yàn)證集上的準(zhǔn)確率都不高,模型處于欠擬合狀態(tài),但是損失值和準(zhǔn)確率比InceptionV3收斂得要快,已經(jīng)顯示了InceptionResNetV2的優(yōu)勢(shì).
(a) 損失值曲線(b) 準(zhǔn)確率曲線
試驗(yàn)4 使用InceptionResNetV2以策略3微調(diào)和訓(xùn)練
經(jīng)過(guò)不斷摸索和試驗(yàn)后,發(fā)現(xiàn)采用InceptionResNetV2網(wǎng)絡(luò)在策略3下得到了較好的試驗(yàn)結(jié)果.由于模型處于欠擬合狀態(tài),在使用策略3的時(shí)候讓卷積基的所有層都參與訓(xùn)練,batch_size的大小為4,用訓(xùn)練集中的20%作為驗(yàn)證集,Epoch增加到100.在訓(xùn)練過(guò)程中使用了保存點(diǎn)和回調(diào)技術(shù)保存訓(xùn)練過(guò)程中的權(quán)重文件.保存點(diǎn)用來(lái)存儲(chǔ)模型的權(quán)重,這樣可以繼續(xù)訓(xùn)練或者直接開(kāi)始預(yù)測(cè).keras.callbacks中的ModelCheckpoint類(lèi)提供了保存點(diǎn)功能.Keras有回調(diào)API,配合ModelCheckpoint可以保存每輪的網(wǎng)絡(luò)信息,可以定義文件位置、文件名和保存時(shí)機(jī)等.訓(xùn)練過(guò)程中的損失值和準(zhǔn)確率變化如圖5所示.
由圖5可以看出,策略3在驗(yàn)證集上達(dá)到了91%的準(zhǔn)確率,訓(xùn)練過(guò)程中在第65輪產(chǎn)生了最好的權(quán)重文件model_65-0.91.hdf5,權(quán)重文件在保存時(shí)用訓(xùn)練的輪數(shù)和驗(yàn)證集上的準(zhǔn)確率結(jié)合起來(lái)命名.加載產(chǎn)生的權(quán)重文件對(duì)測(cè)試集(之前未使用的505張圖像)進(jìn)行測(cè)試,準(zhǔn)確率也達(dá)到了90%,如圖6所示.
(a) 損失值曲線(b) 準(zhǔn)確率曲線
model.load_weights('./train_model/model_65-0.91.hdf5')model.compile(optimizer='adam',loss='categorical_crossentropy',mettics=['acc'])scores=model.evaluate(x_test,y_test_ohe)scores[l]505/505 [==============================] -11s 22ms/step0.89504950554064
使用試驗(yàn)4的模型將測(cè)試集前25幅圖像的原始類(lèi)別與預(yù)測(cè)的類(lèi)別同時(shí)進(jìn)行了顯示,如圖7所示,圖像上方文字的涵義是編號(hào)、原始的類(lèi)別和預(yù)測(cè)的類(lèi)別,可以看到除了第17幅圖像以外(將paper誤識(shí)別為metal)大部分圖像都得到了正確的識(shí)別.
paper?papercardboard?cardboardplastic?plasticplastic?plasticcardboard?cardboardglass?glassglass?glasspaper?papercardboard?cardboardmetal?metalpaper?papermetal?metalpaper?papermetal?metalpaper?paperpaper?paperplastic?plasticpaper?metalpaper?paperplastic?plasticmetal?metalglass?glassglass?glasspaper?papercardboard?cardboard
通過(guò)上述訓(xùn)練過(guò)程可以看出,在不用自己搭建模型的情況下采用預(yù)訓(xùn)練模型并使用策略3進(jìn)行微調(diào)訓(xùn)練,在測(cè)試集上能達(dá)到90%準(zhǔn)確率,顯示了使用InceptionResNetV2預(yù)訓(xùn)練模型的強(qiáng)大功能和快速方便的特點(diǎn).圖8顯示了InceptionResNetV2模型的混淆矩陣可以很好地看出模型分類(lèi)的效果,可以看出分類(lèi)錯(cuò)誤的圖像混淆較多的是1類(lèi)的glass被誤分類(lèi)為4類(lèi)的plastic(7張),其次是2類(lèi)的metal被誤分類(lèi)為1類(lèi)的glass(6張),后期可以考慮增加glass類(lèi)型的圖像數(shù)量以提高識(shí)別的準(zhǔn)確率.
圖8 InceptionResNetV2模型的混淆矩陣Fig.8 Confusion matrix of InceptionResNetV2 model
模型產(chǎn)生后開(kāi)發(fā)了在線可回收垃圾識(shí)別系統(tǒng)以部署和使用訓(xùn)練的模型,系統(tǒng)由服務(wù)器端和客戶端2部分構(gòu)成.服務(wù)器端采用了基于Flask的Web框架進(jìn)行設(shè)計(jì),在啟動(dòng)后只需加載1次模型便可提供實(shí)時(shí)的在線預(yù)測(cè)服務(wù).
服務(wù)器端程序在設(shè)計(jì)時(shí)需要注意3點(diǎn):①區(qū)分使用的是模型文件還是權(quán)重文件,如果加載的是權(quán)重文件,需要在加載之前產(chǎn)生模型的結(jié)構(gòu)并對(duì)模型進(jìn)行編譯;②在調(diào)用模型預(yù)測(cè)之前,對(duì)用戶上傳圖像的預(yù)處理應(yīng)該與訓(xùn)練模型階段的預(yù)處理方式一致,我們?nèi)匀徊捎昧薻eras將圖像轉(zhuǎn)化為矩陣并調(diào)用preprocess_input函數(shù)進(jìn)行預(yù)處理;③單幅的圖像矩陣的維度在送入模型預(yù)測(cè)前應(yīng)轉(zhuǎn)化為4維張量,將第一維的批處理大小設(shè)置為1即可.服務(wù)器端在啟動(dòng)時(shí)會(huì)加載模型對(duì)服務(wù)器上的一幅圖像進(jìn)行預(yù)識(shí)別,并在屏幕上提示識(shí)別結(jié)果,以提示用戶系統(tǒng)是否能正常運(yùn)作,用戶上傳圖像后會(huì)顯示保存文件的路徑、識(shí)別的結(jié)果和所需時(shí)間,如圖9所示.
圖9 服務(wù)器端啟動(dòng)與工作界面Fig.9 Startup and working interface of server-side
客戶端采用了HTML+jQuery+Ajax方式進(jìn)行設(shè)計(jì),用戶上傳圖像后服務(wù)器端會(huì)返回json格式的識(shí)別結(jié)果和其他數(shù)據(jù),客戶端在原網(wǎng)頁(yè)中顯示圖像和識(shí)別的類(lèi)別,并返回識(shí)別的概率,如圖10所示.
圖10 客戶端界面Fig.10 Client interface
本文對(duì)VGG16、InceptionV3和Inception ResnetV2三種預(yù)訓(xùn)練模型進(jìn)行了對(duì)比,經(jīng)過(guò)不斷試驗(yàn),最終選擇了InceptionResnetV2模型來(lái)開(kāi)發(fā)可回收垃圾分類(lèi)系統(tǒng).主要思路是采用預(yù)訓(xùn)練的InceptionResnetV2模型,對(duì)其在ImageNet上訓(xùn)練好的網(wǎng)絡(luò)參數(shù)進(jìn)行遷移學(xué)習(xí),對(duì)部分參數(shù)進(jìn)行微調(diào),并保留原模型的特征提取能力,將原模型的全連接層替換為符合本文要求的6分類(lèi)softmax輸出層,從而構(gòu)建了基于深度遷移學(xué)習(xí)的垃圾分類(lèi)識(shí)別模型.可以看到模型在驗(yàn)證集上的Top1準(zhǔn)確率為90%,相比于InceptionResnet V2模型本身的準(zhǔn)確率有一些提升,也說(shuō)明在InceptionResnetV2微調(diào)之后的垃圾分類(lèi)模型充分利用了原模型已經(jīng)學(xué)習(xí)到的規(guī)律,并對(duì)這個(gè)特定的數(shù)據(jù)集有較好的預(yù)測(cè)能力.后期會(huì)研究以圖像增強(qiáng)的方式擴(kuò)大數(shù)據(jù)集的規(guī)模,或者搜集更多的可回收垃圾圖像和種類(lèi),并進(jìn)一步提高模型識(shí)別的準(zhǔn)確率.