Deep Hashing Network for Efficient Similarity Retrieval
2016-09-28 21:37
495 查看
1.论文介绍
对于以前的hash算法,是把特征学习和hashcode的学习分开来进行的,有的是先使用手工特征或者学习到的特征,然后在进行hashcode的学习。两个过程分裂开来进行学习的。每次学习只是整个目标的一部分,这样会陷入到局部最优解当中。所以作者针对这里面存在的问题,提出了deep hashing network的算法,主要解决的问题在于一下几个方面:1).通过CNN来学习特征,而不是使用传统的手工特征或者一般的机器学习得到的特征。
2).通过在基本CNN网络的最后一层添加一个hash全连接层,来生成最终的hashcode
3).使用同时输入两张图片并且加上标签,通过学习过程当中使用交叉熵这种损失,限制学习到的hashcode在同类图片当中更加的接近。即原始空间和海明空间的相似性尽可能的保持。
4).通过限制同类图片的量化损失,来提高hashcode的质量。
作者按着上述的几个方面提出他的目标函数,以及学习的方法。
2.符号表示
2.1相似检索中的表示:
对于一个含有N张图片当中{xi}Ni=1,xi∈RD每一个元素代表这个图片的特征.对于相似的图片有如下的定义:sij={10xi,xjaresimilarotherwise
作者正是通过输入一对图片来学习图片的hashcode,对于S={sij}的构成可以通过训练数据集来生成。训练的时候输入是:(xi,xj,sij)
其次学习hashcode的目标就是:学习到一个函数
f:x↦h∈{−1,1}K,即h=f(x)
2.2.模型表示
作者在训练的过程当中使用到了AlexNet,下面介绍AlexNet的表示。AlexNet总共有八层,其中前五层(conv1−conv5)表示的是卷积层,后面的三层fd6−fc8表示的是全连接层。对于全连接层有zli=al(Wlzl−1i+bl)
其中:zl是xi在第l层的表示,Wl,bl分别是l层的权重和偏置。al(x)=max(0,x)是激活函数,这里面使用,ReLU函数。对于第八层作者使用一个有K个神经元的层来代替,这个K就表示需要学习到的hashcode的长度。hi=zli,l=8,为了使得第七层的输出尽可能的接近hashcode,所以通过一个函数来变换使得第七层的输出在[−1,1]之间,然后在对这个输出进行量化,所以使用到了一个双曲正切函数al(x)=tanh(x)
下面是作者训练过程当中的网络结构图:
作者把在不同空间中图片一致相似性,以及空间转换的量化误差结合在一起来学习。作者把这两个方面包含在一个贝叶斯框架当中来进行学习。
对于两个hashcode,hi,hj 可以得到他们之间的内积和海明距离之间的关系
diskH(hi,hj)=12(K−<hi,hj>)
对于给定的带有标签的集合S={sij}以及对于学习到的hashcode
H=[h1,h2⋯,hN],根据贝叶斯定理可以得如下的公式:
logp(H|S)∝logp(S|H)p(H)=∑sij∈Slogp(sij|hi,hj)p(hi)p(hj)
其中p(S|H)是似然函数,p(H)是先验,对于任何的一对图片的hashcode以及标签可以得到,p(sij|hi,hj)条件概率可以转化为内积空间中来进行计算
p(sij|hi,hj)={σ(<zli,zlj>)1−σ(<zli,zlj>)sij=1sij=0=σ(<zli,zlj>)sij(1−σ(<zli,zlj>)1−sij)
其中sigmoid函数σ(x)=11+e−x,hi=zli
这个是作者后面进行训练的整体框架。
下面对于具体的每一项进行解析:
作者提出来hashcode的先验,p(hi)表示一个hashcode的先验
p(hi)=12ϵexp(−|||hi|−1||1ϵ)
加入先验的,以及量化误差,可以得到如下的目标函数:
minΘC=L+λQ
L表示的是交叉熵损失
Q表示量化损失
Θ={Wl,bl}表示参数的集合
根据前面可以用内积空间表示相似度,来定义交叉熵损失函数。
L=∑sij∈S(log(1+exp(<zli,zlj>))−sij<zli,zlj>)
同时量化损失
Q=∑sij∈S(|||zli|−1|1+|||zlj|1−1||1)
其中1∈RK 所有元素都为1的K维向量。对于上面的Q,不可导,所以作者使用|x|≈logcoshx函数代替Q
得到:
Q=∑sij∈S∑k−1K(logcosh(|zlik|−1|)+logcosh(|zljk|−1))
这样就可以对目标函数进行求导和反向传播算法了。
最后一步的量化过程实际是h=sign(zl),其中sign
sign(x)={1−1x>0x≤0
2.3学习算法
对于上面提到的整个训练过程的目标函数,进行特化到每对图片输入上有如下的局部目标函数:在反向传播的过程当中,需要对于上述一对图片训练损失进行求导数,对于网络的参数进行求导数可以得到
其中z~li=Wlzl−1i+bl是第l层的激活函数之前的输出,
表示第l层对于xi在这一层输出之后产生损失的作用。可以用于BP算法的计算,
但是对于最后一层l=8导数的计算,可以直接使用输出结果
对于其他层可以使用
来计算偏导数的值。
这样就可以通过BP算法进行训练了。
下面就是实验部分
3.实验以及结果
3.1实验的数据集:NUS-WIDE,CIFAR-10, Flickr三个数据集NUS-WIDE: 195,834 图片,实验过程当中resize为 256×256,随机1000张测式4000张训练,相似集合的构建为同一类图片,不同类图片认为是不相似,只要两张图片有一个语义标签一致就认为是相似的图片。
CIFAR-10: 60000张/类,总共10类,大小为32×32,100张/类测式,500张/类进行训练,
Flickr:25,000张图片,每张有38个标签,实验过程当中resize为 256×256
下面是MAP值,在不同hashcode 长度的情况下的对比
对于其他的方法输入的特征有:
NUS_WIDE 使用500D的视觉字典
CIFAR-10:使用512D的GIST特征。
Flickr:使用SIFT和GIST的特征的结合。
作者的方法使用CNN的特征。
网络的设置:参考AlexNet的具体设置。
从上面的表格当中可以看出来,作者提出来的方法对于使用传统手工特征进行hashcode学习的方法,具有相对明显的优势。
对于其他使用CNN或者深度神经网络的方法也具有一定的优势。
下面从准确率和召回率的曲线来分析下实验的结果:
上面这张图在NUS_WIDE上面的结果,海明半径r=2,后面两张图是hashcode 长度为48结果。
上面的图分别是在radius=2的准确率和hashcode的长度之间的关系。
第二个图是hashcode为48,的准确率和召回率的曲线图。
第三张是hashcode为48的,top-n的准确率。
4.总结
做这提出来,基于深度学习的贝叶斯学习hashcode的框架。并且提出同时输入一对图片及标签,优化具有交叉熵损失和量化损失的方法,来学习hashcode,通过实验可以说明做这提出来的方法相比于之前的方法具有一定得提升。相关文章推荐
- Deep Hashing Network for Efficient Similarity Retrieval
- 阅读小结:Deep Hashing Network for Efficient Similarity Retrieval
- Bit-Scalable Deep Hashing with Regularized Similarity Learning for Image Retrieval and Person Re-ide
- Bag-of-Words Based Deep Neural Network for Image Retrieval
- 图像检索--Deep Supervised Hashing for Fast Image Retrieval
- [cvpr2017]Deep Hashing Network for Unsupervised Domain Adaptation
- Deep LSTM siamese network for text similarity源码分析
- Efficient Training of Very Deep Neural Networks for Supervised Hashing
- 人群密度估计--CrowdNet: A Deep Convolutional Network for Dense Crowd Counting
- 用matlab训练数字分类的深度神经网络Training a Deep Neural Network for Digit Classification
- 深度学习及TensorFlow实现-深度前馈网络(deep feedforword network)
- Deep Learning of Binary Hash Codes for Fast Image Retrieval (CVPRW15)
- 基于哈希的图像检索 HABIR(HASHING BASELINE FOR IMAGE RETRIEVAL)
- 【Paper Note】Very Deep Convolutional Network For Large-Scale Image Recognition 论文翻译(VGG)
- 吴恩达deeplearning.ai课堂作业:Class 1 week4-Deep Neural Network for Image Classification
- 目标检测分割--BlitzNet: A Real-Time Deep Network for Scene Understanding
- HD-CNN: HIERARCHICAL DEEP CONVOLUTIONAL NEURAL NETWORK FOR IMAGE CLASSIFICATION(泛读)
- 人脸关键点:DAN-Deep Alignment Network: A convolutional neural network for robust face alignment
- 论文阅读:Deep MANTA: A Coarse-to-fine Many-Task Network for joint 2D and 3D vehicle analysis
- Multi-column deep neural network for traffic sign classification