在Web2.0的時代下,影像、視頻等各類異構資料每天都在以驚人的速度增長,如何在茫茫圖庫中方便、快速、準確地找到所需影像?你是否還在為如何檢索到真正想要獲取的影像的關鍵字而苦苦煩惱?你是否發現目前基于文本描述的影像搜索結果在大規模影像中結果往往差強人意?
追根溯源,這是由于基于文本的影像檢索在外來的影像入庫時離不開人工的干預,文本描述的特征依賴于人工標注的介入,導致圖庫受到標注者的認知水平、言語使用以及主觀判斷等的影響,造成影像的文字描述存在差異,同時,標注費時費力,這類方法并不適用于海量影像庫的檢索,
背景介紹
針對這一系列問題,基于內容的影像檢索(CBIR,Content Based Image Retrieval)充分發揮了計算機擅長于處理重復任務的優勢,它能夠根據用戶給定的查詢影像,提取有效影像視覺特征,衡量影像之間的相似性,并從一個大規模資料庫中快速找到與給定影像內容相關或相似的影像,并按相關的排序回傳給用戶,將人們從耗費大量人力、物力和財力的人工標注中解放出來,
目前,基于內容的影像檢索技術已經深入到了許許多多的領域,在電子商務、皮革布料、著作權保護、醫療診斷、公共安全、街景地圖等工業領域得以成功應用,為人們的生活生產提供了極大的便利,
本文從影像檢索流程出發,結合網易易盾團隊在數字風控“內容安全”中的實踐經驗,介紹構建基于內容的影像檢索系統所涉及的一些典型演算法,
檢索系統的搭建
一個典型的基于內容的影像檢索基本框架如圖1所示,整個框架分為2大部分:offline離線部分以及online在線部分,
offline部分主要包括了檢索影像庫、特征提取、特征庫以及檢索結構,
檢索影像庫:一個用于存放待查詢的影像資料庫,在實際專案中,這個檢索影像庫是一個動態變化的影像資料庫,
特征提取:影像特征的表達能力即利用計算機提取影像中屬于特征性的資訊的方法及程序,影像的任何統計量都可以作為影像的特征,哪怕是影像本身的像素資訊,在實際專案中,我們通常使用如顏色、結構等傳統視覺特征和基于深度學習的底層/中層/高層語意特征作為影像特征,
特征庫:用于存放需要查詢的影像庫中提取的影像特征,
構建索引結構:這一步驟的目的就是對高維度特征的檢索性能進行優化,雖然直接采用暴力檢索一一比對這樣的方法檢索的精度是最高的,但代價是檢索的時間也是最長的,為了在檢索精度和檢索速度之間找到一個平衡點,因此常見的方法有查找優化以及向量優化,在實際業務中,也常常采用兩種方式相結合的方法,
online部分主要是完成對query影像的特征提取操作,在這一步操作中,值得注意的是,特征提取方法需要和offline中相保持一致,
圖1 | 基于內容的影像檢索基本框架
從上圖可以看出,影像特征提取是整個檢索系統的基礎,檢索結構的設定是整個檢索系統性能的關鍵,下面就對這兩部分進行詳細介紹,
01 特征提取
從圖1可以清晰地看出,檢索系統的性能在很大程度上依賴于特征提取方法,理想情況下,特征提取方法應具有識別能力強、魯棒性好、特征維度低三個特點,圖2給出了特征提取演算法在魯棒性方面的示例效果,
圖2 | 特征提取演算法在魯棒性方面的示例效果
但在實際情況下,由于計算機所“看到”的影像像素層面表達的低層次資訊與人所理解的影像多維度高層次資訊內容之間有很大的差距,因此如何準確、高效、精準地提取影像特征是我們所要做的作業,從提取的方式上來看特征提取演算法,大致可以分為(1)基于手工設計的傳統視覺特征;(2)基于CNN(卷積神經網路)的深度視覺特征這兩類,如圖3所示,
圖3 | 特征提取方法
1.1 基于手工設計的傳統視覺特征
傳統的視覺特征在發展早期主要是利用顏色、紋理、形狀、結構特征等全域特征,這些特征計算簡單、表示直觀,但這些特征往往因維度較高使得其計算量較大,同時這些全域影像特征易受影像中的光照條件、位移、遮擋、截斷等因素影響,隨后更細致的區域特征描述逐步出現,例如經典的SIFT(ScaleInvariant Feature Transform)、SURF、ORB、BRISK等,這類演算法相對簡單,無需學習與訓練,僅需簡單計算與統計,也有較好的穩定性,對旋轉、尺度縮放、亮度變化有較好的穩定性,不易受視角變化、仿射變換、噪聲的干擾[1],但由于這類特征極大程度上依賴于人為的設計,因此有時候并不能準確地表征影像特征,進而對檢索性能造成一定影響,
1.2 基于CNN(卷積神經網路)的深度視覺特征
由于手工設計的傳統視覺特征其表示能力有限,檢索性能也往往面臨很大的局限性,2014年后,以卷積神經網路為代表的深度學習逐漸替代了傳統手工特征的檢測與描述方法,各類CNN模型層出不窮,如AlexNet、VGGNet、GoogleNet、RetinaNet、ResNet等,神經網路的深層級具有較強語意資訊;淺層級特征中保存了包含影像邊緣、紋理、顏色等資訊,這類方法主要分為:(1)Pre-trained CNN model;(2)Finetuned CNN model;(3)Hybrid CNN-based method[2],
方法一:Pre-trained CNN model
在Pre-trained CNN model中,常見的做法有2種:
(1)直接使用全連接層作為全域特征描述作為單張影像的特征,這是一種最直接,也是最簡單快捷方便的想法,首先FC層的輸出可以看成是一種天然的向量形式,因此可以直接作為影像的特征向量,其次,FC層的輸出實際上是對影像整體語意的表示,具有全域表示性,因此可以被視作是一種影像的全域特征,通過實驗也表明其在能產生較好的檢索精度,若使用指數歸一化也可提高檢索精度,
(2)使用卷積層特征作為單張影像的特征,由于FC層本質上是其中的每一個神經元都和前一層所有神經元相連接,這使得提取的特征在一定程度上丟失了空間資訊,同時對于如裁剪、遮擋等變換的魯棒性也會降低,而卷積層由于其僅僅與輸入的feature map中的區域區域相關聯,確保了提取的特征中包含了更多的區域特征,魯棒性更強,因此提出了使用卷積層代替全連接層,實驗表明從不同層提取的特征表現出不同的檢索性能,高層網路的泛化能力要低于較低層的網路,
這類方法通常是使用一個現成開源分類識別模型作為一個特征提取器,這些開源模型通常會在ImageNet上這類資料集較大的資料上進行訓練,而當實際業務資料與ImageNet資料分布差異過大時,模型提取的特征不一定非常適合影像檢索任務,因此,源域和目標域之間的重疊程度在檢索中起著至關重要的作用,
方法二:Finetuned CNN model
為了使模型具有更高的可擴展性和更有效的檢索,可以采用finetuned CNN model的方法,根據具體場景的特點大致可以分為如下2種方法:(1)監督學習方法;(2)無監督學習方法,
(1)基于有監督學習finetune模型
當有足夠的充足的有標簽業務資料時,基于有監督學習的方法來進行finetune模型是一個不錯的選擇,圖4給出了方法的部分示例網路結構,這類方法主要分為2種[3]:
一是,基于純分類模型進行finetune,這類方法的思想很簡單,即在新的資料上對分類模型進行重新訓練,這類方法雖然在一定程度上拉近了源域和目標域之間的距離,但這類方法存在一個問題:對于學習區分特定物體的類內之間的差異能力不強,
二是,基于分類+度量學習(metric learning)進行finetune,這類方法是在上述方法上進行了改進,通過引入度量學習旨在學習一種低維空間,在這個空間內將同類樣本之間的距離拉近,異類樣本之間的距離拉遠,這種方法既關注了類間樣本,也關注了類內樣本,這類方法從網路結構的形式上大致可以分為基于Siamese網路[4]和基于triplet networks[5]網路,兩者最大的區別就在于輸入影像對的組成情況,前者輸入影像是由正或負樣對組成,如圖4(b)、(c)所示,后者則是anchor影像與相似和不相似的樣本配對,如圖4(d)、(e)、(f)所示,
圖4 | 基于有監督學習finetune模型
(2)基于無監督學習finetune模型
但在實際業務中,千萬級資料的標注任務就顯得不現實,既費時又費力,同時成本高,基于上述種種限制,基于無監督學習的方法應運而生,該方向目前存在以下2個主要的分支:
分支一,流形學習(Manifold learning)+度量學習,這類方法[6]主要是通過流形學習來挖掘影像在流形空間上的相似性,進而選擇相對應的正負樣本進行度量學習,這類方法與前述基于分類+度量學習進行finetune方法最大的不同就在于,該方法的正負樣本選擇是通過流形學習,而非根據給定的有監督的標簽資訊,
分支二,基于AutoEncoder的無監督框架,這類方法[7]利用輸入影像本身作為輸出結果標簽,通過編碼器對輸入圖片進行編碼,然后利用解碼器將編碼后的特征盡可能重建原始輸入影像,在提取影像特征時,只需要將影像輸入編碼器即可,另外由于編碼器輸出的特征維度往往較低,這也達到一個降維的效果,這類方法本質上是通過一種非線性的變換函式完成特征提取,
方法三:Hybrid CNN-based method
前面的2種方法都只將影像輸入到網路中一次來獲取描述符,目前也有一些是將影像多次輸入到網路中,基于區域表示聚合的方法先設法從輸入影像中提取一系列的區域區域,之后分別將這些區域區域前饋網路生成對應的區域表示,最后通過特定編碼方法將這些區域表示聚合為最終表示,這類方法的弊端在于需要前饋網路多次,
02 特征增強
在檢索程序中,影像特征的表達能力在一定程度上決定檢索性能的優劣,因此在提取特征影像特征后,往往為了獲得更強可辨識性的特征,通常會采用影像聚合、嵌入映射、特征融合的方式,
2.1 特征聚合
當提取的特征是從卷積層輸出時,通常獲得一個H*W*C的特征,利用池化(pooling)操作可以在某種程度上實作特征的聚合,從而提高特征的表達能力,sum/average pooling和max pooling是兩種常用的特征聚合手段(如圖7中的MAC方法),sum/average pooling 考慮了卷積層的所有激活輸出,削弱了高度激活特征的影響,而max pooling特別適用于稀疏特征,這兩種聚合特征可以認為是當前feature map的全域特征,除上述方法之外,在pooling操作之前引入其他的一些操作,如構建Spatial權重和Channel權重(CroW方法[8])、對feature map某一塊區域進行pooling操作(R-MAC[9])等方式提高感興趣區域特征資訊或引入區域特征資訊來提高特征的表達能力,
圖5 | 特征聚合
2.2 嵌入映射
除上述操作之外,還可以將特征嵌入到高維空間中以獲得緊湊的特征,尤其是當提取的特征為區域特征(如SIFT)時,我們就需要對區域特征進行聚合,作為影像的全域表示,目前常見的方法有VLAD[10]、BoW[11]、FisherVector(FV)[12]等等,
2.3 特征融合
發展至今,特征融合的方法多種多樣,主要可以分為以下兩種:(1)單模型層級融合;(2)模型級融合,
在單模型層級融合中,考慮到同一個模型的不同feature map所關注的影像特征不同,融合不同層的特征可以充分利用高層語意特征和低層細節特征,這樣可以在度量語意相似度時進行相互補充,在一定程度上保證了檢索的性能,
眾所周知,在相同資料集上對不同模型進行訓練,模型的特征提取能力不盡相同,既然如此,如果可以找到一種方式來充分發揮各個模型之間的優勢,是不是有利于提高檢索的性能?毋庸置疑,答案是肯定,
對于這兩種融合策略,關鍵問題是什么特征是最好的組合?在現有的深度模型的基礎上,已經對回答這個問題進行了一些探索[13][14],
除深度特征之間融合之外,我們在實際業務中嘗試發現將CNN特征與傳統的特征相互補充,相輔相成,也可以實作更為精準、更為全面的影像檢索特征,
上述三大類特征增強的方法,每種方式的側重點不同,因此具體使用哪一種或哪幾種方法視每個業務的情況而定,
03 構建結構索引
影響整個檢索系統性能除影像的特征表達能力之外就是檢索程序了,整個檢索程序中最核心的是計算兩個特征向量之間的相似性后進行排序,獲得查詢結果,這時候能想到最簡單粗暴方法就是暴力(brute-force)搜索方法:通過與查詢庫中特征向量對標,一一計算相似性并排序,這種方法實作起來相對容易、檢索精度高,但在大規模影像庫上,這種搜索的方式并不友好,主要存在如下問題:
一是,記憶體占用過大:雖然提取的特征已經比直接保存影像小了很多,但當資料量仍然龐大,這些向量的存盤成為一個大問題,
二是,回應時間過長:消耗巨大的計算資源,且單次查詢的回應時間會隨樣本數目N成線性增長,
因此,為了在實際業務中落地,就必須在盡可能保持搜索精度的前提下,降低搜索空間的空間復雜度與時間復雜度,通常采用構建索引的方法將暴力匹配(精確搜索)轉化為近似搜索來近一步提升搜索速度、節省記憶體占用空間,業內也提出了不少檢索演算法,雖然應對不同資料維度和分布有不同演算法,其核心思想可歸為3大類:
(1)空間劃分法,這類方法的核心是將檢索的資料集所在的特征空間分成多個子空間,把“挨得近”的資料點放在同一個子空間中,這樣在檢索時可以快速定位到這些子空間,減少需掃描的資料量的個數,提高檢索的速度,常用的演算法有KD-Tree[15]、聚類檢索等,但這類演算法對于高維特征,如維度達到幾百時,這類演算法的性能會急劇下降,
(2)空間編碼和轉換法,這類演算法可以看作是一種對特征的編碼操作,實作將高維空間資料映射到低維空間,實作資料的壓縮,進而減少掃描的資料點的計算量,ProductQuantization(PQ)演算法[16]就是其中一個典型代表,
(3)鄰居圖法,以HNSW[17]為代表,這類演算法有一個重要的前提:認為鄰居的鄰居仍為鄰居,整個演算法核心是基于圖結構完成整個檢索,首先根據特征庫中所有特征預先構建一張關系圖,檢索時直接在關系圖上進行游走遍歷,最侄訓得檢索結果,這類方法速度快、精度高,但臨界點存盤浪費記憶體,增加存盤空間的開銷,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/432025.html
標籤:其他
