蔡青青 崔志強(qiáng) 王 睿 張尚然
(承德石油高等??茖W(xué)校,河北 承德 067000)
場景識(shí)別,即通過計(jì)算機(jī)采集場景圖片并自主判斷場景所處的類型,使計(jì)算機(jī)可以深刻理解所在場景,輔助計(jì)算機(jī)進(jìn)行判斷,是場景理解中的基本問題,是計(jì)算機(jī)視覺領(lǐng)域里非常有前途的研究方向。隨著科技的不斷進(jìn)步,場景識(shí)別問題引起了學(xué)者的廣泛關(guān)注。國內(nèi)外諸多知名大學(xué)及科研機(jī)構(gòu)都在場景識(shí)別領(lǐng)域展開了深入探索。
目前的場景識(shí)別方法可以分成2 類,即利用人工的場景識(shí)別方法以及基于學(xué)習(xí)的場景識(shí)別方法。最初使用的方法一般基于簡單的底層特征,例如顏色和紋理特征,后面發(fā)展到著名的SIFT、HOG、GIST、CENTRIST 特征等。隨著人工智能技術(shù)的興起,深度學(xué)習(xí)技術(shù)開始發(fā)展,其中的神經(jīng)網(wǎng)絡(luò)算法更是廣泛應(yīng)用于圖像識(shí)別領(lǐng)域[1]。目前卷積神經(jīng)網(wǎng)絡(luò)成了研究圖像識(shí)別的主流方法,實(shí)驗(yàn)結(jié)果證明,卷積神經(jīng)網(wǎng)絡(luò)在場景識(shí)別研究領(lǐng)域存在無限潛力,與傳統(tǒng)的方法相比具有強(qiáng)大的優(yōu)勢。
卷積神經(jīng)網(wǎng)絡(luò)由多層網(wǎng)絡(luò)構(gòu)成,一般包括卷積層、下采樣層、全連接層以及輸出層[2]。輸入的圖像經(jīng)過卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)中多層網(wǎng)絡(luò)的處理后,可得到輸入圖像的概率分布,根據(jù)最后結(jié)果可以判斷出圖像所屬的類型。卷積神經(jīng)網(wǎng)絡(luò)不僅具有普通神經(jīng)網(wǎng)絡(luò)的優(yōu)點(diǎn),它的局部感知和權(quán)值共享特性,可以讓卷積神經(jīng)網(wǎng)絡(luò)更接近生物神經(jīng)網(wǎng)絡(luò),而且可以減小運(yùn)行過程的計(jì)算量。
基于卷積神經(jīng)網(wǎng)絡(luò)的作用機(jī)理,許多學(xué)者根據(jù)研究問題設(shè)計(jì)了針對特定問題的卷積神經(jīng)網(wǎng)絡(luò)模型,例如AlexNet、GoogLeNet、VGGNet、ResNet 模型等。其中Google團(tuán)隊(duì)提出的GoogLeNet 模型是近年來較為成功的卷積神經(jīng)網(wǎng)絡(luò)模型。該模型一共有22 層網(wǎng)絡(luò)結(jié)構(gòu),模型除普通的卷積層、池化層、全連接層以外,還有Google 團(tuán)隊(duì)提出的Inception 結(jié)構(gòu)。通過Inception 結(jié)構(gòu)中不同尺度的卷積核,可以提取到不同的圖片特征,然而這樣的方式會(huì)使訓(xùn)練過程的計(jì)算變得復(fù)雜。因此,在模型中需要使用1×1 的卷積核來降低維度,減小計(jì)算量。GoogLeNet 模型正是憑借多層卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)以及Inception 結(jié)構(gòu),在圖像識(shí)別領(lǐng)域取得了優(yōu)秀的成績。
眾所周知,網(wǎng)絡(luò)層數(shù)越多,模型的識(shí)別效果越好,但也會(huì)產(chǎn)生梯度消失的問題,從而影響模型的訓(xùn)練。為了保證識(shí)別的準(zhǔn)確率并解決梯度消失的問題,何凱明提出了用ResNet 來解決所謂的“退化”問題。為了解決網(wǎng)絡(luò)層數(shù)過深時(shí)的梯度消失問題,在網(wǎng)絡(luò)中引入了殘差結(jié)構(gòu)。加入殘差結(jié)構(gòu)后可以設(shè)計(jì)深層的卷積神經(jīng)網(wǎng)絡(luò)模型,并且在圖像識(shí)別問題中能夠取得理想的識(shí)別效果。
場景圖像不同于一般的圖像,場景圖像中包含的內(nèi)容較多,往往是多種內(nèi)容才能表達(dá)一種的場景。同時(shí)場景的環(huán)境復(fù)雜多樣,有時(shí)還會(huì)存在干擾,如果只提取某種特征來進(jìn)行場景識(shí)別,就不能準(zhǔn)確描述場景圖像的全部內(nèi)容,容易造成識(shí)別任務(wù)的失敗,因此,需要提取場景的多種特征進(jìn)行融合,以此來表達(dá)場景的內(nèi)容[3]。
基于場景圖像中多特征的特點(diǎn),可以使用GoogLeNet網(wǎng)絡(luò)模型中的Inception 結(jié)構(gòu)來進(jìn)行多尺度場景特征的提取。此外,ResNet 網(wǎng)絡(luò)模型中的殘差結(jié)構(gòu),可以緩解由于層數(shù)加深而產(chǎn)生的退化問題,利用殘差結(jié)構(gòu)可以增加GoogLeNet網(wǎng)絡(luò)模型的層數(shù),從而提高識(shí)別效果。對以上2 種思想進(jìn)行結(jié)合,設(shè)計(jì)了Inception-Residual 結(jié)構(gòu)。
該結(jié)構(gòu)中使用1×1、3×3、5×5 3 種尺寸的卷積核來提取場景中的多尺度特征,并在之后使用1×1 的卷積核來降低維度,從而減小計(jì)算量?;跉埐罹W(wǎng)絡(luò)的設(shè)計(jì)思想,將輸入輸出直接相連來構(gòu)成殘差結(jié)構(gòu),從而避免了由于層數(shù)過深而產(chǎn)生的過擬合問題。此外,在卷積層后選擇ReLU作為激活函數(shù),可以提高卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練速度,而且精確度更高。最后基于該種結(jié)構(gòu),設(shè)計(jì)出能夠完成場景識(shí)別任務(wù)的卷積神經(jīng)網(wǎng)絡(luò)模型。
為了避免模型的過擬合問題并提高模型的泛化性,還在模型中引入了批歸一化和隨機(jī)丟棄的方法。其中,批歸一化添加在每個(gè)卷積層的后面,隨機(jī)丟棄添加在網(wǎng)絡(luò)最后的全連接層,減少節(jié)點(diǎn)間的依賴性,并在訓(xùn)練過程中將隨機(jī)丟棄的丟棄率設(shè)置為0.5。
卷積神經(jīng)網(wǎng)絡(luò)的識(shí)別精度與數(shù)據(jù)集的大小有很大關(guān)系,數(shù)據(jù)集越大最終訓(xùn)練完的模型的識(shí)別效果越好。該文實(shí)驗(yàn)中選用的場景數(shù)據(jù)集為MIT 場景數(shù)據(jù)集,該數(shù)據(jù)集的場景類型豐富,適合用來作為場景識(shí)別問題的驗(yàn)證工具。為了對模型進(jìn)行訓(xùn)練并驗(yàn)證訓(xùn)練好的網(wǎng)絡(luò)模型性能,將該數(shù)據(jù)集分為訓(xùn)練集和測試集,其中訓(xùn)練集與測試集的比例為4 ∶1。選定好場景數(shù)據(jù)集后,需要對數(shù)據(jù)集進(jìn)行標(biāo)注后才能進(jìn)行模型的訓(xùn)練與測試。把每張圖像的數(shù)據(jù)用(X,y)來表示,其中X ∈RH×W×C為該圖像數(shù)據(jù),H 為圖像高度,W為圖像寬度,C 為圖像的通道數(shù)量,y ∈Z1×M代表圖像的場景類別,通過1-of-K 編碼對圖像的場景類別進(jìn)行編碼,如果圖像X 屬于第k 類場景,則yk=1,如果X 不屬于第k 個(gè)類別,則yk=0。
同時(shí),使用充足的數(shù)據(jù)訓(xùn)練模型可以避免過擬合問題,提高識(shí)別的精度。為豐富訓(xùn)練數(shù)據(jù)集,通常會(huì)采用數(shù)據(jù)增強(qiáng)的方法。數(shù)據(jù)增強(qiáng)可以提高網(wǎng)絡(luò)的識(shí)別性能和泛化能力,常用的數(shù)據(jù)增強(qiáng)方法包括翻轉(zhuǎn)、隨機(jī)裁剪、旋轉(zhuǎn)、顏色抖動(dòng)、縮放變化、平移變化、噪聲擾動(dòng)、尺度抖動(dòng)等。該文選擇對場景圖像進(jìn)行放大旋轉(zhuǎn)、水平翻轉(zhuǎn)和垂直翻轉(zhuǎn)的數(shù)據(jù)增強(qiáng)操作。數(shù)據(jù)預(yù)處理是模型完成識(shí)別任務(wù)過程中非常重要的環(huán)節(jié),通過預(yù)處理的操作可以豐富訓(xùn)練數(shù)據(jù),從而能提高網(wǎng)絡(luò)的識(shí)別率,還能夠提高網(wǎng)絡(luò)的泛化能力,避免過擬合。因此,在很多深度學(xué)習(xí)算法中都需要對數(shù)據(jù)進(jìn)行預(yù)處理操作,在圖像領(lǐng)域的研究中,經(jīng)常使用的預(yù)處理方法包括去均值、歸一化和主成分分析與白化。實(shí)驗(yàn)中使用了去均值歸一化的預(yù)處理方法,通過該操作可以消除圖像中不必要的干擾信息,減少識(shí)別過程的計(jì)算量。
數(shù)據(jù)預(yù)處理后,可以用數(shù)據(jù)集對模型進(jìn)行訓(xùn)練和測試。
訓(xùn)練過程步驟包括以下6 步。1) 設(shè)置卷積神經(jīng)網(wǎng)絡(luò)模型的各項(xiàng)參數(shù)。2)每次迭代時(shí)從訓(xùn)練集中選取64 個(gè)樣本進(jìn)行訓(xùn)練,作為模型訓(xùn)練過程的輸入。3)經(jīng)過前向傳播,計(jì)算網(wǎng)絡(luò)的輸出結(jié)果。4) 計(jì)算預(yù)測值與實(shí)際值之間的差值。如果到達(dá)最大迭代次數(shù),則停止訓(xùn)練,否則訓(xùn)練繼續(xù)。5)進(jìn)行誤差的反向傳播,利用隨機(jī)梯度下降算法逐層更新網(wǎng)絡(luò)的權(quán)值。6)訓(xùn)練結(jié)束后保存參數(shù)。再次回到步驟(2),并導(dǎo)出網(wǎng)絡(luò)參數(shù)。訓(xùn)練中使用Softmax 損失函數(shù)來輸出對于每個(gè)場景類別的預(yù)測概率。
測試過程步驟包括5 步。1)讀取訓(xùn)練好的網(wǎng)絡(luò)模型。2)測試集中的樣本作為網(wǎng)絡(luò)的輸入。3)將數(shù)據(jù)逐層前向傳播,計(jì)算網(wǎng)絡(luò)的輸出結(jié)果。4)比較預(yù)測值與樣本的標(biāo)簽是否一致,判斷識(shí)別結(jié)果的正確性,并統(tǒng)計(jì)分類正確的結(jié)果。5)重新回到(2),完成對所有測試樣本的識(shí)別,計(jì)算識(shí)別的準(zhǔn)確率。
按照上述過程對模型進(jìn)行訓(xùn)練與測試,并設(shè)定好訓(xùn)練與測試過程的各項(xiàng)參數(shù),最終選擇TensorFlow 來完成模型的訓(xùn)練[4]。TensorFlow 是谷歌團(tuán)隊(duì)開發(fā)的一種機(jī)器學(xué)習(xí)庫,能夠支持Python、C++、Go、Java 多種編程語言,后端使用C++、CUDA 等寫成。TensorFlow 目前廣泛用于深度學(xué)習(xí)的研究中。除此之外,還可以用于實(shí)現(xiàn)其他算法,例如邏輯回歸、隨機(jī)森林等。因此該文選擇TensorFlow 來進(jìn)行模型的訓(xùn)練與測試。
實(shí)驗(yàn)中使用Python 語言編寫訓(xùn)練與測試的程序,并在服務(wù)器上進(jìn)行模型的訓(xùn)練。訓(xùn)練過程中選擇Adam方法對模型進(jìn)行訓(xùn)練[5],Adam 方法是一種基于梯度的優(yōu)化方法,在訓(xùn)練過程中可以根據(jù)訓(xùn)練進(jìn)度更新學(xué)習(xí)率,是隨機(jī)的。訓(xùn)練完畢后,對模型進(jìn)行測試,驗(yàn)證識(shí)別的準(zhǔn)確度。最終訓(xùn)練好的模型在測試集上的準(zhǔn)確率為64.99%。
根據(jù)結(jié)果可以看出,在對場景數(shù)據(jù)集進(jìn)行識(shí)別時(shí),卷積神經(jīng)網(wǎng)絡(luò)的場景識(shí)別方法能得到比較好的識(shí)別效果,與傳統(tǒng)方法相比準(zhǔn)確度可以提高10%以上。此外,使用卷積神經(jīng)網(wǎng)絡(luò)的識(shí)別方法更加簡單,不需要人為設(shè)定如何提取圖像中的特征,通過卷積神經(jīng)網(wǎng)絡(luò)模型可以自主提取能夠表達(dá)圖像信息的特征。同時(shí),GPU 的出現(xiàn)提升了運(yùn)算速度,解決了過去訓(xùn)練模型耗時(shí)長的問題,因此在GPU 加速運(yùn)算的基礎(chǔ)上,卷積神經(jīng)網(wǎng)絡(luò)等深度學(xué)習(xí)模型可以縮短模型的訓(xùn)練時(shí)間,將卷積神經(jīng)網(wǎng)絡(luò)在實(shí)際問題中的應(yīng)用變成了可能。
場景識(shí)別作為機(jī)器視覺的重要內(nèi)容,一直是各國專家學(xué)者研究的重點(diǎn)問題。隨著人工智能的不斷發(fā)展,越來越多的問題可以利用卷積神經(jīng)網(wǎng)絡(luò)等智能算法解決。該文的研究證明了卷積神經(jīng)網(wǎng)絡(luò)在場景識(shí)別問題中的有效性,可以為場景識(shí)別問題的研究提供借鑒。