faiss的python接口使用

  • 1. 简介
  • 2. 安装
  • 3. 示例

1. 简介

faiss是一种ann(Approximate Nearest Neighbor)库,可以用于特征的入库,检索。

不仅可以在cpu上使用,还可以利用GPU进行检索,提高检索的速度。

具体可以参考:https://github.com/facebookresearch/faiss

2. 安装

cpu版本,适用于各个系统

pip install faiss-cpu

cpu + gpu版本,目前不适用于windows系统

pip install faiss-gpu

3. 示例

  1. 新建索引

    import faiss# 传入特征维度
    dim = 2048# IndexFlatIP表示利用内积来比较特征的相似度
    # 这里一般会让提取的特征进行L2归一化,那么内积就等于余弦相似度
    index_ip = faiss.IndexFlatIP(dim)# IndexFlatL2表示利用L2距离来比较特征的相似度
    index_l2 = faiss.IndexFlatL2(dim)
    
  2. 添加特征入库

    import numpy as np# 新建一个特征,维度为2048,shape为(1, 2048)
    feature = np.random.random((1, 2048)).astype('float32')
    index_ip.add(feature)# 当然,也可以一次性添加多个特征
    features = np.random.random((10, 2048)).astype('float32')
    index_ip.add(features)# 打印index_ip包含的特征数量
    print(index_ip.ntotal)
    
  3. 自己指定每个特征的id

    在第2步中,添加特征的id是根据特征入库的顺序对应的,如果想自己指定id,可以用IndexIDMap包装一层,代码如下所示:

    index_ids = faiss.IndexFlatIP(2048)
    index_ids = faiss.IndexIDMap(index_ids)# 添加特征,并指定id,注意添加的id类型为int64
    ids = 20
    feature_ids = np.random.random((1, 2048)).astype('float32')
    index_ids.add_with_ids(feature_ids, np.array((ids,)).astype('int64'))
    

    这里要注意,包装的索引必须是空的,即一开始新建索引之后,就进行包装,不能入库过一些特征后中途再包装。

  4. 检索

    feature_search = np.random.random((1, 2048)).astype('float32')# 检索最相似的topK个特征
    topK = 5
    D, I = index_ip.search(feature_search, topK)
    # 返回的D表示相似度(或者距离), I表示检索的topK个特征id(索引)
    
  5. 保存/读取索引文件

    faiss的另一个优点是,可以将保存着特征的索引持久化,保存为文件,类似数据库,这样就不用每次都提取特征了。

    # 保存索引
    faiss.write_index(index_ip, 'my.index')# 读取索引
    index = faiss.read_index('my.index')
    
  6. GPU的使用

    # 利用单个gpu
    res = faiss.StandardGpuResources()gpu_index = faiss.index_cpu_to_gpu(res, 0, index_ip)
    

其他操作可以参考faiss在github上的地址。

结束。

faiss的python接口使用相关推荐

  1. Faiss(12):python接口faiss.py文件分析

    1. 前言 本篇笔记主要分析faiss code下的python接口文件--faiss.py的工作流程以及内容. 2. faiss.py分析 2.1 导入文件 在faiss code 编译完成后,在p ...

  2. python接口自动化5-Json数据处理

    前言 有些post的请求参数是json格式的,这个前面第二篇post请求里面提到过,需要导入json模块处理. 一般常见的接口返回数据也是json格式的,我们在做判断时候,往往只需要提取其中几个关键的 ...

  3. 安装mysqldb python接口时找不到mysql_config

    我正在尝试使Python脚本在通过ssh连接到的Linux服务器上运行. 该脚本使用mysqldb. 我有我需要的所有其他组件,但是当我尝试通过setuptools安装mySQLdb时,如下所示: p ...

  4. caffe python接口_ubuntu配置caffe的python接口pycaffe

    参考网站: ubuntu配置caffe的python接口pycaffe 依赖 前提caffe已经正确编译.见Ubuntu配置caffe库包sudo apt-get install python-pip ...

  5. python自动化测试视频百度云-Python接口自动化测试视频教程下载

    Python接口自动化测试视频教程下载 课程介绍: 此套Python接口自动化测试视频教程适合入门接口测试和学习python+requests自动化的学员学习,教程对http协议.fiddler抓包与 ...

  6. python自动化测试视频百度云-Python接口自动化测试 PDF 超清版

    给大家带来的一篇关于Python自动化相关的电子书资源,介绍了关于Python.接口自动化.测试方面的内容,本书是由电子工业出版社出版,格式为PDF,资源大小61.2 MB,王浩然编写,目前豆瓣.亚马 ...

  7. python自动化测试视频百度云-python接口自动化测试视频教程全集

    python接口自动化测试视频教程全集 下载地址:https://k.weidian.com/Pfm=DyuI 课程内容: 第一章:接口测试基础 1-1 接口自动化课程简介 1-2 接口测试课程大纲 ...

  8. Caffe学习系列(13):数据可视化环境(python接口)配置

    原文有更新: Caffe学习系列(13):数据可视化环境(python接口)配置 - denny402 - 博客园 http://www.cnblogs.com/denny402/p/5088399. ...

  9. caffe预测、特征可视化python接口调用

    转载自: 深度学习(九)caffe预测.特征可视化python接口调用 - hjimce的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/hjimce/articl ...

最新文章

  1. .NET Core如何为项目提供高性能解决方案?
  2. powerdesigner使用vba脚本创建物理模型的表和列
  3. Python 基本数据类型、运算符
  4. 用友软件工程IT应用研究院
  5. Windows Phone 7中用好Silverlig“.NET研究”ht开发利器
  6. mysql单表索引个数_MySQL性能:多个表与单个表和分区上的索引
  7. JAVA环境变量JAVA_HOME、CLASSPATH、PATH设置详解
  8. 正在爆发的互联网革命
  9. PHP 根据URL将图片下载到本地(curl爬取)
  10. QT Opencv 抽奖系统
  11. 用python做曲_谁在用 python 弹奏一曲《菊花台》
  12. P、NP、NPC、NP-Hard
  13. 误删除文件恢复工具免费下载
  14. 在注视之外:对于认知和认知发展研究,眼动追踪还能揭示什么?
  15. 基于ssm的酒店客房管理系统(含数据库结构文档)
  16. Python API+Postman+jmeter
  17. Mac电脑优点是什么,缺点是什么?
  18. CSDN怎么改变字体颜色
  19. pbl和sbl_探讨:PBL教学法
  20. 如何构建故障与危机的处理能力?《高可用及容灾架构体系化建设》下篇

热门文章

  1. SCSI协议与iSCSI协议
  2. VC操作Excel之基本操作
  3. 谷歌 | 最新110亿参数的T5模型17项NLP任务霸榜SuperGLUE!
  4. centos 配置consul集群 开机启动 次选(启动命令)
  5. svga文件预览_开篇:SVGA的简单介绍
  6. 2020.03.08测试题4
  7. 高铝水泥与硅酸盐水泥或石灰混合使用
  8. 做程序员一般都需要什么学历?大厂招不招低学历?你想知道的都在这里了
  9. 在AWS中国区使用kops安装k8s完全指南
  10. 小米手环4怎么使用_小米手环4入手评测 小米手环4怎么使用