1,支持两种相似性计算方法:L2距离(即欧式距离)和点乘(归一化的向量点乘即cosine相似度);

2,按照是否编码压缩数据可以分为两类算法,使用压缩的算法可以在单台机器上处理十亿级别的向量规模;

3,并非线程安全的——不支持并行添加向量或搜索与添加的并行;仅在CPU模式下支持并行搜索;

4,只有继承了IndexIVF 的算法才支持向量的 remove() 操作,但由于是连续存储,remove的时间复杂度是 O(n),建议另外维护一个列表记录被删除的或尚存的向量;

5,faiss 针对批量搜索做了优化;

6,IndexPQ, IndexIVFFlat, IndexIVFPQ, IndexIVFPQR 需要训练;

7,不支持重新训练,建议新建一个索引;

8,只接受 32-bit 浮点类型的输入数据;

9,使用 index = faiss.index_factory(dim, "PCA32,IVF100,PQ8") 这种形式创建索引更灵活,此处类型参数可解释为:使用PCA降维将原始向量降至32维,使用 IVF 建立索引,子list(即bucket 分桶)个数为 100,使用 Product Quantizer (乘积量化) 将每个向量压缩编码成 8 字节;等价于

num_list = 64
dim = 64
bytes_per_vector = 8
bits_per_sub_vector = 8quantizer = faiss.IndexFlatL2(dim)
index = faiss.IndexIVFPQ(quantizer, dim, num_list, bytes_per_vector, bits_per_sub_vector)

10,索引类型的选择

  • 如果需要精确的搜索结果,不要降维、不要量化,使用 Flat,同时,使用Flat 意味着数据不会被压缩,将占用同等大小的内存;
  • 如果内存很紧张,可以使用 PCA 降维、PQ 量化编码,来减少内存占用,最终占用的内存大小约等于 <降维后的向量维度> * <量化后的每个向量的字节数> * <向量个数>; 如果量化编码后的字节数大于64,推荐使用SQx 替换PQx,准确度相同但速度会更快;为了便于量化编码,可以使用 OPQx_y 先对向量做线性变换,y 必须是编码后字节数x的倍数,但最好小于维度dim和4*x;
  • 如果总向量个数 N 小于 1百万,推荐使用  IVFx ,x 的选值介于 4*sqrt(N) 和 16*sqrt(N) 之间,训练数据的大小至少要是x的30倍;如果总向量个数 N 大于 1百万、小于 1千万,推荐使用 IMI2x10,实际内部聚类个数是 2 ^ (2 * 10),将需要64 * 2 ^ 10 个向量参与训练;如果总向量个数 N 大于 1千万、小于 1亿,推荐使用 IMI2x12;如果总向量个数 N 大于 1亿、小于 10亿,推荐使用 IMI2x14;IMI方法不支持GPU;
  • IndexIVF 天生支持 add_with_ids 方法,对于不支持 add_with_ids方法的类型,可以使用IndexIDMap 辅助
  • index = faiss.IndexFlatL2(xb.shape[1])
    ids = np.arange(xb.shape[0])
    index.add_with_ids(xb, ids)  # this will crash, because IndexFlatL2 does not support add_with_ids
    index2 = faiss.IndexIDMap(index)
    index2.add_with_ids(xb, ids) # works, the vectors are stored in the underlying index

4,常见问题:

暴力搜索比较慢,解决方法:

export OMP_WAIT_POLICY=PASSIVE

参考:

https://github.com/facebookresearch/faiss

https://github.com/facebookresearch/faiss/wiki/Troubleshooting

https://github.com/facebookresearch/faiss/wiki/FAQ

faiss 相似特征向量搜索相关推荐

  1. faiss之特征检索与聚类算法

    特征检索与聚类算法 核心逻辑: 如何得到数字特征 如何对目标进行召回和排序 相关算法 Tree-based FLANN Annoy Quantization-based Faiss Graph-bas ...

  2. 向量检索(一)Faiss 在工业界的应用和常见问题解决

    一.向量检索的场景 传统的搜索,使用关键做精确的查找,利用倒排索引在索引库中搜索.日常在用的百度,Google都属于关键词搜索. 在 AI 时代,我们需要查找一张相似的图片,一个问题的答案,或者根据一 ...

  3. faiss的python接口使用

    faiss的python接口使用 1. 简介 2. 安装 3. 示例 1. 简介 faiss是一种ann(Approximate Nearest Neighbor)库,可以用于特征的入库,检索. 不仅 ...

  4. 取消高速省界收费站驶入“快车道”,我们距智能交通还有多远?

    取消高速公路省界收费站不仅是我国高速公路收费模式的重大变革,更是高速公路迈向智能化的关键一环. 每逢周末或者节假日,高速公路的拥堵都让人惴惴不安.长跑高速的老司机们都知道,抛开事故等突发状况,进出收费 ...

  5. 高速公路发展趋势,智慧高速公路解决方案

    一.高速公路发展趋势 高速公路监控.通信.收费三大系统,为高速公路智能化奠定了坚实基础.高速公路不停车收费系统全国联网,更是将高速公路智能化推向了新的阶段,随着移动互联网.大数据.云计算等新一代信息技 ...

  6. 迷人的神经网络——机器学习笔记1

    目录 迷人的神经网络--机器学习笔记1 第1章 神经元模型及网络结构 1.1 神经元模型 1.1.1 单输入神经元 1.1.2 激活函数 1.1.3 多输入神经元 1.2 网络结构 1.2.1 单层神 ...

  7. 实现 AI 换脸的第一步:人脸搜索

    前段时间,AI 换脸这条新闻你关注了吗? 说的是一位博主将 1994 年版<射雕英雄传>里朱茵的脸换成了杨幂的脸.因为该视频涉及到版权问题已被下架,但大家可以看看图片对比来感受一下&quo ...

  8. faiss通用向量搜索服务玩转腾讯880万词向量

    通用向量搜索服务 faiss是个高效的向量搜索解决方案,经过测试对比,可以感受到它的飞速,关于faiss性能测试的见这里:faiss包装与性能对比 这次开源的是使用faiss搭建的通用向量搜索服务. ...

  9. 完全解析:使用Faiss进行海量特征的相似度匹配

    点击上方"计算机视觉工坊",选择"星标" 干货第一时间送达 作者丨Gemfield@知乎 来源丨https://zhuanlan.zhihu.com/p/210 ...

最新文章

  1. python在线工具-在线 Python运行工具
  2. 嵌入式linux和嵌入式android系统有什么区别和联系?
  3. PyTorch 实现 Mask-RCNN
  4. 华中农业大学2018考研真题之867-数据结构与算法
  5. Python生成二维码-qrcode
  6. tp框架 < 5.0.24漏洞
  7. WebStorm WiFi真机同步无法安装成功及appLoader无法连接
  8. 倍福--实现和西门子的profinet
  9. 从《致加西亚的信》看项目管理
  10. 【C语言】求球的表面积和体积
  11. W10系统matlab无法保存对该路径的更改 pathdef_最新WIN10 20H2系统找回经典系统属性界面的几种方法...
  12. 【文献翻译】Evaluating five different adaptive decomposition methods for EEG signal seizure detection
  13. SCM:新一代存储介质技术
  14. 【微信小程序】-- 使用 npm 包 - API Promise化(四十二)
  15. ShardingSphere实践(7)——数据加密
  16. 软考中级 真题 2016年上半年 系统集成项目管理工程师 应用技术 下午试卷
  17. 北理工计算机学院新闻,北理工计算机学院召开物联网工程本科专业建设研讨会...
  18. 这些逻辑运算符你都使用正确了吗?
  19. 2022-1-13 向曾文正学修身之法
  20. LeetCode 每日一题 2021-4-25 (递增顺序搜索树)

热门文章

  1. IPV4地址和子网理解
  2. n719 rom 卡刷 android 4.3,三星 N719官方4.3纯净版ROM刷机(线刷)获取ROOT权限
  3. mariadb Galera集群部署
  4. python IDE环境
  5. NAT功能介绍及配置应用
  6. 如果房贷被拒了怎么办?
  7. 【Linux】用户和用户组|将用户添加到root组中
  8. InnoDB数据字典操作进行故障排除
  9. 服务器三种常见的限流算法
  10. 程序员二本毕业在华为外包工作3年,晒出收入和存款,还以为看错了!