以图搜图2.0版本方案
1.以图搜图2.0架构图
先通过 Milvus 进行特征值搜索,返回 top 2048条最相似的记录,然后根据特征值ID从Redis 查出相关联结构化信息,如900记录ID+特征值ID+时间+地点等<120字节,进行二次条件过滤,达到10亿级数据 10秒内返回。
2.以图搜图2.0性能
2.1 使用Milvus进行特征值检索性能如下
序号 | 数据量 | 特征长度 | 索引 | mProb | 耗时 | 占用内存 | 硬盘空间 |
---|---|---|---|---|---|---|---|
1 | 1亿 | 256 | IVF_SQ8 | 128 | 600ms | 28.7G | 120.4G |
2 | 10亿 | 256 | IVF_SQ8 | 128 | 6000ms | 287G | 1204G |
2.2 使用 Redis 存储特征值 ID 与 结构化数据关联,进行结构二次过滤Redis性能测试如下所示:
序号 | 数据量 | key个数 | 耗时 | 占用内存 | 硬盘空间 |
---|---|---|---|---|---|
1 | 1亿 | 8192 | 127ms | 12G | 12G |
2 | 10亿 | 8192 | 1270ms | 120G | 120G |
2.3 10亿数据以图搜图方案配置如下,按照1天1000w过车辆数据估算,平均1条过车图片产生2条记录(包括非标车和行人),支持检索时间在50天
组件 | 配置 |
---|---|
操作系统 | Centos7.8 |
cpu | Intel Xeon Gold 5118*2 |
内存 | 128G*4 |
硬盘 | SSD 2T |
3.Milvus相似度搜索引擎
特征 | 说明 |
---|---|
异构计算 | 支持用GPU 搜索向量和建立索引提升性能。 单台通用服务器上完成对TB级数据的毫秒级搜索。 动态数据管理。 |
支持主流索引工具和向量相似度计算方法 | 集成了 Faiss、NMSLIB、Annoy 等向量索引库。 支持基于量化的索引、基于图的索引和基于树的索引。 支持包括欧氏距离 (L2)、内积 (IP)、汉明距离、杰卡德距离等。 Prometheus 作为监控和性能指标存储方案, Grafana 作为可视化组件进行数据展示。 |
近实时搜索 | 插入Milvus的数据默认在1秒后即可被搜索到。 |
支持分布式 | 可以采用Mishards构建分布式应用 |
标量字段过滤 | 可以对标量数据进行过滤,增强搜索的灵活性(通过分区)。 |
Milvus 服务为主从式架构:在服务端,Milvus 由 Milvus Core 和 Meta Store 两部分组成:Milvus Core 存储与管理 Embeddings 和标量数据。Meta Store 存储与管理 SQLite 和 MySQL 中的元数据,分别用于测试和生产。在客户端,Milvus 提供了基于 Python、Java、Go、C++ 的 SDK 和 RESTful API。
4.以图搜图服务流程
全局特征+局部特征检索业务逻辑上存在2种处理模式: 全局特征提前提取+局部特征提前提取,局部特征长度>=全局特征长度*(4-8),存储或者内存需要扩大1个量级,但是比对效率很高(<1s)
全局特征提前提取+局部特征临时提取,通过全局特征检索返回8092个相似对象,再对8092个对象临时提取局部特征(<60s)
5. 遗留问题:
建立特征值索引,会造成一定程度检索精度损失。
先做特征值检索,再进行卡点和时间过滤,会造成一定程度检索精度损失。
最大支持10亿特征值数据,超过10亿数据需要进行循环覆盖
分布式设计方案
利用milvus进行基于特征值的技战法分析
全局特征提前提取+局部特征提前提取,局部特征长度>=全局特征长度*(4-8),存储或者内存需要扩大1个量级,但是比对效率很高
这里特征提取有什么比较好的算法和思路吗?