1. 程式人生 > >影象檢索入門:CVPR2015《Deep Learning of Binary Hash Codes for Fast Image Retrieval》

影象檢索入門:CVPR2015《Deep Learning of Binary Hash Codes for Fast Image Retrieval》

  • 研究背景      

        在基於內容的影象檢索(CBIR)中,影象表示和計算成本都起著至關重要的作用。由於近幾年影象數量的增長,在大型資料庫中的快速搜尋成為新興需求。許多研究旨在回答如何從大規模資料庫中有效檢索相關資料的問題。由於高計算成本,傳統的線性搜尋(或窮舉搜尋)不適合在大型資料庫中搜索。實際策略是使用近似最近鄰(ANN)技術或基於Hash的方法來進行加速。這些方法將高維特徵投影到較低維度空間,然後生成緊湊二進位制程式碼。所產生的二進位制程式碼,可以通過二進位制模式匹配或漢明距離測量來執行快速影象搜尋,這顯著降低了計算成本並進一步優化了搜尋效率。

  • 研究方法

1.在ImageNet資料集上使用Alexnet模型進行有監督的預訓練;

2.在Alexnet模型上新增隱藏層,並在自己的資料集上進行微調;

3.得到影象的特徵矩陣,Hash值和標籤後,通過分層深度搜索進行圖片檢索。

如下圖所示:

1.網路設定

由於輸入的影象經過網路F6層−F8層得到的資訊在影象分類,檢索中有很大作用。但是這些資訊又是高維(上千維)的特徵,這些特徵直接用於檢索,將會非常耗時。直觀的想法就是把這些有效的特徵用來壓縮變成二進位制特徵,來進行計算海明距離。所以,作者修改了網路結構,在F7和F8之間加入了一層隱藏層(全連線層),該層主要是用於學習48/128位的Hash值。

2.模型訓練

使用在ImageNet資料集上學習的引數來初始化模型的前7層引數,對隱藏層和F8層的引數進行隨機初始化,在自己的資料集上訓練模型。

3.影象檢索

由於淺層學習了影象的區域性特徵,深層學習了語義資訊,所以作者提出了一個粗粒度到細粒度的檢索策略,首先檢索語義資訊(Hash值),得到相似的候選集,然後再從候選集中利用區域性特徵進行檢測。

粗粒度檢索

粗糙檢索是用H層的二分雜湊碼,相似性用hamming距離衡量。對於給定的影象I,通過模型學習到區域性特徵(F7層)V,Hash值(隱藏層)和標籤,其中Hash值記為OUT\left ( \left H \right ),隱藏層有h個節點,即Hash值共有h位,通過設定閾值對隱藏層的輸出進行二值化:

H_{j}=\left \{ \begin{matrix} 1 &OUT_{j}\left ( H \right )>0.5 \\ 0 & otherwise \end{matrix} \right.

將待檢索影象I和所有的影象的對應Hash層編碼進行比對後,選擇出hamming距離小於一個閾值的m個構成一個池,其中包含了這m個比較相似的影象。

細粒度檢索

細緻檢索則用到的是F7層的特徵,相似性用歐氏距離衡量。從粗粒度檢索得到的m個影象池中選出最相似的前k個影象作為最後的檢索結果。對於待檢測影象I_{q}和該k個影象的歐氏距離如下圖所示:

s=\left \| V_{q}-V_{i}^{_{}} \right \|

其中V_{q}表示待檢測影象的F7層特徵,V_{i}表示k個影象的F7曾特徵。每兩張圖128維的H層雜湊碼距離計算速度是0.113ms,4096維的fc7層特徵的距離計算需要109.767ms,因此可見二值化雜湊碼檢索的速度優勢。

  • 實驗結果

作者在MINIST,CIFAR-10,YAHOO-1M三個資料集上做了實驗,並且在分類和檢索上都做了實驗,結果都很不錯,特別是在CIFAR-10上影象檢索的精度有30%的提升。

1.MINIST(分類:0.47%的錯誤率,檢索:98.2\pm0.3%的準確率)

左邊第一列是待檢索影象,右邊是48和128位H層節點分別得到的結果。可以看到檢索出的數字都是正確的,並且在這個資料集上48位的效果更好,128位的太高,容易引起過擬合。

2.CIFAR-10(分類:89%,檢索:89%)

在這個資料集上128位的H層節點比48位的效果更好,比如128檢索出更多的馬頭,而48位的更多的全身的馬。

3.Yahoo-1M(分類:83.75%,檢索:不到80%)

其中Ours-HDS是F7+Hash,Ours-BCS是Hash,Our-ES是F7。

作者在這個資料集上比較了只用fc7,只用H和同時用兩者(粗糙到細緻)的結果,實驗結果表明是兩者都用的效果更好。可以看到如果只用alexnet而不進行fine-tune的話,檢索出的結果精度很低。