zoukankan      html  css  js  c++  java
  • 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'))

    效果和上图一样。

  • 相关阅读:
    使用原生JS封装一个动画函数
    在Vue 中调用数据出现属性不存在的问题
    vs code 如何修改默认主题的注释颜色
    HTML5新标签的兼容性处理
    如何在Vue中使用Mockjs模拟数据的增删查改
    call、apply和bind的用法
    JS原型继承的几种方式
    JavaScript基础部分经典案例
    运算符与基本数据类型
    python安装与初始
  • 原文地址:https://www.cnblogs.com/king-lps/p/6697975.html
Copyright © 2011-2022 走看看