蘇勇剛,高茂庭
1(常州工業職業技術學院,常州 213164)
2(上海海事大學,上海 201306)
隨著大數據時代的到來,龐大數據集的圖像檢索已經廣泛應用于計算機視覺[1]和人工智能[2]等先進領域.如何從這個大數據庫的數字資源中快速檢索到用戶需要的圖像信息和提高圖像檢索效率,就成為了計算機視覺一個亟待解決的問題.
在圖像庫中,查找具有包含指定內容或特征圖像的這個過程,定義為圖像檢索.其中圖像之間的相似度值高低對一個圖像檢索算法的性能起著至關重要的作用.目前的圖像檢索方法分為早期的監督圖像檢索和無監督圖像檢索方法.監督圖像檢索方法中使用的圖像是人工標記的,而無監督圖像檢索所使用的是基于深度特征的.在計算機視覺領域,起初的圖像檢索是根據圖像的低級特征(人工特征)來檢索,比如SIFT[3]、Bow[4]和VLAD[5],作為特征提取的主流算法,取得了一定的成效,但其效果仍然不能令人滿意.傳統圖像檢索效果不佳的原因是低級特征無法表達圖像的內容,所以圖像檢索的深度特征逐漸取代低級特征,目前神經網絡提取深度特征能力得到廣大科研人員的認可.
隨著機器學習的迅猛發展,圖像檢索領域運用了卷積神經網絡模型,代表性的模型有Alex Net[6]和VGG-Net[7]等.CNN 模型大多數都被用來確定每一目標的位置和類別.比如CNN 學習SIFT 特征[8]和深度特征,利用學習來的圖像特征來做目標檢測,成功應用于藝術品的圖像分類.但是,CNN 算法存在一些弊端,例如邊緣和位置信息容易被忽視.對此,文獻[9]提出了對卷積層的卷積特征提取與加權的解決思路,從而使得包含邊緣和位置信息的元素被賦予更大的權重.同時CNN 算法還存在不能適用于不同尺寸的圖像問題,文獻[10]對此改進CNN 算法即在卷積層和全連接層中加了SPP (Spatial Pyramid Pooling)層,這樣在不同規格尺寸的圖像下進行學習以及生成多種尺度大小的特征.其實最主要的問題在于,當深度學習生成的高維圖像特征較多時,就會造成維災難問題.同時社交媒體時代的快速發展,網絡圖像數量的爆炸式增長大,給大規模圖像檢索帶了巨大挑戰.若使用常規的檢索算法,檢索效率會受到極大限制.
針對傳統圖像檢索的檢索效率低、圖像內容無法準確表達和高維圖像特征的維災難等問題和借鑒深度學習網絡的優點,提出一種基于深度學習的SIFT 圖像檢索算法,對CNN 的卷積層的選擇框構造圖像金字塔、池化層融合了SIFT 算法,來保證圖像的位置特征不丟失,再利用Spark[11]大數據平臺的SVM 對圖像庫進行無監督聚類,然后再利用自適應的圖像特征度量來對檢索結果進行重排序,以改善用戶體驗.
卷積神經網絡(CNN)包含以下幾種層:
卷積層(convolutional layer),由多個卷積單元構成,但只能提取低級的特征.
矩陣卷積:計算圖像的特征,其中有兩種方法:全卷積和有效值卷積.
全卷層的計算如式(1)所示為:

其中,Xi,j是圖像特征,Ku-i,v-j卷積核,z(u,v)是圖像卷積特征.
假設X是m×m階,K是n×n階矩陣,Krot是由K旋轉1800得到,有效值卷積的計算如式(2)、式(3)為:

其中,X(i,j)為1 表示Xi,j有效卷積特征,若為0 則表示無效卷積特征.
池化層(pooling layer),在上面的幾層特征提取和運算后,會產生維度很大的特征,將特征切成幾個區域,取其最大值或平均值,得到新的、維度較小的特征,其計算如式(4):

其中,input_height,input_width分別是池化特征矩陣的高度和寬度,filter_height,filter_width分別是自定義的過濾矩陣的高度和寬度,new_height,new_width分別是新特征矩陣的高度和寬度.
注意:池化層的輸出深度與輸入的深度相同.另外池化操作是分別應用到每一個深度切片層,如圖1所示.

圖1 池化過程演示
全連接層(fully-connected layer),把全部的局部特征聯系在一起,然后生成全局特征,最終用來計算最后每一類的得分,如圖2所示.

圖2 全連接示意

其中,(X1,X2,X3) 是輸入神經元,而(Y1,Y2)是輸出神經元,兩層之間的連接就是卷積核:
相似性度量極大關乎一個算法的性能,其方法一般分為特征度量、CNN 特征度量和距離度量.
1.2.1 圖像特征度量
圖像特征度量是指通過圖像的顏色、位置和形狀等特征來衡量它們的相似性.
顏色特征:即圖像區域的平均色代表.為了方便顏色相似度的計算,將色度坐標(色調h,飽和度s,亮度v)統一轉換為柱坐標系下的歐式空間坐標(c1,c2,c3)表示,如式(5)所示.


式(6)中,W和H分別代表圖像的寬度和高度.
形狀特征:主要包括形狀大小ρ 和偏心率e.e是圖像最適橢圓的短、長軸之比;ρ是目標面積占圖像總面積的百分比.
綜合考慮顏色、位置和形狀等多個特征,圖像i的特征用矢量表示為采用高斯函數計算圖像相似度,在計算圖像i和圖像j之間的特征相似度中分別需要用到顏色特征方差 σ1、位置特征方差 σ2、形狀特征方差σ3.
顏色相似度計算如式(7)所示.

位置相似度計算如式(8)所示.

形狀相似度計算如式(9)所示.

式(9)中,wρ和we分別為形狀大小和偏心率的加權系數,wρ+we=1.
上述圖像歸一化的圖像特征D越接近1,兩個圖像越相似,D越接近0,兩個圖像越不相似.
綜合多個特征的圖像相似度是各特征間相似度的加權平均,設w1、w2和w3分別表示顏色特征、位置特征和形狀特征的加權系數,w1+w2+w3=1,兩幅圖像i與j之間的多特征相似度計算如式(10)所示.

利用用戶對返回結果集的反饋,提出一種自適應的特征權值調整,依據返回結果集的主特征來增強該特征,在每次檢索時,每次檢索后加強結果圖像的主特征的加權系數,從而可以使特征相關程度較大的圖像排在較前的位置,以改善與用戶交互體驗.即當用戶檢索完,若所選擇圖像和查詢圖像間相似度最高的特征為特征i,則增大特征i的加權系數來加強該特征,同時減小其它特征j(j≠i)的加權系數以減弱其它特征,權值調整具體計算如式(11)所示.

式(11)中,N為圖像庫中圖像的總數.
而傳統的距離度量方法因為要滿足距離的條件,所以會在原來的模型上加以另外的限制條件,增加了模型的復雜度.同時對于很多傳統的距離度量方法,因為有距離的概念,在樣本擾動一點,其距離相差不大,難以區分不同類的圖像[12].
文獻[13] 圖像檢索領域的雙線性相似性度量(Bilinear Similary Measure,BSM),克服了距離度量的缺陷.它是由成對的相似性函數S 是算法學習得到的,S 函數公式如式(12)所示.

其中,pi、pj是兩個樣本圖片的特征向量,W是本文要學習的矩陣.
SIFT 算法主要應用于圖像檢索工作,大致流程:先按照某種規則生成尺度空間,在尺度空間檢測圖像位置來剔除尺度和旋轉變化大的興趣點,然后選取穩定的興趣點作為關鍵點同時也為分配一個方向或多個方向,最后利用關鍵點的鄰域向量來度量圖像的相似程度.SIFT 算法優勢在于圖像縮放、旋轉和亮度變化保持不變性.
SIFT 算法的處理過程一般分為以下幾步:
第1 步.生成尺度空間.
第2 步.在尺度空間檢測并精確定位極值點.
第3 步.設定關鍵點方向參數,并生成其的描述子.
第4 步.最后通過SIFT 特征向量來計算圖片之間的相似度.
下面以一個實例SIFT 算法,設有兩幅大小不一的紅花a 和紅花b 圖像,如圖3所示.

圖3 SIFT 算法的圖解過程
開始先進行SIFT 特征提取,在尺度空間中檢測出描述子,然后將不同方向的描述子映射相對應方向的局部子直方圖,最后計算直方圖的相似度.若相似度系數越接近0,則表示兩幅圖像越相似.
根據上述SIFT 算法的圖像相似度的計算過程,分析了SIFT 算法的缺陷:(1)大數據時代下的圖像庫數量爆炸式增長,SIFT 算法的檢索效率也隨之急劇下降;(2) SIFT 特征比較粗糙和單一.為此,本文提出基于深度學習的SIFT 圖像檢索算法(SIFT Image Retrieval Algorithm based on Deep Learning).
本文算法通過CNN 和SIFT 特征相似度度量來提高相似度的精度,并采用基于內存計算的并行計算框架Spark 和SVM算法對原始圖像庫進行分類來縮小檢索范圍,從而大大提升算法的效率并自適應改善圖像檢索結果的排序,其處理過程總共5 步,流程圖如圖4.

圖4 本文算法流程圖
第1 步:統一提取原始圖像庫的CNN、SIFT 特征;
第2 步:通過Spark 的MLlib 庫中的SVM 來訓練圖像特征這些數據分類,同時計算出每個圖像庫類別的均值CNN、SIFT 特征;

其中,C,N分別是圖像CNN 特征、SIFT 特征.
第3 步:建立訓練、測試數據集并訓練優化CNN網絡(如圖5所示):依次是卷積層、池化層、激活層、全連接層、全連接層、分類層;其中,為便于建模,對圖像進行分塊(如圖6所示),輸入圖像為32×32,70%數據為訓練集,15%數據校驗集,15%數據測試集,通過動量法動態調整學習率的訓練、校驗和測試,卷積層、池化層、激活層和全連接層的參數都得到優化調整,最終本文神經網絡實現了分類的最優化效果.本文的目標函數如式(14)所示:

其中,Fi,j是圖像特征,a是學習率,P(a,b)為均方差損失函數,用以訓練本文神經網絡模型.

圖5 本文卷積神經網絡框架

圖6 圖像分塊的原圖和CNN 特征
第4 步:檢索圖像時,先設定圖像相似度度量的閾值,然后比較進行待查詢圖像特征與每一類庫索引特征的相似性度量來確定類別庫,再從類庫中產生一些符合查詢條件的候選結果,結果排序則是根據圖像SIFT 和CNN 特征相似度的值.

其中,t為閾值,Si,j為圖像i,j之間的相似度量,R為1 時,表示相似;R為0,則表示不相似.
第5 步:在用戶從結果集中挑選出最滿意的圖像之后,再按式(8)對圖像各特征的加權系數進行調整,以便用戶下一次更好的體驗.
在本文算法檢索過程中,先對原始圖像庫圖像特征處理并建立訓練數據,再利用改進的CNN 網絡對圖像特征庫進行訓練,然后在Spark 平臺下由SVM 算法進行分類,將圖像特征庫訓練成若干類圖像特征庫.選出代表類特征庫的索引.檢索的過程中,最先把圖像提取特征與各類庫特征索引比較來確實圖像所在大概某個或某幾個類庫,這樣大大縮小了查找范圍,有效提高圖像檢索效率,如圖7所示.

圖7 基于Spark 平臺訓練圖像庫
本文算法中選用的是Spark 平臺,Spark 計算效率高,主要是因為采用了基于內存計算的并行計算框架,可以處理大數據以及自帶一些經典的機器學習算法,彌補了隨著圖像庫數據增長導致檢索效率下降的劣勢.
本文算法檢索時,先將原始的圖像庫進行圖像CNN、SIFT 特征提取,然后利用Spark 平臺MLlib 庫中的SVM 算法對圖像特征進行分類.分類之后,取每個類圖像庫的均值圖像特征作為索引,用戶檢索時,需提交要查詢的圖像,交由圖像特征提取機制進行特征提取,遞交給搜索機制,讓其根據特征相似度度量的返回查詢結果,同時圖像各視覺特征的加權系數會隨用戶的檢索行為而改變(即圖像相似性度量的原理),從而達到自適應的效果.若提交的圖片不在標準庫中,則算法利用離線方式對圖像CNN 特征進行學習,優化結果集;當再次提交時,系統就會返回用戶滿意的結果.本文算法流程如圖8所示.

圖8 本文算法流程圖
實驗硬件環境:3.5 GHz 主頻的CPU、內存8 GB,軟件開發環境:開發工具PyCharm、開發語言Python,并基于Spark 平臺對原圖像庫進行分類;實驗數據:10 000 幅corel 圖像庫[14]中的圖像,總共分為10 個類別,每類1000 幅,分別為花、巴士、水果、大象、建筑、駿馬、恐龍、人臉、天空和雪山.
3個對照實驗,主要驗證本文算法比傳統SIFT 算法的性能更佳并且對用戶更加友好.實驗1 比較算法查準率;實驗2 驗證在檢索海量數據集時本文算法的時間復雜度比傳統SIFT 算法低;實驗3 驗證本文算法檢索出的圖像結果集排序更合理.
為了評價本文算法的性能,采用圖像檢索領域最基本的評價指標:査全率和均值查準率mAP(mean Average Precision).

式(16)中,A為檢索返回圖像相關的數量,B為目標圖像相關,但未檢索到的數量;m為檢索的次數,R為與目標圖像相關的數量.
實驗1.是本文算法與傳統SIFT 算法、VLAD 算法和BOW 算法對圖像庫中3 類(花、巴士、水果-本文挑選了3 個具有代表性的類別)的查準率,見表1.

表1 傳統算法與本文算法對某類圖像庫的查準率對比
從表1和表2可知,與傳統SIFT 算法、VLAD 算法和BOW 算法相比,本文算法對各類圖像的平均查準率和平均查全率均得到提高,尤其對于傳統的SIFT算法,查準率提高了約30 個百分點及查全率提高了約20 個百分點.因為本文算法提取的圖像特征提取更加精準,所以本文圖像的查準率和查全率優勢明顯.

表2 傳統算法與本文算法對某類圖像庫的查全率對比
實驗2.本文算法與傳統算法、VLAD 算法和BOW 算法在不同數量級的圖像庫時的時間復雜度進行對比,結果詳見圖9.
從圖9可以看出,隨著圖像數目規模增大,傳統SIFT 算法檢索耗時呈指數增長,而BOW 算法、VLAD算法和本文算法檢索耗時增長相對平緩,但從中可以得出本文算法的檢索效率較高.因為本文算法借助大數據Spark 平臺的高效計算和SVM 的高效分類,所以圖像庫數量激增到5000 的時候,本文算法優勢比較明顯.

圖9 本文算法與傳統SIFT 算法運行時間對比
實驗3.本文算法與傳統SIFT 算法的檢索結果集圖像排序的對比,結果詳見圖10.
圖10為檢索黃色花朵圖像時的返回結果集,圖10(c)的傳統SIFT 算法頁面檢索結果中圖像的歐式距離較小的排在首面,唯一的排序因素造成排序結果較不理想,即會影響到用戶的友好體驗;由于本文采用了圖像的自適應特征度量,所以圖10(b)的本文算法檢索圖像排序則依據圖像CNN 學習特征和SIFT 特征的相似度大小來排序,從而檢索圖像的結果集排序更加合理,最終用戶的體驗得到改善.

圖10 兩種算法檢索結果排序
本文提出了一種基于深度學習的SIFT 圖像檢索算法,該算法適用于大容量的圖像數據庫檢索,也方便用戶對檢索結果集篩選,然后利用Spark 平臺MLlib庫中的SVM 算法對圖像特征進行分類.分類之后,取每個類圖像庫的均值圖像CNN 特征作為索引,縮小圖像檢索范圍,再利用特征度量自適應地重構加權系數,不但適用于大規模數據集時的圖像的檢索,而且檢索結果集圖像排序更符合用戶要求.實驗表明本文算法有效地解決了數據集的暴增帶來的圖像檢索效率低下和檢索結果圖像集的不合理圖像先后次序等問題,從而極大地改善用戶體驗.