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