大规模图像检索:哈希算法详解与效率提升

需积分: 17 10 下载量 99 浏览量 更新于2024-07-20 收藏 1.82MB PDF 举报
大规模图像检索哈希算法选讲是一篇关于在海量图像检索场景中应用哈希技术的文章,着重于解决如何快速、有效地在大量图像中查找与查询图像相似的图片问题。文章首先介绍了基于内容的图像检索基本流程,包括用户提交原始图像,预处理(如调整大小、增强等),然后进行特征提取,构建图像特征库,以及用户输入待检索图片后的查询过程。 哈希算法的核心概念是将图像的特征转换为一段固定长度的二进制编码,其主要优点在于显著提高了检索速度。通过使用哈希算法,如将传统的特征提取时间(例如SIFT-FV)从0.673s降低到0.106s,同时K-nearest neighbors检索的时间提升接近20倍,达到0.168s,大大提升了系统的实时性能。 有效的哈希算法应满足两个关键特性:一是二进制编码长度要短,以保持速度优势;二是确保相似的图像具有相近的哈希编码,即保持相似性(similarity-preserving)。文章列举了几种常见的哈希算法类别,包括: 1. 数据独立哈希(如局部敏感哈希LSH):这些方法基于数据本身的特性,如LSH通过构造多个随机投影矩阵,将数据映射到低维空间,使得相似的数据点有更高的概率被映射到同一哈希桶。 2. 谱哈希(SH)和量化迭代(ITQ):属于基于数据的无/有监督学习方法,利用矩阵分解或迭代优化技术生成哈希码。 3. 线性和非线性模型:如CCA-ITQ和DBC,以及KSH和BRE,这些可能是结合了深度学习的深度哈希方法,如基于CNN的哈希算法,利用深度神经网络提取高级特征并进行哈希编码。 4. 监督和无监督方法的区别:监督方法通常需要训练样本标签,如深度哈希基于有标注数据进行学习,而无监督方法则无需标签,如LSH和SH。 在数据库预处理阶段,LSH常用于在线查询加速。它通过对原始特征数据进行哈希映射,使得相似数据点更可能出现在同一个哈希桶中,查询时只需找到待查询特征对应的桶,然后在桶内进行线性搜索,降低了复杂度。嵌入过程涉及将高维特征映射到Hamming空间,二级哈希进一步将数据压缩到较小的桶(比如由C维数据压缩到k维,并用一个数值表示桶序号)。 然而,哈希算法也存在一些缺点,如哈希碰撞(不同的图像可能映射到相同的哈希值)、信息损失(编码过程中可能会丢失部分原始特征信息)和计算效率与准确性的权衡。因此,在实际应用中,选择合适的哈希算法需要根据具体需求和数据特性来决定。
2012-09-17 上传
大规模图像检索的代码,matlab与c++混合编程。总结了目前图像检索领域目前主要存在的方法。通过阅读该代码,可以对于经典的“词袋”模型(bow模型)有个具体的了解,但是该代码没有提供前序的特征提取,是直接从对提取好的特征向量聚类开始的,包括了k-means,分层k-means(HKM)聚类,倒排文件的建立和索引等,该代码还提供了局部敏感哈希(LSH)方法。最后,这份代码是下面这篇论文的作者提供的, Indexing in Large Scale Image Collections: Scaling Properties and Benchmark-This C++/Matlab package implements several algorithms used for large scale image search. The algorithms are implemented in C++, with an eye on large scale databases. It can handle millions of images and hundreds of millions of local features. It has MEX interfaces for Matlab, but can also be used (with possible future modifications) from Python and directly from C++. It can also be used for approximate nearest neighbor search, especially using the Kd-Trees or LSH implementations. The algorithms can be divided into two broad categories, depending on the approach taken for image search: 1. Bag of Words: ---------------- The images are represented by histograms of visual words. It includes algorithms for computing dictionaries: * K-Means. * Approximate K-Means (AKM). * Hierarchical K-Means (HKM). It also includes algorithms for fast search: * Inverted File Index. * Inverted File Index with Extra Information (for example for implementing Hamming Embedding).