傅泰銘,陳 燕,李陶深
(廣西大學計算機與電子信息學院,南寧530004)
近年來,卷積神經(jīng)網(wǎng)絡(Convolutional Neural Network,CNN)已經(jīng)被證實了在計算機視覺的多個應用領域能取得相當優(yōu)越的性能,如目標檢測、人臉識別、圖像分類等。CNN 在經(jīng)過良好的訓練后具有十分強大的表達能力,甚至能用來區(qū)分未被訓練的任務。
以圖像分類的方式完成鯨魚身份的自動標注存在局限性。因為在訓練分類器時,分類器通過提取正負樣本的特征差異實現(xiàn)分類圖像,而鯨魚個體尾巴特征差異十分微小,并且難以保證每個類別都有足夠的樣本用于學習。
本文使用相似性度量學習(Metric Learning)[1]根據(jù)鯨魚的尾巴特征來識別鯨魚的屬類。利用CNN 對圖像進行特征提取后,通過對比特征編碼之間的距離度量,利用基于線性分配的難負樣本挖掘方法,不同于基于抑制簡單樣本的難例挖掘,線性分配問題(Linear Assignment Problem,LAP)算法可以根據(jù)模型的學習情況動態(tài)地構筑訓練對,并通過調(diào)整樣本采樣順序的方式使模型得到充分訓練。
傳統(tǒng)的CNN 對每個個體都需要大量的標記數(shù)據(jù),對每一個新發(fā)現(xiàn)的個體都需要重新訓練網(wǎng)絡。1993 年,Bromley 等[2]針對這一問題引入了一種合適的神經(jīng)網(wǎng)絡架構——孿生神經(jīng)網(wǎng)絡(Siamese Neural Network,SNN),該網(wǎng)絡學習檢測兩個輸入圖像是否相似或不同的。經(jīng)過訓練后,SNN 只需要一個帶有標簽的輸入圖像,以便準確地重新識別第二個輸入圖像是否同一個人的,在人臉識別領域得到廣泛應用[3-4]。在實踐中,人們會訓練SNN 來學習一個物種的相似性,并利用已知的既定事實來比較不同的個體。2015 年,Schroff 等[5]推出了基于孿生網(wǎng)絡的網(wǎng)絡架構FaceNet,該架構在YouTube 人臉數(shù)據(jù)集中擁有最高的準確率,曾在top-1 準確率上達到95.12%。并且出現(xiàn)了許多行人重識別(Person Re-identification,ReID)和SNN 的改進模型[6-9],尤其在目標追蹤領域,SNN 的應用十分廣泛[10-12]。
SNN 屬于模板匹配算法,任何模板匹配算法對采樣策略都十分敏感,特別是存在樣本不平衡時,而樣本不平衡問題廣泛存在于大多數(shù)任務中。2011年,Barua等[13]提出合成少數(shù)類過采樣(Synthetic Minority Oversampling Technique,SMOTE),通過對少數(shù)類樣本進行分析并根據(jù)少數(shù)類樣本人工合成新樣本添加到新數(shù)據(jù)集中對樣本進行平衡。2016 年,Shrivastava等[14]提出了難例挖掘(Online Hard Example Mining,OHEM),能夠?qū)唵螛颖具M行抑制,使得訓練過程更加高效。2017年,Lin 等[15]提出焦點損失(Focal Loss,F(xiàn)L),通過引入兩個新的超參數(shù),計算損失時為不同的樣本分配不同權重,大幅緩解了樣本類別不平衡問題,并將One-Stage 目標檢測模型的性能提高至頂尖水準。
線性分配問題是基本的組合優(yōu)化問題。通過利用線性分配算法為模型挑選樣本對有助于加速模板匹配類模型的收斂。本文設計了一種新的度量計算方式,并使用基于線性分配的難負樣本挖掘,在具有少數(shù)類別樣本的鯨魚尾巴數(shù)據(jù)集和CUB-200-2011數(shù)據(jù)集上取得了良好的識別效果。
本文所使用的SNN 模型具有兩部分:第一部分為分支模型,第二部分為頭模型。整體結構如圖1 所示。分支模型是對常規(guī)卷積神經(jīng)網(wǎng)絡框架取消最后的池化(Pooling)層和全連接(Full Connected,F(xiàn)C)層,因此從分支模型將會得到一個從圖像進行提取的特征向量編碼。以卷積密集網(wǎng)絡DenseNet[8]為例,DenseNet121 將輸出1 024 維的特征向量。使用一對具有共享權重的特征提取卷積網(wǎng)絡分別對輸入樣本對進行特征提取,得到一對圖像特征向量。頭模型對特征向量進行度量距離計算,因此頭模型也稱為距離層(Distance Layer),輸出相似度函數(shù)值(通過Sigmoid激活)。
圖1 本文算法整體結構Fig.1 Overall structure of the proposed algorithm
通過頭模型對分支模型提取出的一對特征向量計算距離,典型的方法是使用歐氏距離度量,定義為:
但是有以下原因使得本文嘗試不同的方法來計算距離:
1)歐氏距離度量將兩個值為0 的特征視為完全匹配,而兩個不相等的正值確實為良好匹配(意味著不完全匹配)。然而,在正面(position)特征中比在負面(negative)特征中有更多的正面信號,特別是在線性整流函數(shù)(Rectified Linear Unit,ReLU)激活中,這個概念會被距離度量丟棄。
2)歐氏距離度量不提供特征之間的負相關。
因此本文在距離層設計一種新的方法通過一個小型神經(jīng)網(wǎng)絡來學習和計算特征之間的度量距離:
輸入 一對特征向量x和y;
輸出 距離度量D。
1)將通過計算式(2)~(5)得到的向量拼接為一個長度為4×n的一維矩陣lambda,n為特征向量的長度。
2)將一維矩陣lambda 傳遞給一個小型的神經(jīng)網(wǎng)絡層,該網(wǎng)絡可以學習如何在匹配的零和接近的非零值之間權衡。每個特征使用相同的神經(jīng)網(wǎng)絡,具有相同的權值。網(wǎng)絡結構為2 層卷積層,之后將向量展開為一維后輸入全連接層,全連接層輸出同類的概率,該輸出是轉換后的特征的加權和,帶有Sigmoid激活。頭結構如圖2所示。
圖2 頭模型結構Fig.2 Head model structure
由于模型的表達性能在訓練期間會得到提高,因此有必要隨著訓練的進行提供更困難的訓練樣本對。對于任何隨機圖像對,相對容易預測它們是否匹配鯨魚,但是當涉及到更困難的樣本時,該模型將很難作出決定。
在訓練開始時,通過隨機抽樣匹配(正)和不匹配(負)對來為模型提供更簡單的案例。這是因為若訓練開始就將困難樣本輸入模型,收斂會十分困難。
因此隨著訓練的進行,開始輸入更加困難的負對。由于來自不同類別的任何兩只鯨魚可以形成負對,并且只有來自同一類別的鯨魚可以形成正對,因此訓練期間負對比正對數(shù)量更多。由于這種限制,在模型中只為不匹配的鯨魚形成負對,并對正對僅使用隨機抽樣。
用線性分配問題(LAP)算法來解決負對的選擇問題,任務分配問題是在加權二分圖中尋找最大(或最?。┘訖嗥ヅ涞膯栴}。
利用LAP對樣本進行采樣從而構筑訓練批次的過程可以簡化為以下過程,以一個5×5度量分數(shù)矩陣為例,矩陣中的元素代表一對訓練對的距離度量,通過特征提取得到如下分數(shù)矩陣:
由于算法只挑選負對,所以設對角元素為∞。得到如下分數(shù)矩陣:
對于每次迭代,LAP 將輸出一個由5 個負對組成的解,當模型訓練完這些負對后,將分數(shù)矩陣上對應的坐標和其對稱坐標設為無窮,進入下一次迭代并再次使用LAP 得到負對用于訓練。
在經(jīng)過一段時間的訓練后,矩陣會被消耗殆盡,此時通過重新運行模型再次生產(chǎn)新的分數(shù)矩陣。
利用訓練后的模型計算所有樣本對的距離度量分數(shù)矩陣作為矩陣T,其中每個元素Tij是該模型對圖像i 和圖像j 是否同類的預測概率。
輸入 分數(shù)矩陣T;
輸出 用于訓練的負對。
1)將T 中所有值變?yōu)樨摂?shù),即(-1)×T。因為LAP 會采樣度量差異最小的樣本對,因此將度量分數(shù)取反從而采樣度量距離最大的樣本對。
2)查找T 中與匹配對對應的所有值,將它們的值設置為較大正數(shù)(例如10 000),將已訓練的樣本對過濾。
3)對于矩陣T 中的每個值加上K×x,其中x(0 ≤x ≤1)為隨機值,K 在訓練過程中從1 000 逐漸減小為需要的較小值(例如0.05),這是因為如果不使用K(即K=0),模型將始終挖掘最困難的例子,這是不理想的,并且在訓練的初期限制算法為模型提供隨機樣本對,以形成模型的初步識別能力,在經(jīng)過一定次數(shù)的迭代后逐漸轉變?yōu)長AP 策略,因此整個過程是一個隨機采樣慢慢過渡到LAP采樣的過程。
4)使用LAP 來計算每一行i,從對應的列j 中計算對應的對,使得總的代價(所有行的代價求和)最小。然后將使用選定的(i,j)對進行下一階段的訓練。
對于正對,使用最簡單的隨機匹配算法,同時計算其錯排(derangements)。錯排的定義為:考慮一個有n 個元素的排列,若一個排列中所有的元素都不在自己原來的位置上,那么這樣的排列就稱為原排列的一個錯排。
這是為了保證沒有圖像會與自身配對,并且每個圖像只會使用一次來形成樣本對。
基于LAP的負樣本挖掘利用負對的相似性度量為模型提供更加困難的樣本對,而不是輸入隨機的樣本對,根據(jù)分數(shù)矩陣動態(tài)地調(diào)整訓練樣本的輸入過程,并保證簡單的樣本對也能得到訓練,因此加快了模型的收斂。
本文實驗均在Intel Core i7-8700K@3.70 GHz CPU,16 GB 內(nèi)存,GPU 為Nvidia GTX 1080的平臺上實現(xiàn),操作系統(tǒng)為Windows 10(64 bit),代碼在深度學習PyTorch環(huán)境下實現(xiàn)。
損失函數(shù)使用二元交叉熵(Binary Cross Entropy,BCE):
其中:m 為樣本數(shù),yi為第i 個樣本標簽,xi為第i 個樣本的特征。
評價指標采用mAP@5(mean Average Precision@5),定義為:
其中:U 是圖像的數(shù)量;P(k)是在截止點k 處的精度(Precision);n 是每張圖片預測的數(shù)量;rel(k)是一個指示函數(shù),如果第k級的項是相關的(正確的)標簽,則為1,否則為0。精度Precision的定義如下:
其中:TP(True Positive)表示正確分類的正例數(shù)量,F(xiàn)P(False Positive)表示錯誤分類的正例數(shù)量。
本文采用的數(shù)據(jù)集為鯨尾數(shù)據(jù)集和細粒度分類數(shù)據(jù)集CUBU-200-201。其中,鯨尾數(shù)據(jù)集的類別十分不平衡,共有25 361 張圖像用于訓練,7 960 張圖像用于測試。該數(shù)據(jù)集中大多數(shù)是垂直拍攝的鯨尾圖像,如圖3,每個圖像都具有較高的分辨率,例如1 560×600,但是有一些圖像較為異常,尺寸非常扭曲,比如尺寸失真、拍攝角度不正確以及圖像不清晰等。
通過對鯨尾數(shù)據(jù)集的標簽分布進行統(tǒng)計,發(fā)現(xiàn)其標簽分布十分不均衡:在25 361張鯨魚圖像中,總共有5 005種鯨魚,然而其中有9 664個屬于未知類別,在該類別中的鯨魚具有不同個體的特征,因此最簡單有效的辦法是將所有未知類別樣本從訓練集剔除,只對剩余的5 004 種鯨魚進行訓練,于是得到有用的圖像數(shù)量有15 697 張,然而在這其中的標簽分布也十分不均衡。其中新鯨魚類別的圖像后續(xù)將作為模型未見過的樣本進行驗證。
根據(jù)統(tǒng)計,5 004個類別中有大約2 000個類別僅有1張圖像,且有大約1 250 個類別僅有2 張圖像。同時模型需要捕捉鯨魚尾巴劃痕圖案的微小特征差異來對鯨魚身份進行辨認,這對模型的性能有一定要求。
圖3 數(shù)據(jù)集中部分垂直拍攝的鯨尾圖像Fig.3 Some images of whale tail taken vertically in the dataset
使用Adam 優(yōu)化器(optimizer),采用動態(tài)學習率,初始取值為64×10-5,之后每100 個epoch 減半,l2 正則化參數(shù)設為2×10-4;LAP 中的K 值初始為1 000,10 個epoch 后設為100,150 個epoch 后設為1,之后每50 個epoch 減半,總計訓練200個epoch。
模型編碼器使用在ImageNet[16]預訓練的權重來初始化網(wǎng)絡參數(shù)。
頭部模型結構及參數(shù)如表1所示,其中“”表示輸入層,沒有被連接對象。
表1 頭部模型結構及參數(shù)Tab.1 Structure and parameters of head model
使用4 種采樣策略進行對比,并且均使用本文提出的度量計算方式:
1)SNN:隨機挑選樣本對;
2)SNN with OHEM:使用OHEM進行樣本對挖掘;
3)SNN with FL:使用焦點損失抑制簡單樣本對;
4)SNN with LAP:通過LAP算法挖掘樣本對。
得到的對比結果如表2 所示,而不同采樣策略下的指標變化如圖4所示。
其中:焦點損失采用的超參數(shù)為γ=2,α=0.25;難例挖掘采用正負樣本比例為1∶3。
OHEM 的問題在于放棄了大量簡單樣本,在持續(xù)訓練中容易導致模型的學習偏差。
焦點損失的問題在于數(shù)據(jù)集的樣本之間具有較高的相似性,僅通過損失難以區(qū)分樣本的難度。
結果表明,對于模板匹配模型,基于LAP的難例挖掘采樣策略逐漸為模型提供更困難的樣本對,而不是所有樣本對的隨機子集,使得模型能更有效地進行學習。
同時由于每次訓練重新生成分數(shù)矩陣以挑選負對,因此會導致指標和損失函數(shù)的曲線呈鋸齒狀。
通過訓練不同的編碼器得到結果如表3 和圖5 所示。圖5中,X軸為epoch,Y軸為損失數(shù)值,同樣由于生成分數(shù)矩陣的原因,曲線非常陡峭,但總體仍處于收斂狀態(tài)。
由訓練指標和損失函數(shù)的對比結果可知,本文算法在具有少樣本、未知樣本特點的細粒度圖像分類問題上具有良好的性能,根據(jù)表2和表3可知,相比原型SNN,本文算法在指標上取得了良好的性能提升;同時解碼器對算法的性能也有較大影響,通過選擇不同的解碼器對結果具有不同影響。
圖4 不同采樣策略的mAP@5變化Fig.4 mAP@5 change of different sampling strategies
表2 不同采樣策略的mAP@5對比(DenseNet121編碼器)Tab.2 Comparison of mAP@5 by different sampling strategies(DenseNet121 encoder)
模型中間層的可視化如圖6 所示,由模型識別出的測試數(shù)據(jù)匹配對結果如圖7所示。
表3 不同編碼器的mAP@5對比Tab.3 Comparison of mAP@5 by different encoders
圖5 不同編碼器下的損失函數(shù)變化Fig.5 Loss function change in different encoders
CUB-200-2011 是一個細粒度分類數(shù)據(jù)集,在CUB-200-2011 以 召 回 率Recall@1、Recall@2、Recall@4、Recall@8、Recall@16、Recall@32 為指標得到的結果如表4 所示。由表4可以看出,直接對整個數(shù)據(jù)集使用難例挖掘難以取得指標上的提升。而利用線性分配采樣策略在Recall@1 上對比隨機采樣策略,取得了4.2 個百分點的指標提升,說明線性分配采樣策略對于實用性具有良好的提升作用;并且在Recall@4 上具有最高的指標提升(6.3個百分點)。
圖6 輸入樣本的特征激活可視化熱圖Fig.6 Heatmap of visualization of input sample features activation
圖7 匹配結果Fig.7 Matching results
表4 在CUB-200-2011數(shù)據(jù)集上的召回率對比 單位:%Tab.4 Comparison of recall on CUB-200-2011 dataset unit:%
本文針對深度學習中的細粒度識別和一次學習問題,對孿生神經(jīng)網(wǎng)絡的訓練過程和距離度量進行改進,并在一個具有少樣本、未知樣本特點的細粒度鯨魚圖像分類數(shù)據(jù)集和細粒度分類數(shù)據(jù)集CUB-200-2011 上取得了良好效果。但本文方法仍有改進之處,如利用LAP 進行難負樣本挖掘的耗時較長,在其后生成的熱圖也表明圖片中的噪聲(例如背景中的飛鳥)會讓模型錯誤地提取特征。但就總體而言,模型可以正確地提取圖像的細粒度特征,因此大多數(shù)圖像可以得到有效識別。同時利用本文方法需要額外花費算力生成分數(shù)矩陣,并且計算LAP也需要一定計算量,因此會相對耗時,后續(xù)的改進工作會圍繞速度方面進行。