程飛飛 王龍 諶洪茂
(東華理工大學(xué)信息工程學(xué)院,南昌,330013)
圖像的場景分類在互聯(lián)網(wǎng)及各種應(yīng)用中有著廣泛的需求,如何使得電腦能夠像人一樣準(zhǔn)確地將一個場景做出精準(zhǔn)而詳盡的分類被認(rèn)為是一項有重要意義的基礎(chǔ)研究[1]。機器視覺和深度學(xué)習(xí)是人工智能技術(shù)的重要研究方向和發(fā)展熱點,其幫助構(gòu)建深度人工神經(jīng)網(wǎng)絡(luò),基于物理特征提取和學(xué)習(xí)的算法對圖片特征進行分類,通過深層神經(jīng)網(wǎng)絡(luò),把逐層提取出的數(shù)據(jù)由底層到高層傳送[2]。本文提出的一種基于遷移學(xué)習(xí)方法改進VGG模型,應(yīng)用在圖片的場景分類上,能極大提高圖片場景分類精度和速度。
本文中所使用的數(shù)據(jù)集是Baidu AI Studio人工智能學(xué)習(xí)與實訓(xùn)社區(qū)的場景相結(jié)合進行分類中的一個數(shù)據(jù)集,從一萬張的圖片中篩選得出了3500張比較好的場景,分別歸納為5個不同的實訓(xùn)場景,分別為草坪、河水、冰雪、沙漠、教堂。從這些圖片中再篩選出大約75%左右的圖片作為一個訓(xùn)練集,大約15%的圖片作為檢測測試集,大約10%左右的圖片作為檢測驗證集,其中每張圖像的尺寸都是不盡相同的。
由于每張圖片的尺寸和大小不同,首先將數(shù)字化圖像切割并對其進行一個小幅度的縮放,然后縮放后的整張數(shù)字化圖片再次進行裁剪,即可以得出224×224大小的整張數(shù)字化圖片,再進行像素的歸一化處理,將處理好的圖像存儲到數(shù)組中。
采用隨機數(shù)據(jù)圖片加權(quán)長度增強分析算法,將每一個輸入的圖片數(shù)據(jù)長度量化到0~1之間;再將計算得出來的每張輸入照片的圖像分別進行一定的頻率和幅度不同的水平旋轉(zhuǎn),本文中各個頻率和幅度旋轉(zhuǎn)點的角度分別為15°、30°、90°;每一張輸入的圖片都是可以被認(rèn)為在空間和寬度上同時進行了隨機的、非固定水平方向的均值平移;每一張輸入的圖片,還可以被認(rèn)為在高度方向上進行了隨機的水平和垂直方向的平移,通過這種方向的偏移,得到對于一個整張輸入圖片的非固定高度水平百分比;對于某一張圖片,可以一定的隨機概率對其他圖片分別進行隨機的任何一個水平方向的翻轉(zhuǎn)。
本文選擇VGG16卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)模型,同時考慮數(shù)據(jù)集中所使用圖片的總量只有3500張圖片,比較深的網(wǎng)絡(luò)結(jié)構(gòu)容易產(chǎn)生過擬合,故設(shè)計采用遷移學(xué)習(xí)改進VGG16卷積深度神經(jīng)網(wǎng)絡(luò),使用已經(jīng)訓(xùn)練好的參數(shù)進行網(wǎng)絡(luò)的初始化。
本文選取基于 VGG16 網(wǎng)絡(luò)架構(gòu)的來構(gòu)建深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),為了達到提高和增強模型的泛化性和適應(yīng)力的目的,也防止在小數(shù)據(jù)上產(chǎn)生或者造成過擬合的情況,采取遷移式機器學(xué)習(xí)的方法,使用先前在ImageNet上訓(xùn)練的VGG16神經(jīng)網(wǎng)絡(luò)的參數(shù)來對網(wǎng)絡(luò)信號進行初始化設(shè)置。
VGG16的網(wǎng)絡(luò)設(shè)計采用卷積式多層神經(jīng)網(wǎng)絡(luò),如圖1為VGG16網(wǎng)絡(luò)結(jié)構(gòu)圖,通過對卷積核心層進行反復(fù)計算,添加3×3的卷積優(yōu)化核和2×2最大的卷積池化層。VGG16共有16層,包括13層卷積優(yōu)化層和3層完整的全方向連接層[1,3]。VGG16輸入224×224×3的卷積池化核結(jié)構(gòu)圖片,經(jīng)過兩次繼續(xù)連接一塊含有64個卷積池化核的最小卷積池化層后,連接一個最大的卷積池化層;之后,又經(jīng)過兩次繼續(xù)連接一個含有128個卷積池化核的卷積池化層后,連接一個最大的卷積池化層;再經(jīng)過三次繼續(xù)連接一個含有256個卷積池化核的最小卷積池化層之后,連接一個最大的卷積池化層;重復(fù)兩次三個最小卷積核中分別含有512個卷積再進行了三個核卷的池積后,再對其他核進行最大的卷積池化[4]。最后將提取之后的特征送入到這三個全連接層中。
圖1 卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
圖1中,conv表示該層是卷積優(yōu)化層,pool表示池化層,fc表示全連接層,Size表示該層處理的圖片大小,比如,Size:224表示該層處理的圖片像素大小為224×224。
過擬合是模型參數(shù)在擬合過程中,由于訓(xùn)練數(shù)據(jù)中包括一些抽樣誤差,網(wǎng)絡(luò)模型把抽樣時產(chǎn)生的誤差考慮在內(nèi),從而產(chǎn)生過擬合。過擬合表現(xiàn)為訓(xùn)練集的數(shù)量級和模型的復(fù)雜度不匹配;訓(xùn)練集和測試集特征分布不一致,權(quán)值學(xué)習(xí)迭代次數(shù)足夠多,擬合了訓(xùn)練數(shù)據(jù)中的噪聲和訓(xùn)練樣例中沒有代表性的特征[5]。為了解決過擬合問題,筆者首先想到采用數(shù)據(jù)增強獲取更多的數(shù)據(jù),讓模型“看見”盡可能多的例外情況,它就會不斷地修正自己,從而得到更好的結(jié)果;其次采用k折交叉驗證的方法,可以獲取一個安全、可靠、穩(wěn)定的驗證模型。
由于卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)比較復(fù)雜,需要大量的訓(xùn)練和數(shù)據(jù)庫來支撐和維護其進行訓(xùn)練,故采用圖像增強是一種常見有效的手段,也是一種很常見的提升卷積神經(jīng)網(wǎng)絡(luò)的魯棒性并且可以減少過擬合的有效手段[6]。本文通過對圖像進行旋轉(zhuǎn)、平移、鏡像、裁剪、縮放等多種方式進行擴充,從而拓展數(shù)據(jù)的訓(xùn)練集。圖2為數(shù)據(jù)增強前后對比。
圖2 圖片數(shù)據(jù)增強
如圖3所示,通過10折交叉方法對數(shù)據(jù)進行檢驗其是否合格,將所有測試數(shù)據(jù)集各自分解為9-10份,輪流將其中9份分別當(dāng)作一次訓(xùn)練,1份每次都要進行一次交叉的驗證[5]。10次的交叉驗證測試結(jié)果的算法平均值,一般都可以直接用來計算作為對于測試算法評價準(zhǔn)確性和精度的平均值估計,一般還很有可能會根據(jù)實際應(yīng)用情況重新計算多次10折交叉對象進行驗證測試,以便重新尋找它們的平均值。交叉數(shù)據(jù)驗證不僅可以很好地做到充分利用大量的驗證數(shù)據(jù),在一個有效無限量的驗證數(shù)據(jù)集上快速尋找合適的驗證模型和計算參數(shù),并能有效地減少過擬合。
如圖3所示,Training set是一個訓(xùn)練集,分10次迭代,在訓(xùn)練集中輪流取測試組進行迭代。其中,1st iteration表示第一次迭代,2st iteration表示第二次迭代,依此類推;Training fold表示在訓(xùn)練集中選取的訓(xùn)練組,Test fold表示在訓(xùn)練集中選取的測試組;E1表示第一輪迭代輸出,E2表示第二輪迭代輸出,依此類推。
圖3 10折交叉驗證圖
把在ImageNet數(shù)據(jù)集上已經(jīng)訓(xùn)練的VGG16的模型進行遷移,用來解決對場景分類的現(xiàn)實需求,這一方面可以有效地降低實驗的成本和精力的消耗,另一方面可以提高實驗的預(yù)期,因為僅僅需要進行參數(shù)的微調(diào)就會達到盡可能高的預(yù)期結(jié)果,更重要的是有了前人的參數(shù)經(jīng)驗,對后續(xù)的實驗實現(xiàn)更加優(yōu)化的分類模型的構(gòu)建奠定了基礎(chǔ)。
在場景分類任務(wù)中,模型訓(xùn)練的時候會產(chǎn)生一定的訓(xùn)練損失,所以為了降低訓(xùn)練損失,需要添加交叉熵?fù)p失的函數(shù),并且在其中添加一個合理的正則化項,使用的計算方法主要有兩大公式,如公式(1)、公式(2)所示,這樣可以有效地減少過擬合的風(fēng)險,正則化項可以使用L2范數(shù)[2]。
本文采用的隨機直接優(yōu)化下降算法是 Adam(Adaptive Moment Estimation)隨機直接優(yōu)化下降算法,是一種通過直接優(yōu)化替代傳統(tǒng)隨機優(yōu)化算法來直接實現(xiàn)的,可以代替隨機優(yōu)化梯度的下降[5],還可以通過對現(xiàn)有訓(xùn)練神經(jīng)數(shù)據(jù)模型進行迭加替代和數(shù)據(jù)更新來快速獲得訓(xùn)練神經(jīng)網(wǎng)絡(luò)的精確權(quán)重。Adam所運用的原理是,運用梯度中的一階矩陣和二階矩陣來對估計的各個參數(shù)進行動態(tài)調(diào)整的學(xué)習(xí)率[6],它的主要優(yōu)勢之一是經(jīng)過偏執(zhí)性的校正后,每一次迭代的學(xué)習(xí)頻率都能夠在一個相對穩(wěn)定的范圍內(nèi),使得該參數(shù)在運算時不會發(fā)生很大的振動或者震蕩,而是更加平穩(wěn)地發(fā)生變化。其公式定義見公式(3)。
使用前面提到的數(shù)據(jù)集和百度Baidu AI Studio平臺進行模型設(shè)計與訓(xùn)練實驗結(jié)果如下:
在全連接層中,一層包含有256個神經(jīng)元,筆者采用隨機失活(Dropout), 失活比例為0.5,學(xué)習(xí)率 (lr)=0.001,批次數(shù)量 (batchsize)=64。
正確分類的場景圖片占全部的場景圖片的比例稱為準(zhǔn)確率,當(dāng)模型處于最后一個預(yù)測階段,如果全連接層輸出的預(yù)測數(shù)據(jù)與真實場景中的預(yù)測數(shù)據(jù)類別相同,則認(rèn)為這個樣本被歸類正確。
通過對實驗結(jié)果分析可得,在網(wǎng)絡(luò)參數(shù)如表1的條件下,訓(xùn)練集的最終準(zhǔn)確率可達到0.984375,訓(xùn)練損失值僅為0.00740643,準(zhǔn)確率和損失值曲線基本趨向一致。
表1 網(wǎng)絡(luò)所含參數(shù)
表2 模型評估標(biāo)準(zhǔn)值
由圖4可知,該圖片中有大量草地,應(yīng)該歸類于草坪(lawn)類,故模型預(yù)測的結(jié)果完全正確。該神經(jīng)網(wǎng)絡(luò)的準(zhǔn)確率達到分類的需要,可以正常使用。然而,即便達到了這么高的準(zhǔn)確率,但是模型提升的空間是非常巨大的,暫時還不能對多場景進行分類,還需要對模型識別的廣泛性進行研究,以完善模型結(jié)構(gòu),獲得更優(yōu)秀的結(jié)果。
圖4 模型預(yù)測樣本結(jié)果
模型訓(xùn)練20輪的訓(xùn)練損失以及訓(xùn)練的準(zhǔn)確率如圖5、圖6所示。
圖5 訓(xùn)練損失
圖6 訓(xùn)練準(zhǔn)確率
如圖7所示,隨著Epoch 的增加(神經(jīng)網(wǎng)絡(luò)訓(xùn)練信息的次數(shù)),使用訓(xùn)練的數(shù)據(jù)和對測試的數(shù)據(jù)進行評價的識別精確性都大大提高,并且這兩個信息的識別精確性和準(zhǔn)確率幾乎完全不存在任何差異(這兩條信息線基本重疊在一起)。因此,可以認(rèn)為這次神經(jīng)網(wǎng)絡(luò)在訓(xùn)練的過程中沒有出現(xiàn)任何被擬合的情況,該神經(jīng)網(wǎng)絡(luò)是可以正常使用的。
圖7 多輪訓(xùn)練下的識別準(zhǔn)確率
本文設(shè)計基于遷移學(xué)習(xí)改進的VGG16卷積神經(jīng)網(wǎng)絡(luò)對場景進行分類,采用圖片增強進行數(shù)據(jù)預(yù)處理來解決過擬合問題,采用k折交叉驗證方法改變?nèi)B接層的結(jié)構(gòu),實驗結(jié)果證明效果良好,模型的泛化能力較強,識別準(zhǔn)確率較高,能達到98%左右。但是,由于實驗分類類別過少,分類背景不夠復(fù)雜,模型和方法在適應(yīng)更復(fù)雜同類任務(wù)時可能還要做進一步的優(yōu)化和改進。