背景现状:
哈希算法由于其计算效率和检索质量,在大规模图像检索中被广泛应用于近似最近邻搜索(ANN),而深度哈希算法通过端到端表示学习和哈希编码进一步提高了检索质量。
发现问题:
现有的大多数哈希方法都是基于哈希码的线性扫描来最大化检索性能。因为即使使用哈希码,线性扫描的代价仍然很高,所以我们在某种程度上背离了使用哈希的初衷,即在可接受的精度下最大化速度。随着用于线性扫描的强大散列方法的发展,作者觉得现在应该转向汉明空间检索,它可以实现最高效的常量时间搜索。在汉明空间检索中,我们通过哈希表查找而不是线性扫描,向每个查询返回给定汉明半径内的数据点。
以往最先进的深度哈希方法,如DHN和HashNet,通常采用广义sigmoid函数作为概率函数。然而,作者发现了一个关键的广义sigmoid函数的问题,如图2所示。当哈希码之间的汉明距离远大于2时,广义sigmoid函数的概率(通过变化α)保持较高,只有当汉明距离接近K/2时,广义sigmoid函数的概率才开始明显下降。
这意味着以前的深度哈希方法不能使相似数据点的哈希码之间的汉明距离小于2,因汉明距离小于K/2的概率不够有判别性。作者认为这是现有哈希方法的一个严重缺点,使有效的汉明空间检索成为不可能。注意,对于类似的点,如果汉明距离大于2,一个好的为汉明空间检索而设计的损失函数应该会有显著的惩罚,而之前的方法对于这个目标是错误的,导致汉明空间检索效率低下的原因是当两个相似的数据点具有较大的汉明距离时,它们的损失函数的惩罚很小。因此不能将相关数据点集中到汉明半径2内。
提出解决思路
-
提出一种新的深度哈希模型——深度柯西哈希(DCH),它可以生成集中而紧凑的哈希码,从而实现高效而有效的汉明空间检索。(端到端)
-
提出一种基于柯西分布的成对交叉熵损失,对汉明距离大于给定汉明半径阈值的相似图像对进行显著惩罚。我们进一步提出了一种基于柯西分布的量化损失,它可以学习几乎无损的哈希码。这两个损失函数都可以在贝叶斯学习框架中导出,并适用于汉明空间检索。
深度柯西哈希(DCH)
汉明空间概念
在二进制空间中,我们通常以hamming distance来衡量两个hash code的相似关系。具体来说,就是有多少个相应bit上的值不一致,hamming distance 就是几。在检索领域,我们通常所说的nearest neighbor 就是hamming distance<= r ,r 称为Hamming半径。如下图表示在hypercube中 0100→1001 (红色)的汉明距离是 3; 0110→1110 (蓝色)的汉明距离是 1。
总体框架设计
对于k个bits的hash code,会有这么多个 nearest neighbor。虽然每个hash code的查询时间是O(1),但是随着k的增大,N(K,r)也在迅速增大,所以为了时间效率的考虑,在实际工程中,一般只设r<=2 。因此本文能在r <=2时极大提升检索效果就显得很有现实意义了。
相似度信息S = {sij}可以通过在线搜索引擎中数据点的语义标签或点击数据的相关性反馈来收集。相似度信息S = {sij}可以通过在线搜索引擎中数据点的语义标签或点击数据的相关性反馈来收集。
本文提出的深度框架接受成对的输入图像{(xi, xj, sij)},并通过深度表示学习和二进制哈希编码的端到端管道进行处理:
(1)卷积网络(CNN)的学习深度表示每个图像(特征),
(2)一层全连接散列层(fch)将深度特征转换为位散列码hi∈{1,−1}K,
(3)一种新的用于汉明空间相似性保持学习的柯西交叉熵损失,
(4)一个新的柯西量化损失控制二值化汉明空间中的误差和哈希质量。
结构:深层柯西哈希的体系结构如图1所示。从AlexNet 引申的五个卷积层conv1-conv5和三个全连接层fc6-fc8。用一个新的包含K个隐单元的哈希层 fch 代替分类器层 fc8,将fc7层表示转换为每个图像xi 的K维连续码 zi 。通过符号阈值hi = sgn(zi)来获得哈希码hi。然而,sgn函数的梯度不可定义,我们采用双曲正切函数将连续码zi压缩到[-1,1]内,从而减小了连续码zi与二进制哈希码hi之间的差距。为了进一步保证有效的汉明空间检索的哈希码质量,我们保留训练对(xi, xj, sij)之间的相似度,并控制量化误差,两者都在汉明空间中执行。为此,本文提出了基于长尾柯西分布的两个新的损失函数:成对柯西交叉熵损失和柯西量化损失,两者都是在最大后验概率(Maximum a Posteriori (MAP))估计框架下推导出来。
基于柯西分布的成对交叉熵损失和基于柯西分布的量化损失
贝叶斯学习框架
在本文中,作者提出了一个贝叶斯学习框架,通过共同保持两两图像的相似度和控制量化误差来对相似数据进行深度哈希。给定具有成对相似标签的训练图像为(xi, xj, sij),对于N个训练图像哈希码H = [h1,…hn]的对数最大后验(MAP)估计,可以定义为:
根据误分类的重要性为训练对加权,解决了数据不平衡问题。由于相似标签只能是sij = 1或sij = 0,为了考虑相似对和不相似对之间的数据不平衡,提出:
其中S1 = {sij∈S: sij = 1}是相似对的集合,S0 = {sij∈S: sij = 0}是不相似对的集合。
然后对于每一对训练对,P(sij |hi, hj)是给定一对哈希码hi和hj的条件下是相似标签sij的条件概率,可以由伯努利分布定义,d (hi, hj)表示哈希码hi与hj之间的汉明距离,σ是定义好的概率函数,如式子(3)。
由式(3)可知汉明距离d (hi, hj)越小,条件概率P (1|hi, hj)越大,说明图像对xi和xj属于相似类;否则,条件概率P (0|hi, hj)越大,说明该图像对应分类为不相似。因此,式(3)是二元逻辑回归对二分类场景的合理扩展,是二元相似标签sij{0,1}的自然解。
柯西散列学习
通过贝叶斯学习框架,任何有效的概率函数σ和距离函数d都可以用来实例化特定的哈希模型。为了解决上述sigmoid函数的错误规范问题,我们在Cauchy分布的基础上提出了一个新的概率函数,它具有许多期望的属性。
式中,γ为柯西分布的尺度参数,为了清晰,省略归一化常数,因为不会影响最终的模型。在图中,我们可以观察到,当汉明距离很小时,提出的柯西分布的概率减小得非常快,导致类似的点会被拉到小的汉明半径内。如果使用更小的汉明半径,那么概率的衰减速度将会更快。因此,尺度参数是控制精确率和召回率之间非常重要的的权衡。通过简单的变化,我们可以用不同的汉明半径来支持不同的汉明空间检索场景,从而给出不同的修剪率。
![image-20210729172041855](https://gitee.com/grumpy-brother/picture666/raw/master/img/20210729214734.png)
由于(1)式是二元约束hi {1,-1}K,离散优化非常具有挑战性,为了便于优化,对二元约束进行连续松弛,这是以往大多数哈希方法所采用的方法。为了控制由连续松弛引起的量化错误,并学习高质量的哈希码,基于Cauchy分布的对称变式提出了一个新的先验。
γ是柯西分布的尺度参数,1∈R^K是其中的向量
利用连续松弛,我们需要用连续码上的最佳近似来代替汉明距离。对于一对二进制哈希码hi和hj,它们的汉明距离d(hi, hj)与归一化欧氏距离之间存在良好的关系
连续码上的标准化欧氏距离总是哈希码上的汉明距离的上界。
将式(3)和(5)带入式(1)中的MAP估计框架,得到所提出的Deep Cauchy hash (DCH)优化问题为
λ为权衡柯西交叉损耗L和柯西量化损失Q的超参数,θ为待优化的网络参数集。具体来说,柯西交叉熵损失L被推导为
类似地,柯西量化损失得到如下
数据集:
CIFAR-10
MS COCO
NUS-WIDE
实验结果:
数据集 | 实验 | paper | |
---|---|---|---|
HashNet | CIFAR-10 | 0.762 | - |
48(位) | NUSWIDE81 m | 0.754 | 0.7114 |
Imagenet | 0.634 | 0.6633 | |
MS COCO | 0.724 | 0.7301 | |
DCH@H2 | NUS-WIDE | 0.7720 | |
32(位) | MS COCO | 0.760 | 0.7576 |
CIFAR-10 | 0.794 | 0.8071 |
后续完善实验,尝试其他baseline,尝试绘制Precision曲线和Recall曲线.
问题思考:
1.相似的数据能够集中在一个小的汉明球内,那不相似的呢?(分析概率函数曲线)
2.汉明距离小于等于2,16位编码 汉明最近邻数目为15*8+16=136,也就是每一类最大数目为136,是否适应大的且样本分布不均的数据库?