Deep Learning of Binary Hash Codes for Fast Image Retrieval

本文介绍了台湾中研院在CVPR2015年发表的研究,探讨如何使用深度学习生成二进制哈希码以实现快速图像检索。研究中,作者在CNN网络的第7层后加入全连接层,模仿LSH,以二进制串形式表示图像特征。通过分类任务损失进行微调,并提出层次搜索策略,先基于语义信息检索,再利用中层特征细化候选集。实验在MNIST、CIFAR-10和Yahoo-1M数据集上进行,展示了方法的有效性。

Deep Learning of Binary Hash Codes for Fast Image Retrieval

论文下载地址
这是一篇台湾中研院发表在CVPR2015年的文章。
之前deep hash,一般来说,网络根据图像的label,输入一个二元组或者三元组,利用CNN网络提取出图像的特征,根据相同的label应该具备比较接近的海明距离作为网络的优化目标,然后提出一种新的目标函数,采用优化策略使函数能够求导,利用BP算法,得到最优解。本篇paper主要有以下几点贡献:

  1. 在第7层后加入了一个全连接层,类似于LSH的作用,得到了二进制串。
  2. 训练采用分类任务的loss进行finetune。
  3. 检索的过程采用了层次的搜索。

Method


结构图
图 1 主要结构

整个过程主要有以下三部分:

  • 在大规模的数据集进行pre-training
  • 加入Latent layer,利用分类的loss进行fine tune
  • 图像搜索过程中,采用hierarchy deep search

最近研究发现,输入的图像经过网络 F68 得到的信息在图像分类,检索中有很大作用。但是这些信息又是高维(上千维)的特征,这些特征直接用于检索,将会非常耗时。直观的想法就是把这些有效的特征用来压缩变成二进制特征,来进行计算海明距离。所以,作者修改了网络结构,在 F7 F8 之间加入了全连接层,fine-tune的过程中,随机初始化latent layer进行训练。

在检索的过程中,浅层学习了图像的局部特征,深层学习了语义信息。作者提出了一个粗粒度到细粒度的检索策略,首先检索语义信息,得到相似的候选集,然后再从候选集中利用mid-level进行检测。

给定图片 I ,首先作者利用latent layer得到的输出作为图像的信息,记作Out(H)。latent layer总共有h个节点,会得到h个值。通过设定阈值对输出进行二值化:

Hj={1,Outj(H)>0.50,otherwise

假定图像集为 Γ={I1,I2,I3,......,In} ,n是待检索图像的数目。每幅图像得到一个长度为h的二进制码 Hi{0,1}h ,得到二进制码的集合 ΓH={H1,H2,H3,......,Hn} 。给定查询图像 Iq ,首先根据海明距离,取小于指定阈值的二进制码,得到包含m个元素的候选集 P={Ic1,Ic2,Ic3,......,Icn}

得到候选集以后,作者从第7层的输出,和候选集图像的第7层输出特征,进行计算欧式距离,然后选取最小的K个特征。

Experiment

作者分别在Mnist,CIFAR-10, Yahoo-1M数据集上进行实验。

MNIST

mnist数据集总共10类,修改网络 F8 为10-way 的softmax预测分类结果。作者加入了latent layer,为了进行比较,分别设置latent节点个数为48和128,使用SGD方法进行训练。learning rate 0.001,5000次迭代。
结果如下所示:


表格1
这里写图片描述

CIFAR-10

同样把 F8 改为10-way的softmax,latent layer节点的数目设置为48和128。
实验结果如下所示:


这里写图片描述
这里写图片描述

Yahoo-1M

数据集图像总共116类,最后分类层神经元数目设定为116。latent layer节点的数目设定为128。
作者分别测试了不同网络和网络层得到的特征进行比较:

  • ALexNet pre-training F7得到的特征
  • Ours-ES 作者网络F7得到的特征
  • Ours-BCS 作者网络latent-layer 得到的二进制特征
  • Ours-HDS 融合作者网络的F7 和latent layer的特征

    这里写图片描述

References

Kevin Lin†, Huei-Fang Yang†, Jen-Hao Hsiao‡, Chu-Song Chen
Deep Learning of Binary Hash Codes for Fast Image Retrieval cvpr 15

"Deep Hashing for Compact Binary Codes Learning" 是一篇关于深度哈希学习的论文。该论文提出了一种用于学习紧凑二进制码的深度哈希算法。以下是该论文中深度哈希算法的公式推导过程: 1. 首先,给定一个训练集 $\{x_i\}_{i=1}^n$ 和它们的标签 $\{y_i\}_{i=1}^n$,其中 $x_i$ 是输入数据,$y_i$ 是输出标签。 2. 然后,利用神经网络学习一个将输入数据映射到二进制码的哈希函数 $h(x_i)$,其中 $h(x_i)$ 是一个 $k$ 位的二进制向量,$k$ 是哈希码的长度。 3. 在深度哈希学习中,我们使用多个哈希函数来生成多个二进制码。因此,我们学习 $m$ 个哈希函数,每个哈希函数对应一个二进制码 $B_j$。 4. 对于每个输入数据 $x_i$,我们得到 $m$ 个哈希码 $B_j^i$,其中 $j=1,2,...,m$。 5. 然后,我们将这些哈希码组合成一个紧凑的二进制码 $b_i$,即 $b_i = [B_1^i, B_2^i, ..., B_m^i]$。 6. 确定损失函数,使得学习到的二进制码可以最大程度地保留数据之间的相似度。 7. 定义损失函数 $L$,其中 $L$ 由两部分组成:量化损失和分类损失。 8. 量化损失用于衡量哈希码的质量,分类损失用于保留数据之间的相似度。 9. 量化损失可以表示为:$L_{quan} = \sum_{i=1}^n\sum_{j=1}^m\frac{1}{2}(B_j^i - h_j(x_i))^2$,其中 $h_j(x_i)$ 是第 $j$ 个哈希函数的输出。 10. 分类损失可以表示为:$L_{cls} = -\sum_{i=1}^n\sum_{j=1}^n w_{ij}y_iy_j\log\sigma(b_i^Tb_j)$,其中 $w_{ij}$ 是样本 $i$ 和 $j$ 之间的相似度权重,$\sigma$ 是 sigmoid 函数。 11. 最终的损失函数可以表示为:$L = \lambda L_{quan} + L_{cls}$,其中 $\lambda$ 是量化损失的权重。 12. 在训练过程中,我们使用反向传播算法来优化损失函数,学习到最优的哈希函数和二进制码。 这就是 "Deep Hashing for Compact Binary Codes Learning" 论文中深度哈希算法的公式推导过程。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值