图像相似度比对这个问题,在传统算法中常常转化为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 Networksarxiv