一文了解「以圖搜圖」技術背後的原理及架構優化

2021-02-13 將門創投

本文經授權轉載自知乎,作者:李習華

https://zhuanlan.zhihu.com/p/65306548

當你看到一株未曾見過的植物,你可以打開百度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 Webhttps://www.lifewire.com/where-to-find-images-online-3482427
The 7 Best Search Engines for Finding Free Imageshttps://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的商品搜索

-The End-

將門是一家以專注於發掘、加速及投資技術驅動型創業公司的新型創投機構,旗下涵蓋將門創新服務、將門技術社群以及將門創投基金。將門成立於2015年底,創始團隊由微軟創投在中國的創始團隊原班人馬構建而成,曾為微軟優選和深度孵化了126家創新的技術型創業公司。

將門創新服務專注於使創新的技術落地於真正的應用場景,激活和實現全新的商業價值,服務於行業領先企業和技術創新型創業公司。

將門技術社群專注於幫助技術創新型的創業公司提供來自產、學、研、創領域的核心技術專家的技術分享和學習內容,使創新成為持續的核心競爭力。

將門創投基金專注於投資通過技術創新激活商業場景,實現商業價值的初創企業,關注技術領域包括機器智能、物聯網、自然人機互動、企業計算。在三年的時間裡,將門創投基金已經投資了包括量化派、碼隆科技、禾賽科技、寬拓科技、杉數科技、迪英加科技等數十家具有高成長潛力的技術型創業公司。

如果您是技術領域的初創企業,不僅想獲得投資,還希望獲得一系列持續性、有價值的投後服務,歡迎發送或者推薦項目給我「門」: bp@thejiangmen.com

    

 

將門創投

讓創新獲得認可!

微信:thejiangmen

bp@thejiangmen.com

相關焦點

  • 深度解密系統架構背後的技術,雲+社區沙龍online「架構演進」乾貨整理
    在本場分享中,騰訊雲存儲專家工程師王銀虎從 CBS 雲硬碟的定義出發,展開對 CBS 架構演進、CBS 新的挑戰、CBS 低延時結構優化以及 CBS 延時優化成果四個維度進行了詳細講解。CBS 雲硬碟即基於分布式技術實現的,能夠提供個人電腦硬碟的所有能力,並且在高性能、可靠性和可用性進行了增強,提供持久化的塊存儲服務。
  • 這11個以圖搜圖工具,一個合格的效率人必備
    02 百度識圖百度識圖也是我目前常用的識圖工具了,雖然比不上谷歌,但是識圖效果在國內體驗還算不錯,在搜索一些中文相關圖片時,反而略勝一籌。07 Yandex.ImagesYandex 是俄羅斯用戶最多的網站,英文支持較好,識圖的結果也比較滿意。同時,Yandex 的圖片質量也比較高,可以在這裡找到優質的圖片素材。
  • 實戰 | 多種方法實現以圖搜圖
    那麼這麼有趣又實用的技術,到底如何去實現它呢?之前分享的相對比較麻煩,需要多個操作步驟,最終的顯示效果也並不是非常美觀。因此今天,我們膨脹了,希望一步到位並讓結果更加漂亮哦~希望輸出下面的結果,最上面一行是query圖片(需要查詢圖片),下面一行輸出五個與查詢圖片最接近的結果。
  • 自拍無人機又成了「風口上的豬」,「組合式創新」背後發生了什麼?
    在科技行業很多看似「一夜之間突然發生」的事情,背後多是上遊產業已經提前發生的改變和布局,並且悄無聲息的一步步影響著行業的格局。與手機類似,他們同時與高通和無人機公司進行合作,幫助無人機創業公司在實現晶片底層系統上的對接和優化,還推出了基於「Snapdragon Flight」平臺,給用戶提供「核心板+作業系統+核心算法」一體化的 SOM(System on Module)方案。
  • 全是好圖,這些搜圖神器值得安裝
    「安卓:搜圖神器」搜圖神器這個app簡直是搜圖界的集大成者,提供各類手機或電腦高清壁紙,主打二次元、插畫、手機壁紙、美女、頭像、表情包、內涵圖、淘圖、全景圖片、美圖、旅行、攝影、唯美、國家地理、搞笑動圖、設計等優質類目。▼
  • 除了搜島國老師的作品,以圖搜圖還可以有什麼騷操作?
    谷歌搜圖給我的總體感覺是,比較穩,基本上難度不大的圖片都可以搜到,所以,這是我通常的第一選擇。但是,對於某些冷僻的圖,谷歌識圖的表現並不盡如人意,這時候我通常會換另一個搜圖引擎,後面會提到。拍圖購http://paitogo.com/「拍圖購」是成都數之聯科技有限公司自主研發的產品,當前有網頁端、安卓端和 iOS 端。
  • 全網最好用的搜圖神器,支持多平臺,找圖太爽了
    之前分享過一個圖片量很大的《在線圖片網盤工具  找壁紙太方便了》,受到不少小夥伴關注。
  • 7 招教你輕鬆搭建以圖搜圖系統!
    當您聽到「以圖搜圖」時,是否首先想到了百度、Google 等搜尋引擎的以圖搜圖功能呢?
  • 快捷指令:以圖搜圖
    玩捷徑 - 帶你玩轉iPhone捷徑
  • 以圖搜圖中的圖像搜索算法
    摘要:移動端的以圖搜圖是一代又一代的圖像人,搜索人的夢想。
  • 「數據架構」什麼是實體關係圖(ERD)?
    在下一節中,您將了解什麼是物理ERD。您必須清楚在適當的細節級別開發ER關係圖的目的(有關更多細節,請閱讀「概念、邏輯和物理數據模型」一節)確保您清楚要建模的範圍。了解建模範圍可以防止在設計中包含冗餘實體和關係。繪製範圍中涉及的主要實體。通過添加列來定義實體的屬性。仔細檢查ERD,檢查實體和列是否足夠存儲系統的數據。如果沒有,則考慮添加其他實體和列。
  • Google 解釋 Pixel 4 手勢雷達背後的技術原理
    不過這套方案背後的工作原理可能未必如許多人所想像,而在日前發布的一篇博客中 Google 專門對此進行了一番解釋。首先,Soli 的短距離雷達主要是被用來做兩件事,其一是探測到人的存在從而讓面部辨識組件迅速做好掃描人臉的準備,其二則是認清滑動之類的隔空手勢。
  • 深度學習最強資源推薦:一文看盡 GAN 的前世今生
    當 Ian Goodfellow 在 2014 年喝了一杯啤酒之後,在夢中產生了「生成對抗網絡」(GANs)的想法時,他可能沒想到這一領域進展如此之快:你可能不知道我要表達什麼意思——其實你剛才看到的圖片完全、不可否認、100%…是假的。
  • 最好用的以圖搜圖工具,不得不服!
    NooBox(二箱以圖搜圖)是一款實用型的搜圖插件工具,它集合了多款搜圖引擎,具有很多實用小功能,一鍵智能自動查詢圖片相關信息,支持將圖片保存至本地,內置專業的自製算法,可快速提取圖片或批量下載圖片,絕對是大家日常辦公必備的搜圖神器
  • Google將刪除以圖搜圖/查看圖片2大功能
    Google官方Twitter日前PO文表示,未來將會從圖片搜索頁面,取消「查看圖片(View)」及「以圖搜圖(以圖搜尋)」按鈕。(圖/GOOGLE官方推特)Google「以圖搜圖」功能將會消失!Google官方Twitter日前PO文表示,未來將會從圖片搜索頁面,取消「查看圖片(View)」及「以圖搜圖(以圖搜尋)」按鈕,使用者無法直接展開「全尺寸圖片」另存新檔直接抓,必須造訪圖片網站才能查看下載,但是否能藉此喝止盜版風氣仍有待觀察。
  • 安卓搜圖神器 — 海量圖源支持以圖搜圖
    之前向大家提供的那些頂多是用於手機壁紙什麼的,觀賞性有限,今天再向大家安利一個船新的搜圖神器,名字也比較簡單粗暴就叫搜圖神器又是一款民間作品,但是功能絲毫不比那些賣著會員下載的軟體差,這也是老夜向大家推薦的原因!搜圖神器APP提供PIXIV圖片搜索,P站排行榜,作品/畫師ID檢索,Yande.Re插畫檢索,整合各類圖片搜尋引擎,支持百度識圖,谷歌識圖,拍照搜圖等核心功能。
  • 「特約」Excel2016樹狀圖的另類用法
    簡介九宮格方式通過剪去單角的矩形卡片直觀展示根據時間排序的重要事件,使用最新的excel2016
  • 推薦系統原理、工程、大廠(Youtube、BAT、TMB)架構幹活分享
    本文匯集了關於推薦系統原理、工程、各大長推薦架構、經驗相關的純乾貨。原理篇整理了內容推薦、協同推薦、舉證分解、模型融合、Bandit和深度學習相關的經典方法。工程篇整理了推薦系統常見架構、關鍵模塊和效果驗證相關的資源。實戰部分整理了Netfix、Hulu、Youtube、Google、Amazon、BAT、TMD等各大網際網路公司推薦系統實戰相關的經驗。
  • 深度解析MegEngine亞線性顯存優化技術
    GPU 顯卡等硬體為深度學習提供了必需的算力,但硬體自身有限的存儲,限制了可訓練模型的尺寸,尤其是大型深度網絡,由此誕生出一系列相關技術,比如亞線性顯存優化、梯度累加、混合精度訓練、分布式訓練,進行 GPU 顯存優化。
  • NIPS 2018 | MIT新研究參透批歸一化原理
    其他一些自然歸一化技術都有相似的效果(有時甚至更強)。即這些方法都提供了類似的訓練性能提升。我們認為,理解 BatchNorm 這樣的基本技術的原理可以使我們更好地理解神經網絡訓練的潛在複雜性,並進一步促進算法的進步。