图像语义哈希方法总结

最近在回顾一些经典的图像哈希算法,本文大致介绍了一些常用的图像哈希算法,暂时先列一个框架,待日后补充。

参考链接:
【1】基于内容的图像哈希算法研究
【2】图像聚类-谱聚类
【3】球哈希Spherical Hashing

部分哈希源码及大牛的链接:图像检索:Hashing图像检索源码及数据库总结


一、单模态哈希:

LSH (Locality Sensitive Hashing,局部敏感哈希)

论文链接:Approximate Nearest Neighbors: Towards Removing the Curse of Dimensionality - STOC1998
LSH扩展及实现链接:LSH Algorithm and Implementation (E2LSH)

局部敏感哈希是最初的用来做图像哈希索引的算法,基本思想是使用一组哈希函数将数据散列到不同的桶中,即令相近的数据落在同一个哈希桶中,越相似的数据落到同一个桶中的概率越大。

下图描述了LSH算法流程:
这里写图片描述

SH (Spectral Hashing,谱哈希)

论文及其实现链接:Spectral Hashing and its Implementation - NIPS08

谱哈希首先分析和总结了图像哈希编码应满足的条件,即:
( 1)获得新图像哈希编码的算法易于实现;
( 2) 语义相同的图像有相同或相近的哈希编码序列,语义不同的图像得出差异性较大的哈希编码序列;
( 3) 图像的内容特征用较短的哈希编码序列就能表示。

为达到这三个条件的要求,谱哈希将编码过程视为图分割过程,对高维数据集进行谱分析,通过放松约束条件将问题转化成拉普拉斯特征图的降维问题,从而求解得到图像数据的哈希编码。

(推导省略)

SH算法的步骤:
第一步: 采用主成分分析(PCA)算法获取图像数据的各个主成分方向;
第二步:在每个主成分方向按论文公式(5)计算特征值,并选取前 r 个最小的值,总共得到 r * d 个特征值, 再将其按从小到大的顺序排序,取前 r 个最小的特征值,计算其对应的特征函数值;
第三步:将特征函数值在零点进行二元量化(sign函数)得到哈希编码。

主成分分析(PCA)算法是最常用的降维算法之一,但每个主成分方向上的方差是不同的,方差较大的主成分方向包含更多的信息。在每个主成分方向上用相同长度的二元码对图像进行编码是不合理的,因此谱哈希为方差大的主成分方向分配更多的比特。

至于为什么可以用特征向量来求解哈希码,下面给出一个证明:(证明来自最优化导论,其中xTQx对应YT(D-W)Y)

这里写图片描述
这里写图片描述
上面证明中的形式是最大化(max)故取最大特征值,SH是最小化(min)取最小特征值。
谱哈希的缺点是它有两个条件在实际情况中很难同时得到满足,即假设数据是从多维均匀分布中采样得到的而且要求不同维度上的哈希编码之间相互独立,因此谱哈希的广泛使用受到了限制。

AGH (Anchor Graph Hashing,锚点图哈希)

论文链接:Hashing with Graphs - ICML11

AGH受谱哈希的启发,提出了与谱哈希相同的优化问题,但对目标函数的求解过程设计了自己的方案,脱离了数据是从多维均匀分布中采样得到这一先验假设的束缚,用近似邻接矩阵 A 代替邻接矩阵W (锚点图A是n*m的, 而邻接矩阵W是n*n的, m远小于n),降低了时间复杂度,具有更好的广泛适用性。
AGH的基本思想是用数据聚类中心与每个数据样本点之间的近邻图去近似数据样本点与样本点之间的近邻图,用近似邻接矩阵代替原来的邻接矩阵。

AGH步骤如下:
第一步:对图像训练数据集进行聚类,得到 m 个聚类中心,每个聚类中心称为一个锚点;
第二步:建立锚点与图像训练数据中每个样本点之间的关系,称为锚点图,用矩阵 Z 表示,矩阵中每个元素使用论文中公式(2)计算;
第三步:根据 A=ZX-1ZT 构造近似邻接矩阵 A,最后使用论文中公式(5)(6)得到最终的哈希码。

Discrete Graph Hashing (离散图哈希)

论文链接:Discrete Graph Hashing-NIPS-14
论文+附录:discrete-graph-hashing

简单理解:1. AGH建立锚点图;2. 去除松弛约束,直接对于离散约束求解

训练时哈希码通过对离散约束求解得来,当进行测试查询时,对于query q,B(q)=sign(Wz(q)),z(.)是一个非线性核映射(本文使用高斯核)。

SDH (监督离散哈希)

论文链接:Supervised Discrete Hashing - CVPR15
直接贴损失函数:
这里写图片描述
Y是标签,将哈希码映射到Y上来保持原始空间相似性信息,F(x)是将原始特征通过核函数进行一个非线性映射,具体来说就是先从n个样本中选出m个锚点( m<<n m << n ),可以求n个样本与m个锚点间的欧氏距离作为新特征,这样n*d的原始特征矩阵就转换为n*m的新特征矩阵,这种方式主要是用来增加非线性的。

这里还要注意一点,SDH没有对哈希码做松弛,也就是哈希码在训练过程中一直是离散的(只取-1和1),目前来看离散哈希性能都会超过松弛方法的,因为松弛之后量化误差会变大。

主要思想:
1. 通过将哈希码映射到 label 标签信息上,从而不需要通过计算相似性矩阵来将标签信息嵌入到哈希码生成过程当中;
2. 不对离散约束进行松弛,直接使用DCC算法在离散约束下按位求解哈希码。

FSDH(快速监督离散哈希)

这里写图片描述
SDH的一个小小的改进,把B和Y的位置换了一下,因为这样优化的时候不需要使用SDH用的DCC逐位哈希码优化方式,训练速度加快,但性能有所下降。可阅读原论文思考其思路以及理论分析。

STH(自教哈希)

这里写图片描述
思想很简单,对输入数据(n*d)先使用无监督方法生成哈希码,然后使用哈希码作为监督信息,进行有监督训练得到哈希函数,从而生成database和query的哈希码。

二、量化:

PQck-means在前面的一篇博客中写过,这里不再赘述,链接:量化方法之PQ and ck-means

ITQ (Iterative Quantization, 迭代量化哈希)

ITQ 是一种基于PCA的图像哈希算法,不同于谱哈希为方差大的主成分方向分配更多的比特, ITQ 通过旋转主成分方向使得旋转后各方向的方差尽量保持平衡。

ITQ步骤:
1. 首先用 PCA 对数据进行降维并对降维后的结果进行二值量化处理得到所有数据的初始哈希编码,这样原始数据被嵌入到了汉明空间中,各数据位于超立方体的顶点上;
2. 对主成分方向进行一次随机旋转,可以较好的平衡不同主成分方向的方差,接着对编码矩阵和旋转矩阵进行交替优化,以最小化量化误差为目标,旋转若干次后将得到局部最优解。

整个过程可以概括为:先对原始特征进行PCA降维得到V,然后寻找量化误差最小的旋转矩阵R,训练完毕后即可得到对应的哈希码B。核心代码如下:
这里写图片描述

先生成随机矩阵并对其进行SVD分解得到对应的正交矩阵作为R的初始值,然后固定R求B, B=sgn(V×R) (注意这里截距 b=0 ,因为在原空间已对数据中心化,非常重要),B求出来再通过对 B×V 进行SVD更新R,交替迭代若干次即可,文中选用的是50次。

下图是 ITQ 的基本思想示意图:
这里写图片描述
红线代表主成分方向,将数据向各主成分方向投影后进行二值量化得到的编码具有较大的误差,同一类数据被不同的哈希编码序列表示了出来,也就是类似的图像落在了不同的哈希桶中。(b)对主成分方向进行了一次随机旋转,减小了投影值与哈希编码之间的量化误差。(c)是通过 ITQ 优化后得到的最终的投影向量及哈希编码序列,可以看到,此时量化误差达到最小,同一类数据落在了同一个哈希桶中。

ITQ 不同于 SH 需要假设数据集服从均匀分布,因此适用范围更广泛,而且还可以与典型相关分析算法 (Canonical Correlation Analysis, CCA) 结合,构成有监督的哈希方法,可以对具有标签的图像数据库进行检索。

三、跨模态哈希:

SePH


To be continued!!!

  • 9
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
图像和文本特征映射到统一语义哈希空间可以用多种方法,下面我介绍两种常见的方法。 1. 基于深度学习的方法 基于深度学习的方法图像和文本特征提取方面已经有了很大的进展。我们可以使用卷积神经网络(CNN)和循环神经网络(RNN)来提取图像和文本的特征。然后,我们可以使用自编码器(autoencoder)或生成对抗网络(GAN)等方法将这些特征映射到统一的语义哈希空间。 具体来说,我们可以使用两个网络,一个是图像特征提取器,另一个是文本特征提取器。这两个网络将图像和文本分别转换为特定的向量表示。然后,我们可以使用一个统一的哈希网络,将这些向量映射到统一的语义哈希空间中。在这个过程中,我们可以使用一些损失函数,比如对比损失函数,来在统一语义哈希空间中对相似的图像和文本进行近似匹配。 2. 基于传统机器学习的方法 基于传统机器学习的方法通常使用一些手工制作的特征来表示图像和文本。比如,对于图像,我们可以使用颜色、纹理和形状等特征。对于文本,我们可以使用词频、TF-IDF等特征。然后,我们可以使用一些传统的机器学习算法,如SVM、朴素贝叶斯等,将这些特征映射到统一的语义哈希空间中。 总之,将图像和文本特征映射到统一语义哈希空间是一个复杂的问题,需要综合考虑多种因素,包括特征提取、哈希函数设计、损失函数设计等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值