我读了一些关于 LSH 的论文,我知道它用于解决近似 k-NN 问题。我们可以将算法分为两部分:
给定一个向量D
尺寸(其中D
是大)的任何值,用一组翻译它N
(where N<<D
) 将哈希函数转换为二进制向量N
方面。
使用汉明距离,对从阶段 1 获得的给定二进制代码集应用某种搜索技术来查找 k-NN。
关键点是计算向量的汉明距离N
使用 XOR 维度的速度很快。
无论如何,我有两个问题:
如果我们使用二进制描述符(例如 ORB),第 1 点仍然有必要吗?既然ORB的描述符已经是二进制的,并且我们使用汉明距离来比较它们,为什么我们应该执行第一点?
SIFT 描述的图像如何进行转换?每个 SIFT 描述符都是 128 位,每个图像都由一组描述符来描述。所以我们有矩阵descX128
(where desc
是使用的描述符的数量),而 LSH 通常接受向量作为输入。
1)你可以绕过它,but那么你将在D
尺寸,不N
正如你所说。在哪里N << D
。这意味着算法必须适应D
尺寸也是如此。
2) No.
Read 来自 openCV 的 SIFT http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_feature2d/py_sift_intro/py_sift_intro.html:
- 关键点描述符
现在关键点描述符已创建。周围有一个 16x16 的社区
已采取关键点。它被分为 16 个 4x4 大小的子块。为了
每个子块都会创建 8 个 bin 方向直方图。所以总共有
有 128 个 bin 值可用。它被表示为一个向量来形成
关键点描述符。除此之外,还采取了多项措施
以实现对光照变化、旋转等的鲁棒性。
以下是我的想法,希望这就足够了:
LSH 将点集作为输入,n
点,每个点都位于d
方面。
So, a query is a point, in d
dimensions and the goal is to find its NN*.
现在每个点都代表一个图像描述符。所以,我们有n
我们的图像
数据集。
查询,也是一个点(即带有d
坐标),代表另一个图像描述符。
我们正在寻求匹配(即找到最近的邻居)
使用我们数据集中的图像描述符查询图像描述符。
所以你所说的转换应用于向量中,not一个矩阵。
Edit:
此外,从我们的高维近似最近邻:k-d 广义随机森林 http://arxiv.org/pdf/1603.09596.pdf纸,请参阅实验部分:
SIFT 是一个 128 维向量,通过以下方式描述局部图像块
局部梯度方向的直方图。
*or the Fixed-radius near neighbors https://en.wikipedia.org/wiki/Fixed-radius_near_neighbors problem
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)