當前位置:
首頁 > 最新 > Pinterest視覺搜索工程師孫彥:視覺搜索不是「雞肋」

Pinterest視覺搜索工程師孫彥:視覺搜索不是「雞肋」

作者 | Debra

編輯 | Emily

AI 前線導讀:作為一家以視覺為主的圖片社交網站,Pinterest 豐富多彩的圖片內容深得用戶喜愛。但圖片不同於文字,在數量巨大的圖片資源中準確找到自己想要的目標素材,成為用戶最大的需求。於是,視覺搜索技術應用而生。一方面,從技術層面上,Pinterest 的視覺搜索功能中應用了哪些深度學習和 AI 技術?另一方面,在移動搜索時代,有人說視覺搜索是搜索領域的未來,如今很多企業也已經開始將其應用於產品和服務中,包括電商和社交網站等。然而,也有人質疑視覺搜索根本就是「雞肋」,滿足不了用戶多種多樣的需求。那事實究竟是怎樣的呢?我們來一探究竟。

更多乾貨內容請關注微信公眾號「AI 前線」,(ID:ai-front)

視覺搜索

視覺搜索是最近計算機視覺的熱門研究領域,又稱基於內容的圖像檢索。這個研究熱點主要由井噴式增長的在線圖片和搜索引擎的流行所驅動,目前,Pinterest Lens(Pinterest 的搜索類似圖片應用)、Google Goggles(Google 的照相搜索 App)、Google Similar Images(Google 的相似圖片搜索)和 Amazon Flow(Amazon 的增強現實購物應用)是幾個商業化視覺搜索系統中較為成功的案例。今天我們以 Pinterest 為例,詳解視覺搜索技術應用的 AI 相關技術和架構,以及探討一下視覺搜索是不是一些人口中所謂的「雞肋」。

基於 AlexNet 和 VGG 結構提取 fc6 和 fc8 層特徵表現

Pinterest 目前擁有超過 2 億的月活用戶以及超過 100 億張圖片,產品的獨特之處在於能為每位用戶創建一個特有的「品味圖譜」,並且以此為基礎,推薦他可能感興趣的事物。圖片是每個 Pin 的焦點,所以視覺特徵在為用戶發現興趣,靈感和相關內容上起到了非常重要的作用。

舉個例子, 用戶 Pin 一張關於 coach 包的圖片到一個名為」coach totes」的 Borad 中,這一過程對 coach 包這個主題就創建了集合。這個「用戶Borads圖片「圖譜關係包含豐富的關於圖片和它們語義關係的信息。當這張 coach 包的圖片被 Pin 到一個 Borad 中,表明在這個新 borad 和其他所有包含這個圖片的 board 有一個「策展聯繫」。通過這些描述圖片、圖片的 borad 和其用戶的聯繫,相關的大數據(比如,圖片的注釋)能夠不斷增長。

得益於近幾年計算機視覺的發展,尤其是卷積網路的使用和 GPU 的發展,使圖片分類和物體檢測技術突飛猛進, Pinterest 視覺搜索中採用了以下技術:

圖片特徵提取過程中,從深度卷積神經網路(CNNs)的活性中間層中提取深度特徵,基於AlexNet 和 VGG 的結構,來提取fc6 和 fc8 層的特徵表現。這些特徵為了有效地表現被二值化,並且用漢明距離(Hamming Distance)進行比較。Pinterest 使用開源的 Caffe 架構,在多 GPU 機器上來訓練和推算 CNNs。

(From Pinterest Visual Search talk@Berkeley 2016)

分散式可視化搜索系統

端對端搭建執行一個視覺搜索系統,來檢索 Pinterest 中的數十億圖片時, 根據平衡經費時間限制和快速實現的需要, 著重致力於以下幾個方面:

圖片中特徵向量的提取以及物體檢測

搭建指紋增量服務為 Pinterest 所有的圖像計算特徵

根據 Pinterest 各種產品應用的不同性能以及成本需求,搭建靈活可重構的分散式可視化搜索系統

本文著重介紹了(2) 和(3)兩個方面:

搭建指紋增量服務為 Pinterest 所有圖像計算特徵

孫彥向 AI 前線介紹道,Pinterest 多數的視覺應用依靠於擁有一個完整的視覺特徵集合,這個集合以適合於批量處理的格式存儲。因集合包含超過十億獨特的圖像, 保持這個數據的更新是具有挑戰性的,Pinterest 需要增量地更新特性集,並且儘可能避免不必要的重新計算。

指紋增量服務 (Fingerprint Service),就是根據上述需求 Pinterest 所有的圖像計算特徵,通過使用在 Amazon EC2 上的工作群。它主要在兩個場景下逐步更新特徵集合:有新圖片上傳到 Pinterest,和需要特徵迭代時。

Pinterest 採用的一個辦法是是將圖片集劃分到由上傳時間確定的時代(epochs)組中,並且為每個特性類型(全面的,本地的,深度特徵)的每個版本維護一個單獨的特性存儲區。這些特徵類型被大量存貯在 Amazon S3,以特徵種類、版本、時間來組織管理。當數據完全更新時,每一個特徵存儲都會包含所有的時代組。在每一次運算中,系統發現每個特徵的缺失時代組,隨之安排分散式隊列工作來為缺失組計算結果。每一天,一個帶有當天唯一上傳時間的新特徵組被加入到 Pinterest 的圖片集合中,觸發隊列工作為那個日期生成缺失的特徵。另外如果生成某個特徵的演算法或者參數被修改了,或者有新的特徵加入,那麼新的特徵存儲計算工作將被觸發,同時所有的年代組會為修改/新增特徵重新計算。這個方法保證久的圖片 / 不改變的特徵不受影響從而節省了計算量。

這些特性會被複制到以便其他工作訪問的形式, 每張圖片所有這些特徵會合併,組成它所有特徵的指紋(fingerprint),然後指紋會被複制分享,形成為根據圖片特徵(應用了 MD5 hash)隨機訪問的排序文件。這些加入的指紋文件會定期地被 rematerialzed,但是那些昂貴的特徵計算只需要每張圖片計算一次。

具體流程如下圖所示 :

(來自 https://labs.Pinterest.com/user/themes/Pinlabs/assets/paper/visual_search_at_Pinterest.pdf)

根據 Pinterest 各種產品應用的不同性能以及成本需求,搭建靈活可重構的分散式可視化搜索系統

在 Pinterest,分散式可視化搜索系統有不同的應用。其中一個應用是發掘相似外表的產品(Pinterest Similar Looks)以及其他包括近似重複檢測和內容推薦等。在所有這些應用中,視覺相似結果是通過 Visualjoins 的分散式索引來計算的。由於每個用例有不同的性能和成本需求,Pinterest 的搜索基礎被設計成靈活並且可重構的。下圖展示了搜索基礎的流程圖。

https://labs.Pinterest.com/user/themes/Pinlabs/assets/paper/visual_search_at_Pinterest.pdf)

首先 Pinterest 用 Hadoop 從 Visualjoins 創造了分散式圖像索引。每台機器包含索引(和特徵),這些索引和整個圖片集合的隨機分散的子集相關。這裡使用了兩類索引:

第一種是基於磁碟(和部分內存緩存)的 token index,將每個矢量量化特性(比如,視覺辭彙 token)與圖像文檔 ID 的展示列表關聯起來。這與基於文本的圖像檢索系統類似,只是文本被視覺標記所替代。第二個索引是一個視覺特性和 metadata 的內存存儲,比如,圖像注釋,以及從「用戶board圖像」圖計算得出的主題向量。第一類適合於快速(但模糊)查表,第二類適合於更精確(但較慢)排序優化。

每一台機器運行一個 leaf 排序器,從使用視覺特徵的索引中計算 k 最近鄰(k-nearest neighbors),然後使用其他非視覺特徵重新排序頂部的候選數據。在某些情況下,leaf 排序器跳過 token 索引,直接用類似 KNN 方法從特徵樹索引中檢索 k 最近鄰。另一台機器上的一個根排序器將會從每個 leaf 排序器取回最高分數的結果,並且將這些結果整合,然後返還給用戶(為了處理 Pinterest 的實時特徵提取器生成的新指紋,Pinterest 有一個可視化搜索渠道的線上版本,來運行和上述非常相似的過程)。(本部分採訪嘉賓借鑒了 https://zhuanlan.zhihu.com/p/27381765 的翻譯,感謝知乎用戶「李粒PM/Brony/Geology」的翻譯)

下面舉個例子來看下 Pinterest 的視覺搜索流程。

當一個視覺搜索 query 被提交後, Pinterest 從上文提到的 FingerprintService 提取它的深度視覺特徵以及其他特徵

接下來根據這個 query 的類型(來自不同的產品應用),根據上文的索引不同的 shards 會收到 query 並在每一個 shard 內部根據 query 圖片的深度特徵做 KNN search,並找到 N 個(N >top K) 候選圖片

同一個 shard 內部會進行重新排序 (rerank) 並把 top K 結果返回根排序器。

根排序器根據 shards 返回的結果做整合併把結果返還用戶。

(From Pinterest Visual Search talk @ Berkeley 2016)

據了解,Pinterest 已經在多款應用和產品中採用視覺搜索技術,包括相關 Pins、Flashlight 等。

Related Pins

當用戶點擊一個 Pin,這個 Pin 下方會顯示一系列相關的 Pins。

Flashlight

用戶可以利用搜索框鎖定圖片中的物體,得到類似的物體 / 商品。

Lens


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI前線 的精彩文章:

剛剛,傅盛正式發布了第一款區塊鏈AI音箱
Uber自動駕駛「殺人」,我們可以判演算法死刑嗎?

TAG:AI前線 |