位置敏感哈希Locality-Sensitive Hashing

本文介绍了图像检索中的位置敏感哈希(LSH)技术,用于处理高维特征空间的近似最近邻搜索问题。LSH通过哈希函数保持原始空间中的距离相似度,使得相近的点在低维空间中仍有较高概率碰撞。内容涵盖了LSH的基本思想、常见的LSH构造方法,如随机投影和稳定分布,以及如何通过多个哈希表提高检索召回率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      图像检索其基本定义为给定的一个包含个图像数据集,每个图像可以用一个维的特征向量来描述,因此整个图像数据集就映射为维空间的个点,在此维空间中用一个相似度度量函数来测量两个图像点之间的距离,对于任意给定的查询点,需要设计一个数据结构,来快速的返回距离最近(Nearest Neighbor)的图像点(或者Ranking的多个点)。

    当较小时(10-20),可采用如的结构,但当较大时(一个Discriminative的图像描述向量通常成百上千甚至万维),其查询时间将随指数级增长,这就是通常所说的维数灾难"the curse of dimensionality", 同时较大时,其所需的存储空间也变的intolerable。因此降维和Approximation NN算法通常会用到当前的检索系统中,ANN搜索就是对于给定的查询点,若数据集中存在点 距其小于距离 ,允许系统返回点 ,where,则称为搜索。

      

      当前图像检索要求快、准、同时可容易的扩展至大规模数据web-scale:

Fast:hashing structure,small code, ANN; 

Accurate: discriminative feature fingerprint; 

Scalable: very little memroy.

    由此可见,紧凑的fingerprint和有效的hash结构对整个检索系统至关重要,目前的图像检索系统中,常采用Hashing技术将高维的图像特征编码为低维的特征,在映射后的 空间中采用一定的距离度量进行Approximation Nearest Neighbors (ANN)搜索:

定义Hash函数集: 是原始的  维特征空间, 是经hash函数集 散列后的  维空间,根据哈希函数设计的不同,可将Ha

以下是使用Python实现Locality-sensitive hashing(LSH)算法的示例代码: ```python import numpy as np import hashlib # 生成一些随机数据 data = np.random.rand(1000, 10) # 设置LSH参数 num_tables = 10 num_hashes = 5 hash_size = 10 # 初始化LSH表 tables = [{} for _ in range(num_tables)] hash_funcs = [hashlib.sha1, hashlib.md5, hashlib.sha256, hashlib.blake2s, hashlib.sha3_256] # 建立LSH表 for i in range(num_tables): for j in range(1000): hash_values = [] for k in range(num_hashes): hash_value = hash_funcs[k](data[j].tostring()).hexdigest()[:hash_size] hash_values.append(hash_value) hash_key = ''.join(hash_values) if hash_key not in tables[i]: tables[i][hash_key] = [] tables[i][hash_key].append(j) # 查询近似相似的数据点 query = np.random.rand(10) query_hash_values = [] for k in range(num_hashes): hash_value = hash_funcs[k](query.tostring()).hexdigest()[:hash_size] query_hash_values.append(hash_value) query_hash_key = ''.join(query_hash_values) similar_points = set() for i in range(num_tables): if query_hash_key in tables[i]: similar_points.update(tables[i][query_hash_key]) print(similar_points) ``` 这段代码生成一个大小为1000的随机数据集,并使用LSH算法建立10个LSH表。然后,给定一个查询点,代码计算查询点的哈希值,并在每个LSH表中查找具有相同哈希值的数据点。最后,代码返回所有这些数据点的索引,这些数据点与查询点相似。在实际应用中,可以使用更复杂的哈希函数和更多的LSH表来提高准确性和效率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值