图像相似度比对这个问题,在传统算法中常常转化为sift特征点比对的方法去做,主要是sift算法对图像的光照、旋转、位移等等具有比较强的鲁棒性,但是整体精度没有特别高。随着深度学习技术的发展,目前对这个问题的解应该更加完美。所以最进在试图探究这个更加完美的解。

直观思路有2条:一条是利用现成的pretrain_model计算图像的高维特征向量,然后对特征向量,计算余玄距离;另一条是针对特定场景数据,建立图像对的数据集,然后构建深度模型,直接学习相似度。

先说下答案:两者效果整体上差不多,但各有优缺点。pretain_model余玄距离方式:优点很明显,不用准备打标数据集训练,直接预测,卡个阈值就能用,而且非常通用,适用几乎所有数据,缺点是准确率稍微低些(但实测对于高召回、低准确的应用场景基本够用了);针对特定场景数据训练方式:优点是可以针对特定场景数据集调优,精度可以达到我们想要的精度;缺点是耗时耗力、只针对特定场景、通用性差。

下面简单说下技术方案。pretainmodel余玄距离方式基本不用说了,网上下载下pretrain_model,写个脚本预测下就可以了。有个很好的github工程:https://github.com/cameronfabbri/Compute-Features,下载下来就能用,很方便,可以快捷验证。我们重点说下针对特定场景数据训练方式。

在利用基于深度学习进行相似度比对时,我重点参考了这篇paper:

Learning to Compare Image Patches via Convolutional Neural Networks​arxiv.org

文中有多种实验方案,归纳起来就2种:一种是对于图像对,用2个cnn分支分别抽取特征,然后concate起来,用全连接组织相似度判别器(其实就是分类器,相似或者不相似);另一种是只用1个cnn分支,将图像对组织成一幅2倍于输入图像通道数的“图像”,作为cnn网络的输入,输出端也是用全连接组织相似度判别器,得到相似度值。可分别用下面两张图表达这个意思:

双分支单图通道结构
单分支双图通道结构

文中重点实验了3种思路的网络结构,我也一一复现了下,效果最好的是2ch-2stream结构,其次是2ch-deep结构,最后是2ch结构。作者放出了每种结构的具体设计,分别如下:

(i)2ch-2stream consists of two branches C(95,5,1)-ReLU-P(2,2)-C(96,3,1)-ReLU-P(2,2)-C(192,3,1)-ReLU-C(192,3,1)-ReLU, one for cen- tral and one for surround parts, followed by F(768)-ReLU-F(1)

(ii) 2ch-deep = C(96,4,3)-Stack(96)-P(2,2)-Stack(192)-F(1), where Stack(n) = C(n, 3, 1)-ReLU-C(n, 3, 1)-ReLU-C(n, 3, 1)-ReLU.

(iii) 2ch = C(96, 7, 3)-ReLU-P(2, 2)-C(192, 5, 1)-ReLU- P(2,2)-C(256,3,1)-ReLU-F(256)-ReLU-F(1)
其中,效果最好的是2ch-2stream结构图如下,一目了然,非常好理解:

2ch-2stream结构

说说我在调优过程中的优化点:

1)图像对训练集的建立。首先准备1w左右的数据(里面可能有少量相似样本,占比不到0.1)。相异样本就是每次fead数据时从这1w数据中随机抽取2张;相同样本是从中随机抽取1张,以及用这1张图片随机增强的图片。

2)文中用的公共数据集适合用64*64的输入,而我用的数据尺寸直接resize到64*64,信息损失会比较大。我统计了数据集所有图像的平均尺寸,得到适合的尺寸为:长=64,宽=256.

3) 自建了一个具有代表性的验证集。一一实验2ch/2ch-deep/2ch-2stream三种结构发现,在验证集上效果恰恰与文中所述结论相反。判断是过拟合验证了。在全连接的地方接了dropout, 系数设成0.9。由于每次训练是随机样本对,随机1个epoch应该是1w1w。所以训练久点,泛化要好些,但不能过长。迭代3w轮,batch_size=128。

最后,说下可能的优化点:

1)这篇文章发表在2015年,当时各种神经网络奇技淫巧,都没出来。所以替换掉中间的特征抽取网络,效果肯定能提升。比如加入resnet-block。

2)加上batch_normal,做正则。

3) 还没有实验文中的spp,加上估计有提升,因为保证了分辨率。

孪生网络图像相似度_图像相似度比对相关推荐

  1. 图像风格迁移_图像风格迁移—谷歌大脑团队任意图像风格化迁移论文详解

    点击蓝字关注我们 AI研习图书馆,发现不一样的世界 风格迁移 图像风格化迁移是一个很有意思的研究领域,它可以将一张图的风格迁移到另外一张图像上,由此还诞生了Prisma和Ostagram这样的商业化产 ...

  2. 图像修复 图像补全_图像修复简介

    图像修复 图像补全 In practical applications, images are often corroded by noise. These noises are dust or wa ...

  3. python图像融合算法_图像融合质量评价方法的python代码实现——MS-SSIM

    图像融合质量评价方法的python代码实现--MS-SSIM 图像融合质量评价方法的python代码实现--MS-SSIM 文章目录 1 前言 2 MS-SSIM介绍 2 MS-SSIM的代码 2.1 ...

  4. python图像去污_图像去雾----暗通道

    暗通道去雾算法原理及实现 1. 算法原理. 暗通道. 所谓暗通道是一个基本假设,这个假设认为,在绝大多数的非天空的局部区域中,某一些像素总会有至少一个颜色通道具有很低的值.这个其实很容易理解,实际生活 ...

  5. java图像灰度直方图_图像灰度变换、二值化、直方图

    1.灰度变换 1)灰度图的线性变换 Gnew = Fa * Gold + Fb. Fa为斜线的斜率,Fb为y轴上的截距. Fa>1 输出图像的对比度变大,否则变小. Fa=1 Fb≠0时,图像的 ...

  6. python图像下采样_图像的上采样(upsampling)与下采样(subsampled)

    缩小图像(或称为下采样(subsampled)或降采样(downsampled))的主要目的有两个:1.使得图像符合显示区域的大小:2.生成对应图像的缩略图. 放大图像(或称为上采样(upsampli ...

  7. java 圈复杂度_圈复杂度和代码质量优化(附带示例代码纠正代码质量)

    什么是圈复杂度? --------------------------------------- 圈复杂度(Cyclomatic Complexity)是衡量计算机程序复杂程度的一种措施.它根据程序从 ...

  8. pythonopencv人脸相似度_图像相似度算法的个人见解(pythonopencv)-Go语言中文社区...

    简述 前段时间写了篇博文 哈希算法实现图像相似度比较(Python&OpenCV) ,使用简单的哈希算法进行图像相似度判断.但是在实践中该算法达不到预期的效果: 图像缩放8*8大小,图片信息内 ...

  9. java图像旋转90度_旋转图像90度在java

    使用此方法. /** * Rotates an image. Actually rotates a new copy of the image. * * @param img The image to ...

  10. matlab 通过矩阵变换使图像旋转平移_图像的几何变换

    学习图像中的仿射变换(affine transform), 这是一种线性变换(涵盖旋转,平移,错切(shear), 缩放等线性变换),既然是线性变换则可以通过线性变换(矩阵)来获得.仿射变换矩阵M为2 ...

最新文章

  1. hdu 1251 统计拼图
  2. Vivado2018如何与Notepad++关联?
  3. IBM Rev2.6公包主板的问题
  4. [置顶] Android面试题目之四: 归并排序
  5. cii框架PHP,CII. POSIX Functions - PHP 5 中文文档
  6. Linux文件锁学习-flock, lockf, fcntl
  7. Java对象内存图三
  8. React开发(280):moment处理日期
  9. 武汉月薪1万5,感到焦虑怎么办?
  10. Java开发技术大杂烩(三)之电商项目优化、rabbitmq、Git、OSI、VIM、Intellj IDEA、HTTP、JS、Java...
  11. Mysql查询某列最长字符串记录
  12. 设计一个巴特沃斯低通滤波器
  13. 如何制作一个读取U盘文件系统的工程
  14. javascript基础常识问答(八)
  15. 用matlab画出ex,如何用matlab画函数图形
  16. 高斯核——Python实现
  17. 点名时间——创新众筹平台
  18. 金融day03 —— 银行支付结算、银行资产业务
  19. 今天,洋哥北漂整整11年
  20. 十多家大厂Android面试真题锦集干货整理,成功拿下大厂offer

热门文章

  1. win8.1能安装matlab,解决win8.1安装matlab出现无法访问您试图使用的功能...vcredist.msc...等等...
  2. SPSS做因子分析(非常细致的过程)
  3. 从零开始系统学习区块链
  4. 2021-04-02
  5. 软考:McCabe环路复杂度计算方法
  6. 离线地图瓦片下载工具
  7. 构建基于浏览器的Web P2P网络直播
  8. php 到处excel 乱码,php 导出excel 乱码怎么办
  9. 离散事件系统仿真(第五版)
  10. 内网通积分|免广告工具