當你看到一株未曾見過的植物,你可以打開百度APP,拍照搜索,找到相關信息;當你看到朋友穿了一件你特別喜歡的衣服,你也想買一件,你可以通過淘寶APP的拍立淘功能,找到商品;當你到達一個陌生的地方,你可以通過微信APP對著當地的街區或者建筑物拍一張照片,來定位你的詳細位置。這背后都是強大的以圖搜圖技術。
以圖搜圖技術發展了許多年,從早期以圖搜圖的精度不盡如人意,到后來基于以圖搜圖技術開發出非常多的改變用戶行為和提升效率的應用,經歷了不小于10年的發展,整體的技術方案、數據量級、工程架構都進行了多輪的迭代。當前,各個大廠都在基于以圖搜圖技術來提供更好的產品和服務。我們希望在這篇文章中對以圖搜圖技術做一個全面的總結,主要包含以下幾個方面:
1. 以圖搜圖技術的通用框架;
2. 以圖搜圖技術迭代;
3. 以圖搜圖是工程+算法的結合,架構演進。
Part 1. 以圖搜圖技術的通用框架
在這一章,我們來介紹以圖搜圖技術的通用框架。在介紹以圖搜圖技術之前,我們來看任何一個搜索技術所擁有的基本組件。舉個例子,我們需要到圖書館查找一本書,需要幾個基本的要素:1. 圖書館(海量圖書);2. 圖書的分類、書名或者作者(在圖書館的編碼體系下,這些信息的組合能夠唯一表示這一本書);3. 圖書館的書需要按照一定的規律來布置(科目、難易程度、首字母、作者、年份等);在有了這些基本的要素之外,只要圖書館有這本書,我們就能夠快速找到它;或者即便沒有某一本具體的書,我們也能夠查詢到與這本書有著相近內容的書。
結合上面的例子,我們來看一個典型的以圖搜圖系統所擁有的基礎框架:
先來看offline部分,包括3個基本的要素:
01. 檢索圖片庫:這就相當于上一個例子中的圖書,我們需要有一個足夠規模的圖片庫,比如淘寶的所有商品的圖片集合,比如百度圖片搜索中收集到的互聯網圖片數據集合。當然,這里我們介紹的是一個靜態的圖片庫,在實際項目中,我們需要有能力來處理動態變化的圖片數據庫。
02. 特征提?。哼@就相當于上一個例子中圖書的作者、年份、科目等等,我們稱為圖片的特征。實際上,圖片的任何統計量都可以作為圖片的特征,甚至圖像的像素值本身通過歸一化之后也可以作為圖片的特征。在實際中,我們使用圖片的顏色分布、梯度變化統計量、紋理、BOW統計、底層/中層/高層語義特征等作為圖片的特征,非常豐富。
03. 檢索結構:檢索結構的唯一目的就是讓查找更快更準。簡單的,一一對比是最簡單的查詢結構,最準,但是最慢;所以所有檢索結構本質上都是效率和精度的平衡。常見的,我們可以對數據集進行聚類,把數據分成一堆一堆的,比對時先選擇相似的堆,然后在堆內部再進行細致的比對。而分堆的理念又可以通過樹結構、Hash結構、倒排索引、圖結構等等來刻畫。
再來看online部分,其中特征提取和offline的特征提取需要保持高度的一致性,所以實際中我們通常使用一個單獨的特征服務器來提供特征提取服務。這里之所以將檢索結構和檢索引擎分開,主要是基于如下的考慮:檢索引擎需要應對高并發等一些的工程方面的問題,所以本質上檢索引擎更傾向于工程架構的優化,而檢索結構更傾向于檢索結構算法方面的優化;但實際上,二者是沒辦法完全拆分開的。
以圖搜圖技術本質上是尋找相似圖片,但兩張圖片是否相似有非常多的維度:
因此在很多時候,以圖搜圖技術需要根據不同的使用場景來選擇合適的技術方案,尤其是特征的選擇。產品層面,也層出不窮,可以參考下面的幾個鏈接:
The Best Image Search Engines on the Web
https://www.lifewire.com/where-to-find-images-online-3482427
The 7 Best Search Engines for Finding Free Images
https://www.sitepoint.com/7-best-search-engines-free-images/
Part 2. 以圖搜圖的技術迭代
這個部分我先打算介紹一下特征、檢索引擎各自都經歷了哪些迭代,然后在以不同時段典型的工業界的使用方案來介紹以圖搜圖技術代際的迭代。
特征層面:
簡單的,圖像的單通道、多通道的顏色直方圖可以作為一個簡單的特征;進一步顏色矩特征,圖像中任何的顏色分布都可以通過它的矩來表示。另外需要強調的局部特征是SIFT特征(參考:https://blog.csdn.net/abcjennifer/article/details/7639681),SURF特征,HOG特征等;當有了局部特征之后,我們需要對局部特征進行聚合,作為圖像的全局表示;將多個局部特征矢量聚合成一個統一維度的矢量表示的方法有:BOW、VLAD、Fisher Vector等等。
深度學習技術興起之后,基于深度學習的圖像特征開始成為圖像檢索的主流。我們知道CNN網絡具有很多不同程度對圖像進行抽象的layer,較低的層得到的是圖像的簡單特征,而較高層得到的是圖像的語義相關的特征,不同層的特征在檢索層面精度有很大的區別,在Oxford Building數據集上,使用VGGNet進行簡單的測試,得到了如下的統計結果。
(參考:http://yongyuan.name/blog/layer-selection-and-finetune-for-cbir.html)
實際上,深度網絡最后的FC層同樣可以作為圖像的特征表示,當使用FC作為特征時,網絡訓練時使用的label對檢索的效果有較大的影響。理論上,label如果能夠提供更多的細粒度的信息,則學習到的FC特征則更能夠表達圖像的細粒度特征。
特征類型對檢索效果影響很大;但特征的學習方式,尤其是引入度量學習的思路之后,即便是同一個網絡的同一層特征,不同的訓練方式對最后的精度也會有很大的影響。
比如Class weighted conv features
(參考:https://github.com/bikong2/retrieval-2017-cam)
分類loss和triplet loss結合:
引入更多監督信息的學習:
以及通過KL散度來優化:
其實通過不同的方式進行網絡學習的優化方式還有很多,這里大致總結幾個優化的大致方向:
1. 引入更多的監督信息;
2. 不同程度、維度的attention(包括層、channel、類等等);
3. Triplet loss及其各種變種;
4. 不同的特征聚合方式。
檢索引擎:
檢索引擎方面,早期我們通過層次化的聚類來對數據分組,通過K-D Tree對數據進行劃分,通過Hash對空間進行劃分,通過倒排索引加速檢索的效率,通過PQ量化對更大規模的數據進行二次方的劃分。參考:
?? 圖像檢索:再敘ANN Search
https://blog.csdn.net/qq_27245709/article/details/72393613
?? 圖像檢索:基于內容的圖像檢索技術
https://yongyuan.name/blog/cbir-technique-summary.html
?? Product Quantization for Nearest Neighbor Search論文理解
https://blog.csdn.net/CHIERYU/article/details/50347735
層次化的聚類算法可以通過如下的圖片來表示:
通過聚類來減少檢索時比對的檢索時間。K-D Tree和Hash請參考下面的圖片。K-D Tree相對層次化聚類基本原理是一致的,不過聚類算法更多的是數據的劃分,但樹結構的層次化劃分包含特征和數據的劃分兩方面。Hash方法,尤其是LSH(局部敏感哈希),則是同時在尋找特征的mapping和空間的劃分。
PQ量化本質上是在特征和數據的兩個層面對數據集進行量化,如下圖所示,特征向量本身是16*8=128維,通過特征層面的劃分,分成y1…y8總共8組特征;劃分之后,對每一組特征在全數據集上進行聚類等量化手段,比如量化的長度是8bits的01向量。最終得到的是8*8bits的01向量,壓縮比超高。
接下來,介紹兩代不同的以圖搜圖技術。
局部特征(如SIFT特征)+BOW+LSH的方案:
這種方案大致在2015年之前算是比較流行的框架,通常針對特殊的使用場景,在檢索基礎上可能還需要進行細粒度的精排序。這個方案在10億以內的數據量級上非常適用,當然如果數量級更大,也是可以的,只是需要引入其他的檢索結構。關于LSH,推薦使用一個開源的工具包FALCONN:
https://github.com/FALCONN-LIB/FALCONN
CNN卷積特征+VLAD+PQ量化的方案:
這是目前比較主流的方案,卷積特征建議做多層特征的組合,PQ量化建議根據數據規模做密集的參數選擇,推薦使用Facebook開源的工具包FAISS:
https://github.com/facebookresearch/faiss
當然,卷積特征的學習方式的選擇層面,需要根據實際擁有的數據的標簽信息來決策。有一些基于弱監督學習的方案,也可以嘗試。
Part 3. 以圖搜圖是工程+算法的結合
架構演進
在這里,我們介紹一個理想狀態下的以圖搜圖架構,需要嘗試去解決的幾個問題:
1. 如何解決檢索庫動態增加的問題;
2. 如何解決全量的特征迭代的問題,也就是說query和database的特征需要同步;
3. 特征增強,在檢索結構確定的情況下獲得更好的檢索效果;
4. 高并發低延遲。
以上只是一個簡單的架構示意圖,如果涉及到特征評價,檢索結構評價,甚至其他的策略迭代等一系列的關于AB Test的需要,架構層面需要進行深度的優化。
到這里基本上對以圖搜圖技術從特征、檢索結構、架構等層面進行了一個基本的介紹。其實工業界的以圖搜圖產品或者說引擎遠比我寫到的要復雜,如果有大家有興趣,建議研究以下幾個檢索系統的演進:
阿里的拍立淘
百度的圖片搜索
谷歌的圖片搜索
Pinterest的商品搜索
-
圖像
+關注
關注
2文章
1083瀏覽量
40418 -
數據集
+關注
關注
4文章
1205瀏覽量
24649 -
cnn
+關注
關注
3文章
351瀏覽量
22178
原文標題:一文了解「以圖搜圖」技術背后的原理及架構優化
文章出處:【微信號:thejiangmen,微信公眾號:將門創投】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論