范業嘉,孫 涵
(南京航空航天大學 計算機科學與技術學院 模式分析與機器智能工業和信息化部重點實驗室,
隨著大數據時代的到來,對數據的有效存儲和快速檢索已經成為一個重要的研究課題。近年來,隨著卷積神經網絡在計算機視覺領域的成功應用,深度哈希方法利用端到端框架相互學習特征表示和哈希碼,與傳統的哈希方法相比,具有更好的檢索性能。哈希的主要工作是將高維的原始數據轉換為低維的二進制碼,并使相似數據的哈希碼之間的漢明距離小于異類數據哈希碼之間的漢明距離。因此,哈希方法在保證檢索精度的基礎上,比其他檢索方法提供更高的計算效率和更低的存儲量。
但是,現有的深度哈希方法仍然有兩個缺點:(1)現存的深度哈希方法大多是基于復雜的卷積神經網絡。從AlexNet[1]到VGGNet[2],雖然識別精度不斷上升,但是模型越來越大,計算速率越來越慢。(2)大多數現有的深度哈希方法使用的損失函數具有很高的時間復雜度。這些方法為了保留原始數據空間的相似性,都采用了適當的損失函數,比如成對相似性保留損失或三元組排序損失。然而,對于n個數據點,這些方法的時間復雜度是O(n!),這表明遍歷所有數據計算損失是不切實際的。
為了解決上述問題,文中提出了基于輕量級深度哈希網絡的細粒度圖像檢索算法。圖1展示了文中模型的體系結構,其中主要分為三個部分:特征提取器、哈希編碼層和分類層。對于上述問題一,文中將NTS-Net[24]特征提取器的主干網絡ResNet-50[3]替換為PeleeNet[4]。并針對細粒度圖像識別更加關注細節的特點,提出了跨層多尺度的Non-Local模塊,將PeleeNet階段2和階段3輸出的特征融合到階段4輸出的特征圖上,使得最終的特征不僅包含低層的細節信息,還包含高層的語義信息。對于上述問題二,文中將哈希編碼層置于分類層之前,用簡單有效的分類損失來指導網絡學習參數,這樣不僅減少了時間復雜度,而且使哈希碼保留了類別標簽的語義信息。
簡言之,文中的主要貢獻為:
(1)設計了基于輕量級網絡的深度哈希方法,提出了跨層的多尺度Non-Local模塊,融合了低層與高層的特征,將局部特征與全局特征一起送入分類器;
(2)創新性地在細粒度圖像檢索中,將哈希編碼層前置,放在分類層之前。在細粒度圖像檢索中,這里的哈希編碼層更像是特征開關層,用于指導分類;
(3)在三個公開的細粒度圖像數據集上做了廣泛的實驗分析。結果表明,該方法不僅提升了檢索精度,而且節約了大量的存儲空間,提升了檢索速度。
依據是否使用訓練數據,可將現有的哈希方法分為與數據無關的算法[5-7]和與數據有關的算法[8-13]。與數據無關的哈希方法通常在不使用訓練數據的情況下隨機或手動生成哈希函數。相反,數據相關的哈希方法利用訓練數據來彌補特征表示與輸入數據無關的缺陷。文獻[14]表明,較短的數據相關的哈希碼比數據無關的哈希碼具有更高的搜索精度。
此外,基于數據相關的哈希方法又可以分為監督哈希與無監督哈希。無監督哈希[8-10]依據的數據是沒有標簽信息的。盡管具有較少限制的無監督方法更加實用,但是它容易在原始數據和哈希碼之間造成語義鴻溝。監督哈希方法[11-13]充分利用了類別標簽等監督信息來學習哈希函數及生成哈希碼,這些方法比無監督方法具有更高的準確性。基于內核的監督哈希(KSH)[11]是代表性的監督哈希方法之一,它在內核空間中生成非線性哈希函數。最小損失哈希(MLH)[12]基于具有潛在變量和類似鉸鏈損失的結構化預測學習哈希函數。通過重新構造目標函數,監督離散哈希(SDH)[13]可以生成高質量的哈希碼,而不會造成松弛。
近期,基于卷積神經網絡(convolutional neural network,CNN)進行特征表示的方法取得了重大突破,一些將特征學習和哈希碼生成相結合的端到端的深度哈希方法[15-18]被提出。卷積神經網絡哈希(CNNH)[15]首次利用CNN提取的特征來學習哈希碼。但是,CNNH是一種兩階段的方法,其中第一階段使用成對標簽學習近似的哈希碼,第二階段訓練CNN學習特征表示和哈希函數。DNNH[16]提出了帶有三元組排序損失的端到端的結構,它可以同時學習特征表示和哈希編碼。HashNet[17]提出了一種新穎的方法,該方法通過迭代優化相似的平滑損失函數來解決原始的非平滑優化問題。文獻[18]提出了一種監督哈希學習方法,它在分類層之前加入了緊湊的sigmoid層。盡管文獻[18]和文中提出的網絡框架類似,但是兩者在分類層之前添加哈希編碼層的含義和效果卻大不相同。
與普通圖像不同,由于類間差異小和類內差異大的特點,細粒度圖像更加難以區分。細粒度圖像檢索(fine-grained image retrieval,FGIR)的現有方法可以分為兩類:基于手工特征以及基于CNN提取特征的檢索方法。FGIS[19]屬于第一類,它首次提出細粒度圖像檢索的概念。SCDA[20]是使用CNN進行細粒度圖像檢索的首次嘗試。SCDA使用粗略的顯著性定位選擇有用的深度描述符,然后聚合這些描述符并轉換為低維特征向量。但是SCDA并不是深度學習方法,因為它只使用了預訓練的CNN模型來定位顯著區域。為了解決使用預訓練模型進行無監督學習帶來的局限性,CRL-WSL[21]可以聯合學習顯著區域和有意義的深度描述符。最近,DCL-NS[22]在幾個基準數據集上獲得了最先進的性能。DCL-NS首先將CNN提取的特征投影到超球面上,然后以新的排序損失最小化類內距離并最大化類間距離。FPH[23]將特征金字塔與哈希結合,利用低層特征和高層特征分別定位部件和主要目標區域。
如圖1所示,文中的網絡框架主要由特征提取器、哈希編碼層和分類層三個部分構成。

圖1 網絡框架
(1)輕量級的Backbone網絡。
文中的特征提取器是在NTS-Net[24]特征提取器上改進得到的,彌補了原始特征提取的缺點。如圖1所示,特征提取器首先由一個CNN提取到全局特征圖,然后NTS-Net利用一個RPN[25]和排序損失,自監督地得到局部特征,接著將這些局部特征分別傳入CNN,最后將全局特征向量與局部特征向量拼接得到最終用于分類的特征向量。由此可見,圖1中特征提取器的backbone卷積神經網絡重復出現了四次,并隨著局部特征增多而增多。在NTS-Net的實驗中,CNN是ResNet-50,鳥類數據集的最優局部特征個數為三個,最終的模型大小可達116 MB。這樣大的模型很難在移動端或者嵌入式設備上插入,所以文中用現如今識別效果可以與ResNet相媲美的輕量級網絡PeleeNet代替。PeleeNet網絡結構如圖2所示。

圖2 PeleeNet網絡結構
(2)跨層多尺度的Non-Local模塊。
最近,文獻[26]提出了Non-Local模塊,通過自注意力模塊來形成注意力圖,從而在一層中對遠程依賴進行建模。對于每一個位置,Non-Local模塊首先計算當前位置與所有位置之間的成對依賴關系,然后通過加權和匯總所有位置的特征,softmax操作之后的權重添加到每個位置上輸出。文獻[27-28]顯示了Non-Local模塊可以在圖像識別方法帶來出色的改進。然而,對于細粒度圖像而言,因為目標物體的局部特征具有各種大小和形狀,所以多尺度的特征至關重要。如果僅在同一卷積層對空間依賴進行建模,那么固定大小的感受野與目標物體的局部區域不匹配可能會破壞特征提取。
基于以上論點,文中提出了跨層多尺度的Non-Local模塊,如圖3所示。圖中,1×1 Conv是指卷積核為1×1的卷積操作,?是矩陣乘法,⊕是逐元素加法。高層因具有大范圍的感受野,所以對全局信息比較敏感,低層則相反。據此,文中將PeleeNet階段2和階段3輸出的特征圖作為低層細節特征,階段4輸出的特征圖作為高層語義特征。通過這種方式,跨層的Non-Local模塊將一個高層特征與多個低層特征相關聯。因此,高層可以從之前的低層中學習更多的多尺度細節特征。所有相關層之間顯式學習的相關性提高了網絡的表示能力。

圖3 跨層多尺度Non-Local模塊
傳統深度哈希方法的哈希編碼層是對特征進行編碼的輸出層。與筆者的工作類似的文獻[18]則在分類層之前添加了哈希編碼層,以進行特征映射和生成緊湊的哈希碼。但是,文獻[18]未使用特征中包含的語義信息。文中框架中的哈希編碼層,每個神經元作為特征開關控制某個特征的存在或不存在。由于哈希碼是二進制的,因此“1”表示類別具有某種特征,而“0”表示其缺乏某種特征。圖4是語義哈希編碼層的示意圖,實線表示具有某種特征,虛線表示缺少某種特征。
值得一提的是,只有細粒度特征提取器后面的哈希編碼層才可以被視為特征開關層。眾所周知,與粗粒度圖像不同,細粒度圖像具有相似的特征。以CUB200-2011[29]為例,其類別均為具有喙,羽毛等特征的鳥類。但是,在粗粒度圖像數據集CIFAR-10[30]中,只有汽車和卡車才具有輪胎的特征,而其他類別(如鳥類和輪船)則沒有此特征。由于粗粒度圖像特征的復雜性,為粗粒度圖像設計的文獻[18]的哈希編碼層無法控制某些特征的存在或不存在。

圖4 哈希編碼層指導分類層分類的示意圖
本節做了廣泛的實驗以驗證文中方法的有效性,所有的實驗均在深度學習框架Pytorch上操作,實驗機器的CPU為Intel Xeon E5-2609,GPU是兩張NVIDIA TITAN XP(12 GB內存),操作系統是Ubuntu 16.04。在訓練階段,使用小批量隨機梯度下降方法進行優化,初始學習率為0.001,權重衰減率為0.000 1,動量為0.9。此外,第60個和100個epoch,學習率下降為之前的0.1倍。
文中在三個公開的細粒度圖像識別的數據集上做了實驗,分別是CUB200-2011[29],Stanford Dogs[31], Stanford Cars[32]。表1展示了最近的深度哈希方法與文中的檢索方法的mAP比較,其中16位,32位,64位表示哈希碼的長度。由表1可見,文中方法優于其他方法。無論數據集或哈希碼的維數如何,文中方法都是最優的,并且在很大程度上超過了第二位。造成巨大差異的原因是文中方法是專為細粒度圖像檢索而設計的。其他深度哈希方法隨著哈希碼長度減少一半,其檢索的mAP大大降低,而文中方法則不會。因此,文中方法擅長使用低維哈希碼進行檢索。

表1 各數據集上不同長度哈希碼的mAP結果 %
此外,為了驗證文中方法的優越性,表2記錄了以上算法的網絡模型大小和檢索速度。由表2可見,文中方法不論在模型大小,還是檢索速度上,都占有明顯的優勢。結合表1和表2,可以得到以下結論,在細粒度圖像檢索中,文中方法比其他深度哈希方法性能更佳,性價比更高。

表2 深度哈希方法模型大小和檢索速度比較
針對文中的三個創新點,即(1)將復雜基礎網絡替換成輕量級網絡;(2)跨層的多尺度Non-Local進行高低層特征融合;(3)哈希編碼層前置,用簡單有效的交叉熵損失指導參數更新,本小節在CUB200-2011數據集上,做了各個創新模塊的消融實驗,以驗證每個模塊的有效性,如表3所示。值得一提的是,表格第一行未添加任何子模塊的網絡即為NTS-Net,mAP為top1識別精度。實驗中哈希編碼長度為128位。

表3 各個模塊的消融實驗
文中提出了一種簡單而有效的細粒度圖像檢索方法。模型由三個部分組成:特征提取器,哈希編碼層和分類層。首先文中的基礎網絡替換成輕量級網絡,并輔以跨層的多尺度Non-Local模塊,不僅提升了細粒度圖像檢索精度,而且節約了大量的存儲空間,以及提升了檢索速度。其次,在分類層之前添加哈希編碼層作為特征開關層,以指導最終分類。同時,保留交叉熵損失,而不是使用傳統的具有高時間復雜度的成對或三元組相似性保留損失。所提出的檢索模型的性能在三個公開數據集上進行了評估。實驗結果表明,與其他先進的圖像檢索算法相比,文中方法在檢索性能上具有明顯的優勢。接下來的主要工作將考慮將少樣本學習與細粒度圖像檢索相結合,以便在現實中從部分可見類檢索未見類。