图像检索(6):局部敏感哈希索引(LSH)

图像检索中,高维度数据的高效检索是挑战。LSH(Locality Sensitive Hashing)是一种用于高维数据的近似最近邻搜索算法,适用于大数据集。LSH的基本思想是,相似的向量在哈希后有较大概率拥有相同的哈希值,反之则概率较小。通过选择满足特定条件的哈希函数,可以提高相似向量的检索概率。LSH最初在Hamming距离下找到合适的函数,通过将曼哈顿距离的向量转换为Hamming空间来实现。通过调整哈希表数量和哈希键长度,可以增大相似向量的查找概率,提高检索效率。
摘要由CSDN通过智能技术生成

图像检索中,对一幅图像编码后的向量的维度是很高。以VLAD为例,基于SIFT特征点,设视觉词汇表的大小为256,那么一幅图像编码后的VLAD向量的长度为$128 \times 256 = 32768 $。通常要对编码后的VLAD向量进行降维,降维后的向量长度应该根据图像库中图像量的大小来,如果只是几百张的小的图像库,那么可以降维到128甚至是64维,在这种情况下降维后的VLAD向量仍然有很好的区分度;但是如果图片库的数量是几千,几万张,如果VLAD降维的维度太低,损失的信息过多,就不能有很好的区分度,维度过低检索的精度就会低很多。为了保证检索的精度,VLAD向量要有1024或者2048的维度。

以上数据是笔者经历的项目的经验值,并不一定适合所有的情况。

如果是在低维度的小数据集中,可以使用线性查找(Linear Search)的方法,但是在高纬度大数据集中,线性查找的效率很低,显然是不可行的。如何的从大的高维数据集中找到与某个向量最相似的一个或多个向量,是图像检索中一个难点。

在这种高纬度大数据集中的检索,通常需要使用最近邻最相似查找(Approximate Nearest Neighbor,ANN)的方法。ANN的相似性检索算法,大体可以分为三大类:

  • 基于树的方法,KD-树为代表。对于低维度的数据,KD树的查找性能还是比较高效的;但当空间维度较高时,该方法会退化为暴力枚举,性能较差,这时一般会采用下面的哈希方法或者矢量量化方法。
  • 哈希方法
    • LSH Locality Sensitive Hashing 为代表,对于小数据集和中等数据集效果不错
  • 矢量量化
    • vector quantization,在矢量量化编码中,关键是码本的建立和码字搜索算法。比如常见的聚类算法,就是一种矢量量化方法。而在相似搜索中,向量量化方法又以PQ方法为代表
    • 对于大规模数据集,矢量量化是个很好的选择

LSH

LSH(Locality Sensitive Hashing)位置敏感哈希,局部敏感哈希
最近邻最相似搜索算法的一种,有比较可靠的理论根据且在高维数据中表现比较好,很适合应用在图像检索中。
与一般的哈希算法不同的是其位置敏感性,也就是散列前类似的点(距离近的点),在散列后仍然能够保证在一定程度的相似,且有一定的概率保证。

LSH和普通哈希的区别
439761-20181016094829014-1916276979.jpg

基本思想

LSH不像树形结构的方法可以得到精确的结果,LSH所得到的是一个近似的结果,因为在很多领域中并不需非常高的精确度。即使是近似解,但有时候这个近似程度几乎和精准解一致。
LSH的主要思想是,高维空间的两点若距离很近,那么设计一种哈希函数对这两点进行哈希值计算,使得他们哈希值有很大的概率是一样的。同时若两点之间的距离较远,他们哈希值相同的概率会很小。

LSH哈希函数要满足的性质
一个哈希函数满足以下性质时,被称为\((R,cR,P_1,P_2)\)-sensive,对于高维空间的任意两点\(x,y\)

  • 如果\(d(x,y) \le R\),则\(h(x) = h(y)\)的概率不小于\(P_1\)
  • 如果\(d(x,y) \ge cR\),则\(h(x) = h(y)\)的概率不大于\(P_2\)

其中\(d(x,y)\)是两个点\(x,y\)之间的距离,\(h\)是哈希函数,\(h(x)\)\(h(y)\)是对点\(x,y\)的哈希变换,并且需要满足:

  • \(c > 1\)
  • \(P_1 > P_2\)

LSH的原理是挺简单的,其核心有两个:

  • 两个高维向量的相似性的度量
  • \((R,cR,P_1,P_2)\)-sensive哈希函数的选择

LSH的哈希函数的选择取决于其选择的相似性度量方法,当然并不是所有向量相似性度量的方法都能找到相应的LSH函数,比如LSH最初提出的时候时候基于欧式距离的度量方法就没有找到合适的LSH函数。

Origin LSH

最初设计的LSH应该是想基于欧式距离(\(L_2\)),但是对于欧式距离当时没有找到合适的LSH函数;但是在曼哈顿距离(\(L_1\))下找到了合适的LSH函数。所以,就有了一个假设,向量所在的原始空间中\(L_1\)\(L_2\)度量的效果相差不大,也就是说用\(L_1\)来代替\(L_2\)
所以就有两个准则:

  1. 使用\(L_1\)也就是曼哈顿距离进行度量。 基于假设\(L_1\)\(L_2\)的度量效果相差不大。
  2. 向量的各个分量,要被正整数化,方便进行01编码。

为什么要进行01

the code from net,share with you: 获取图像库里所有图片文件的名称 Blue hills.jpg Lena.jpg myhand1.jpg myhand2.jpg Sunset.jpg Test2.jpg Test3.JPG Water lilies.jpg Winter.jpg 获取图像特征 0 36 82 115 132 164 200 142 129 119 54 1 198 141 101 64 43 65 124 200 197 186 2 104 40 25 34 81 88 56 108 131 199 3 142 56 43 61 117 121 107 160 120 200 4 46 67 80 104 200 193 90 66 59 43 5 121 110 141 149 200 195 171 144 123 116 6 99 125 116 88 68 82 99 141 200 104 7 200 178 175 151 154 183 156 159 164 177 8 131 161 192 199 181 182 186 174 147 129 获取随机点位 将整数转换为01 特征值MD5压缩处理 1 733c7ccfc61b08a62633fc2356b90478 2 bdc6c147ad15bcf1bd91e343ec15d4f8 3 70a0d1a5d191e0bd3ceb65003ce4e386 4 1d8d003fe0d417eb1d3413773e58f4de 5 b04a5fd1301bf66c192a23e155236dd5 6 0d7afe69ff25e61710e7f63d5a7779ca 7 0b534a69d1eb5edfd7fef486b9270fc7 8 373b04655e21dee1372e374916a7774f 9 68b400bf74bc815844f58e19ead1ceb7 1 733c7ccfc61b08a62633fc2356b90478 2 bdc6c147ad15bcf1bd91e343ec15d4f8 3 70a0d1a5d191e0bd3ceb65003ce4e386 4 1d8d003fe0d417eb1d3413773e58f4de 5 b04a5fd1301bf66c192a23e155236dd5 6 0d7afe69ff25e61710e7f63d5a7779ca 7 0b534a69d1eb5edfd7fef486b9270fc7 8 373b04655e21dee1372e374916a7774f 9 68b400bf74bc815844f58e19ead1ceb7 1 733c7ccfc61b08a62633fc2356b90478 2 bdc6c147ad15bcf1bd91e343ec15d4f8 3 70a0d1a5d191e0bd3ceb65003ce4e386 4 1d8d003fe0d417eb1d3413773e58f4de 5 b04a5fd1301bf66c192a23e155236dd5 6 0d7afe69ff25e61710e7f63d5a7779ca 7 0b534a69d1eb5edfd7fef486b9270fc7 8 373b04655e21dee1372e374916a7774f 9 68b400bf74bc815844f58e19ead1ceb7 1 733c7ccfc61b08a62633fc2356b90478 2 bdc6c147ad15bcf1bd91e343ec15d4f8 3 70a0d1a5d191e0bd3ceb65003ce4e386 4 1d8d003fe0d417eb1d3413773e58f4de 5 b04a5fd1301bf66c192a23e155236dd5 6 0d7afe69ff25e61710e7f63d5a7779ca 7 0b534a69d1eb5edfd7fef486b9270fc7 8 373b04655e21dee1372e374916a7774f 9 68b400bf74bc815844f58e19ead1ceb7 1 733c7ccfc61b08a62633fc2356b90478 2 bdc6c147ad15bcf1bd91e343ec15d4f8 3 70a0d1a5d191e0bd3ceb65003ce4e386 4 1d8d003fe0d417eb1d3413773e58f4de 5 b04a5fd1301bf66c192a23e155236dd5 6 0d7afe69ff25e61710e7
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值