深度哈希-文献阅读
文献一
文献:Lai H, Pan Y, Liu Y, et al. Simultaneous feature learning and hash coding with deep neural networks[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2015: 3270-3278.
参考博客:https://blog.csdn.net/zijin0802034/article/details/52905137
1、Abstract
对于已存在的哈希方法:手工特征+二值编码。缺点是特征向量与编码方式可能不兼容。
所以我们提出了一种有监督的哈希方法,在网络中直接生成二值码,不用分步进行。
我们提出的网络结构主要包含三个网络模块:
- 输入三元组共享网络结构,提取特征向量;
- 使用divide-and-encode模块切分图像的特征为q个branch,每一个branch对应1bit;
- 设计一个新的损失函数(a triplet ranking loss)。
2、The Proposed Approach
哈希学习的目标是:学习一个映射$F:I\rightarrow \left \{ 0,1 \right \}^{q}$,将image $I$映射为一个$q$比特的二值码,使$I$与$I^{+}$的二值码距离更近,$I$与$I^{-}$的二值码距离更远。
本文设计的深度哈希架构如下:
输入:三元组。$I^{+}$是与$I$相似的图像,$I^{-}$是与$I$不相似的图像。
步骤:共享卷积层,提取图像特征,特征输入divide-and-encode module,将特征向量分块生成二值码,针对目标函数进行迭代,训练网络。
Contributions:
- 共享卷积层,提取特征向量;
- 使用divide-and-encode模块切分图像的特征为q个branch,每一个branch对应1bit;
- 设计一个新的损失函数(a triplet ranking loss)。
以下分步介绍每一个contribution。
2.1 Triplet Ranking Loss and Optimization
设计一个新的损失函数。
原来的损失函数:
$\left \| . \right \|_{H}$代表汉明距离,为了使损失函数可导以便于反向传播训练网络,用$l_{2}$范数代替汉明距离:
2.2 Shared Sub-Network with Stacked Convolution Layers
共享卷积层,提取特征向量。
网络参数如图所示:
作者在别人网络结构的基础上进行修改,在原始网络的每一个convolution层后面添加了$1\times 1$的卷积层,相当于对卷积层的输出作一个线性变换。并且把传统网络的最后一层的全连接层改为平均池化层。网络的输入是$256\times 256$的大小的图像。输入是图像三元组,三张图片共享网络的参数,得到三个维度相同图像特征三元组$\left (x,x^{+},x^{-} \right )$。
2.3 Divide-and-Encode Module
使用divide-and-encode模块切分图像的特征为q个branch,每一个branch对应1bit。
之前的deep hash方法就是直接拿图像的feature通过一个全连接层,然后用sigmoid函数进行激活,得到$q$ bits的hash code,如图2中b所示。
作者提出的方法:如果需要得到$q$ bits的hash code。网络应该输出$50q$长度的特征,然后将$50q$的特征平均划分为$q$个slice,每一个slice通过一个全连接层,接下来使用sigmoid激活函数限制输入在[0,1]之内,得到1bit。$q$个slice总共得到$q$比特的hash code。如图2的a所示。
好处:减少比特码之间的冗余,实验证明这种分块编码的方法比使用全连接层效果要好。
对于每一个50维的slice $x^{(i)}$,经过全连接层变为1维。
$W_{i}$是权重矩阵。令$c=fc_{i}(x^{(i)})$,通过如下定义的sigmoid函数保证输出在[0,1]之间;经过sigmoid函数以后,作者又添加了分段阈值函数函数,令$s=sigmoid(c)\epsilon [0,1]$
因为上述的网络只能产生实数值的hash code,网络产生的hash code还需要使用sgn函数进行量化,所以提前进行阈值处理能够减小量化时候的误差。
一幅图片得到最终的二进制hash code如图4所示:
文献二
文献:Jiang Q Y, Li W J. Deep cross-modal hashing[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 3232-3240.
1、Abstract
因为cross-modal hashing的低存储成本和快速的查询能力,被广泛用于多媒体的相似度检索中。本论文提出了一个deep cross-modal hashing(DCMH),首次将feature learning和hash-code learning结合到同一个框架中。
Contributions:
- DCMH是一个端到端的深度学习框架,每个模态对应一个特征学习网络。
- 哈希码问题本质上是一个离散的学习问题,为了使其连续,现有跨模态哈希方法会将离散问题松弛为连续问题,可能会降低哈希码的准确性。本文提出的DCMH方法直接学习离散哈希码。
- 使用图像-文本真实数据集对模型进行的实验表明,DCMH可以胜过其他baseline,以实现跨模态检索应用程序中最先进的性能。
2、Problem Definition
训练集有n个样本,每个样本具有两种特征形式:图像+文本。
图像模态:$X=\left \{ x_{i} \right \}_{i=1}^{n}$,$ x_{i}$可能是特征或原始像素。
文本模态:$Y=\left \{ y_{i} \right \}_{i=1}^{n}$,$ y_{i}$是关于$ x_{i}$相关的标签信息。
跨模态相似度矩阵$S$,$S_{ij}=1$表示$ x_{i}$和$ y_{i}$是相似的。
我们的目的是学习两个散列函数:$b_{i}^{x}=h^{x}(x_{i})\in \left \{ -1,+1 \right \}^{c}$和$b_{i}^{y}=h^{y}(y_{i})\in \left \{ -1,+1 \right \}^{c}$。$c$为二进制代码的长度。假如$S_{ij}=1$,那么两哈希码的距离也要近。
3、Deep Cross-Modal Hashing
DCMH模型如图1所示,包含两个部分:特征提取和哈希码的生成。
特征提取包含两个深度神经网络,一个用于图像模态,一个用于文本模态。
图像模态的深度神经网络如table 1所示,由五层卷积层和三层全连接层组成。
文本模态的深度神经网络如table 2所示,首先利用词袋模型(BOW)将文本表示为向量,再输入全连接层。
经过上面的特征学习会得到图像和文本的哈希码。
DCMH是有监督学习,其目标数函数是三个目标的结合:最大化似然函数、二值码和输出特征的距离尽可能小、哈希码的两种状态码尽可能平均,目标函数定义如下:
以上公式中第一项①是最小化负对数似然,等价于最大化似然,可以保留$S$中的图像特征表示$F$和文本特征表示$G$的跨模态相似性,$F_{i*}$和$G_{*j}$之间的相似性在$S_{ij}=1$是很大,在$S_{ij}=0$时很小。
似然函数的定义如下:
以上公式中第二项②的作用是最小化哈希码和特征的距离,我们希望学习到的哈希码与网络学习到的特征尽可能相似,这样哈希码就可以更精准的表示特征。通过优化该项,可以得到$B^{(x)}=sign(F)$和$B^{(y)}=sign(G)$,$F$和$G$是$B^{(x)}$和$B^{(y)}$的连续替代。
以上公式中第三项③的作用是使哈希码取值的概率相等,更具体地说,所有训练点上每个比特的+1和-1的数量应该几乎相同,这能够使每位二值码提供的信息最大化。
最后多次实验,发现如果两个模态同一个类的训练样本的binary code设置为一致,会取得更好的效果。所以我们只训练$B^{(x)}=B^{(y)}$的点,即$B=B^{(x)}=B^{(y)}$,所以上面的目标函数可以简化为:
注意我们只训练$B^{(x)}=B^{(y)}$的点,但是在其他情况下,比如说查询的情况下,我们还是要为每一个图像提取两种模态的特征。
4、Learning
采取了一种交叉学习的策略:需要训练的参数有$\theta _{x}$, $\theta _{y}$和$B$,我们每次只训练一个参数,其他参数固定。
当固定$\theta _{y}$和$B$时,对$\theta _{x}$进行优化:
当固定$\theta _{x}$和$B$时,对$\theta _{y}$进行优化:
当固定$\theta _{x}$和$\theta _{y}$时,对$B$进行优化:
5、Experiment
数据集:
实验一:如下图,“I——>T”表示查询是图像的情况而数据库是文本,“T——>I”表示查询是文本而数据库是图像的情况,我们可以发现DCMH可以超越所有其他通过手工制作的特征方法的基线。
跨模态与多模态的概念是不同的,跨模态指用一种模态查询另外一种模态的数据,多模态是指结合多种模态的特征查询同一种模态的数据。
基于深度网络提取特征的实验结果:
总结
基于神经网络的图像检索论文看到现在主要改进方向有两个。一个是特征提取网络,一个是设计损失函数。
特征提取网络可以结合产生哈希值的网络共用一个损失函数,一步到位。
损失函数主要考虑哈希码的影响。
论文设计的体系结构都非常的类似。
以上是我一些非常浅显的认识,还会继续看论文,找到一些新颖的想法。