keras例子-matchnet


2015CVPR:MatchNet_ Unifying Feature and Metric Learning for Patch-Based Matching

主要是基於patch的圖像特征匹配,基於patch的論文有很多了,例如:

Learning to Compare Image Patches via Convolutional Neural Network(也是15年CVPR)

Image Patch Matching Using Convolutional Descriptors with Euclidean Distance

於是打算利用keras實現,但是沒有利用這些論文都使用的benchmark data,即含有3個子set的patchdata:Multi-view Stereo Correspondence Dataset

大體上說,這些文章的思路都是利用一對CNN來提取一對圖像特征,然后通過歐氏距離(經典如Saimese網絡)或者通過全連接網絡(Matchnet)來實現特征的對比,最后通過交叉熵函數來完成優化。

 

論文很好懂,然后文中也有作者訓練好的caffe模型,但是並沒有訓練過程,所以借此機會利用keras練練手。

先說遇到的問題,keras(0.8.2的theano和1.0.7的keras,目前最新大約是0.9的theano和2.0的keras)利用GPU時總是出現損失為NAN的情況,一開始以為是參數問題,所以修改了權重初始化和Dropout等網絡結構,發現任然如下圖:

 

而且當我跑keras自帶的examples:mnist_cnn時竟然損失一路為NAN(笑哭/(ㄒoㄒ)/~~),我趕緊換成CPU跑了下,一切正常,正確率又飆到了99%多。我想是不是.theanoc.txt出了問題,我把optimizer=fast_compile刪掉(PyCharm跑總是提醒內存問題。。PyCharm確實很占地兒,所以轉戰Spider),同時把device=gpu改成了gpu0.結果正常了。。如下圖:

 

還沒有進一步調參,一直被NAN所困。。而且網絡也被我改得面目全非(因為只是測試數據量只有15000),和MatchNet作者的網絡出入很大。但是基本思路都是CNN+全連接。。

增大了卷積核,loss下降到0.26,同時訓練正確率也在90%以上:

將原數據的10%作為驗證集:

 再利用keras的模型可視化工具將模型結構可視化,方法見keras中文文檔博客

from keras.utils.visualize_util import plot
plot(model, to_file='model.png')

如圖:

 或者如果要在ipython中展示圖片:

from IPython.display import SVG
from keras.utils.visualize_util import model_to_dot

SVG(model_to_dot(model).create(prog='dot', format='svg'))

效果和上圖一樣。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM