用Faiss实现一个人脸检索
一个简单的人脸检索Faiss使用示例需求:人脸底库中包含多个人物ID,每个人物ID含有多个人脸特征向量。要求最终计算特征向量间的cosine_similarity。要求精确暴力检索。在CPU上完成即可。代码:import numpy as npimport faissfrom faiss import normalize_L2#1.随机化生成数据d = 64# dimensionnb = 1000
·
一个简单的人脸检索Faiss使用示例
需求:
- 人脸底库中包含多个人物ID,每个人物ID含有多个人脸特征向量。
- 要求最终计算特征向量间的cosine_similarity。
- 要求精确暴力检索。
- 在CPU上完成即可。
代码:
import numpy as np
import faiss
from faiss import normalize_L2
#1.随机化生成数据
d = 64 # dimension
nb = 10000 # database size
nq = 100 # nb of queries
np.random.seed(1234) # make reproducible
xb = np.random.random((nb, d)).astype('float32')
xb[:, 0] += np.arange(nb) / 1000.
xq = np.random.random((nq, d)).astype('float32')
xq[:, 0] += np.arange(nq) / 1000.
k = 5 #按距离排序返回K个结果
new_ids = np.random.randint(0,2,size=nb)
#2.实例化一个faiss索引
index = faiss.IndexIDMap2(faiss.IndexFlatIP(d))
#3.Flat类型的索引为暴力搜索方式,故不需要训练过程index.train(xb)
#4.向索引添加数据和id
normalize_L2(xb) #求cosine_similarity,需要先对数据进行归一化
index.add_with_ids(xb, new_ids)
#5.检索
normalize_L2(xq)
D, I = index.search(xq, k)
D距离矩阵nq*k
0.83715,0.82765,0.82305,0.82246,0.81697
0.86756,0.86418,0.86366,0.86219,0.85916
0.85836,0.84659,0.84092,0.83857,0.83776
0.86574,0.85780,0.85207,0.83666,0.83355
...
I索引矩阵nq*k
1,1,0,1,0
1,0,0,0,1
1,0,1,0,0
1,0,1,1,1
...
#1.保存索引
faiss.write_index(index, "./test.index")
#2.加载索引
ioindex = faiss.read_index("./test.index")
点击阅读全文
更多推荐
目录
所有评论(0)