【Deep Hash】NINH
[CVPR 2015] Simultaneous Feature Learning and Hash Coding with Deep Neural Networks [paper]
Hanjiang Lai, Yan Pan, Ye Liu, Shuicheng Yan.
1. Overcome
- 在大多数哈希方法中,图像都用手工特征表示,这些特征不能很好得保存原始图片的语义信息。
- 哈希方法大都分为编码和量化两个过程,基于手工向量的优化结果可能难以同时兼容编码和量化的过程,从而造成子优化问题。
- CNNH是一个two-stage的深度哈希方法,利用神经网络同时学习了哈希函数和图像特征表达。在stage 1时,CNNH得到了近似哈希编码,并在stage 2利用这些近似哈希编码来训练得到图像的特征表达,但是这些训练得到的图像特征无法反过来指导近似哈希编码的训练,以得到更好的编码。
2. Contribute
- 提出了一种 “one-stage”的监督哈希检索方法,可以同时得到图像特征和哈希编码,并且特征信息和哈希编码可以相互改善,从而得到更好的结果。
- 设计了一种triplet ranking loss,可以很好得保存图像语义的相似信息。
3. Algorithm
NINH方法分为三个步骤:(1)通过一个卷积网络得到中间图像特征;(2)通过divide-and-encode模块得到每张图片的哈希编码;(3)得到图像对的triplet ranking loss,再经由反向传播更新网络。
3.1 Triplet Ranking Loss and Optimization
输入为图像对\((I, I^-, I^+)\),其中\(I\)为查询图像,\(I^-\)为与\(I\)不相似的图像,\(I^+\)为与\(I\)相似的图像。这种输入形式可以更好得表达相似信息“与\(I^-\)相比,图像\(I\)与\(I^+\)更相似”。Triplet ranking hinge loss定义为:
为了便于优化,加入松弛技巧——将Hamming norm替换为L2 norm。得到新的损失函数如下:
损失函数关于\(F(I)、F(I^-)、F(I^+)\)的导数为:
因为损失函数的求导过程非常简单,因此可以容易结合进神经网络的反向传播过程中。
3.2 Shared Sub-Network with Stacked Convolution Layers
Shared Sub-Network使用相同的神经网络结构以及相同的参数得到triplet图像对中的每一张图像的特征表达。网络结构和参数如下表所示:
在该部分,一种替代的策略是对于图像\(I\)使用单独的网络结构和参数,而图像\(I^-\)和\(I^+\)使用相同的网络结构和参数。但是论文中的实验证明,对三个图像使用相同的网络结构和参数的表现会由于这种替代策略。
3.3 Divide-and-Encode Module
Divide-and-Encode(DAE)通过Shared Sub-Network得到每张图片的特征向量后,将这个向量切片成r个部分,每个部分再通过全连接层连接到一个节点,最后通过sigmoid函数转化为[0, 1]之内的值。通过上述步骤,便可以得到一张图片r比特的哈希编码。在这个过程中,因为每个哈希编码是由特征向量的子部分得到的,哈希编码之间的冗余性少,有利于图像的检索。
这个部分另一种策略简称为FC,将整个特征向量通过全连接层直接连接到r个节点,再借由sigmoid函数得到图片的哈希编码。显然这种策略下,每一位哈希编码都利用到了整个特征向量的信息,容易造成冗余。论文的实验也证明了DAE的表现会由于FC。