二元特征和局部敏感散列(LSH)(Binary features and Locality Sens

2019-07-18 03:48发布

我学习FLANN,对近似最邻近搜索库。

对于LSH方法但是它们代表一个对象(在搜索空间中的点),为unsigned int的阵列。 我不知道他们为什么这样做,并不能代表一个点仅仅作为一个双阵列(其将代表多维向量空间中的点)。 也许是因为LSH用于二进制功能? 有人可以分享更多有关在这种情况下可能使用unsigned int型的? 为什么无符号整数,如果你只需要各功能的0和1?

谢谢

Answer 1:

请注意,我指的是最新版本FLANN,即flann-1.8.3在写作的时候。

对于LSH方法但是它们代表一个对象(在搜索空间中的点),为无符号整数的数组

编号:这是错误的。 所述LshIndex类包括一个buildIndexImpl实现该LSH索引方法。 由于LSH基本上是哈希表的集合,有效索引发生在LshTable类。

基本索引方法,即,索引每次一个特征矢量(又名描述符,或点)是该方法:

/** Add a feature to the table
 * @param value the value to store for that feature
 * @param feature the feature itself
 */
void add(unsigned int value, const ElementType* feature) {...}

注: buildIndexImpl方法使用替代形式,简单地迭代的特征,并呼吁上述各方法。

正如你可以看到,该方法具有2个参数是一对(ID, descriptor)

  1. valueunsigned int表示的特征向量唯一数字标识符(又名特征指数)
  2. feature表示特征矢量本身

如果看一下实施你可以看到的是,第一步骤包括在哈希描述符值,以获得相关的桶键(=指向其中该描述符ID将存储桶中的时隙的标识符):

BucketKey key = getKey(feature);

在实践中, getKey哈希函数是二进制描述符,其可以被表示为的阵列,即描述符执行unsigned char

// Specialization for unsigned char
template<>
inline size_t LshTable<unsigned char>::getKey(const unsigned char* feature) const {...}

也许是因为LSH用于二进制功能?

是:如上所述,该FLANN LSH执行工作在海明空间的二进制描述。

如果你使用与实际值的描述符(在R**d )你应该指的是原始论文 ,其中包括有关如何将特征向量转换成二进制字符串,以便使用海明空间和散列函数的详细信息。

有人可以分享更多有关在这种情况下可能使用unsigned int型的? 为什么无符号整数,如果你只需要各功能的0和1?

见上面:在unsigned int值仅用于存储每个特征向量的相关ID。



文章来源: Binary features and Locality Sensitive Hashing (LSH)