图像检索系统《Deep Learning of Binary Hash Codes for Fast Image Retrieval》

引言

总结2015年CVPR论文《Deep Learning of Binary Hash Codes for Fast Image Retrieval》,论文主要内容是利用卷积神经网络(CNN)来构建图像相似度检测的深度学习方法。主要思想是讲卷积神经网络来提取图像特征,并将特征转化为二值量,根据二值向量来计算图像的相似度。

传统方法

图像检索的基础便是提取图像的特征信息,提取的特征信息越丰富,在进行检索时有更多的选择和更好的准确性,相比于传统的特征提取算法,如sift,CNN提取的信息会更丰富,在调整卷积kernel的大小时,得到的特征也会有变化。便有更多选择和变化,且网络一旦训练完成,检索的速度也不会慢。另外近似最近邻(Approximate Nearest Neighbor)算法也用来进行图像检索。如局部敏感度哈希locality-sensitive hashing,最优节点优先best bin first和Balanced box-decomposition tree等。

网络结构

由于CNN提取出的图像特征往往比较多,例如AlexNet提取的维度降达到4096维,如果直接用这4096维特征去做检索,必然会导致效率低下,运算量过高,这正是局部敏感哈希(LSH)所要解决的问题(LSH请参考以前的文章)。自然而然,我们可以讲CNN提取的特征按照LSH算法来进行检索,而进行二值映射的这一步,作者很巧妙的在CNN中完成了。允许我先贴上论文中的一副图


Module1 是传统的CNN结构, Module2 是论文所采用的结构, Module3 是整个检索过程的示意图。

Module1 Module2 可以看出,本文提到的图像检索系统相比于传统CNN(这里用的是ImageNet网络结构)多了一个 HiddenLayer (全连接)隐藏单元的数目一般不会很多,整个网络的过程就是在进行网络训练进行图像分类时,会将 F7 得到的特征映射成为01向量,再通过01向量与 F8 全连接进行最后的分类, F7 H 的、 H F8 weight 也会将学习到,由于隐射成01的向量,所以可以选用 Sigmoid 作为激活函数,大于0.5的为1,小于0.5的是0,最后的损失函数和ImageNet并无任何区别,这里依然选用的交叉熵作为Loss function。

检索

在检索时,依然要对query image进行二值特征转换,利用转换后的二值向量进行选取相似的图像。再对这些图像进行进一步的相似度判别,获得更高质量的结果。文中提到了两中检索衡量方式:粗检索( CoarselevelSearch )和精细检索( FinelevelSearch )。

粗检索

粗检索的定义方式是计算query image和图的Hamming Distance,当计算结果小于提前设置的阈值时,则将图像作为最后检索的结果集中。不难看出,这种检索方式与设置的阈值有很大关系,当阈值设置过大,会引入一些相差很大的结果,而设置过小,又会忽略一些相差不大的结果。不过优势在于检索速度很快,因为只涉及到求取两个01向量对应位置不相同的值的个数问题,利用位运算即可完成。

精细检索

精细检测则是按照欧氏距离来计算图像之间的相似度的,首先计算出query image和桶内每张候选图像特征向量的欧式距离,然后进行排序,便能挑选出top k 张相似的图片.注意,这里不再是对01向量进行欧式距离的计算,而是用 F7 计算出的特征向量来进行计算。道理很明显,如果是对01向量求欧式距离,就相当去在求汉明距离的平方根,这就和粗检索没多大区别。自然也就谈不上什么精细了。

最后的总结

论文中的网络结构和ImageNet相差之处是在之前的网络的两个全连接层之间加入了一个隐含全连接层,这一层的作用就是将 F7 提取的特征向量进行到01的转换,然后使用01向量再和 F8 全连接进行最后的分类。Loss Function依然使用交叉熵损失。两个全连接层的初始化是采用随机初始化的。效率很高,据@寒小阳老师说,250w图片下,对于给定图片,检索top 1000相似时间约为1s。

参考文献

[1] http://www.iis.sinica.edu.tw/~kevinlin311.tw/cvprw15.pdf(原论文)
[2] http://blog.csdn.net/han_xiaoyang

你可能感兴趣的:(图形图像,机器学习与大数据,深度学习)