楊 榮,張建剛,賈 暉
(1.西安郵電大學(xué) 計算機(jī)學(xué)院,陜西 西安 710121;2.西安熱工研究院有限公司 電站信息及監(jiān)控技術(shù)部,陜西 西安 710032)
隨著多媒體技術(shù)的廣泛應(yīng)用,快速高效地從圖片數(shù)據(jù)庫中檢索出滿足條件的圖片顯得尤為重要。圖像檢索技術(shù)從最早的基于文本的檢索技術(shù)(Text-based Image Retrieval,TBIR)已發(fā)展為基于內(nèi)容的檢索技術(shù)(Content-based Image Retrieval,CRIR)。CRIR有兩個主要任務(wù):一是提取圖像的特征;二是為大量的圖像進(jìn)行特征匹配。隨著深度學(xué)習(xí)的研究與發(fā)展,研究人員發(fā)現(xiàn),經(jīng)過大量帶標(biāo)簽樣本訓(xùn)練與學(xué)習(xí)后的卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)有能力抽象出高層的語義特征[1],跨越“語義鴻溝”,滿足基于內(nèi)容的圖像檢索需求。
傳統(tǒng)基于內(nèi)容的圖像檢索方法是通過計算紋理、顏色等圖像底層特征,并將特征進(jìn)行比對,實現(xiàn)內(nèi)容檢索[2-3]。但是,這些特征都只能反映圖像底層視覺特征,不能反映圖像高層的語義特征,限制了檢索的準(zhǔn)確率。為了有效實現(xiàn)圖像的語義檢索,基于卷積神經(jīng)網(wǎng)絡(luò)的圖像檢索方法被提出。基于深度學(xué)習(xí)的尺度不變特征轉(zhuǎn)換 (Scale Invariant Feature Transform,SIFT)圖像檢索算法[4]采用卷積神經(jīng)網(wǎng)絡(luò)提取SIFT 特征,并利用支持向量機(jī) (Support Vector Machine,SVM)對圖像庫進(jìn)行無監(jiān)督聚類。文獻(xiàn)[5]對圖像的SIFT特征先進(jìn)行局部特征聚合描述符 (Vector of Locally Aggregated Descriptors,VLAD)編碼,保證圖像SIFT特征的維度一致性,再進(jìn)行特征向量局部聚合,實現(xiàn)特征檢索。然而,以上特征都是手工設(shè)計,提取的特征與真實圖像分布存在一定差距。近年來,隨著深度學(xué)習(xí)的進(jìn)一步發(fā)展,利用深度學(xué)習(xí)自動提取圖像特征表現(xiàn)出色[6-7]。與傳統(tǒng)的特征提取方法相比,深度學(xué)習(xí)方法更能保留與圖像特征數(shù)據(jù)分布相關(guān)的高層語義信息,從而使得檢索更加有效。但隨著圖像數(shù)量的日益爆炸式增長,對于維度很高的特征,樹狀搜索容易產(chǎn)生“維度災(zāi)難”,如最近鄰搜索。目前解決維度災(zāi)難問題最為常用的方法是哈希算法,基于哈希算法的圖像檢索算法在特征維度很高時,將高維特征向量降維為低維散列碼,通過比較兩個散列碼的海明距離,計算圖像的相似程度,從而高效實現(xiàn)圖像檢索[8-9]。文獻(xiàn)[10]將深度學(xué)習(xí)與哈希算法相結(jié)合,將圖像哈希映射為二進(jìn)制向量,減少特征存儲開銷,并將相似圖像映射到相近區(qū)域,提高了檢索效率。文獻(xiàn)[11]提出了一種哈希算法,將圖像輸入分為檢索圖像、相似圖像和不相似圖像三元組,采用深度神經(jīng)網(wǎng)絡(luò)進(jìn)行參數(shù)學(xué)習(xí),檢索效果較好,但每次都需要人為設(shè)計圖像三元組,使得工作量增大。文獻(xiàn)[12]提出了一種深度離散哈希算法,雖然該算法能夠有效提高檢索的準(zhǔn)確率,但是圖像的輸入仍遵循成對輸入的原則,計算開銷較大。深度正則化相似度比較哈希(Deep Regularized Similarity Comparison Hashing,DRSCH)算法[13]通過保留多標(biāo)簽圖像間的相似語義信息學(xué)習(xí)哈希函數(shù),但需要對圖像數(shù)據(jù)進(jìn)行標(biāo)記,工作量較大。
為了提高圖像檢索的速度和準(zhǔn)確性,提出一種基于卷積神經(jīng)網(wǎng)絡(luò)和局部敏感哈希(Locality-Sensitive Hashing,LSH)算法的圖像檢索算法。在視覺幾何小組16(Visual Geometry Group 16,VGG16)網(wǎng)絡(luò)的基礎(chǔ)上用哈希層代替全連接層,通過深度學(xué)習(xí)獲取圖像高維語義特征,利用哈希映射避免維度災(zāi)難。采用LSH算法,使用哈希函數(shù)將高維特征在保證度量距離的同時進(jìn)行高效降維,構(gòu)建索引結(jié)構(gòu)。相似語義特征的圖像放入同一個哈希桶中作為候選集,在候選集計算特征向量間的歐式距離,以期實現(xiàn)大規(guī)模圖像的快速檢索。
傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)包括輸入層、卷積層、下采樣層、全連接層和輸出層。神經(jīng)網(wǎng)絡(luò)通過交替的連接卷積層和下采樣層,將圖像轉(zhuǎn)化為特征圖,通過全連接層形成特征輸出。卷積層通過實現(xiàn)“局部感知”和“參數(shù)共享”兩種方式,達(dá)到降維處理和提取特征的目的。當(dāng)輸入彩色圖像時,卷積層使用3×3卷積核和長度為1的卷積步長進(jìn)行提取局部特征,提升了決策函數(shù)的區(qū)分性。下采樣層使用池化機(jī)制進(jìn)行采樣,通過池化過濾器對輸入數(shù)據(jù)進(jìn)行降維。全連接層的作用相當(dāng)于“分類器”,每一個結(jié)點與下采樣層進(jìn)行全連接,將卷積和下采樣之后的特征進(jìn)行匯總,得到輸入圖像的特征向量。
VGG16網(wǎng)絡(luò)模型包含13個卷積層,5個池化層和3個全連接層,具有層數(shù)更深更寬和卷積核更小結(jié)構(gòu)兩個特點,在圖像分類領(lǐng)域表現(xiàn)出了較好的準(zhǔn)確率和召回率。然而,VGG16網(wǎng)絡(luò)模型訓(xùn)練準(zhǔn)則是針對圖像分類任務(wù)設(shè)計的,直接用于圖像檢索任務(wù)難以取得好的效果。
LSH算法的基本思想是定義一系列Hash函數(shù)h1,h2,…,hn,隨機(jī)選取k個函數(shù)構(gòu)成函數(shù)族g(x),即g(x)=[h1(x),h2(x),…,hk(x)]。通過構(gòu)造L個函數(shù)族g1(x),g2(x),…,gL(x),將每個函數(shù)對應(yīng)一個哈希表,即利用哈希函數(shù)族gj(x)將高維空間中的每個點x存入哈希表的哈希桶中。LSH算法使高維空間中相似的點出現(xiàn)在同一個桶中的概率大,不相似的點出現(xiàn)在同一個桶中的概率小,其索引結(jié)構(gòu)如圖1所示。
圖1 LSH算法索引結(jié)構(gòu)
對于任意高維空間的兩個點p,q,應(yīng)滿足以下兩個條件。
1)若D(p,q)
即在高維空間中兩點的距離小于r1,則哈希函數(shù)值相等的概率大于p1。其中,D(·)表示高維空間中p,q兩點之間的距離,P(·)表示概率函數(shù)。
2)若D(p,q)>r2,則P[hi(p)=hi(q)] LSH算法將d維空間Hd中的點映射到d′維海明空間Hd′中,映射具有保距性,因此,?p,q,DHd(p,q)=DHd′(p,q)。 基于卷積神經(jīng)網(wǎng)絡(luò)和LSH的圖像檢索算法框架主要包括特征提取和特征檢索兩個部分,如圖2所示。在特征提取階段,先從互聯(lián)網(wǎng)上爬取大量圖片,將其進(jìn)行存儲生成圖像庫。然后,利用改進(jìn)的VGG16網(wǎng)絡(luò)進(jìn)行圖像特征學(xué)習(xí),得到圖像特征向量。在特征檢索階段,利用哈希函數(shù)將高維特征向量進(jìn)行降維,將語義相似的圖像特征向量映射到同一個哈希桶中,在同一個哈希桶中實現(xiàn)圖像檢索。 圖2 算法框架 傳統(tǒng)的深度學(xué)習(xí)需要大量的訓(xùn)練樣本才能保證參數(shù)的可用性。然而,在實際應(yīng)用中樣本數(shù)量有限,獲取大量獨立同分布的樣本具有一定的難度。為了解決實際問題,提高訓(xùn)練參數(shù)收斂速度,在VGG16網(wǎng)絡(luò)模型的基礎(chǔ)上,采用大型數(shù)據(jù)集ImageNet對網(wǎng)絡(luò)中的隨機(jī)初始化參數(shù)進(jìn)行訓(xùn)練,保存最終得到參數(shù)的權(quán)重值,將權(quán)重值作為VGG16網(wǎng)絡(luò)的初始化參數(shù)。在提取圖像庫中圖像的特征值時,對初始化參數(shù)進(jìn)行微調(diào),并去除VGG16網(wǎng)絡(luò)中的全連接層,采用哈希層代替全連接層,實現(xiàn)特征檢索。 改進(jìn)的VGG16網(wǎng)絡(luò)模型由13個卷積層、5個池化層和1個哈希層組成。輸入的圖片數(shù)據(jù)大小為224×224,初始卷積核的大小為3×3,步幅大小為1,有效填充大小為1,池化層采用2×2的最大池化函數(shù)Maxpooling。 卷積過程為:1)使用兩次64個卷積核的卷積后,進(jìn)行第1次Maxpooling;2)經(jīng)過兩次128個卷積核的卷積后,進(jìn)行第2次Maxpooling;3)經(jīng)過3次256個卷積核的卷積后,執(zhí)行第3次Maxpooling;4)重復(fù)兩次3個512個卷積核卷積后,進(jìn)行最后一次Maxpooling。Maxpooling之后不進(jìn)入全連接層,而是輸出圖像特征向量進(jìn)入哈希層。去掉VGG16全連接層的原因在于卷積層提取的是局部特征,而全連接層通過權(quán)值矩陣將局部特征全部組裝在一起進(jìn)行圖像的分類識別,全連接層之前的所有卷積層的工作任務(wù)就是提取圖像特征。對于圖像檢索,不需要全連接層特征數(shù)據(jù),并且全連接層產(chǎn)生參數(shù)多,計算量大,影響檢索效率。改進(jìn)的VGG16網(wǎng)絡(luò)模型如圖3所示。 圖3 改進(jìn)的VGG16網(wǎng)絡(luò)模型 利用局部敏感哈希算法將高維空間中的數(shù)據(jù)點進(jìn)行降維,使得在高維空間中距離近的點經(jīng)降維后距離仍然近??紤]到傳統(tǒng)LSH算法將圖像特征映射到低維的海明空間內(nèi),計算海明距離時需要進(jìn)行歐式距離與海明距離之間的距離換算,容易產(chǎn)生換算誤差,因此,將采用基于p-穩(wěn)定分布的LSH,直接計算歐式距離,并在保證度量距離的同時,對特征向量有效降維。 柯西分布是1-穩(wěn)定分布,其密度函數(shù)為 高斯分布是2-穩(wěn)定分布,其密度函數(shù)為 利用p-穩(wěn)定分布可以近似描述高維特征向量,并對特征向量進(jìn)行有效降維且保證向量之間度量距離的不變性。 定義哈希函數(shù) (1) 式中:a為隨機(jī)選擇的滿足p-穩(wěn)定分布的d維向量;向量a與向量v的點積a·v將每個向量映射到直線上;b為[0,r]范圍均勻分布的一個隨機(jī)數(shù);r為直線上分段的段長。哈希函數(shù)將一條直線分成等長為r的若干段,給映射到同一段的點賦予相同的哈希值,映射到不同段的點賦予不同的哈希值。 假設(shè)v1和v2為兩個圖像特征向量,定義v1和v2之間的距離c=‖v1-v2‖p,(a·v1-a·v2)與‖v1-v2‖pX同分布,則v1和v2的碰撞概率為 (2) 式中,fp(·)為p-穩(wěn)定分布概率密度。當(dāng)直線上分段的段長r固定時,碰撞概率會隨著向量之間距離c的減小而增大。當(dāng)原始空間中兩張圖像較為相似時,則向量距離較小,映射以后距離也較小,因此哈希函數(shù)可以保持位置敏感性。 為了避免單個哈希函數(shù)帶來的隨機(jī)性誤差,定義哈希函數(shù)族gi(v)=[h1(v),…,hk(v)],其中,hi(v)為滿足p-穩(wěn)定分布的隨機(jī)哈希函數(shù)。每個向量v∈d經(jīng)過函數(shù)g映射后,得到一個k維向量σ=(σ1,σ2,…,σk),其哈希映射h1和h2分別表示為 (3) (4) 基于卷積神經(jīng)網(wǎng)絡(luò)和LSH的圖像檢索算法的具體步驟如下。 步驟1對圖片庫中的每一張圖像經(jīng)過改進(jìn)的VGG16網(wǎng)絡(luò)模型計算特征向量。即對ImageNet數(shù)據(jù)集訓(xùn)練改進(jìn)的VGG16網(wǎng)絡(luò),用訓(xùn)練后得到的參數(shù)對網(wǎng)絡(luò)進(jìn)行初始化,使用改進(jìn)的VGG16網(wǎng)絡(luò)模型提取圖像數(shù)據(jù)庫中各圖像的特征向量,得到w個25 088維特征向量,w為圖像庫中的圖像數(shù)量。 步驟2構(gòu)造哈希函數(shù)族。構(gòu)造L個哈希函數(shù)族gi(v),每個函數(shù)對應(yīng)k個隨機(jī)從式(1)中選取的哈希函數(shù)組成。函數(shù)格式為gi(v)=[h1(v),h2(v),…,hk(v)],每個圖像特征向量經(jīng)過gi(v)變換之后變成k維向量(σ1,σ2,…,σk),形成降維后的w×k維矩陣。 步驟3直接將(σ1,σ2,…,σk)放入哈希表中不利于查找,利用式(3)和式(4)中兩個哈希映射h1和h2產(chǎn)生兩個函數(shù)值,其中:h1是哈希表的索引值,指向哈希表的某個索引處;h2是h1指向的索引處的桶號。每個數(shù)據(jù)點經(jīng)過以上過程后,h1和h2相同的數(shù)據(jù)點會被存入同一個哈希桶中。 步驟4對待檢索圖片提取特征并根據(jù)哈希函數(shù)計算哈希碼,將其映射到哈希桶中,同一個哈希桶中的圖像為粗檢候選集,在候選集中利用歐式距離計算特征向量相似度,返回排名靠前的圖像則為檢索結(jié)果。 建立一個圖像檢索系統(tǒng),通過爬蟲程序在互聯(lián)網(wǎng)上收集獲取25 000張圖像并進(jìn)行整理,得到圖像數(shù)據(jù)庫,對圖像數(shù)據(jù)庫中的數(shù)據(jù)集進(jìn)行手動標(biāo)注,共12個標(biāo)簽。將數(shù)據(jù)集中數(shù)據(jù)進(jìn)行旋轉(zhuǎn)、裁剪、縮放、平移變換、圖像亮度及對比度增強等預(yù)處理,所有圖像的像素均為224×224,按4∶1將原始數(shù)據(jù)集劃分為訓(xùn)練集及測試集,形成完備的數(shù)據(jù)集。通過圖像數(shù)據(jù)庫構(gòu)建,可提升檢索模型的泛化能力,有利于提高檢索算法的魯棒性。同時,爬蟲爬取圖像數(shù)據(jù)集還可定期對數(shù)據(jù)集進(jìn)行數(shù)據(jù)增廣,提高檢索的實用性。 在Windows 10操作系統(tǒng)、I5-5257U中央處理器、8 G內(nèi)存和500 G硬盤環(huán)境下,采用TensorFlow深度學(xué)習(xí)框架和Python編程語言進(jìn)行實驗。實驗中確定參數(shù)L和k的取值分別為L=10,k=20。 分別對比基于LSH算法、普哈希[15](Spectral Hashing,SH)、監(jiān)督離散哈希[16](Supervised Discrete Hashing,SDH)、深度哈希[17](deep Convolutional Neural networks Hash,CNNH)和核監(jiān)督哈希[18]( Kernel-Based Supervised Hashing,KSH)算法的圖像檢索算法的準(zhǔn)確率和訓(xùn)練時間,如表1所示。 表1 不同哈希算法的圖像檢索算法的準(zhǔn)確率和訓(xùn)練時間對比 由表1可知,基于LSH算法的圖像檢索算法并非具有最高的準(zhǔn)確率,隨機(jī)哈希函數(shù)的選擇帶來了準(zhǔn)確率在有限范圍內(nèi)的下降。但與基于其他哈希算法的圖像檢索算法相比,檢索時間縮短了。這是因為LSH算法不需要將數(shù)據(jù)分成特定的數(shù)據(jù)對進(jìn)行數(shù)據(jù)學(xué)習(xí),并且通過哈希函數(shù)將相似特征的圖像映射到鄰近的哈希桶中,算法時間復(fù)雜度是O(log(n)),在圖像規(guī)模顯著增加的前提下,檢索準(zhǔn)確率穩(wěn)定,因此適用于大規(guī)模、對準(zhǔn)確度要求不苛刻的圖像檢索問題。 基于不同哈希算法的圖像檢索算法的檢索結(jié)果如圖4所示。可以看出,基于LSH算法,即所提算法在8幅結(jié)果中全部為查詢圖像的相似圖像,CNNH有8幅、SDH有7幅、KSH有6幅,而SH只有3幅。由此可見,所提算法具有較為準(zhǔn)確的檢索結(jié)果。 圖4 基于不同哈希算法的圖像檢索算法檢索結(jié)果 基于卷積神經(jīng)網(wǎng)絡(luò)和LSH的圖像檢索算法,通過爬蟲程序獲得網(wǎng)絡(luò)上的真實圖像,形成圖像數(shù)據(jù)庫,利用ImageNet圖像對VGG16網(wǎng)絡(luò)進(jìn)行訓(xùn)練,獲得網(wǎng)絡(luò)初始化參數(shù),并對VGG16網(wǎng)絡(luò)進(jìn)行改進(jìn),將哈希層代替全連接層。利用滿足p-穩(wěn)定分布的位置敏感哈希函數(shù)對高維空間中的數(shù)據(jù)點進(jìn)行降維,將相似圖像映射到同一個哈希桶中作為粗檢候選集,計算并排序粗選候選集中特征向量歐氏距離完成圖像檢索,得到最終的檢索結(jié)果。實驗結(jié)果表明,相比其他基于不同哈希算法的圖像檢索算法,所提算法具有較高的準(zhǔn)確率和較快的檢索速度,適用于大規(guī)模、對準(zhǔn)確度要求不苛刻的圖像檢索問題。2 圖像檢索算法
2.1 改進(jìn)的VGG16網(wǎng)絡(luò)模型
2.2 哈希函數(shù)構(gòu)建
2.3 圖像檢索算法的步驟
3 實驗結(jié)果分析
3.1 數(shù)據(jù)獲取
3.2 不同哈希算法的圖像檢索對比
4 結(jié)語