龐絲絲,黃呈鋮
(南寧師范大學(xué),南寧530299)
Hinton 在2006 年提出了深度學(xué)習(xí)[1]的概念,是一種對數(shù)據(jù)進(jìn)行表征的學(xué)習(xí)方法[2]。深度學(xué)習(xí)取得成功的原因主要來自于兩點(diǎn),第一個(gè)原因:擁有大量的訓(xùn)練數(shù)據(jù),如Image-Net[3]、CIFAR-10、CIFAR-100 等;第二原因:計(jì)算機(jī)硬件的飛速發(fā)展,特別是GPU 的出現(xiàn)和發(fā)展。Image-Net 是目前深度學(xué)習(xí)圖像領(lǐng)域應(yīng)用得非常多的一個(gè)領(lǐng)域,關(guān)于圖像分類、定位、檢測等研究工作大多基于此數(shù)據(jù)集展開。CIFAR-10 和CIFAR-100被標(biāo)記為8000 萬個(gè)微小圖像數(shù)據(jù)集的子集。他們由Alex Krizhevsky、Vinod Nair 和Geoffrey Hinton 收集。GPU 稱為圖形處理器,是一種并行編程模型,主要用來處理計(jì)算性強(qiáng)而邏輯性不強(qiáng)的計(jì)算任務(wù),GPU 中可利用的處理單元可以更多的作為執(zhí)行單元,加快了深度學(xué)習(xí)算法的執(zhí)行速度
計(jì)算機(jī)視覺領(lǐng)域中,圖像處理顧名思義就是我們輸入一張圖像,通過一個(gè)訓(xùn)練好的可識(shí)別的網(wǎng)絡(luò)可輸出對該輸入圖像內(nèi)容分類的描述問題。機(jī)器學(xué)習(xí)中提供了很多對數(shù)據(jù)分類的算法,經(jīng)典的算法有KNN(最近鄰)[4]、SVM(支持向量機(jī))[5]、Naive Bayes(樸素貝葉斯)、Boosting[6-7]等。目前,許多研究者使用比較熱門的CNN[8-9](卷積神經(jīng)網(wǎng)絡(luò))、VGGNET[10]、ResNet50[12]等深度學(xué)習(xí)模型進(jìn)行圖像分類。
現(xiàn)在,卷積神經(jīng)網(wǎng)絡(luò)在圖像分類[11-12]等計(jì)算機(jī)視覺領(lǐng)域的應(yīng)用廣泛。卷積神經(jīng)網(wǎng)絡(luò)依舊是層級(jí)網(wǎng)絡(luò),只是層的功能和形式做了變化,可以說是傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的一個(gè)改進(jìn)。傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)采用的是全連接網(wǎng)絡(luò),其中參數(shù)數(shù)量巨大導(dǎo)致訓(xùn)練消耗資源多甚至無法訓(xùn)練出結(jié)果。受到生物神經(jīng)網(wǎng)絡(luò)的啟發(fā),隨之產(chǎn)生的卷積神經(jīng)網(wǎng)絡(luò)所擁有的權(quán)值共享、局部連接等優(yōu)點(diǎn)使得參數(shù)數(shù)量、模型復(fù)雜度、訓(xùn)練難度大大降低,神經(jīng)網(wǎng)絡(luò)的發(fā)展開啟了新的研究大門。
雖然卷積網(wǎng)絡(luò)的發(fā)展使得圖像分類得到了很大跨度的進(jìn)展,但分類過程中仍然會(huì)遇到一些困難和挑戰(zhàn),例如視角變化、尺度變化、光照條件、背景不同、遮擋、形變等。以花卉分類為例,花卉存在大小、顏色、紋理、形狀、背景不同、等各種各樣的差異,已經(jīng)有相關(guān)研究攻克難題:TakeShi 等人[13]針對花卉區(qū)域的提取,通過一種基于數(shù)碼相機(jī)拍攝的自然景物中盛開花朵的自動(dòng)識(shí)別方法,在600 張花卉圖片中獲得90%的識(shí)別率;Maria-Elena 等人[14]通過開發(fā)一個(gè)可視化詞匯表,顯式地表示將一朵花與另一朵花區(qū)分開來的各個(gè)方面(顏色、形狀和紋理),克服了圖案之間存在的相似性歧義。其他圖像分類研究中,針對提取特征的表示能力不足,導(dǎo)致識(shí)別性能不足的問題,Wu Y 等人[15]提出壓縮和分裂技術(shù)對淺密連接卷積網(wǎng)絡(luò)進(jìn)行圖像分類的有效方法,提高細(xì)粒度圖像分類的特征提取能力和識(shí)別性能。
為提高圖像分類的識(shí)別能力,本文主體架構(gòu)采用ResNet50[12]和遷移學(xué)習(xí)相結(jié)合的方法進(jìn)行實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果表明使用該方法可以明顯提升圖像識(shí)別的準(zhǔn)確率,反映出了網(wǎng)絡(luò)具有較好的泛化能力,具有較強(qiáng)的魯棒性。
卷積神經(jīng)網(wǎng)絡(luò)(CNN)是一類包含卷積計(jì)算且具有深度結(jié)構(gòu)的前饋神經(jīng)網(wǎng)絡(luò),是深度學(xué)習(xí)的代表算法之一[16-17]。傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖如圖1 所示。間。池化操作分為max pooling 和average pooling,即最大池化和平均池化。池化層的關(guān)鍵作用就是壓縮圖像,較少過擬合現(xiàn)象的發(fā)生,方便優(yōu)化。假設(shè)輸入到池化層的圖像為x(l-1),經(jīng)過池化后的圖像為x(l),down 表示池化操作,則池化部分可定義為:
全連接層在卷積神經(jīng)網(wǎng)絡(luò)的尾部,它把卷積輸出的二維特征圖轉(zhuǎn)化成一維向量,即連接所有的特征,最終將輸出值送給分類器,如Softmax 分類器等。網(wǎng)絡(luò)中每個(gè)節(jié)點(diǎn)的輸出表示為y1,y2,…,yn,經(jīng)過Softmax 后輸出可表示為:
圖1 傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖
算法主要由卷積層、下采樣層、全連接層組成。
卷積也就是在原始的輸入上進(jìn)行特征的提取,即在原始輸入上一個(gè)一個(gè)的小區(qū)域進(jìn)行特征的提取。由于共享權(quán)值的原因,所以輸出圖像的每一個(gè)像素值都共用了一個(gè)卷積核模板。卷積層的正向傳播映射可表示為:
采樣層也稱為池化層,是夾在連續(xù)的卷積層中
卷積神經(jīng)網(wǎng)絡(luò)相比一般神經(jīng)網(wǎng)絡(luò)在圖像理解中的優(yōu)點(diǎn)有如下:第一,卷積神經(jīng)網(wǎng)絡(luò)本身的網(wǎng)絡(luò)結(jié)構(gòu)可以較好的適應(yīng)圖像的結(jié)構(gòu);第二,特征提取和分類兩個(gè)操作是同時(shí)進(jìn)行的,使得特征提取有利于推動(dòng)特征分類任務(wù);第三,也是卷積神經(jīng)網(wǎng)絡(luò)最突出的優(yōu)點(diǎn)——權(quán)值共享,很大程度上減少了網(wǎng)絡(luò)訓(xùn)練參數(shù),避免了很大的資源消耗,同是使得網(wǎng)絡(luò)的結(jié)構(gòu)變得簡潔,增強(qiáng)了網(wǎng)絡(luò)的適應(yīng)能力。
ResNet 是由是何愷明等人提出的,他們發(fā)現(xiàn)使用殘差塊能夠訓(xùn)練更深的神經(jīng)網(wǎng)絡(luò)。所以構(gòu)建一個(gè)ResNet 網(wǎng)絡(luò)就是通過將很多這樣的殘差塊堆積在一起,形成一個(gè)很的深神經(jīng)網(wǎng)絡(luò)。因此,ResNet 網(wǎng)絡(luò)擁有簡單和實(shí)用并存的優(yōu)點(diǎn)。
如果我們使用標(biāo)準(zhǔn)優(yōu)化算法,例如說梯度下降法訓(xùn)練一個(gè)普通網(wǎng)絡(luò),如果沒有殘差,我們會(huì)發(fā)現(xiàn)隨著網(wǎng)絡(luò)深度的加深,訓(xùn)練錯(cuò)誤會(huì)出現(xiàn)先減少后增多的現(xiàn)象。雖然理論上表示網(wǎng)絡(luò)深度越深越好,但實(shí)際中,如果沒有殘差網(wǎng)絡(luò),對于一個(gè)普通網(wǎng)絡(luò)來說,隨著深度的不斷增加意味著使用優(yōu)化算法會(huì)越來越難訓(xùn)練一個(gè)網(wǎng)絡(luò),也就是說,網(wǎng)絡(luò)越深其最終達(dá)到的效果會(huì)越差,其中的原因之一即是網(wǎng)絡(luò)越深,梯度消失的現(xiàn)象就越來越明顯,網(wǎng)絡(luò)的訓(xùn)練效果也不會(huì)很好。此時(shí),構(gòu)建ResNet 網(wǎng)絡(luò)顯得格外重要,有了ResNet,即使網(wǎng)絡(luò)再深,訓(xùn)練的最終表現(xiàn)不會(huì)因?yàn)榫W(wǎng)絡(luò)太深而變太差。ResNet 的結(jié)構(gòu)如圖2 所示。
圖2 ResNet結(jié)構(gòu)
ResNet 在PyTorch 的官方代碼中共有5 種不同深度的結(jié)構(gòu),深度分別為18、34、50、101、152,其中,ResNet50 和ResNet101 的出鏡率很高。本文選用比較經(jīng)典的ResNet50 用于圖像分類的網(wǎng)絡(luò),較相比于其他深度的ResNet 收斂性更好。
遷移學(xué)習(xí)[18]是指在特定的數(shù)據(jù)集上學(xué)習(xí)訓(xùn)練得到的模型以及參數(shù)用到新領(lǐng)域的目標(biāo)數(shù)據(jù)集中,即每一層網(wǎng)絡(luò)中的各個(gè)節(jié)點(diǎn)的權(quán)重從一個(gè)已經(jīng)訓(xùn)練好的網(wǎng)絡(luò)遷移到一個(gè)全新的網(wǎng)絡(luò)中,并非讓一個(gè)全新的網(wǎng)絡(luò)完完全全從頭開始再訓(xùn)練出新的權(quán)重,用日常的話來表示,就是將一個(gè)領(lǐng)域已知的且成熟的知識(shí)直接應(yīng)用在其他場景中。
因此,遷移學(xué)習(xí)主要解決一個(gè)問題:當(dāng)我們在深度學(xué)習(xí)中沒有大量的數(shù)據(jù)而只有小型的數(shù)據(jù)集的情況下,使用遷移學(xué)習(xí)的方法,在大規(guī)模數(shù)據(jù)訓(xùn)練的網(wǎng)絡(luò)模型學(xué)習(xí)到的模型與參數(shù)遷移到小型數(shù)據(jù)集上,即用小的數(shù)據(jù)集對網(wǎng)絡(luò)進(jìn)行微調(diào),從而使網(wǎng)絡(luò)可以適用于小的數(shù)據(jù)集。也就是說,在大規(guī)模數(shù)據(jù)集上訓(xùn)練的模型我們可以稱為“預(yù)訓(xùn)練模型”,這個(gè)模型我們可以直接使用相應(yīng)的結(jié)構(gòu)和權(quán)值,然后再應(yīng)用到我們要解決的問題。2014 年Maxime Oquab 等人[19]使用ImageNet 預(yù)訓(xùn)練CNN 網(wǎng)絡(luò),同時(shí)遷移到目標(biāo)數(shù)據(jù)集,這些預(yù)訓(xùn)練的網(wǎng)絡(luò)對于ImageNet 數(shù)據(jù)集外的圖片也表現(xiàn)出了很好的泛化性能,證明了遷移學(xué)習(xí)具有很大的潛力。
在圖像識(shí)別領(lǐng)域,如果我們完全從頭訓(xùn)練一個(gè)用來識(shí)別貓的神經(jīng)網(wǎng)絡(luò),則需要海量的計(jì)算機(jī)資源和上百萬級(jí)的帶標(biāo)注的數(shù)據(jù),很多時(shí)候這是不現(xiàn)實(shí)的。倘若根據(jù)需求,使用不同方式的遷徙學(xué)習(xí)的手段,例如,在現(xiàn)有成熟的網(wǎng)絡(luò)架構(gòu)下,要么只訓(xùn)練最后的Softmax層,要么對整個(gè)網(wǎng)絡(luò)進(jìn)行微調(diào),要么使用相同的網(wǎng)絡(luò)結(jié)構(gòu)并采用隨機(jī)生成的權(quán)重來訓(xùn)練,得到的效果也都是很好的。
遷移學(xué)習(xí)的思路幫助我們降低數(shù)據(jù)需求,因?yàn)槲覀儾]有十分龐大的數(shù)據(jù)給予我們訓(xùn)練。訓(xùn)練一個(gè)好的卷積神經(jīng)網(wǎng)絡(luò)模型進(jìn)行圖像分類不僅需要計(jì)算資源還需要很長的時(shí)間。特別是模型比較復(fù)雜和數(shù)據(jù)量比較大的時(shí)候。普通的電腦動(dòng)不動(dòng)就需要訓(xùn)練幾天的時(shí)間。遷移學(xué)習(xí)在圖像分類問題上具有非常高的效率,也可以很好地防止過度擬合。
根據(jù)實(shí)驗(yàn)?zāi)康?,本文采用的卷積神經(jīng)網(wǎng)絡(luò)模型有ResNet50[12]。ResNet50 殘差網(wǎng)絡(luò)通過在輸出個(gè)輸入之間不是簡單的堆疊網(wǎng)絡(luò)而是引入一個(gè)shortcut connection,解決網(wǎng)絡(luò)由于很深出現(xiàn)梯度消失的問題,能夠通過增加相當(dāng)?shù)纳疃葋硖岣邷?zhǔn)確率,也容易優(yōu)化。
遷移學(xué)習(xí)[18]是當(dāng)前計(jì)算機(jī)視覺中常用的一種機(jī)器學(xué)習(xí)方法之一,就是把任務(wù)A 開發(fā)的模型作為初始點(diǎn),重新使用在任務(wù)B 開發(fā)模型的過程中。在常用的卷積神經(jīng)網(wǎng)絡(luò)模型中,加入遷移模型后,網(wǎng)絡(luò)可以在短時(shí)間訓(xùn)練和學(xué)習(xí)中獲得更好的性能,分類準(zhǔn)確率得到提升。
ResNet50 兩個(gè)模型均是在含有120 多萬自然圖像和1000 多種不同類別的ImageNet 數(shù)據(jù)集上對模型進(jìn)行預(yù)訓(xùn)練,然后將模型參數(shù)遷移到CIFAR-10 這個(gè)公開數(shù)據(jù)集進(jìn)行訓(xùn)練微調(diào)。在本文的實(shí)驗(yàn)中,將各模型的部分網(wǎng)絡(luò)層的權(quán)重參數(shù)進(jìn)行固定,剩余的網(wǎng)絡(luò)層將通過訓(xùn)練和學(xué)習(xí)來對模型進(jìn)行微調(diào)操作。
實(shí)驗(yàn)所用數(shù)據(jù)集采用CIFAR-10 公用數(shù)據(jù)集,CIFAR 是一個(gè)用于普通物體識(shí)別的數(shù)據(jù)集。CIFAR 數(shù)據(jù)集分為兩種:CIFAR-10 和CIFAR-100,由Alex Krizhevsky、Vinod Nair 和Geoffrey Hinton 等人創(chuàng)建,都是帶有標(biāo)簽的數(shù)據(jù)集。
CIFAR-10 是一個(gè)更接近普適物體的彩色圖像數(shù)據(jù)集。一共包含10 個(gè)類別的60000 個(gè)32×32 的RGB彩色圖片組成:飛機(jī)、汽車、鳥類、貓、鹿、狗、蛙類、馬、船和卡車,包括50000 張訓(xùn)練圖像和10000 張測試圖像,數(shù)據(jù)集分為5 個(gè)訓(xùn)練塊和1 個(gè)測試塊,每個(gè)塊包含10000 張圖像。訓(xùn)練集每類包含5000 張圖像,測試集每類包含1000 張圖像。CIFAR-10 的圖片樣例如圖3所示。
圖3 來自CIFAR-10數(shù)據(jù)庫10個(gè)類別部分樣本圖像
本文實(shí)驗(yàn)在CIFAR-10 數(shù)據(jù)集上進(jìn)行,采用Intel i7-7700 處理器訓(xùn)練,1T 固態(tài)硬盤,32G 內(nèi)存,GPU:NVIDIA GTX1080Ti,采用標(biāo)準(zhǔn)SGD 算法,設(shè)置動(dòng)量為0.9,圖像大小resize 為384×384,Batch size 設(shè)置為32。
CIFAR-10 數(shù)據(jù)集共有10 個(gè)標(biāo)簽,包含50000 張尺寸大小為32×32 的彩色圖像作為訓(xùn)練集和10000 張RGB 三通道圖像作為驗(yàn)證集,屬于像素較小的圖像數(shù)據(jù)。網(wǎng)絡(luò)共迭代300 次。ResNet 選用層50 網(wǎng)絡(luò)層并加入遷移學(xué)習(xí)方法,如圖4 所示,17 代之前驗(yàn)證集準(zhǔn)確率平穩(wěn)上升,在17 代以后準(zhǔn)確率趨于平穩(wěn),最終驗(yàn)證集準(zhǔn)確率達(dá)到86%??梢园l(fā)現(xiàn),ResNet50 加入遷移學(xué)習(xí)的方法后網(wǎng)絡(luò)可以在短時(shí)間訓(xùn)練和學(xué)習(xí)中獲得較好的分類準(zhǔn)確率。
圖4 ResNet50+transfer
本文基于ResNet50 網(wǎng)絡(luò)加入了遷移學(xué)習(xí)的方法。從實(shí)驗(yàn)結(jié)果可以看出,加入遷移學(xué)習(xí)的方法以后,不僅提高了圖像識(shí)別的準(zhǔn)確率,同時(shí)模型收斂速度快,提升效果明顯,反映出了網(wǎng)絡(luò)具有較好的泛化能力,具有較強(qiáng)的魯棒性和泛化能力。但準(zhǔn)確率還有一定的提升空間,會(huì)在今后的工作中繼續(xù)探索。