查照片相似度的软件名称,照片相似度测试软件
摘要
在电商场景下,卖家为了获取流量,往往会重复配送商品。当用户发布上传的图片或视频时,在客户端进行图像特征提取和指纹生成,然后上传到云端指纹数据库进行比对,找出相似图片,消除商品重复配送造成的计算和存储资源浪费。
该方法基于图像相似度计算,可广泛应用于安全、版权保护、电子商务等领域。
摘要
与传统的图像相似度计算相比,网络图像相似度计算对计算复杂度和检索效率有更高的要求。通过设计实验,比较了三种图像相似度计算方法:感到害怕孤独的hen算法、基于局部不变性的图像相似度匹配算法和基于卷积神经网络的图像相似度算法,从计算复杂度和检索效率方面权衡了它们的优缺点。最后选择Hessian仿射进行特征提取,SIFT特征描述生成指纹,作为最终图像相似度计算模型。
关键词:图像相似度计算,特征提取,计算复杂度,检索效率
介绍
图像相似度计算在目前的云计算处理方式中,客户端数据会上传到云端,进行图像、视频检索相似度计算等一系列复杂的逻辑处理,并将结果反馈到终端。虽然云在计算能力上优势明显,但这种方式也存在存储、计算资源和流量的严重浪费,无法满足实时性的要求。
随着手机计算能力的提升,一个显而易见的办法就是在客户端对一些数据进行处理,然后将有价值的数据上传到云端进行存储和进一步处理。针对电商场景中商品重复配送的现象,用户发布上传图片和视频时,可以在客户端进行图片相似度计算,实现实时反馈,重复的图片和视频不存储在云端,避免了存储和计算资源的浪费。
图像检索算法的基本步骤包括特征提取、指纹生成和相似性匹配。业内常用的图像相似度计算方法大致可以分为三类:传统的hen算法、基于局部不变性的图像相似度匹配算法和利用深度学习算法的图像相似度计算方法。
1.传统的哈希算法
自2011年百度用TinEye发布百度图像识别后不久,谷歌就发布了类似的图像搜索服务,“感觉害怕孤独的母鸡算法”在图像搜索中发挥了重要作用。一般流程如下:
1.1感知孤独恐惧的hen算法理论简介:
平均散列:原始图像被压缩(8*8)并进行灰度处理,以计算压缩图像像素的平均值。8*8图像的64个像素与平均值相比,大于平均值1小于平均值0,得到的64位二进制码就是原图像的ahash值。该算法速度快,但精度低。
差异哈希:与平均哈希相比,差异哈希还需要进行图像压缩和灰度处理,然后将每行的前一个像素与下一个像素进行比较,大于1小于0,生成指纹信息。该算法具有较高的精度和较快的速度。
感知哈希:对原始图像(32*32)进行压缩和灰度处理,计算压缩量,对其进行离散余弦变换后,用32*32图像的前8*8像素计算平均值,大于平均值的8*8像素的值为1,小于平均值的值为0,这样64位指纹信息就是原始图像的phash值。算法精度高,速度差。
根据以上三种算法,可以计算出两幅图像响应的哈希值,利用两幅图像的哈希值的汉明距离可以确定它们的相似度。海明距离越大,相似度越低,海明距离越小,相似度越高。
1.2各种算法抗干扰能力的比较
从视频内容中选取两组测试集,并对p
在使用卷积神经网络计算相似度时,一种方法是直接使用端到端的方法,通过卷积层提取两幅图片的特征,然后通过全连接层输出两幅图片的“匹配度”。请参考[1]2015年CVPR文章:《Learning to Compare Image Patches via Convolutional Neural Networks》,相关中文解释请参考[2]:http://blog.csdn.net/hjimce/article/details/50098483。
这种方法对于少量图像的相似度计算有明显的优势,但是对于从大量图像中进行相似度匹配的场景,比如视频检索,就不适合。一般来说,视频检索的一般步骤如下:
假设视频库中有10000个库存视频,每个视频选取10张图片,则帧库中有100000张图片,一个视频查询需要的对比次数为:10100000=1亿次。
所以这种方法虽然对于图像相似度计算有很高的准确率,但是在视频检索中计算量太大。
2.2提取中间产品的方法
因为卷积运算的本质是特征提取,卷积层输出的矩阵自然代表了各种特征。通过将两幅图片的特征矩阵相减,计算差值的平方和(或其他方式)得到的值作为判断两幅图片相似性的依据,这是利用卷积神经网络进行图像相似性计算的第二种方式。
使用预训练的VGG16模型进行测试,网络结构如下(无全连接层):
以block5_pool的输出结果为目标积(其他层也可以),可以看出这一层的输出是一个矩阵,形状为(7,7,512)。我们用一组图片(来源网络)做个测试,验证一下输出结果是否大致符合预期:
以上六张测试图分别是:原图,加少量文字,修改少量底部,裁剪底部,修改下半部分,另一张完全不同的图。
每张图片用卷积模型计算得到一个7x7x512形状的数组后,分别计算第一张图片和后面五张图片的特征数组的差值的平方和,将结果归一化,方便观察。结果如下:
差异12:2
差异13:128
差异14:182
差异15:226
差异16:377
从观察结果可以看出,第一张图片与后续图片的差异在加大。而2和377这两个值代表了非常相似又完全不同的图片,有一定的辨识度。
设计了进一步的实验来测试剪辑、添加字幕、亮度调节、旋转以及另一个完全不同的视频的抗干扰能力。
针对视频的Diff计算如下:每个视频每秒拍摄一张图片,循环比较两个视频每个对应位置的图片帧数,计算差值,最后除以帧数,得到平均差值。如果两帧不一致,以少帧为准,多余帧不予处理。图片之间的差异用上面同样的方法计算,结果如下:
差异01:6
差异02:4
差异03:2
差异04:22
差异05:26
从实验结果可以看出,对于裁剪、字幕、亮度调整的情况,差值都在同一个数量级,明显小于不同视频的差值,但是对于旋转的情况,这种方法无效。
3.基于局部不变特征的相似性匹配算法。
除了基于怕孤独的hen和卷积神经网络的相似性匹配算法外,局部特征检测算法在相似性计算、图像检索和对象识别等领域都具有重要意义。与像素级全局特征相比,局部特征在描述图像特征方面更加灵活,其中SIFT(尺度不变特征变换)是常用的,具有良好的尺度不变性。即使改变旋转角度或拍摄角度,仍能得到良好的检测结果。
3.1抗干扰能力测试
使用OpenCV Python从测试图片中提取SIFT特征:
进一步测试相同裁剪、旋转等情况下特征点的匹配性:
裁剪:
字幕更改大小:
亮度调节:
旋转90度:
不同的视频:
从测试结果来看,SIFT对于特征检测具有很好的抗干扰能力。
3.2检索效率测试
在初步采用局部不变特征进行特征提取后,还需要进一步的测试:构建测试集,构建特征提取和检索系统,测试准确率和召回率。通过参考Araujo和Bernd Girod在2017: 《Large-Scale Video Retrieval Using Image Queries》中的论文,测试基于其工程化。
准备数据集:
图片库:在线拍摄1000个视频,每个视频每秒拍摄一帧视频图片作为总图片库。
待查询图片:定义旋转、拉伸、亮度调整、裁剪、字幕、无处理七种图片变换方式,每种变换生成100个样本。每个样本是从1000个视频中随机选择一个视频,从所有图片帧中随机选择一帧生成的。这样总共获得了700张要查询的图片。
局部特征提取包括两个部分:特征点检测和特征点描述。
3.2.1 SIFT特征提取SIFT描述符
通过SIFT提取所有股票图片和待查询图片的特征,利用这些特征从检索数据库中检索出700个测试样本。召回率和准确率的计算方法如下:
对比项目
召回率
准确率
f的值(2PR/(P R))
聪明
82.00%
8.25%
0.149948
小标题
41.00%
92.86%
0.568837
饱和能力
91.00%
8.40%
0.153651
停止
90.00%
7.60%
0.140041
原图
93.00%
9.42%
0.171175
拉伸
89.00%
7.27%
0.134440
辐状的
93.00%
8.53%
0.156358
全面的
82.71%
8.76%
0.158463
显示的准确性较低。通过观察错误的结果发现,有些图片提取的特征数量很少,甚至只有个位数,而正常的图片可以达到几百到几千个特征点。特征点的缺失会导致检索时容易匹配错误样本。通过设置“最小样本数”限制,当样本数大于阈值时,查询结果被认为是“可信的”。
经过测试,将“最小样本数”的阈值设置为30,并增加了“排除率”指标,表示未达到最小样本数,查询记录不可信。排除特征太少的样本后,复试结果如下:
对比项目
排除率
召回率
准确率
f的值(2PR/(P R))
聪明
20.00%
80.00%
75.90%
0.77898
小标题
0.00%
41.00%
92.86%
0.568837
饱和能力
25.00%
90.67%
62.62%
0.740753
停止
30.00%
88.57%
75.61%
0.815789
原图
20.00%
92.50%
92.50%
0.925
拉伸
23.00%
87.01%
40.36%
0.55144
辐状的
28.00%
91.67%
85.53%
0.884901
全面的
20.86%
79.78%
68.71%
0.738342
结果表明,加入“最小样本数”和“排除率”指标后,准确率大幅提高,但仍有20%左右的排除率,即五分之一的查询未返回可信结果。
3.2.2 Hessian仿射特征提取SIFT描述符
为了进一步提高精度,参考[4]工程描述,将SIFT特征点检测改为Hessian-Affine特征检测会更好,即先用Hessian-Affine检测特征点,再用SIFT描述子描述特征。使用Hessian-Affine后,测试结果如下;
对比项目
排除率
召回率
准确率
f的值(2PR/(P R))
聪明
6.00%
80.85%
87.35%
0.839779
小标题
2.00%
60.20%
83.08%
0.698148
饱和能力
4.00%
83.33%
94.12%
0.883978
停止
7.00%
87.10%
98.78%
0.925714
原图
2.00%
78.57%
86.52%
0.823529
拉伸
4.00%
87.50%
97.67%
0.923077
辐状的
3.00%
87.63%
97.70%
0.923913
全面的
4.00%
80.65%
92.43%
0.861405
结果表明,召回率和准确率有所提高,排除率降低到4%。
4.结论
实验结果表明,基于局部不变特征的相似度计算具有良好的抗干扰能力,精度优于传统的hen算法,对旋转不变性的支持优于卷积神经网络。最后,权衡计算复杂度和检索效率,选择Hessian-Affine作为特征点检测,SIFT作为描述符计算图像相似度。
5.趋势展望
基于局部特征不变性的图像相似度计算虽然在抗干扰能力和计算复杂度上更胜一筹,但它只能表达图像的浅层特征,而卷积神经网络具有多层次的语义表达能力。从不同层提取的图像特征具有不同的含义。角点特征在低层表达,角点特征聚合在中层表达对象部分,整个对象进一步在高层表达。选择不同的卷积图层将提取不同级别的要素。在计算复杂度和检索效率较高的客户端,将局部特征提取和卷积神经网络相结合,将会弥补彼此的不足,突出各自的优势,可能会带来更好的效果,未来还会进一步探索。
参考:
[1] 2015 CVPR 《Learning to Compare Image Patches via Convolutional Neural Networks》
[2]http://blog.csdn.net/hjimce/article/details/50098483
[3]阿劳霍和吉罗德,2017年B 《Large-Scale Video Retrieval Using Image Queries》
[4]https://github.com/andrefaraujo/videosearch.
转自http://www . infoq . com/cn/articles/image-similarity-algorithm-on-mobile-client