相似视频搜索—Opera 的 Milvus 实践
✏️ 作者介绍:
李兆星,Opera News 高级工程师
场景介绍
Opera 成立于 1995 年,总部位于挪威奥斯陆,是全球领先的浏览器提供商及数字内容发现和推荐平台领域的先驱。20 多年来,数百万名用户通过 Opera 网页浏览器访问网站、阅读、进行创作以及使用其他网络娱乐功能。
由于大量视频内容高度重复,为提升视频内容推荐的体验,多媒体处理平台需要在视频审核时过滤内容过于相似的视频。
通常在搜索相似视频时,多媒体处理平台会抽取多个关键帧的特征向量并融合成单个向量进行搜索。但是,Opera ⽬前暂时不具备融合多个特征向量的能⼒,因此采用另一种方法——将视频视作图⽚的集合。先计算图⽚相似度,再计算图⽚集间的相似度,最终得出视频间的相似度。对于图片间的相似度计算,可以将图片通过深度学习模型转化为特征向量,然后利用 Milvus 向量搜索引擎来计算图片特征向量的相似度。
项目要点
1. 将视频转化为图片集
FFprobe 是一个多媒体流分析工具。它从多媒体流中收集信息,并以人类和机器可读的形式打印出来。它可以用来检测多媒体流的容器类型,以及每一个多媒体流的格式和类型。[1]我们在本项目中调⽤ FFprobe 命令获取视频时⻓信息。
ffprobe -show_format -print_format json -v quiet input.mp4
FFmpeg 是一个开源音视频软件,可以运行音频和视频多种格式的录制、转换、流功能[2]。我们在本项目中使用 FFmpeg ⼯具,按照固定间隔从视频中抽取 10 帧。假设视频时⻓为 100 秒,每隔 10 秒抽取⼀帧,则⽐例为 0.1 。
ffmpeg -i input.mp4 -r 0.1 ./images/frames_%02d.jpg
2. 将图片转化为特征向量
先对图⽚进⾏预处理,包括裁剪、缩放、调节灰度等。利⽤预先训练好的深度学习模型 VGG 或 ResNet 模型,将图片转化为 1000 维的特征向量。
# Use the nativeImageLoader to convert to numerical matrixFile f=new File(absolutePath, "drawn_image.jpg");
NativeImageLoader loader = new NativeImageLoader(height, width, channels);
# put image into
INDArrayINDArray image = loader.asMatrix(f);
# values need to be scaled
DataNormalization scalar = new ImagePreProcessingScaler(0, 1);
# then call that scalar on the image dataset
scalar.transform(image);
# pass through neural net and store it in
output arrayoutput = model.output(image);
3. 计算图片集间的相似度
定义如下规则以计算图⽚集间的相似度:
图⽚与图⽚的相似度——图片特征向量的内积 ;
图⽚与图⽚集的相似度——图⽚与图⽚相似度的最⼤值 ;
图⽚集与图⽚集的相似度——图⽚与图⽚集的相似度的平均值。
4. 利用 Milvus 向量搜索引擎搜索 TopK 个相似视频结果
Milvus 是一款开源的分布式向量相似度搜索引擎。通过集成业界成熟的向量相似度搜索技术和大幅度优化高性能计算框架,Milvus 支持针对 TB 级向量的增删改操作和近实时查询,具有高度灵活、稳定可靠以及高速查询等特点。Milvus 集成了 Faiss、NMSLIB、Annoy 等广泛应用的向量索引库,提供了一整套简单直观的 API,用户可以针对不同场景选择不同的索引类型。
Milvus 适用于多种场景,与深度学习相融合的架构如下图所示:
采用 Milvus 的数据处理流程包括以下几个步骤:
与深度学习模型相结合,将非结构化数据转化为特征向量。
将特征向量存储到 Milvus 并建立索引。
返回向量相似性搜索结果。
在本项目中,利用 Milvus 搜索 TopK 的相似视频需要进行如下步骤:
将图片特征向量及对应的视频 ID 存储在 Milvus 数据库中。
将视频转换为 10 个图片向量后,向 Milvus 发起批量相似搜索,得到相似图片以及图片相似度。
利用上述提到的图片集间相似度的计算方式,计算视频相似度,过滤返回 TopK 的结果。
系统流程
根据上述四个项目要点,我们设计了以下系统流程:
将视频上传至服务器,保存视频元信息,同时将视频持久化存储,随后在消息队列中发布事件。
视频处理任务被触发时,对视频进行预处理、抽帧,将图片转化为特征向量后导入 Milvus 库中。
上传待查重视频或视频 ID,将视频转化为多个特征向量。在 Milvus 库中搜索相似向量,通过上文中的图片集相似度计算方法得出视频相似度,返回 TopK 个结果。
后续优化
基于相似视频搜索系统目前的设计,我们考虑未来在以下几个方面进行优化:
优化抽帧策略,抽取更具代表性的镜头;
减小视频时长等因素对视频相似度的影响;
进行相似度加权平均,为持续时间较长的镜头增加权重。
结语
通过结合深度学习模型和 Milvus 向量相似性搜索引擎,我们搭建了一套视频相似搜索的系统。Milvus 的性能不断持续优化,能够高效检索相似向量。此外,Milvus 的用户交流群十分活跃,用户互相交流工程问题和项目思路,提问也会得到及时反馈。在搭建这个相似视频搜索系统时,我受到了 Milvus 以图搜图教程的启发。官网上还有许多其他成功案例可以参考。
在当前这个文本、图像、音频等非结构化数据爆炸式增长的时代,通过 embedding 技术将非结构化数据映射成多维向量后再进行检索已成为趋势。Milvus 作为分布式向量检索引擎,具有高性能、易部署的特性。Milvus 极大地节省了项目开发成本,显著提高了系统检索性能,并很好地满足了本项目的技术和业务需求。
参考文献
[1] FFprobe使用指南:https://developer.aliyun.com/article/311898
[2] FFmpeg:https://zh.wikipedia.org/wiki/FFmpeg
[3] Milvus 教程:https://www.zilliz.com/solutions
[4] Milvus 用户案例:https://www.zilliz.com/user-stories
相关文章推荐
Milvus实战| 以图搜视频系统
你追剧的好帮手-Milvus 视频人脸检索系统
快来体验 Milvus 视频目标检测系统!
欢迎加入 Milvus 社区
github.com/milvus-io/milvus | 源码
milvus.io | 官网
milvusio.slack.com | Slack 社区
zhihu.com/org/zilliz-11| 知乎
zilliz.blog.csdn.net | CSDN 博客
space.bilibili.com/478166626 | Bilibili
相似视频搜索—Opera 的 Milvus 实践相关推荐
- 搜索:多模态搜索算法实践【工业界:将其他模态(视频、音频)的信息降维到文本模态】【学术界:将所有模型信息映射到公共向量空间】
什么是多模态检索? 现实生活中常有图搜图,文本搜文本,视频搜视频的应用,这些都是单模态检索.多模态检索就是,不同类别之间的搜索,比如用文本搜图,用图搜文本等,这类情况称为多模态检索. 视频搜索是涉及信 ...
- 优酷视频 刘尚堃 - 《深度学习在视频搜索领域的实践》
随着深度学习在工业界的大规模应用,搜索算法领域迎来了全新的技术革命,在视频领域的技术变革更加明显.和电商的搜索不同,在电商领域具备天然的结构化类目体系和标签体系,视频搜索领域仅仅依靠文本理解远远不够, ...
- 【实践】多业务建模在美团搜索排序中的实践
美团搜索排序是一个典型的多业务混合排序建模问题,这种多业务场景搜索存在很多挑战.本文聚焦到店商家多业务场景的多业务排序建模优化工作,希望能对从事相关工作的同学有帮助. 引言 排序流程简介 多业务建模实 ...
- 【实践】飞猪交通个性化搜索推荐技术的实践与创新(附PPT下载链接)
今天给大家带来阿里巴巴飞猪导购算法(搜索&推荐 )部李阳先生所做的分享<飞猪交通个性化搜索推荐技术的实践与创新.pdf>,本分享共包含如下五大部分: 1.背景:交通业务介绍: 2. ...
- 三层架构下,优酷视频搜索测试体系很复杂吗?
作者| 阿里文娱测试开发专家 熙闫 责编 | 夕颜 简介 优酷搜索承担着内容分发场的头部兵的重任,海量的视频内容都要依赖搜索触达和呈现给 用户,而且逐渐扩大范围,开始向阿里文娱全系产品提供搜索服务和能 ...
- 【机器学习】机器学习在爱奇艺视频分析理解中的实践
原标题:大规模机器学习在爱奇艺视频分析理解中的实践 AI 前线导读:视频包含了图像.声音.文字等多种信息,可以表达生动.丰富的内容.随着 AI 时代的带来,互联网视频应用高速发展,视频更成为一种人人可 ...
- 大规模机器学习在爱奇艺视频分析理解中的实践
视频包含了图像.声音.文字等多种信息,可以表达生动.丰富的内容.随着AI时代的带来,互联网视频应用高速发展,视频更成为一种人人可生成的内容,数据量暴涨.如何利用机器学习将海量的视频内容充分利用起来,成 ...
- 【视频分析】大规模机器学习在爱奇艺视频分析理解中的实践
原标题:大规模机器学习在爱奇艺视频分析理解中的实践 AI 前线导读:视频包含了图像.声音.文字等多种信息,可以表达生动.丰富的内容.随着 AI 时代的带来,互联网视频应用高速发展,视频更成为一种人人可 ...
- 世界人工智能大会 Chong-Wah Ngo教授探讨视频搜索技术研究与创新
8月31日,备受瞩目的 2019世界人工智能大会·开发者日在上海世博中心隆重举行.极链科技论坛以"重构视界·见未来"为主题,围绕计算机视觉技术和"AI+视频"的 ...
最新文章
- Bootstrap笔记
- 判断给定的整数数组是不是某二叉搜索树的后序遍历的结果
- 60 分钟极速入门 PyTorch
- Linux环境搭建:设置主机名颜色、设置vim颜色
- java流与文件——内存映射文件
- 查看服务器文件夹,远程查看服务器文件夹内的文件夹
- 苹果机的时间格式转换为时间搓
- C++ 动态开辟二维数组的的方法
- c mysql清理日志文件_MySQL 一般查询日志或者慢查询日志历史数据的清理
- CSS3弹性盒模型flexbox布局基础版
- JSP基于web网上作业提交系统
- stm32笔记02——ST-Link下载器使用说明
- pytion基础语句之数据类型
- 黑龙江第三方软件测试机构 CMA/CNAS双资质
- 频谱、能谱、功率谱、倍频程谱、1/3 倍频程谱
- 一款炫酷、轻量级性能监控系统
- unity3D 法线贴图的制作与使用
- Java笔记-09 容器 Collection
- SQL Server2012 安装方法详解
- 学计算机应用好还是学计算机平面设计好,平面设计与计算机应用哪个好?
热门文章
- 加拿大卫生部药品信息数据查询
- 手工皮具-不可避免的进入染色过程
- 【校招VIP】出品:在线实习“职查查”大V信息认证实战
- 腾讯2019技术岗笔试 猜硬币 众所周知,每一枚硬币都有两面,假定投掷一枚硬币,得到正面和反面的概率是一样的。小Q有一天和好朋友在玩投掷硬币的游戏,他投了n枚硬币,已知至少有p正,q反,求n枚硬币
- Servlet知识点小结
- 怎样处理 Safari 移动端对图片资源的限制
- Windows的Safari(可能)已死:如何迁移到另一个浏览器
- Conflux 进阶课 | 初始阶段通证发行数量
- 一到冬天就手脚冰凉是怎么回事?宝宝手脚冰凉怎么办?
- C语言讲义——链表的实现