動機
想象一下,若是有數十萬到數百萬張圖像的數據集,卻沒有描述每張圖像內容的元數據。咱們如何創建一個系統,可以找到這些圖像的子集來更好地回答用戶的搜索查詢?html
咱們基本上須要的是一個搜索引擎,它可以根據圖像與搜索查詢的對應程度對圖像結果進行排序,能夠用一種天然語言表示,,也能夠用其餘查詢圖像表示。git
咱們將在本文中解決問題的方法是訓練一個深度神經模型,該模型學習任何輸入圖像和文本的固定長度表示形式(或嵌入形式),使得若是文本-圖像或圖像-圖像是「類似的」,則他們在歐氏空間中接近,。github
數據集:
我找不到足夠大的搜索結果排名數據集,但我可以獲得這個數據集: http://jmcauley.ucsd.edu/data/amazon/ 它將電子商務項目的圖像連接到它們的標題和描述。咱們將使用這些元數據做爲監督源來學習有意義的聯合文本-圖像表示。爲了管理計算和存儲成本,這些實驗僅限於時尚(服裝、鞋子和珠寶)物品和50萬張圖像。數據庫
問題設置:
咱們的數據集將每一個圖像與用天然語言編寫的描述連接起來。所以,咱們定義了一個任務,在該任務中,咱們要學習圖像和文本的固定長度的聯合表示,以便每一個圖像表示都接近其描述的表示。機器學習
模型:
該模型有3個輸入:圖像(即錨點)、圖像標題與描述(即正例)和第三個輸入是一些隨機採樣的文本(即負例)。函數
而後定義兩個子模型:學習
- 圖像編碼器:Resnet50預訓練的ImageNet+GlobalMaxpooling2D
- 文本編碼器:GRU+GlobalMaxpooling1D
圖像子模型產生錨點E_a的嵌入,文本子模型輸出正標題和描述E_p的嵌入和負例文本E_n的嵌入。測試
而後,咱們經過優化如下損失函數進行訓練:優化
L = max( d(E_a, E_p)-d(E_a, E_n)+alpha, 0)搜索引擎
其中d爲歐氏距離,alpha爲超參數,在本實驗中爲0.4。
基本上,這種損失容許作的是使d(E_a, E_p)變小,使d(E_a, E_n)變大,這樣每一個圖像的嵌入就接近於它的描述的嵌入,而遠離隨機文本的嵌入。
可視化結果:
一旦咱們學習了圖像嵌入模型和文本嵌入模型,咱們就能夠經過使用tsne (https://scikit-learn.org/stable/modules/generated/sklearn.manifold.TSNE.html)將它們投影到二維空間中來實現可視化。 測試圖像及其對應的文本描述用綠線鏈接
從圖中能夠看出,一般在嵌入空間中,圖像及其對應的描述是接近的。考慮到使用的訓練損失,這是咱們指望的。
文字圖片搜索:
在這裏,咱們使用幾個文本查詢示例來在一組70,000張圖像中搜索最佳匹配。咱們計算查詢的文本嵌入,而後計算集合中每一個圖像的嵌入。咱們最終在嵌入空間中選擇最接近查詢的前9張圖像。
這些例子代表,嵌入模型可以學習圖像的有用表示形式和簡單單詞組成的嵌入。
圖像搜索:
在這裏,咱們將使用圖像做爲查詢,而後在包含70,000張圖像的數據庫中搜索與之最類似的示例。排序是由每對圖像在嵌入空間內的歐氏距離決定的。
結果代表,生成的嵌入是圖像的高級表示,它捕獲了所表示對象的最重要特徵,而不受方向、光照或局部細節的過分影響,也沒有通過明確的訓練。
結論: 在這個項目中,咱們研究了機器學習模塊,它容許咱們構建一個基於關鍵字和圖像的搜索引擎,應用於圖像集合。其基本思想是學習一個有意義的文本和圖像的聯合嵌入函數,而後利用嵌入空間中項之間的距離對搜索結果進行排序。
參考文獻:
- Large Scale Online Learning of Image Similarity Through Ranking
- Ups and downs: Modeling the visual evolution of fashion trends with one-class collaborative filtering
- https://github.com/KinWaiCheuk/Triplet-net-keras/blob/master/Triplet%20NN%20Test%20on%20MNIST.ipynb
代碼: 重現結果 => https://github.com/CVxTz/image_search_engine 磐創AI技術博客資源彙總站:http://docs.panchuang.net/ PyTorch官方中文教程站:http://pytorch.panchuang.net/ OpenCV中文官方文檔: http://woshicver.com/