向量检索技术在图像识别、图像检索中应用比较广泛。其主要目标是,对于给定的查询向量,在已经建立好的向量库中,与库中所有的待查询向量,进行特征向量的相似度或距离计算,得到相似度排序。在图像识别系统中,我们使用 Faiss 对此部分进行支持,具体信息请详查 Faiss 官网。Faiss
主要有以下优势
python
接口,直接使用 pip
安装值得注意的是,为了更好是适配性,目前版本,PaddleClas
中暂时只使用 CPU 进行向量检索。
如上图中所示,向量检索部分,在整个 PP-ShiTu
系统中有两部分内容
本文档主要主要介绍 PaddleClas 中检索模块的安装、使用的检索算法、建库流程的及相关配置文件中参数介绍。
目前 PaddleClas
中检索模块,支持三种检索算法HNSW32、IVF、FLAT。每种检索算法,满足不同场景。其中 HNSW32
为默认方法,此方法的检索精度、检索速度可以取得一个较好的平衡,具体算法介绍可以查看官方文档。
此方法为图索引方法,如下图所示,在建立索引的时候,分为不同的层,所以检索精度较高,速度较快,但是特征库只支持添加图像功能,不支持删除图像特征功能。基于图的向量检索算法在向量检索的评测中性能都是比较优异的。如果比较在乎检索算法的效率,而且可以容忍一定的空间成本,多数场景下比较推荐基于图的检索算法。而HNSW是一种典型的,应用广泛的图算法,很多分布式检索引擎都对HNSW算法进行了分布式改造,以应用于高并发,大数据量的线上查询。此方法为默认方法。
一种倒排索引检索方法。速度较快,但是精度略低。特征库支持增加、删除图像特征功能。IVF主要利用倒排的思想保存每个聚类中心下的向量,每次查询向量的时候找到最近的几个中心,分别搜索这几个中心下的向量。通过减小搜索范围,大大提升搜索效率。
暴力检索算法。精度最高,但是数据量大时,检索速度较慢。特征库支持增加、删除图像特征功能。
Faiss
具体安装方法如下:
pip install faiss-cpu==1.7.1post2
若使用时,不能正常引用,则 uninstall
之后,重新 install
,尤其是 windows
下。
涉及检索模块配置文件位于:deploy/configs/
下,其中 inference_*.yaml
是检索或者分类的推理配置文件,同时也是建立特征库的相关配置文件。
建库的具体操作如下:
# 进入 deploy 目录
cd deploy
# yaml 文件根据需要改成自己所需的具体 yaml 文件
python python/build_gallery.py -c configs/inference_***.yaml
其中 yaml
文件的建库的配置如下,在运行时,请根据实际情况进行修改。建库操作会将根据 data_file
的图像列表,将 image_root
下的图像进行特征提取,并在 index_dir
下进行存储,以待后续检索使用。
其中 data_file
文件存储的是图像文件的路径和标签,每一行的格式为:image_path label
。中间间隔以 yaml
文件中 delimiter
参数作为间隔。
关于特征提取的具体模型参数,可查看 yaml
文件。注意下面的配置参数只列举了建立索引库相关部分。
# indexing engine config
IndexProcess:
index_method: "HNSW32" # supported: HNSW32, IVF, Flat
index_dir: "./recognition_demo_data_v1.1/gallery_product/index"
image_root: "./recognition_demo_data_v1.1/gallery_product/"
data_file: "./recognition_demo_data_v1.1/gallery_product/data_file.txt"
index_operation: "new" # suported: "append", "remove", "new"
delimiter: "\t"
dist_type: "IP"
embedding_size: 512
batch_size: 32
new
新建,append
将 data_file 的图像特征添加到特征库中,remove
将 data_file 的图像从特征库中删除IP
内积相似度计算方式,L2
欧式距离计算方法batch_size
将检索的过程融合到 PP-ShiTu
的整体流程中,请参考 README 中 PP-ShiTu 图像识别系统介绍
部分。检索具体使用操作请参考识别快速开始文档。
其中,检索部分配置如下,整体检索配置文件,请参考 deploy/configs/inference_*.yaml
文件。
注意:此部分参数只是列举了离线检索相关部分参数。
IndexProcess:
index_dir: "./recognition_demo_data_v1.1/gallery_logo/index/"
return_k: 5
score_thres: 0.5
hamming_radius: 100
与建库配置文件不同,新参数主要如下:
return_k
: 检索结果返回 k
个结果score_thres
: 检索匹配的阈值hamming_radius
: 汉明距离半径。此参数只有在使用二值特征模型,dist_type
设置为hamming
时才能生效。具体二值特征模型使用方法请参考哈希编码Dear OpenI User
Thank you for your continuous support to the Openl Qizhi Community AI Collaboration Platform. In order to protect your usage rights and ensure network security, we updated the Openl Qizhi Community AI Collaboration Platform Usage Agreement in January 2024. The updated agreement specifies that users are prohibited from using intranet penetration tools. After you click "Agree and continue", you can continue to use our services. Thank you for your cooperation and understanding.
For more agreement content, please refer to the《Openl Qizhi Community AI Collaboration Platform Usage Agreement》