专栏首页AI科技时讯图像搜索|高维空间最近邻逼近搜索算法

图像搜索|高维空间最近邻逼近搜索算法

业务场景

上一次介绍图像搜索的基本原理,现在记录下使用的数据包的问题。 查询图片先进行特征提取,使用一个向量来表示,之后使用该向量与数据库中所有的商品向量进行计算相似度指标,比如cos距离,欧式距离,汉明距离。 具体的取决于向量的形式,有的先用cnn提取特征向量,可以计算其cos距离,有的提取之后对其进行哈希编码,先用汉明距离进行粗排,之后按照欧式距离进行重排。 这里就面临这样的一个问题:

  • 特征向量一般都是高维,使用暴力算法计算相似度的话会非常耗时,满足不了实际应用场景;

没有等你算完,使用者的心就哇凉哇凉的,没有耐心等待的,而使用淘宝拍立淘的时候,响应速度非常快,用户体验很好! 这个时候就需要考虑使用一些快速计算的方法——ANN。

ANN

一看到ANN,第一反应应该是人工神经网络,这里是Approximate Nearest Neighbor,近似邻居算法。 关于这方面的算法有很多,比如Annoyscikit-learnhnswlib, nmslib等等。 几乎所有的ANN方法都是对全空间的划分,大多数使用的树模型,详细的介绍可以上网查询一下,这里介绍本人使用过的nmslib包讲解。

NMSLIB

项目地址:https://github.com/nmslib/nmslib 非度量空间库(NMSLIB)是一种高效的跨平台相似性搜索库和用于评估相似性搜索方法的工具包。核心库并没有任何第三方依赖。 NMSLIB是一个可扩展的库,这意味着可以添加新的搜索方法和距离函数。NMSLIB可以直接在C ++和Python中使用。此外,还可以构建一个查询服务器,可以从Java(或Apache Thrift支持的其他语言)中使用。 这里介绍python的使用方法。

实例

import nmslib as nms

上述代码只是片段,详细讲解下各个参数的设置

  • method : `hnsw'方法;
  • space: 'cosinesimil'空间;
  • INDEX_TIME_PARAMS: 详细参数

关于参数的设置可以见

  • https://github.com/nmslib/nmslib/blob/master/python_bindings/parameters.md

参考

  • 高维空间最近邻逼近搜索算法评测(https://zhuanlan.zhihu.com/p/37381294?spm=a2c4e.11153940.blogcont697621.16.3ef936ddMFh7on);
  • 图像检索:再叙ANN Search(https://yongyuan.name/blog/ann-search.html?spm=a2c4e.11153940.blogcont697621.17.3ef936ddMFh7on);
  • nmslib文档(https://benfred.github.io/nmslib/?spm=a2c4e.11153940.blogcont697621.18.3ef936ddMFh7on)

本文分享自微信公众号 - AI科技时讯(aiblog_research),作者:海棠

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 机器学习研究人员需要了解的8个神经网络架构(上)

    在这篇文章中,我想与大家分享8个神经网络体系结构,我相信任何一个机器学习的研究人员都应该熟悉这一过程来促进他们的工作。

    用户3578099
  • 推荐系列(一):什么是推荐?

    YouTube如何知道你可能希望接下来要观看的视频?Google Play商店如何为你挑选应用?这些恰到好处的推荐是魔法吗?答案当然是不,上述情况下,基于机器学...

    用户3578099
  • 在一头扎进机器学习前应该知道的那些事儿

    机器学习一直是一个火热的研究领域,深度学习方法的提出又为这个领域添了一把火,使得很多人对该领域感兴趣并想投身于该领域的研究之中。那么,对于想从事机器学习领域的人...

    用户3578099
  • 2018年房价到底会不会涨!

    从长期来看,由于我国人口基数大,以及目前我国的城市化进程已经进入“下半场”,人口流向是从小城市流向中心城市,一二线城市的住房需求还有膨胀空间;从中期来看,我国的...

    华章科技
  • 微信小程序版2048小游戏(附源码)

    最近流行微信“跳一跳”小游戏,我也心血来潮写了一个微信小程序版2048,本篇文章主要分享实现2048的算法以及注意的点,一起来学习吧!(源码地址见文章末尾)

    疯狂的小程序
  • 大数据技术之_14_Oozie学习

      Oozie 英文翻译为:驯象人。一个基于工作流引擎的开源框架,由 Cloudera 公司贡献给 Apache,提供对 Hadoop MapReduce、P...

    黑泽君
  • 经典机器学习书籍推荐

    入门书单 《数学之美》 作者吴军大家都很熟悉。以极为通俗的语言讲述了数学在机器学习和自然语言处理等领域的应用。 《Programming Collective ...

    昱良
  • Hexo-完全免费全平台搭建个人博客(1)-整体搭建

    2017-03-0911:04:17 发表评论 2,405℃热度 几个月前就想写这篇文章了,很多人也让我写过,也帮很多人搭建过,但是一直没时间纪录下来,这次有...

    timhbw
  • Python图像处理库:Pillow 初级教程

    Pillow由PIL而来,所以该导入该库使用import PIL 本文相关的代码:https://github.com/445141126/pillow_ex...

    CDA数据分析师
  • 我是如何通过网络摄像头分析wifi密码的

    看到 exploit-db.com 中报了一个《Netwave IP Camera - Password Disclosure》漏洞, 这个漏洞包含了wifi密...

    C4rpeDime

扫码关注云+社区

领取腾讯云代金券