潘執(zhí)政,楊 旻,魏鵬飛
(煙臺大學(xué)數(shù)學(xué)與信息科學(xué)學(xué)院,山東 煙臺 264005)
圖像的檢索、識別、分類一直是科研和應(yīng)用領(lǐng)域中的重要問題,近年來,基于深度學(xué)習(xí)的方法[1-3]得到了充足的發(fā)展.在這些方法中,圖像相似性的測度選擇是影響算法性能的關(guān)鍵因素之一.近年來,利用三元組度量圖像的相似性[4-7]在類內(nèi)細(xì)粒度圖像甄別上取得了很好的效果.CHECHILK等[8]提出了一種在線三元稀疏被動攻擊的圖像相似性學(xué)習(xí)算法,解決了由于CPU和存儲等限制,圖像語義相似性算法不能擴展到大規(guī)模數(shù)據(jù)集等問題.BALNTAS等[9]利用三元組圖像訓(xùn)練得到了局部圖像探測器,用于尋找與特定圖像相匹配的圖像.
而另一方面,網(wǎng)絡(luò)的層次與結(jié)構(gòu),尤其是特征提取部分的網(wǎng)絡(luò),對算法性能起著重要的影響.最近,SABOUR等[10]建立了一種源于生物視覺研究的特征提取網(wǎng)絡(luò)—膠囊網(wǎng)絡(luò)(capsule),其中膠囊是一組神經(jīng)元,表示圖像中存在的特定實體的各種屬性,其可以是不同類型的實例化參數(shù),如位置、方向、形變、速度、反射率、色調(diào)、紋理等等,膠囊用實例化參數(shù)向量的模表示實例存在概率.通過引入動態(tài)路由協(xié)議,避免了重要特征的損失.在實際應(yīng)用中,應(yīng)用膠囊網(wǎng)絡(luò)都獲得了非常好的表現(xiàn).XI等[11]探索了MNIST手寫字體集和其他圖像集在膠囊網(wǎng)絡(luò)應(yīng)用的差異.ZHAO等[12]針對膠囊網(wǎng)絡(luò)在文本分類任務(wù)上的應(yīng)用做了深入研究,對于傳統(tǒng)的分類問題,膠囊網(wǎng)絡(luò)取得了較好性能,在多標(biāo)簽遷移的任務(wù)上,膠囊網(wǎng)絡(luò)的性能超過了卷積神經(jīng)網(wǎng)絡(luò)(CNN)和時間遞歸神經(jīng)網(wǎng)絡(luò)(LSTM).
根據(jù)目前研究現(xiàn)狀,將膠囊網(wǎng)絡(luò)應(yīng)用于圖像相似性學(xué)習(xí)的工作還未有相關(guān)文獻(xiàn)研究.為此,本文提出了膠囊網(wǎng)絡(luò)下基于三元損失的圖像相似性學(xué)習(xí)方法,構(gòu)建了基于膠囊網(wǎng)絡(luò)的三元損失網(wǎng)絡(luò)結(jié)構(gòu).在此網(wǎng)絡(luò)中,每組三元樣本并行通過膠囊網(wǎng)絡(luò),分別完成特征提取,其結(jié)果匯總后,由三元損失函數(shù)得到該樣本組的損失,通過大量樣本的不斷訓(xùn)練,得到最優(yōu)模型.新方法不僅優(yōu)化了圖像提取質(zhì)量,提升了特征的準(zhǔn)確性,同時具備了對細(xì)粒度圖像的高識別性.本文最后的實驗表明,相比于文獻(xiàn)[7]中基于排序損失函數(shù)的深度學(xué)習(xí)網(wǎng)絡(luò),其準(zhǔn)確率有極大的提高.
本文結(jié)構(gòu)如下:第1節(jié)給出三元組及損失函數(shù)的定義,膠囊網(wǎng)絡(luò)的結(jié)構(gòu)及符號說明;第2節(jié),將三元損失與膠囊網(wǎng)絡(luò)有機結(jié)合在一起,建立了新型的網(wǎng)絡(luò)結(jié)構(gòu);第3節(jié),在人臉數(shù)據(jù)集Labeled Faces in the Wild(LFW)上,進(jìn)行了實驗分析,并與文獻(xiàn)[7]的方法進(jìn)行了結(jié)果對比.
定義了2張圖像p與q的相似度:
D(f(p),f(q))=‖f(p)-f(q)‖22,
(1)
其中f(·)是在歐幾里得空間上將圖像映射到d維的映射函數(shù).D(·)衡量2張圖像相似程度,2張圖像越相似,D(·)越小.受文獻(xiàn)[4]和[7]啟發(fā),采用“三元組損失”來進(jìn)行模型的度量學(xué)習(xí).一個三元組包含標(biāo)準(zhǔn)樣本(xa)、正樣本(xp)、負(fù)樣本(xn),目的是保證通過三元組損失的學(xué)習(xí)使得xa和xp之間的距離最小,而和xn之間距離最大.其中xa為訓(xùn)練數(shù)據(jù)集中隨機選取的一個樣本,xp為和xa屬于同一類的樣本,而xp則為和xa不同類的樣本.故此有:
D(f(xa),f(xp))+α<
D(f(xa),f(xn)),?(xa,xp,xn)∈Ω,
(2)
其中α是人為給定的2張圖像相似與不相似的界定標(biāo)準(zhǔn),若取較大的參數(shù)值,則2張圖像不相似程度越大,會導(dǎo)致較大的損失;Ω是訓(xùn)練集中所有可能的三元組集合,大小為N.
最小化的損失函數(shù)為L:
L=∑Ni=1[‖f(xai)-f(xpi)‖22-
‖f(xai)-f(xni)‖22+α]+.
(3)
其中[]+表示[]內(nèi)的值大于零的時候,取該值為三元組樣本i的損失,小于零的時候,該三元組樣本i的損失為零.
膠囊網(wǎng)絡(luò)是為解決卷積神經(jīng)網(wǎng)絡(luò)(CNN)在特征提取中存在的不變性(invariance)問題而提出的.膠囊網(wǎng)絡(luò)和CNN都能夠得到樣本圖像的背景特征圖、輪廓特征圖以及紋理特征圖等等.盡管在CNN中,池化能夠帶來特征不變性(invariance)的效果,也就是當(dāng)樣本內(nèi)容發(fā)生很小的變化或有一些平移和旋轉(zhuǎn),CNN也能夠有效地識別內(nèi)容,但并不能學(xué)習(xí)到樣本中不同特征間的關(guān)聯(lián)性,且部分信息的丟失會對檢索、識別等結(jié)果產(chǎn)生很大的影響.在生物視覺系統(tǒng)的研究中,發(fā)現(xiàn)大腦皮層中存在大量的柱狀結(jié)構(gòu)(皮層微柱),其內(nèi)部含有上百個神經(jīng)元,并存在內(nèi)部分層.這就意味著人腦中的一層與神經(jīng)網(wǎng)絡(luò)(NN)的一層并不一樣,而是有著復(fù)雜的內(nèi)部結(jié)構(gòu),由此,文獻(xiàn)[10]提出了對應(yīng)的結(jié)構(gòu)-膠囊(capsule).
與CNN不同,膠囊是一組神經(jīng)元,表示圖像中存在的特定實體的各種屬性,其輸入和輸出都是向量,膠囊的輸出向量長度表示膠囊所代表的實體在當(dāng)前的輸入中存在的概率,所以,即使實體在圖片中的位置或方向發(fā)生了改變,但實體存在的概率沒有發(fā)生變化.使用一個非線性的擠壓函數(shù)(squashing)來確保將短的向量長度壓縮到接近于0,將長的向量長度壓縮到略低于1,且方向始終不變,
vj=‖sj‖21+‖sj‖2·sj‖sj‖,
(4)
其中vj是膠囊j的向量輸出,sj是其總輸入.
除了膠囊體的第一層外的其他層,一個膠囊的總輸入sj是來自于低一層的膠囊所有“預(yù)測向量”uj|i的加權(quán)總合,而uj|i是通過用一個權(quán)重向量wij乘以一個低一層的膠囊的輸出ui得出的.
sj=∑icijuj|i,uj|i=wijui,
(5)
其中cij是由迭代動態(tài)路由過程決定的耦合系數(shù).膠囊i和高一層的所有膠囊j的耦合系數(shù)總和為1,即∑icij=1,并且是由路由softmax決定,該路由softmax初始邏輯bij是對數(shù)先驗概率,即膠囊i與膠囊j的耦合為:
cij=exp(bij)∑kexp(bik) .
(6)
如圖1所示,整個層級間的傳播和分配分為2個部分,第1部分是ui和uj|i的線性組合,第2部分是uj|i和sj的路由過程.底層膠囊u1和u2的輸入是向量,這兩個膠囊分別與不同的權(quán)重wij相乘得到預(yù)測向量uj|i,即低維特征到高維特征的概率;然后該預(yù)測向量和對應(yīng)的耦合系數(shù)cij相乘,傳入特定的后一層膠囊sj,不同膠囊的輸入sj是所有可能傳入的預(yù)測向量uj|i和耦合系數(shù)sj的乘積和;最后輸入向量sj通過擠壓函數(shù)(squashing)得到后一層膠囊的輸出向量vj.如果該預(yù)測向量uj|i與對應(yīng)的輸出vj之間存在著一個較大的標(biāo)量積,則會通過自頂而下的反饋機制來增加該可能的vj的耦合系數(shù)cij,從而降低其它的耦合系數(shù).這樣做的好處是:增加了當(dāng)前膠囊對vj的“貢獻(xiàn)”,也提高了當(dāng)前膠囊的預(yù)測向量與vj的輸出向量之間的標(biāo)量積,這種路由協(xié)議比最大池化法高效得多,最大池化機制只是激活每一個映射中的一個神經(jīng)元,其余的神經(jīng)元進(jìn)行抑制.
圖1 膠囊層級結(jié)構(gòu)和動態(tài)路由過程
本文提出的網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示,網(wǎng)絡(luò)開始以三元組圖片為輸入,一個三元組包含標(biāo)準(zhǔn)樣本、正樣本、負(fù)樣本3張圖片,此3張圖片同時分別輸入相同結(jié)構(gòu)的膠囊網(wǎng)絡(luò)進(jìn)行提取特征,最后將提取的特征輸入到損失層.
圖2 基于膠囊的三元網(wǎng)絡(luò)結(jié)構(gòu)
在本網(wǎng)絡(luò)中,原始圖像經(jīng)過處理,由原來的256×256縮放到28×28,以便于減少網(wǎng)絡(luò)的計算量.在膠囊網(wǎng)絡(luò)中主要包括3個層,分別為卷積層、初始膠囊層、膠囊層.卷積層是常規(guī)卷積,首先是將28×28像素的圖片通過一個9×9的卷積核,其通道為256,步長為1,通過常規(guī)的CNN進(jìn)行卷積,得到特征圖大小為20, 通過一層卷積后得到20×20×256的特征圖,這一層將像素強度轉(zhuǎn)化為局部特征;第2層同樣采用9×9的卷積核,通道為32, 步長為2的8次不同卷積,每次都得到一個6×6×8×32的輸出,再把這些輸出在6×6×1×32的第3維上堆疊(concatenate),故得到6×6×8×32的特征圖,特征圖大小為6,其6×6的特征圖上每個點都是一個8維的向量;在傳遞到第3層之前,先把6×6×8×32的特征圖重塑成1152×8的矩陣.在第3層需要經(jīng)過迭代路由操作,最后通過擠壓函數(shù)(squashing)得到10×16的矩陣;最后在10個維度為16的膠囊中,選取模長最大的向量作為最后的輸出.3張圖像經(jīng)過膠囊得到的特征傳送到損失層.三元損失函數(shù)的目的就是使損失在不斷的訓(xùn)練迭代中越來越小,也就是通過不斷學(xué)習(xí),使得標(biāo)準(zhǔn)樣本與正樣本越來越近,標(biāo)準(zhǔn)樣本與負(fù)樣本越來越遠(yuǎn).
本文模型的運行環(huán)境:Linux系統(tǒng) ubuntu16.04版本,Python3.6,CPU-i5-7500,GPU-gtx1070,pytorch-0.3.1.使用的數(shù)據(jù)集是Labeled Faces in the Wild(LFW),LFW是無約束自然場景人臉識別數(shù)據(jù)集,該數(shù)據(jù)集由13 000多張全世界知名人士互聯(lián)網(wǎng)自然場景不同朝向、表情和光照環(huán)境人臉圖片組成,共有5 000多人.
對LFW進(jìn)行三元采樣,首先從數(shù)據(jù)集中隨機選取一張圖像作為標(biāo)準(zhǔn)樣本,再從數(shù)據(jù)集里面另外選取一張同一人的圖像作為正樣本,而負(fù)樣本是隨機選取一張不是同一人的圖像,以此類推,共選取6 484組三元組作為訓(xùn)練集和1 000組作為測試集.
將本文提出的方法與基于排序損失的深度學(xué)習(xí)方法[7]進(jìn)行了實驗比對.epoch是所有訓(xùn)練圖像全部通過網(wǎng)絡(luò)訓(xùn)練的次數(shù);batch是對三元組進(jìn)行批處理的數(shù)量;acc是在每次epoch后在測試集上的精確度;loss是每次epoch后在測試集上損失,α為最小間隔閾值.2種方法的訓(xùn)練集和設(shè)置相同:學(xué)習(xí)率為0.001,α為0.000 8,訓(xùn)練batch為32,測試batch為32,epoch為100.
實驗結(jié)果由圖3和圖4給出,其中cap-曲線表示本文提出的方法所對應(yīng)結(jié)果,tri-曲線表示由基于排序損失函數(shù)的深度學(xué)習(xí)方法[7]得出的結(jié)果.由圖3可知,在初始階段tri-acc雖然高于cap-acc,但隨著模型的不斷訓(xùn)練,后者逐漸高于前者,最終本文精確度達(dá)到99.8%.而在圖4中,cap-loss始終低于tri-loss,本文最終損失為0.015 4. 經(jīng)過實驗對比可知,基于膠囊網(wǎng)絡(luò)的三元損失新模型優(yōu)于基于排序損失的深度網(wǎng)絡(luò)模型.
由于α是人為設(shè)定的,α的大小對模型有一定的影響.當(dāng)α設(shè)置偏小時,會使得精確率出現(xiàn)很大偏差,損失偏大;當(dāng)α設(shè)置偏大時,會使得精確率不穩(wěn)定,出現(xiàn)震蕩現(xiàn)象,同時損失收斂過快.因此,設(shè)置一個合理的α值很關(guān)鍵,這是衡量相似度的重要指標(biāo).實驗表明,當(dāng)α為0.000 8時,效果最佳.根據(jù)數(shù)據(jù)集和網(wǎng)絡(luò)模型的不同,α也要隨之調(diào)整.
圖3 準(zhǔn)確率vs epoch
圖4 損失 vs epoch