閆 佳,曹玉東,任佳興,陳冬昊,李曉會
(遼寧工業大學 電子與信息工程學院,遼寧 錦州 121001)
隨著互聯網產業,通信行業,以及智能終端硬件的發展,互聯網上的圖像及視頻數據量大量增加。海量數據的擁有者面對大規模數據的檢索需求,傳統圖像檢索算法面臨著巨大的挑戰。基于哈希的圖像檢索算法解決了傳統檢索方法會引起的維數災難問題,逐漸受到研究人員的重視。深度哈希的方法通過深度卷積網絡擬合哈希函數,能完成從圖像特征到二進制哈希碼的映射,生成的二值碼通過匹配漢明距離完成圖像搜索。但如何有效地獲取復雜背景下的目標圖像的語義相關性,將其映射為相同或相近的哈希碼,提高圖像的檢索精度,仍是一個具有挑戰性的問題。
深度哈希網絡可以從輸入圖像中自動地學習到高維特征表示,然后映射為緊湊的二進制哈希碼,需要的存儲空間較少,這種方式生成的哈希碼能夠解決實值特征低效的問題[1],并將數據的相似關系轉化為漢明距離通過快速的異或運算來度量[2]。映射后的哈希碼也能夠保留原有語義特征在圖像中的分布特性,且能夠極大地減少圖像檢索所需要的時間和內存,基于哈希的檢索方法適合大規模圖像檢索[3]。
現有的大多數深度哈希的方法,對查詢集圖像及數據庫集圖像會學習同一個哈希映射函數。這種對稱結構的哈希學習方法需要考慮成對樣本之間的相似性,所以會消耗大量訓練時間。假設當訓練樣本數量為n時,需要考慮n2對樣本的相似性,當數據庫很大時,會導致訓練時間過長。為了加快模型的訓練過程,大多數深度哈希算法會從數據庫中抽取一個小的子集去訓練深度卷積網絡,以減少計算成本。文獻[4]提出的CNNH(Convolution Neural Network Hashing)算法將深度學習與哈希模型結合,把圖像特征學習和哈希函數優化融合到一個框架內,使用平方損失函數輸出最終的哈希值,圖像檢索效果得到了顯著的提升。文獻[5]將成對的圖像(相似/不相似)用于損失函數構造中,使得模型學習到的哈希二值碼更加緊湊。文獻[6]提出DFH算法,為深度監督哈希算法設計了費舍爾損失函數,再次提高了從圖像到哈希碼的映射準確度。但對稱結構的深度哈希算法,訓練過程中的絕大多數的數據點并未一次性包含在損失函數計算中,因此這些方法很難有效利用大規模數據庫的監督信息,導致搜索性能不佳。為了解決這一問題,文獻[7]提出了非對稱結構的哈希方法,利用兩個深度卷積網絡分別學習數據庫集和查詢集圖像,相當于映射了兩種不同的哈希函數,構建了非對稱的學習方法,但監督信息沒有直接用于離散編碼過程。文獻[8]通過使用非對稱優化的方式訓練模型,但優化過程中無法得到用于深度網絡的學習的數據庫最優哈希值。不同于文獻[7]構建的兩種不同的哈希映射函數,文獻[9]使用一個深度卷積網絡,利用查詢集圖像構建深度哈希函數,并且直接將監督信息用于編碼過程,然后通過離散優化得到最優的哈希碼,但是該模型未對生成哈希碼的緊致性與分離性進行約束,導致處于同類邊緣的困難樣本難以有效地訓練。
針對上述方法的不足,筆者提出了一種非對稱壓縮型深度哈希算法(Asymmetric Compression Deep Hashing algorithm,ACDH),可以在使用一個神經網絡的情況下完成不對稱深度哈希模型的訓練,使深度哈希網絡學習到緊湊的哈希碼。該方法主要貢獻如下:① 提出了一種端到端的深度哈希模型,使用不對稱的方式訓練模型,將監督信息直接作用于離散編碼過程,使數據庫全局監督信息得到有效的利用;② 設計一種融合大規模監督信息和相似度信息的損失函數,并在訓練深度哈希網絡時對生成的哈希碼進行顯式約束,使生成的同類圖像哈希碼的緊致性與不同類哈希碼的分離性可以被調控,提升了哈希碼對困難樣本的判別能力;③ 大量實驗結果表明所提算法相較于其他主流深度哈希方法,在性能上有顯著提升。
筆者提出的算法流程框架如圖1所示,包括深度卷積網絡和二值碼優化兩部分,這兩部分交替優化同一個目標損失函數。圖1中實線箭頭是深度卷積網絡訓練時數據流動方向,虛線箭頭是二值碼優化部分的數據流動方向。訓練深度卷積網絡時,二值優化部分的參數和虛線箭頭的數據流動會被固定;同樣,進行二值碼優化時,深度卷積網絡的參數和實線箭頭的數據流動會被固定。深度卷積網絡僅用于學習查詢集圖像的哈希碼U,輸出的查詢集經過交替方向乘子算法(Alternating Direction Method of Multipliers,ADMM)優化算法[10]求解得到最優的數據庫集哈希碼V,V被用于下一次深度卷積網絡的學習,這樣可以在僅使用一個深度卷積網絡的情況下完成不對稱深度哈希的迭代學習過程。

圖1 ACDH模型結構

(1)


圖2 SKNet模塊結構
將上述SKNet模塊嵌入到ResNet-50中,再添加一個哈希層和閾值化層,用于輸出二值哈希碼。新的特征提取網絡增加了更多的非線性,可以更好地擬合通道間復雜的相關性。其參數設置如表1所示。

表1 改進的SKNet-50的網絡結構
文獻[5]通過使用合頁函數構建了一個相似性損失函數。該方法采用對稱的方式訓練網絡,數據集的全局監督信息并未得到有效利用。文獻[9]采用不對稱的方式設計損失函數。該損失不僅用于深度神經網絡的學習,也用于優化函數對數據集矩陣的學習。但此方法并未對相同類別圖像與不同類哈希碼之間的差異性進行有效約束。包括ADSH[9]在內的一些深度哈希方法在損失函數中僅使得同類圖像的哈希碼距離盡可能地小,甚至強制約束同類別圖像哈希碼距離為零,而對于不同類圖像哈希碼映射,簡單地將其推遠。不同于上述方法,筆者希望同類圖像的哈希碼之間有一個微小的距離,保留同類圖像映射的哈希碼之間的某種差異性,并且使不同類圖像的哈希碼之間的分離程度盡可能一致。筆者設計的損失函數鼓勵圖像映射的哈希碼之間保持一個合理的距離,從而減輕在訓練迭代時處于同類邊緣的困難樣本點對于其他類別哈希碼的影響。
受文獻[5]和文獻[8]的啟發,筆者設計了如下損失函數。設數據庫集圖像對應的哈希碼為vj,查詢集圖像對應的哈希碼為ui,在損失函數中激勵相似圖像的哈希碼保持一個微小的間隔,不相似圖像的哈希碼之間有一個較大的距離,即滿足:
(2)
其中,θ≥ε≥0,使用合頁函數可以實現式(2)的約束,代入可得
(3)
其中,Sij=1時,只有當dham(ui,vj)-(θ-ε)≤0時,損失為0。Sij=0時,只有當(θ+ε)-dham(ui,vj)≤0時,損失為0。簡言之,該損失函數激勵了成對相似的vj和ui與成對不相似的vj和ui之間始終相差2ε。因為上述合頁函數在0處不可導,文獻[13]采用了h(x)=1/l×ln(1+exp(lx))來近似合頁損失函數;但在實際操作中exp(lx)會有數值溢出的情況。鑒于x只能取到非零值,令
(4)
其中,l為近似函數的平滑系數。使用函數h(x)近似式(3)中的合頁函數max(x,0),可得
(5)
將上述約束重寫為深度哈希網絡的最小化損失函數minJ(Θ,V),得
(6)
其中,ui表示神經網絡直接學習到的查詢集哈希碼,可以用tanh(F(xi;Θ))來替換,F(xi;Θ)表示深度神經網絡的輸出,Θ表示深度網絡的參數集合,minJ(Θ,V)等價于:
(7)
其中,Γ={1,2,…,n},表示所有數據庫點的索引,使用Ω={i1,i2,…,im}?Γ來表示查詢集的索引,因為Ω?Γ,且i∈Ω,在原有損失函數的基礎上添加了一個懲罰項,使得相同索引下的數據庫哈希碼vi與tanh(F(xi;Θ)盡可能地接近,最終的損失函數為
(8)
上述損失函數使得哈希碼之間的距離調節變得可控。通過調節θ與ε的差值大小,可以控制同類圖像的哈希碼之間的緊湊程度;ε控制不同類圖像哈希碼之間的分離程度。
使用交替優化策略來優化深度哈希模型的參數Θ和式(8)中的V,在每次完整的迭代中,其中一個參數固定,另一個參數會被更新,這一過程會被迭代很多次。
1.4.1 固定V而優化Θ
固定參數V,定義輸出為zi=F(yi;Θ),那么可以通過鏈式法則?J/?zi計算?J/?Θ,然后使用反向傳播算法(Back Propagation,BP)算法去更新Θ,達到優化神經網絡參數的目的。
1.4.2 固定Θ而優化V
固定參數Θ,針對損失函數minJ(V)中的離散變量V進行優化,使得深度哈希模型的學習得以朝正確的方向進行。式(8)中的損失函數在優化時可以重寫為
(9)
其中,φij=0.5(c-uiTvj),Hij=σ(l[φij-(θ-ε)]),Bij=σ(l[(θ+ε)-φij]),σ(·)為sigmoid函數,const為與變量無關的常量。同時minJ(V)滿足如下約束:
(10)


(11)
采用ADMM[10]優化式(10),解決二值碼的大規模優化問題。借鑒文獻[14]的作法,使用輔助變量Z1=V且Z1∈Sp,Z2=V且Z2∈Sb來吸收約束Sp和Sb。利用ADMM優化算法需要構造如下增廣拉格朗日函數:
(12)
其中,δS(·)是指示函數,當輸入的Z∈S時,δS(·)為0;否則,δS(·)為∞。Y1,Y2和ρ1,ρ2表示待優化函數的對偶變量和懲罰系數。根據ADMM優化流程,通過最小化式(9)來更新原始變量V、Z1和Z2,并使用梯度上升法更新對偶變量Y1和Y2。優化3組變量的步驟如下:
更新V:在更新變量V時,固定其他變量,通過最小化下式來求得Vk+1次迭代的結果:
(13)

(14)
其中,⊙表示哈達瑪乘積(Hadamard product),即兩個矩陣對應位置的元素相乘。
更新變量Z1,Z2:固定變量Vk+1和Y1,Y2可以使用近端最小化的方式更新Z1,Z2。具體形式如下:
(15)
更新Y1,Y2:使用梯度上升法更新對偶變量Y1,Y2
(16)
其中,γ是收斂系數,ADMM采用交替優化的方式逐參數更新迭代,在限定迭代次數內可完成參數V的更新,提出的ACDH算法流程如下。
算法1深度非對稱壓縮型哈希算法。

S∈{-1,1}m×n:監督矩陣。
c:二值碼長度。
輸出:
V:數據庫的二值碼矩陣。
Θ:神經網絡的參數。
Initialization:初始化Θ,V,V初始值為全0矩陣。
foriter=1→200 do
從訓練集索引Γ中隨機抽取抽取Ω=2 000,X=YΩ
forepoch=1→3 do
for 1,2,…,m/Mdo
隨機從X中取M個樣本去構建mini-batch。
根據式(8)計算Loss,并使用反向傳播算法
更新神經網絡參數Θ。
end for
根據式(12)~(16),使用ADMM優化算法更新數據庫矩陣V
end for
end for
實驗采用Pytorch-python深度學習框架與MATLAB實現,操作系統為ubuntu 20.04,顯卡采用NVIDIA RTX 2 060 s,GPU顯存為8 GB,運行內存為64 GB,CPU為AMD R5 3600X。
實驗采用CIFAR-10[15]、NUS-WIDE[16]以及MS-COCO-2014[17]數據集。數據集劃分方式和DPSH[18]與ADSH[9]一致。MS-COCO包含了82 783幅訓練圖片,是一種多標簽的數據集,被廣泛用于圖像分割、分類和檢索領域。在處理這一類型的數據集時,去掉了部分不包含類別信息的圖片,對于包含多種類別信息的圖像對,如果圖像對至少有一個標簽相同時,則將它們定義為相似的圖像對。對于MS-COCO數據集,筆者使用修剪后的圖像集作為數據集,從數據集中隨機選擇5 000幅圖像(屬于20個最大類,每個類別250幅)作為測試集,剩余圖像作為訓練集。CIFAR-10數據集是包含了54 000幅32×32圖像的單標簽數據集,每張圖片都屬于10個類中的一類,對于CIFAR-10數據集來說,被當作相似圖像的條件是兩幅圖像擁有相同的標簽。隨機選擇1 000幅圖像(每個類別100幅圖像)作為測試集,將剩余的圖像作為訓練集的數據庫點。NUS-WIDE數據集,采用了從該數據集中隨機選擇了10 000張圖像作為本實驗數據集。實驗中當兩張圖像共享一個標簽時,定義為相似圖像對,對于NUS-WIDE數據集,隨機選擇2 100張圖像(每類100張圖像)作為測試集,其余圖像作為數據庫點來訓練深度哈希模型。
使用平均精度均值(mean Average Precision,mAP)作為評價測度。在圖像檢索中使用前K項圖像的排序情況來衡量算法的優越性,前K個檢索圖像的平均精度AP,可以定義為
(17)
其中,N為檢索集中與查詢樣本相關緊鄰圖像的數目;P(k)表示前k個圖像的檢索精度;δ(k)是指示函數,當查詢樣本與第k幅檢索圖像相關時為1,否則為0。對所有查詢樣本的平均精度求均值即為mAP。本實驗中K在MS-COCO和NUS-WIDE的訓練集上的值為5 000,CIFAR-10訓練集上為54 000。
圖3展示了測試集中隨機抽取檢索的4種類型圖像。在CIFAR-10數據集上使用ACDH模型對訓練集的檢索結果進行可視化,從前K個檢索圖像中截取漢明距排序100~106的檢索圖像,在檢索出的圖像中第1行第7列為錯誤的檢索結果,將鳥的圖像歸類到了飛機中。
從圖3中可以看出,基于哈希的圖像檢索并不是一個簡單的分類過程,因為對檢索結果和待檢索圖的距離值進行了排序,在檢索的結果排列靠前的圖像中,目標物整體的顏色和形狀特征會和左邊的待檢索圖像很相似。以汽車和鳥為例,排名靠前的檢索結果中大多數為白車和淺色背景的圖片,而檢索的鳥的圖片為藍羽灰色背景圖像。

圖3 圖像檢索結果示意圖
在相同實驗條件下,筆者對比了ACDH、DSH[5]、DFH[6]、DPSH[18]、HashNet[19]、DHN[20]、DTSH[21]和ADSH[9]等8種深度哈希方法在不同比特長度下的圖像檢索精度,結果如表2所示。

表2 ACDH和其他算法在3種數據集上的mAP性能比較
從表2中可以看出,筆者提出的ACDH模型在3種數據集上檢索精度優于所有被比較的主流算法,并且ACDH在使用12 bit碼長時的mAP值要高于DFH和DTSH等算法使用48 bit的mAP值。這表明在相同檢索準確率的要求下,ACDH算法可以使用更短的哈希碼實現。ACDH在NUS-WIDE數據集上的48 bit處,相比ADSH的性能提高了2.8個百分點,在MS-COCO上使用48 bit哈希碼輸出時,mAP檢索精度值提高了2.1個百分點。在這兩個復雜數據集上,ACDH算法的檢索精度均獲得了較大幅度的提升。
筆者通過消融實驗分別驗證了改進的深度網絡SKNet-50和新的損失函數對整體模型的性能影響,將ADSH作為基準參考模型。實驗結果如圖4所示。

(a)CIFAR-10檢索精度 (b)NUS-WIDE 檢索精度 (c)MS-COCO 檢索精度
ACDH模型在采用與ADSH相同的特征提取網絡Alexnet時,僅在CIFAR-10數據集上映射12 bit哈希碼時檢索精度與ADSH持平,在其他情況下,檢索精度均獲得了較為明顯的提高,印證了ACDH損失函數帶來的性能提升。在使用SKNet-50作為主干網絡時,相比采用了Alexnet網絡的ACDH模型,在3種數據集上的檢索精度均表現出了可觀的提升效果。
從CIFAR-10數據集上隨機抽取了1 000幅圖像,在訓練后的ACDH和ADSH在模型上映射為48 bit哈希碼,利用t-SNE進行降維后的可視化結果如圖5所示。在圖5(a)中,圖像經ACDH模型映射后的哈希碼相比ADSH的圖5(b)的結果,映射錯誤率更低。ACDH模型上表現的哈希碼簇也更加緊湊,基本集中于較小的范圍內,相鄰圖像類別所對應的哈希碼簇相互之間始終保持固定的距離。ADSH由于并未對生成哈希碼的距離進行約束,導致不同類別哈希碼的分離程度不一致,映射在同類邊緣的樣本點更容易出現檢索錯誤的情況,如圖5(b)所示。

圖5 使用t-SNE對兩個模型結果進行可視化
筆者對算法中超參數θ,ε,λ和查詢集圖像的數量m的影響做了定量分析,分別測試了4個參數對模型在CIFAR-10數據集上對精度的影響,結果如圖6所示。

圖6 參數對模型的影響
參數θ和ε共同影響著同類圖像哈希碼的聚攏程度。ε固定時,θ越小,生成的哈希碼會越向中間靠攏;θ越大,生成的哈希碼會向四周分離。參數ε控制著不同類型圖像哈希碼的分離程度,ε越大,不同類哈希碼分離性會越高。由圖6(a)和6(b)可知,θ和ε太大會對模型的訓練精度產生影響,尤其對短的哈希碼影響較大。系數λ是量化誤差,控制著同索引下查詢集哈希值U和數據集哈希值V的相似程度。λ值過高,會影響交替學習的進程。由圖6(c)可知,λ=200時,模型的性能達到最佳。如圖6(d)所示,當m>2 000后,模型性能會逐漸趨于平穩,但太大的m值會導致更高的計算代價。綜上所述,參數θ設置為3,ε設置為2,λ設置為200,m設置為2 000。
筆者提出了一種基于非對稱結構的深度哈希算法,通過端到端的網絡對圖像進行哈希編碼。該方法將監督信息直接作用于離散編碼過程,有效利用了數據庫的全局監督信息。為了提高深度網絡對圖像表達能力,將改進的SKNet-50作為模型的主干特征提取網絡輸出哈希碼;同時設計了一種新的損失函數,對生成哈希碼的緊致性與分離性進行約束,增強了模型對困難樣本的判別能力。使用ADMM算法完成了模型損失函數的不對稱優化。在CAFAR-10,NUS-WIDE和MS-COCO三個數據集的上的測試表明,筆者提出的算法優于對比算法。