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

图像相似度比对这个问题,在传统算法中常常转化为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网络的输入,输出端也是用全连接组织相似度判别器,得到相似度值。可分别用下面两张图表达这个意思:

孪生网络图像相似度_图像相似度比对_第1张图片
双分支单图通道结构

孪生网络图像相似度_图像相似度比对_第2张图片
单分支双图通道结构

文中重点实验了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结构图如下,一目了然,非常好理解:

孪生网络图像相似度_图像相似度比对_第3张图片
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,加上估计有提升,因为保证了分辨率。

你可能感兴趣的:(孪生网络图像相似度)