CNN for image retrieval
CNN for Image Retrieval
編譯matconvnet:
先裝vs,再裝matlab(若順序裝反,則會報錯,matlab找不到vs的路徑,如果你能把路徑設定好,也可以隨意順序安裝),我的vs版本是vs2012。把matlab的目錄設定在X:\matconvnet-1.0-beta10下,然後在matlab命令視窗中輸入:addpath matlab,回車,在輸入:vl_compilenn,回車進行CPU版的編譯(GPU稍微麻煩,可在網上查閱具體編譯方法),編譯成功後會在matlab資料夾下生成一個mex資料夾,有4個mexw64檔案和一個build資料夾,這樣就把matconvnet配置好了。
在執行extractCNN.m 的時候,可能會報錯,這時候,需要把 weights 改為 filters,因為vggnet 的模型裡面用的是filters,而不是weights,其實意思是一樣的。。。
注意:鑑於MatConvNet只能在Matlab 2014及其以上以及系統必須是64位,所以在使用此工具箱之前得滿足這兩個條件。如果是Pythoner,推薦使用flask-keras-cnn-image-retrieval,純Python,非常易於寫成線上影象搜尋應用。
示例:Caltech-256影象資料庫
Caltech-256影象資料庫上搜索結果
執行步驟
1). 如果不需要計算mAP的話,那就直接把你的影象庫資料夾名字命名為database
database
資料夾下即可。如果你要在後面計算MAP(平均檢索精度)的話,要確保影象資料庫做成資料夾databaseClassified
中的形式,然後執行下面命令:
python movefiles.py
2). 接著便可以抽取特徵。執行extractCNN.m
,要用parfor並行的話,直接修改註釋部分即可。
3). 檢索視覺化。這一步執行queryInDatabaseDemo.m
即可。
4). 計算mAP。不需要計算MAP的這步略過。執行compute_MAP.m
,關於mAP的計算,請參閱我畫的mAP計算過程示意圖:資訊檢索評價指標,這個計算mAP的指令碼是按照那個流程中定義的mAP計算方式來寫的。