Binary Code for Image Search


參考:https://github.com/kevinlin311tw/caffe-cvprw15

提出的圖像檢索框架通過分層深度搜索。 我們的方法由三個主要部分組成。 首先是ImageNet上的卷積神經網絡的監督預訓練,以學習豐富的中級圖像表示。 在第二個組件中,我們爲網絡添加一個潛在層,並讓該層中的神經元學習類似散列的表示,同時在目標域數據集上對其進行微調。 最後一步是使用從粗到精的策略來檢索相似的圖像,該策略利用學習散列式二進制代碼和F7特徵。

他的第一部分是監督大規模ImageNet的預培訓數據集[14]。第二部分是使用潛在層微調網絡,以同時學習特定於領域的特徵表示和一組類似散列哈希函數。 第三種通過建議的分層深度搜索來獲取與查詢圖像相似的圖像。我們使用Krizhevsky提出的預訓CNN模型
等人。from the Caffe CNN library 該軟件是在大型ImageNet數據集上進行訓練的,該數據集包含超過120萬張分類爲1000個對象類別的圖像。 我們的學習二進制代碼的方法詳細描述如下

3.1. Learning Hash-like Binary Codes

最新研究表明,可以將由輸入圖像的層F6-8的特徵激活層用作視覺特徵。這些中級圖像表示法的使用表現出色圖像分類,檢索等任務的改進。但是,這些簽名是高維的在大型科學圖像檢索中效率低下的矢量。爲了便於高效的圖像檢索,降低計算成本的實際方法是將特徵向量轉換爲二進制碼。 這種二進制緊湊碼可以使用哈希或海明距離進行快速比較。在這項工作中,我們建議同時學習領域特定的圖像表示和一組散列(或二進制編碼)函數。我們假設分類層F8的最終輸出依賴於每個屬性開啓或關閉的一組h隱藏屬性。也就是說,相同標籤的圖片應該有相同的二進制激活。爲了實現這個想法,我們在F7和F8之間嵌入了潛在層H,如圖1的中間一行所示。潛在層H是完全連接的層,並且其神經元活動由編碼語義的後續層F8調節並實現分類。所提出的潛在層H不僅提供了豐富的抽象來自F7的功能,而且還架設了中級功能和高級語義。在我們的設計中,潛伏層H中的神經元被S形功能(sigmoid)激活,所以激活近似爲{0,1}.

爲了實現領域適應,我們對提議進行了微調網絡在目標域數據集上通過反向傳播。 deep CNN 的初始權重被設置爲權重來在ImageNet數據集進行訓練。潛在層H和最終分類層F8的權重被隨機地初始化。潛在層H的初始隨機權重就像LSH [6],它使用隨機投影來構造哈系bit。然後將代碼從LSH改編爲適合監督深度網絡學習的更好數據的代碼。 如果不對深度CNN模型進行重大修改,建議的模型會同時學習領域特定的視覺描述符和一組哈希函數以實現高效的圖像檢索。

Zeiler和Fergus [32]分析了CNN的深度,發現淺層學習局部視覺描述符,而更深層的CNN捕獲適合識別的語義信息。我們採用從粗到精的搜索策略來快速準確地進行圖像檢索。我們首先檢索一組具有類似高級語義的候選者,也就是說,從潛在層類似地隱藏二進制激活。然後,爲了進一步過濾具有相似外觀的圖像,基於最深的中級圖像表示來執行相似性排名。

粗略搜索。給定圖像I,我們首先提取潛在層的輸出作爲由Out(h)表示的圖像簽名。然後通過將閾值進行二值化來獲得二進制碼。每一位j=1...h (其中h是潛在層中的節點數量),我們輸出H的二進制碼
這裏寫圖片描述

τ= {I1,I2,...,In }表示由n個用於檢索的圖像組成的數據集。τh= {H1,H2,...,Hn }表示每個圖像的對應二進制碼,Hi {0,1 }^h .給定查詢圖像Iq 及其二進制碼Hq ,我們確定了一組m個候選人,P= {I1c,I2c,...,Imc },如果Hamming距離低於閾值在HqHiτH .

精細搜索。

給定查詢圖像Iq 和候選池P,我們使用從層F7提取的特徵來識別排名前k的圖像以形成候選池P.設VqViP 分別表示查詢圖像q和池中圖像Iic 的特徵向量。我們將Iq 與P的第i個圖像之間的相似度定義爲相應特徵向量之間的歐幾里德距離,
這裏寫圖片描述

歐幾里德距離越小,兩幅圖像的相似度越高。 每個候選者Iic 按照相似性按升序排列; 因此,識別出排名前k位的圖像。

圖2:來自Yahoo-1M Shopping Dataset的示例圖像。 異構產品圖像表現出極大的差異性,並且對圖像分類和檢索具有挑戰性。

文章流程圖:

這裏寫圖片描述

分析:

  • 1、先用ImageNet 做一個分類模型
  • 2、將自己的數據遷移到1、中的模型上,在F7與分類層的之間添加一個編碼層(激活函數使用 sigmoid,取出編碼使用 tf.round() 數值大於0.5則爲1,反之爲0),凍結輸入層到F7的所以層參數,只微調編碼層與F8(分類層)
  • 2-2、也可以直接訓練module2這一條網絡,訓練收斂後(分類精度高),凍結輸入層到F7的所以層參數,只微調編碼層與F8(分類層),微調時加上一些附加的cost(類別相同 編碼層特徵歐式距離最小,類別不同 編碼層特徵歐式距離變大等)
  • 3、類別查詢

    • 先得到編碼( tf.round(編碼層)),比較查詢圖片與要查詢庫中的每張圖片的編碼距離(這裏使用漢明距離 即 編碼求XOR(異或操作) ),漢明距離小於某個閾值(爲編碼列數的0.2~0.5左右),篩選出備選圖片
    • 再計算經過上面篩選的圖片與查詢圖片之間的特徵歐式距離(這裏的特徵選編碼層特徵(不使用 tf.round),也可以選擇編碼層 的前一層的特徵 如:這裏是F7層的特徵),如果距離至小於某個閾值 (0.065~0.2)則判別爲要查詢的圖片(和查詢圖片是一個類別)
  • 4、推廣到訓練集以外的數據進行圖片查詢

    • 按照第3步的操作,查詢訓練集以外的圖片(只使用編碼特徵層,此時分類的層就沒有實際意義,分類精度沒有任何意義,因此不用在意分類的效果,遇到分類的直接跳過即可)

其他資源

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章