熊舒羽,毛 雷,劉 暢
(重慶理工大學 計算機科學與工程學院, 重慶 400054)
基于內容的圖像檢索(content-based image retrieval,CBIR)用一種或多種特征表示圖像,然后計算待檢索圖像與數據庫中圖像在特征空間中的相似度,并按照相似度從大到小的順序返回數據庫中的圖像。在傳統的CBIR中,通常運用人工特征方法,力圖提取更具判別性的圖像特征,從而提高檢索準確率。隨著數字圖像爆炸式增長,給圖像檢索的準確性和有效性帶來了極大挑戰。因此,探索新的圖像特征提取方法、設計圖像并行檢索系統成為當前亟待解決的問題。近年來,卷積神經網絡(convolutional neural network,CNN)在許多計算機視覺任務上取得了重大突破。由于效果較好,這種方法也被用于圖像檢索中。Krizhevsky A等[1]直接利用第7層的輸出作為圖像特征進行圖像檢索,取得了很好的效果,但是在查詢圖像時,需要計算查詢圖像與數據庫中每張圖像的相似度,導致檢索時間較長,無法實現大規模數據庫實時檢索。Haomiao Liu等[2]提出了DSH模型,通過訓練好的網絡,自動提取每張圖像的哈希碼建立索引,在保證檢索精度的前提下,降低了檢索的時間復雜度。但是這些方法沒有解決海量圖像的存儲問題,且對批量圖像檢索仍具有局限性。
大數據分布式計算平臺Hadoop的出現為海量圖像檢索提供了新思路[3],即利用MapReduce技術[4],將檢索過程并行化來加快批量圖像檢索效率。Raju U[5]和Premchaiswadi等[6]分別用Local Tetra Patterns (LTrP)和Auto Color Correlation(ACC)算法提取圖像特征并存儲在分布式文件系統中以實現并行檢索,但這些特征的匹配容易受光照以及噪聲的影響。張學浪等[7]利用SIFT算法結合詞袋模型,有效減少了檢索時的計算量,提高了檢索實時性,但K-Means算法隨機初始的聚類中心對噪音和孤立點的容忍性較差,對檢索精度有較大影響。
針對傳統的單節點圖像檢索方法在批量圖像檢索中效率低,且僅以人工特征作為檢索依據導致特異性差的問題,本文結合了CNN的強大學習能力及Hadoop分布式并行計算的特點,提出一種基于深度哈希算法的批量圖像并行檢索方法。首先,構建深度哈希模型獲取圖像特征和哈希碼存放在HBase中,然后在Hadoop平臺上實現批量圖像并行二級檢索,即在每個檢索節點上,先根據哈希編碼確定圖像候選集,再計算候選圖像與待檢索圖像的相似度,最后根據相似度返回檢索結果。與文獻[4]和文獻[7]算法相比,本文方法不僅計算量有所降低,而且準確率顯著提高。
本文提出的基于深度哈希批量圖像并行檢索方法,主要分為3個階段:構建深度哈希模型、圖像特征與哈希碼存儲、圖像并行檢索,如圖1所示。
1) 構建深度哈希模型。該模型可以通過端到端的學習方法,將學到的圖像表示反作用于二值編碼的更新,因此能完全發揮出深度學習的能力。
2) 圖像特征與哈希碼存儲。將圖像輸入到訓練好的模型,以輸出的12維數據作為圖像特征,然后通過符號函數將圖像特征二值化成哈希碼,最后分別存儲在HBase的圖像特征表和哈希表中。
3) 圖像并行檢索。 運用MapReduce技術,在每個節點上檢索圖像時,先在哈希表中搜索相匹配的哈希碼(如圖1中標注的一級過程),然后與候選集中的圖像進行特征相似度計算(如圖1中標注的二級過程),然后搜集結果并排序。

圖1 方法概述
深度哈希算法結合了卷積神經網絡自我學習優勢以及哈希方法在檢索中計算效率和空間上的優點,通過訓練卷積神經網絡模型,將網絡輸出的結果約束在一個范圍內,例如[-1,1],量化得到最終的哈希碼。該哈希碼長度短,計算量和存儲空間大幅度降低,而且檢索效果較好,故本文采用卷積神經網絡模型在訓練集上學習,構建圖像特征和哈希提取模型,將模型輸出的結果作為圖像特征,將量化后的結果作為哈希碼。
1.2.1 網絡結構
本文設計的卷積神經網絡模型結構如圖1所示。該網絡是由2個卷積池化層和2個完全連接層組成。卷積層的核大小為3×3,步長為1,pad參數設置為1(兩個卷積層卷積核個數分別為96,64)。池化層的核大小為3×3,步長為2。第1個全連接層包含384個節點,第2個有12個節點,這里的12也表示哈希碼的長度。所有卷積層的激活函數都為ReLU[8],所有池化層的輸出都采用LRN[1]進行向量歸一化。同時,為了防止訓練的時候過擬合,在兩個全連接層之間添加了Dropout正則化[9]。
1.2.2 損失函數和優化目標
為了得到哈希值,需要對網絡的輸出進行約束,引導每張圖像的輸出接近離散值。因此,本文采用文獻[2]中的損失函數:
λ(|||ai,1|-1||1+|||ai,2|-1||1)}
(1)
其中:W是權值矩陣;N為每次迭代處理的圖像對;li表示第i對圖像是否相似(0代表相似,1代表不相似);ai,j是第i對圖像中第j個圖像的輸出結果(j=1,2);λ是控制正則化的權重參數;θ為閾值;1為全1向量。
該損失函數具有可分性。第1項因子保證相似圖像對映射成相同的二進制;第2項因子保證相似圖像對映射成不同的二進制;第3項因子能夠維持損失函數的梯度值為-1或者+1,可以保證訓練的穩定性,最終使得學習到的特征具有相似保留性。
訓練卷積神經網絡的目的是使損失函數值最小化,本文采用批量梯度下降法作為反向傳播算法。因此,需要計算式(1)的梯度值,但是絕對值和最大值運算不可微,所以采用次梯度方法。其3項因子的次梯度求解為:
(2)
所有層的權值都采用Xavier初始化,在訓練時,設置批量大小為128,遺忘因子為一個實數0.99,權衰量為0.000 4,學習率固定為0.001,總共迭代10 000次。
1.2.3 哈希碼的生成
深度哈希方法在生成哈希碼時,將圖像輸送到訓練好的網絡,并將網絡輸出進行量化,得到12位二進制哈希碼{1,0}k,其中量化函數為:

(3)
為了有效存儲數據,用到了一個分布式的NoSQL數據庫HBase。HBase表是一個分布式多維表,表中的數據通過一個行關鍵字、列族和列名以及時間戳進行索引和查詢定位。訓練好模型后,給定一張圖像作為輸入,通過前向傳輸提取fc2層的特征值作為圖像特征,量化得到二進制哈希碼。最后,數據分別存放在HBase的圖像特征表和哈希表中。
1) 圖像特征表。圖像名稱作為行關鍵字,特征作為列值,其存儲格式如下:
(lmageId,Float1Float2…Float12)
ImageId代表本地文件系統中圖像的名稱。后面緊跟著12個浮點數,表示12維特征向量。
2)哈希表。哈希碼作為行關鍵字,圖像名稱作為列值,即將哈希碼相同的圖像放在同一個字段里,其存儲格式和圖像特征表類似,存儲格式如下:
(Hashcode,lmageId1lmageId2…lmageIdk)
哈希碼表示一個哈希值,k表示有k個圖像的哈希值是一樣的圖像。
本文設計的批量圖像并行檢索方法是基于Hadoop平臺實現。Hadoop由分布式文件系統(HDFS)、MapReduce等組成。HDFS是Hadoop使用的一個分布式的文件系統,MapReduce是一種簡單但功能強大的并行計算編程模型,能分布式處理大型數據集。MapReduce的操作包含2個步驟:Map階段處理輸入的數據,輸出〈key,value〉鍵值對;在Reduce階段,接收key和相關的value集合形成一個較小的集合,然后進行相關處理,形成最終的結果。本文在Hadoop上設計的批量圖像并行檢索過程如圖2所示。在檢索前,將批量待檢索圖像先轉換為特征文件上傳至HDFS中,系統會根據文件大小自動生成多個分塊。在Mapper階段,每個Mapper對應一個分塊,并分布在不同節點上同時執行。在每個Mapper進行檢索任務中,首先根據待檢索圖像的哈希碼在HBase的哈希表中進行哈希匹配,即漢明距離小于2,得到相似圖像候選集;然后計算待檢索圖像與候選集中每個圖像特征向量的相似度大小,即計算兩個特征向量的歐式距離。距離越大,表示兩特征向量相似度越低;同理,距離越小,相似度越高。最后,以待檢索圖像名稱作為key值,相似圖像名稱加相似度作為value值輸出。
在Reducer階段,輸入的是待檢索圖像名稱,以及與名稱相同的所有value值集合,對集合中每個相似圖像,按照相似度從大到小對檢索的結果進行排序,以降序輸出檢索結果。

圖2 批量圖像并行檢索過程
在服務器中虛擬了4個用于構建Hadoop集群Centos6.3系統和一個用于caffe[10]的Ubuntu14.04系統。集群包括1個master節點(即NameNode)和3個slave節點(即DataNode),其中Hbase部署在master和2個slave節點上(因為zookeeper個數最好設置為奇數個)。4臺機器配置如表1所示,實驗中參數設置為:θ=24,λ=0.01。

表1 Hadoop集群中各節點的配置
采用CIFAR-10[11]數據集作為離線訓練的樣本集,其中該數據集包含60 000張32×32彩色圖片,人工分為相互獨立的10個類(airplane,automobile,bird,cat,deer,dog,frog,horse,ship,truck),每個類包含6 000張圖片,其中50 000張圖像用于訓練模型,10 000張圖像用于評估模型。該圖像可以直接輸入模型,因此不需要做任何預處理。
在實驗中,具有相同的分類標簽則認為兩幅圖像相似。為了驗證檢索效果,本文采用平均精度均值(the mean average precision,mAP)技術指標評價檢索結果。
檢索效率測試是在不同slave節點數的情況下,做批量圖像特征匹配實驗,并記錄其消耗的時間,如圖3所示。從圖3中可知:隨著檢索圖像數量的增加,當檢索圖像數量大于3 000時,并行檢索的優勢逐漸顯現出來。結果表明:Hadoop能自適應海量圖像檢索,它顯著提高了檢索效率。
為了驗證系統穩定性,本文將HBase中的圖像通過復制分別擴充到10、20、30、40萬張。采用測試集中圖像作為檢索圖像,計算不同集群在不同規模數據庫中的檢索時間,如圖4所示。從圖4中可知:隨著數據庫的擴展,3節點集群的檢索時間變化較緩,說明系統在處理大規數據庫具有很好的穩定性。

圖3 不同節點之間檢索效率比較
為了評估CNN模型提取哈希特征的優勢,將本文方法與文獻[4]采用的顏色直方圖特征提取方法和文獻[7]采用的SIFT算法結合詞袋模型方法進行對比實驗。測試集中每張圖像,以最相似圖像作為檢索結果來計算mAP,實驗結果如表2所示。本文方法的精確度顯著高于其它方法,高達60.28%,具有非常明顯的優勢。

表2 3種不同方法的mAP
本文提出用一個簡單且高效的深度學習框架來訓練CNN模型,讓其學習圖像特征及哈希碼,然后用到分布式計算框架Hadoop進行批量圖像并行二級檢索。實驗證實:該方法能更好地用于基于內容的海量圖像檢索中。且隨著檢索圖像數量的增多,當達到10 000張時,三節點并行檢索方法相對單節點,檢索速度提高了51.46%。本文方法的平均精確度相對文獻[4]的方法提高了34.55%,相對文獻[7]的方法提高了12.63%。
由于深度學習具有較強的非線性表示能力,提取出來的圖像特征比人工設計的特征更符合語義層的表示,因此更能表示圖像的特性。并且將分布式計算框架Hadoop用于批量圖像并行檢索,不僅能解決海量圖像數據的存儲問題,還能顯著提高檢索效率。
本文的方法仍存在可改進之處,由于在Map計算過程中會產生中間數據,即會產生I/O操作,這些會影響圖像檢索系統的實時性,在接下來的研究中,將采用另一種新的分布式實時流計算框架Spark Streaming[12]來加快檢索速度。
[1] KRIZHEVSKY A,SUTSKEVER I,HINTON G E.ImageNet Classification with Deep Convolutional Neural Networks[J].Advances in Neural Information Processing Systems,2012,25(2):1106-1114.
[2] LIU H M,WANG R P,SHAN S G,et al.Deep Supervised Hashing for Fast Image Retrieval[C]//The IEEE Conference on Computer Vision and Pattern Recognition.Las Vegas:IEEE,2016:2064-2072.
[3] 朱為盛,王鵬.基于Hadoop云計算平臺的大規模圖像檢索方案[J].計算機應用,2014,34(3):695-699.
[4] SHI L,WU B,WANG B,et al.Map/Reduce in CBIR application[C]//International Conference on Computer Science and Network Technology.Harbin:IEEE,2011:2465-2468.
[5] RAJU U S N,GEORGE S,PRANEETH V S,et al.Content Based Image Retrieval on Hadoop Framework[C]//The IEEE International Congress on Big Data.New York:IEEE,2015:661-664.
[6] PREMCHAISWADI W,TUNGKATSATHAN A,INTARASEMA S,et al.Improving performance of content-based image retrieval schemes using Hadoop MapReduce[C]//2013 International Conference on High PERFORMANCE Computing and Simulation.Helsinki:HPCS,2013:615-620.
[7] 張學浪,耿楠.基于云計算的圖像并行檢索關鍵技術研究[J].計算機應用與軟件,2013,30(5):220-222.
[8] NAIR V,HINTON G E.Rectified linear units improve restricted boltzmann machines[C]//International Conference on International Conference on Machine Learning.UCA:[s.n.],2010:807-814.
[9] SRIVASTAVA N,HINTON G,KRIZHEVSKY A,et al.Dropout:a simple way to prevent neural networks from overfitting[J].Journal of Machine Learning Research,2014,15(1):1929-1958.
[10] JIA Y,SHELHAMER E,DONAHUE J,et al.Caffe:Convolutional Architecture for Fast Feature Embedding[C]//Proceedings of the 22nd ACM international conference on Multimedia.New York:ACM,2014:675-678.
[11] KRIZHEVSKY A.Learning Multiple Layers of Features from Tiny Images[C]//Advances in Neural Information Processing Systems 25.Nevada,USA:NIPS,2012:1106-1114.
[12] ZAHARIA M,DAS T,LI H,et al.Discretized streams:fault-tolerant streaming computation at scale[C]//Twenty-Fourth ACM Symposium on Operating Systems Principles.[s.l.]:IEEE,2013:423-438.