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'))

    效果和上图一样。

  • 相关阅读:
    opencv学习笔记7 重映射和仿射变换
    opencv学习笔记8 高斯金字塔,拉普拉斯金字塔,调整大小
    opencv学习笔记6 角点检测
    opencv学习笔记5 霍夫变换 漫水填充
    opencv学习笔记4 边缘检测
    opencv学习笔记3 滤波 形态学
    opencv学习笔记2 拖动条,亮度对比度 颜色空间缩减 鼠标事件
    opencv学习笔记1 加载图像 图像融合 分通道与合并
    URL编码表
    BUUCTF-[GWCTF 2019]我有一个数据库 1
  • 原文地址:https://www.cnblogs.com/king-lps/p/6697975.html
Copyright © 2011-2022 走看看