Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >千万量级图片视频快速检索,轻松配置设计师的灵感挖掘神器

千万量级图片视频快速检索,轻松配置设计师的灵感挖掘神器

作者头像
Zilliz RDS
发布于 2021-10-08 09:38:31
发布于 2021-10-08 09:38:31
8010
举报

✏️ 作者介绍:

James Zhang,飞书深诺集团的算法工程师 ,毕业于芬兰坦佩雷大学,感兴趣的方向包括自然语言处理计算机视觉机器学习相关领域以及算法工程化。

飞书深诺集团是专注海外数字营销解决方案的综合服务集团,为中国出海企业提供可定制组合的全链路服务产品,满足游戏、APP、电商、品牌等典型出海场景需求。

Milvus 在电商场景中的千万量级素材搜索实践

项目背景

在服务电商客户的场景下,创意部门常常要为客户制作素材,如:广告图、宣传视频、宣传文案等。创意部门往往通过以图搜图、以视频搜视频、文本搜文本的方式发掘素材,为设计师们提供创意上的参考。同时,热度、效果值等其他条件也可以用来辅助搜索,帮助创意部门充分选择合适的素材。此项目的动机正是利用 Milvus 向量数据库在内的一系列技术,为创意部门提供一个素材的综合搜索系统。

技术选型

由于业务接口需要实时返回,并承受一定程度的并发负载,因此我们认为 Milvus 是比较合适的向量检索工具。它对 FAISS、ANN 等工具进行了封装,建立自己的存储文件结构,同时提供了方便的服务化接口,可以算得上“开箱即用”了。在保持检索速度快的同时,Milvus 可以通过参数设置,对向量检索的准确性、资源占用做一定的 Trade-off,比较适合在实际工程中使用。

我们在返回相似向量的同时,还需要图片/视频的一些对应信息,我们通过 KV(Key-Value)的形式将这些信息放在 Redis 缓存里,加快获取的速度。在 Web 接口封装方面,考虑到团队内大部分为 Python 程序员,因此我们选用了 Nginx + Flask + Gunicorn + supervisor 的 Web 经典套餐。

使用到的各工具和框架

  • Milvus(图片/视频/文本的向量相似检索)
  • Redis(业务缓存)
  • Nginx(负载均衡
  • Flask + Gunicorn (Web 框架 + 并发服务)
  • Supervisor(服务的进程启动与异常自动重启)
  • Docker(容器隔离部署)

项目实现

在我们的项目中,图片使用 EfficientNet 来提取特征向量;视频通过提取关键帧之后,再将每一帧图片进行向量提取之后叠加;文本采用 BERT 做特征提取。

架构示意如下图所示:

选择合适的索引:

在得到图片/视频/文本向量检索结果后,上层调用还要做一些业务操作,留给向量检索的接口的时间就不能太多,系统需要做到 1s 内返回。由于向量检索对速度的要求比较高,同时服务部署的机器内存又有一定的限制,我们选用了 IVF_PQ 作为向量索引。

IVF_PQ 是一种有损压缩的向量索引,它将所有向量分解成 m 段,每一小段分别进行聚类,每小段由所属的聚类中心来表示,称为索引值,用 Codebook (码表)来表示 。举例说明这种压缩方式:一个 D=128 维的原始向量被切分成了 M=8 个 D=16 维的短向量,同时每个 16 维短向量都对应一个量化的索引值,索引值即该短向量距离最近的聚类中心的编号,每一个原始向量就可以压缩成 8 个索引值构成的压缩向量,即每个向量都用这 8 个索引值来表示,相对于原始值有一定的误差。

在实际使用的时候,IVF_PQ 这种索引方法预先计算好的各个聚类中心间的距离,通过查找表得出两个向量索引值的距离,来近似替代两个向量的真实距离,这种方法加快了计算速度;在使用中可以通过参数 m 的设置,使得向量压缩成很小的比例,也大量减少了内存占用(约为向量原始空间大小的 5%~10%)。

IVF_PQ 索引压缩示例

根据 Milvus 官方提供的公式:

  • 单个数据段计算量可估算为:目标向量数量 × (nlist+ (段内向量数 ÷nlist)× nprobe)
  • 数据段的数量可估算为:集合数据总量 ÷ index_file_size
  • 对集合查询所需的计算总量则为:单个数据段计算量 × 数据段数量

我们计算得出合适的索引参数是 nlist=1024,m=8。

使用分区提高速度:

目前素材中,图片总量接近 4kw,视频总量大约 1kw,文本总量大约 3kw,为了提高检索速度,分区变得十分必要。我们通过一些业务属性,根据属性值做笛卡尔积操作来建立分区:

例如,我们向量对应的 Item 有两个属性:

  • 对于属性 A,取值 1,2,3,4
  • 对于属性 B,取值 1,2,3

建立分区 A1_B1,A1_B2,A1_B3,A2_B1,A2_B2,A2_B3,...... ,A4_B3,一共 12 个。通过分区操作,我们将每个分区的向量规模控制在 500w 以下,进一步提高了检索速度。

需要注意的是,用来建立分区的属性应该是不会变动的基本属性。因为如果发生变动,重新建立分区、导入数据和建立索引将是非常漫长的过程,所以分区确定之后不要轻易改变。另外,分区及属性值不能太多,否则各个属性值相乘(笛卡儿积)会让数量变得非常庞大,使程序变得过于复杂。如果要实现更多的素材属性检索或筛选,我们在 Milvus 向量搜索的结果上另外封装一层业务接口来实现。

系统效果

向量检索服务以 REST 接口的形式对外提供,前端团队调用接口,将结果展示在界面上。(请自行脑补一下谷歌的以图搜图,百度的以影搜影等等……)

性能指标

目前我们的图片总量大约在 3kw+,视频总量大约在 1kw,向量维数为 2048 维,文本总量为 3kw 左右,向量维数为 768 维。图片检索耗时 0.2s 左右;视频检索耗时 0.1s 左右;文本向量检索耗时 <0.1s。

关于 Milvus 的一些经验与总结

Milvus 集成各种常见向量索引,能满足工程中大部分的需求,存储操作和检索速度都达到了工业级的水准,提供服务化的接口,基本上做到了开箱即用。不过 Milvus 目前还不支持其他类型(字符型、整型)的属性检索,官方表示新版本目前正在研发当中,期待早日上线。

总体来说,对于需要快速构建向量检索服务、又不想花太大成本构造的轻量级项目来说,Milvus 是一个很好的选择。

参考文献

[1] Product quantization for nearest neighbor search. Hervé Jégou, Matthijs Douze, Cordelia Schmid

[2] https://Milvus.io/cn/docs/v1.1.1/tuning.md

GitHub @Milvus-io|CSDN @Zilliz Planet|Bilibili @Zilliz-Planet

Zilliz 以重新定义数据科学为愿景,致力于打造一家全球领先的开源技术创新公司,并通过开源和云原生解决方案为企业解锁非结构化数据的隐藏价值。

Zilliz 构建了 Milvus 向量数据库,以加快下一代数据平台的发展。Milvus 数据库是 LF AI & Data 基金会的毕业项目,能够管理大量非结构化数据集,在新药发现、推荐系统聊天机器人等方面具有广泛的应用。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ZILLIZ 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
用 Milvus 和 NVIDIA Merlin 搭建高效推荐系统
简单来说,现代推荐系统由训练/推理流水线(pipeline)组成,涉及数据获取、数据预处理、模型训练和调整检索、过滤、排名和评分相关的超参数等多个阶段。走遍这些流程之后,推荐系统能够给出高度个性化的推荐结果,从而提升产品的用户体验。
Zilliz RDS
2023/11/01
4820
用 Milvus 和 NVIDIA Merlin 搭建高效推荐系统
pymilvus创建IVF_PQ向量索引
milvus支持的向量索引类型大部分使用近似最近邻搜索算法(ANNS,approximate nearest neighbors search) 。ANNS 的核心思想不再局限于返回最准确的结果,而是仅搜索目标的邻居。 ANNS 通过在可接受的范围内牺牲准确性来提高检索效率。
melodyshu
2024/04/08
2320
检索算法小结
上一篇文章介绍了大模型应用利器--RAG。在RAG中当然少不了检索。检索算法在信息检索、搜索引擎和推荐系统等领域中扮演着至关重要的角色。它们的核心任务是根据用户查询从大量数据中找出最相关的信息。本文就对检索算法进行以下小结。
languageX
2024/07/01
3370
浅谈如何优化 Milvus 性能
Milvus 是全球最快的向量数据库,在最新发布的 Milvus 2.2 benchmark[1] 中,Milvus 相比之前的版本,取得了 50% 以上的性能提升。值得一提的是,在 Master branch 的最新分支中,Milvus 的性能又更进一步,在 1M 向量串行执行的场景下取得了 3ms 以下的延迟,整体 QPS 甚至超过了 ElasticSearch 的 10 倍。那么,如何使用 Milvus 才能达到理想的性能呢?本文暂且不提社区大神贡献的黑科技优化,先聊聊使用 Milvus 过程中的一些经验,以及如何进行性能调优。
Zilliz RDS
2023/01/10
4.3K0
浅谈如何优化 Milvus 性能
.NET 原生驾驭 AI 新基建实战系列(五):Milvus ── 大规模 AI 应用的向量数据库首选
Milvus 是一个强大的工具,帮助开发者处理大规模向量数据,尤其是在人工智能和机器学习领域。它可以高效地存储和检索高维向量数据,适合需要快速相似性搜索的场景。在 .NET 环境中,开发者可以通过 Milvus C# SDK 轻松连接和操作 Milvus 服务器,包括创建集合、插入数据和执行搜索等操作。
AI.NET 极客圈
2025/04/28
1460
.NET 原生驾驭 AI 新基建实战系列(五):Milvus ── 大规模 AI 应用的向量数据库首选
【向量检索研究系列】快速入门
随着互联网的不断发展,产生了各种各样的海量数据,比如图片、文本、视频和语音等非结构化数据,这些数据可以通过人工智能技术提取出特征向量,然后通过对这些特征向量的计算和检索来实现对非结构化数据的分析和检索,如何对非结构化的向量数据进行高效检索即为向量检索技术的核心问题。
码之有理
2022/06/30
3.3K4
【向量检索研究系列】快速入门
Chat with Milvus #16-v0.10.0 & 用 ES 做图片搜索?
Attendee A:你好顾老师, 我想了解一下 Mishards 它具体在扩容的过程怎么实现的?动态扩容那一步,就是 Milvus readonly 服务它扩容具体怎么实现?
Zilliz RDS
2020/06/28
6740
广告行业中那些趣事系列38:广告搜索业务中海量高维数据集检索利器Faiss
摘要:本篇主要介绍实际广告搜索业务中经常使用的大规模检索利器faiss。首先是背景介绍,主要讲了相似度匹配任务和大规模检索算法以及如何应用到我们的实际业务场景;然后重点介绍了faiss,包括什么是faiss、大规模检索任务流程、faiss索引类型介绍、各种索引优缺点对比以及线上构建索引经验分享;最后项目实践了faiss。希望对在海量高维向量空间进行大规模检索任务感兴趣的小伙伴有所帮助。
数据拾光者
2022/05/05
6630
广告行业中那些趣事系列38:广告搜索业务中海量高维数据集检索利器Faiss
Milvus性能优化提速之道:揭秘优化技巧,避开十大误区,确保数据一致性无忧,轻松实现高性能
Milvus 是全球最快的向量数据库,在最新发布的 Milvus 2.2 benchmark中,Milvus 相比之前的版本,取得了 50% 以上的性能提升。值得一提的是,在 Master branch 的最新分支中,Milvus 的性能又更进一步,在 1M 向量串行执行的场景下取得了 3ms 以下的延迟,整体 QPS 甚至超过了 ElasticSearch 的 10 倍。那么,如何使用 Milvus 才能达到理想的性能呢?本文暂且不提社区大神贡献的黑科技优化,先聊聊使用 Milvus 过程中的一些经验,以及如何进行性能调优。
汀丶人工智能
2023/11/15
2.4K0
Milvus性能优化提速之道:揭秘优化技巧,避开十大误区,确保数据一致性无忧,轻松实现高性能
向量数据库入坑指南:聊聊来自元宇宙大厂 Meta 的相似度检索技术 Faiss
我们日常使用的各种 APP 中的许多功能,都离不开相似度检索技术。比如一个接一个的新闻和视频推荐、各种常见的对话机器人、保护我们日常账号安全的风控系统、能够用哼唱来找到歌曲的听歌识曲,甚至就连外卖配送的最佳路线选择也都有着它的身影。
soulteary
2022/09/03
2.2K0
向量数据库是如何检索的?基于 Feder 的 IVF_FLAT 可视化实现
Embedding 是分析非结构化数据的重要方式,当我们将图片、声音编码为向量后,这些数据依旧能够保留原始数据(图片、声音等)的详细信息。然而,我们很难直接对这些编码后的向量中的数字与原始数据建立联系,想要弄清楚向量构成的空间到底意味着什么就更是难上加难了。
Zilliz RDS
2022/11/07
1.7K0
向量数据库是如何检索的?基于 Feder 的 IVF_FLAT 可视化实现
“加速AI搜索和分析:Milvus数据库解析与实践指南“
在当今数字化时代,人工智能 AI 正迅速改变着我们的生活和工作方式。从智能助手到自动驾驶汽车,AI 正在成为各行各业的创新引擎。然而,这种 AI 的崛起也带来了一个关键的挑战:如何有效地处理和分析越来越丰富和复杂的数据。在这个背景下,向量数据库技术应运而生,为 AI 提供了强大的加速引擎。
汀丶人工智能
2023/10/18
1.4K0
“加速AI搜索和分析:Milvus数据库解析与实践指南“
美团外卖基于GPU的向量检索系统实践
随着大数据和人工智能时代的到来,向量检索的应用场景越来越广泛。在信息检索领域,向量检索可以用于检索系统、推荐系统、问答系统等,通过计算文档和查询向量之间的相似度,快速地找到与用户需求相关的信息。此外,在大语言模型和生成式AI场景,向量索引做为向量数据的底层存储,也得到了广泛的应用。
美团技术团队
2024/04/15
4640
美团外卖基于GPU的向量检索系统实践
毫秒级!千万人脸库快速比对,上亿商品图片检索,背后的极速检索用了什么神器? ⛵
互联网发展的数十年来,技术在飞速前进,伴随着海量结构化表格数据的存储,结构化数据上的商业智能分析挖掘发展,也有海量的非结构化数据散布于各个互联网平台:
ShowMeAI
2022/08/09
1.5K0
毫秒级!千万人脸库快速比对,上亿商品图片检索,背后的极速检索用了什么神器? ⛵
向量检索(RAG)之向量数据库研究
研究内容主要包括:是否开源,支持的功能有哪些(是否支持暴力检索,支持哪些索引),是否有可视化界面,是否支持标量过滤。
码之有理
2025/03/05
9140
向量数据库简介
随着大数据、机器学习和人工智能的快速发展,传统的关系型数据库已经无法满足一些特定场景下的需求。特别是在处理高维向量数据(如图像、文本的嵌入向量)时,传统的数据库在搜索、存储和索引方面的效率存在明显不足。向量数据库正是在这样的背景下应运而生,为相似性搜索、推荐系统、自然语言处理等领域提供了更优的解决方案。
IT蜗壳-Tango
2024/08/19
2440
Milvus:为存储和检索高维向量设计而生的 AI 时代数据库
在当今的大数据时代,非结构化数据正以指数级的速度增长,包括文本、图像、音频和视频等形式。要在这些数据中进行快速高效的搜索和管理,传统的关系型数据库往往显得力不从心。这种背景下,Milvus 作为一款专门为大规模向量搜索设计的开源数据库,得到了广泛应用。最新版本 Milvus 2.4 进一步巩固了它在行业中的领先地位。
编程小妖女
2025/01/06
3910
Milvus:为存储和检索高维向量设计而生的 AI 时代数据库
开源向量数据库比较:Chroma, Milvus, Faiss,Weaviate
语义搜索和检索增强生成(RAG)正在彻底改变我们的在线交互方式。实现这些突破性进展的支柱就是向量数据库。选择正确的向量数据库能是一项艰巨的任务。本文为你提供四个重要的开源向量数据库之间的全面比较,希望你能够选择出最符合自己特定需求的数据库。
deephub
2024/04/25
23.1K1
开源向量数据库比较:Chroma, Milvus, Faiss,Weaviate
使用Faiss进行海量特征的相似度匹配
来源丨https://zhuanlan.zhihu.com/p/210736523
公众号机器学习与AI生成创作
2021/01/08
3.9K0
使用Faiss进行海量特征的相似度匹配
5 分钟实现「视频检索」:基于内容理解,无需任何标签
「视频检索」任务就是输入一段文本,检索出最符合文本描述的视频。随着各类视频平台的兴起和火爆,网络上视频的数量呈现井喷式增长,「视频检索」成为人们高效查找视频的一项新需求。
Zilliz RDS
2023/01/10
4.5K0
5 分钟实现「视频检索」:基于内容理解,无需任何标签
推荐阅读
相关推荐
用 Milvus 和 NVIDIA Merlin 搭建高效推荐系统
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档