本文根据陈室余(Zilliz 资深数据工程师)于 2021 年 6 月 26 日举办的「ECUG Meetup 第 1 期 | 2021 音视频技术最佳实践·杭州站」上的分享整理而成。全文共计 4200 余字,主要结构如下:
- 非结构化数据与 AI
- 向量与数据的区别
- 以音频为案例分析 Milvus 项目
- “以图搜图”为例分析相似性搜索流程
- 音频的相似性检索流程
- 视频的相似性检索流程
- 音视频相似性检索的三个案例
获取「讲师完整版 PPT」 ,请添加 ECUG 小助手微信(微信ID:ECUGCON)并备注「ECUG PPT」。其余讲师的分享也将于后续陆续放出,敬请期待。
以下为分享正文:
大家下午好!很高兴参加 ECUG 和七牛云主办的 ECUG Meetup,来和大家讨论音视频技术的最佳实践,我今天给大家介绍的是「音视频的相似性检索的技术实现」。
首先,自我介绍一下,我叫陈室余,是 Zilliz 的数据工程师,主要是从事数据处理、模型应用等方面的工作。
给大家介绍一下我们公司:
- Zilliz 是 Zillion of Zillions 的缩写,是来自上海的一家科技创业公司,专注于开发基于异构计算的数据科学软件。
- 开源是我们的重要策略,我们希望通过开源来推动我们的软件商业模式。
- 我们的愿景是重新定义数据科学,为新领域、新场景、新需求提供数据相关技术,帮助人们更好地发现数据中蕴含的价值。
- 我们公司的主要项目是 Milvus,一个开源项目。
非结构化数据与 AI
在座各位也是音视频领域的专家,我们一起来回顾一下音视频的一些特性。视频其实是由一系列的视频帧组成的,像我们看到的连环画,由一帧一帧的图片,可以组成视频。
视频还有一个重要因素是帧率,表示以帧为单位的图像连续出现在显示器上的频率。还有就是音频,音频是表示人耳能够听到的范围内的任何声音或噪音,声音有自己的振幅和频率,通常是 WAV、Mp3 等格式的,而带有音频的视频数据格式有 MP4、RMVB、AVI 等等。
这里提到的图片、音频和视频,我们都可以称之为非结构化数据。我们常说的数据一般分为三类:
- 第一类是结构化数据,包括数字、日期、字符串等。
- 第二类是半结构化数据,包括具有一定格式的文本信息,如各种系统日志。
- 第三种是非结构化数据,图片、视频、语音、自然语言等,不容易被计算机理解。
关系型数据库、传统大数据这些技术都是为了解决结构化数据的问题,而半结构化数据,以通过基于文本的搜索引擎来处理。唯独非结构化数据,在我们的日常生活中每天都会产生,占总数据的 80%,过去一直缺乏有效的分析方法。直到近年来人工智能、深度学习技术的兴起,非结构化数据得以应用。
深度学习模型的魅力在于,它可以将原本计算机难以处理的非结构化信息转化为机器容易理解的特征信息,利用深度学习模型把像图片、视频、语音、自然语言等非结构化数据提取出特征向量,最终通过对特征向向量的计算,实现对非结构化数据的分析。
向量与数据的区别
我们通过 AI 技术可以将非结构化数据转换成向量,那么向量计算该怎么做呢?传统的关系型数据库可以计算吗?毕竟一个向量也像一个数字,准确地说,向量是由一组数字组成的。
那么向量和数字有什么区别?向量和数字的区别,我认为主要有两个方面:
首先,向量和数字的常用操作是不同的。数字之间常见的操作是加减乘除,但向量最常见的操作是计算相似度,比如计算向量之间的欧氏距离,这里我给出了欧氏距离的计算公式,可以看出向量的计算要比一般的数字计算复杂的多。
第二点,数据和向量的索引方式不同。两个数字之间,可以进行数值比较然后建立 B 树的数字索引。但是两个向量之间,我们不能进行数值比较。我们只能计算它们之间的相似度,它的索引通常基于近似最近邻 ANN 算法。这里我给出了两种 ANN 的方法,基于聚类的索引和基于图的索引。
由于这些显著的差异,传统的数据库和大数据技术很难满足矢量分析的要求,它们所支持的算法和所应用的场景都是不一样的。
因此,我们需要一套非结构化数据服务。
大家可以看到,上层输入和下层输出都是非结构化数据,AI 技术主要作用于中间两层:绿色层模型推理和蓝色层数据服务。
模型推理的任务是将非结构化数据提取为特征向量。其实模型训练是一个成本很高的事情。但好消息是,业界已经有一些成熟的项目,比如 Nvidia Tensor RT、微软 ONNX RT 等。
但对于数据服务层,目前还没有全面的解决方案。有的人把向量放在传统的关系型数据库中,有的人放在 HDFS 中,然后通过 Spark 分析向量,也有的人使用一些 ANN 算法库,在这个领域,大家都在做尝试。这一部分主要的挑战在于如何高效地管理和分析向量,针对海量的非结构化数据,想要高速分析成本还是很高的。
以音频为案例分析 Milvus 向量数据库
针对这一挑战,我们给出的答案由 Milvus 向量数据库驱动的非结构化数据服务。它包含四个部分:
- 第一部分,嵌入相似度搜索。包括深度学习场景下的高维密向量和传统机器学习场景下的稀疏向量。
- 第二部分,属性或标量数据。比如用字符串等结构化数据描述的标签,把 Attribute 和向量结合起来,可以提供混合查询的能力。
- 第三部分,支持多模型。比如现在生活中会用到很多的模型,就会生成不同的向量,针对不同的向量和模型就需要有一个实体的概念,来组合不同的向量。
- 第四部分,融合的打分机制。比如多模态搜索中我们引入了不同的模型,那就需要对多个模型进行融合,形成一个新的评分机制,实现非结构化数据的综合分析。
接下来举一个音视频处理的例子,也是一个基于流的,人工智能应用中十分典型的例子。比如说要分析一段视频,我们可以创建一些操作流来实现,通常称为管道 Pipeline:
- 左边的流水线:截取视频帧,然后从截取到的图像中提取图像特征特征。这里列到了计算机视觉领域比较流行的 VGG 模型,最后我们得到了视频中图像的特征向量,实现对图像的分析。
- 中间的流水线:处理视频中的声音,它会生成的音频的特征向量。
- 右边的流水线:会自动为视频标注一些属性,如果你有其他特殊要求,可以建立一个新的 Pipeline 来实现。
假如我还需要其他的场景,那么可以再添加 Pipeline。可以看出 AI 应用十分灵活,可以通过扩展操作流增加 AI 应用;并且十分容易部署,甚至可以通过基于 Web 界面对操作流进行增加、修改等操作。同时通过操作流的划分,每个 Pipeline 也会变得相对简单。
从“以图搜图”为例分析相似性搜索流程
我们可以看一看每个操作流都是如何实现的,比如图像搜索系统,我们也叫以图搜图。它主要分为两个流程:
- 数据的插入
- 数据的搜索
比如说,图中蓝色的线表示插入,图片首先可以经过 Yolo 模型来做目标提取,提取图片当中的物体目标,然后将目标物体的图片在 ResNet50 模型中做特征向量提取。提取到图片的特征向量后,就可以插入到 Milvus 中,这时 Milvus 会返回向量对应的 ID,然后可以存储向量的 ID 和图片路径的对应关系。
查找过程像黑线所表示的,同样经过 Yolo 模型和 ResNet50 模型,然后在 Milvus 中搜索库中的向量,此时 Milvus 会返回搜索结果的 ID,根据 ID 就能找到对应的图片。
这样就完成了以图搜图的过程。
这里提到的以图搜图项目,在 Github 上面是开源的,感兴趣的小伙伴可以点开 Link 看一下。
以图搜图 Github Link:
https://github.com/milvus-io/...
前面说到我们公司的主要产品 Milvus 也是开源的。我们也是希望可以和大家一起来发展社区,维护项目。我们的这一套系统也有用户直接用来上生产使用了,比如有电商用户用来搜商品,设计师团队用来搜设计图等等。
这是以图搜图的前端界面,和传统给图片打标签有所不同的,AI 技术可以自动为这些图片做分类。
音频的相似性检索流程
那么,针对音频数据该如何处理呢?
就像前面所说的,通过 AI 模型可以将这些非结构化数据提取为特征向量,这里用到的是 PANNS_INFERENCE 模型,针对声音分类的一个模型,根据获取到的特征向量,然后在 Milvus 中存储并检索,返回相似的声音。同样,音频检索也是在 Github 上面有源码的。
音频检索 Github Link :
https://github.com/milvus-io/...
视频的相似性检索流程
接下来是一个视频分析的例子,通过对视频截帧,然后再把返回的视频帧提取图像特征,在 Milvus 中进行存储和分析。
下面直接放一个 Demo 的视频,一起来了解一下视频分析的过程。我们会对视频中的物体做一个识别,在右边会有一个显示。其实我们当时做 Demo的灵感来自于 Youtube 中视频广告的推荐, Youtube 在播放视频时会直接提供视频中商品的相关广告。
音视频相似性检索的三个案例
接下来为大家介绍下在音视频领域相关的用户案例。
第一个案例,一个运动平台对体育赛事中的人脸分析:
1、首先,用户要保证照片的即时上传。当赛事开始以后,摄影师会持续地拍摄照片。为了保障照片上传入库的时效性,必须设计一套方案保证照片的可靠性,这里会用到云存储。
2、人脸特征快速提取。这里用到了自研的人脸识别提取算法,在保证高精度的情况下,把人脸图片压缩为 128 维的特征向量。
3、当大量的人脸特征被提取出来之后,就需要一个向量数据库来对海量的人脸特征向量进行存储和检索。在 Milvus 系统中存储的每条人脸特征向量信息,并利用修改后的 Leaf 算法生成图像对应的 ID,让每个 ID 和 Milvus 的特征数据库对应起来。那么经过解析 ID,能够快速确定 ID 对应的其他信息,从而快速从业务数据库中查询出照片。
第二个案例,视频搜索的系统:
1、首先会把视频上传到服务器,并且保存视频元信息,视频处理任务被触发时,对视频进行预处理、抽帧,将图片转化为特征向量后导入 Milvus 库中。
2、上传待查重视频或视频 ID,将视频转化为多个特征向量。
3、在 Milvus 库中搜索相似向量,通过计算图片集相似度得出 TopK 个结果。
第三个案例,这是音乐推荐的应用,就是在一个音乐 App 上,推荐用户可能会喜欢的音乐。
1、首先,会将上传的音乐做音轨分离,把人声和 BGM 分开,提取 BGM 的特征向量。音轨分离可以保证区分原唱和翻唱的效果。
2、接下来将这些特征向量存储在 Milvus 中,根据用户听过的歌曲搜索类似的歌曲。
3、然后对检索到的歌曲进行排序和重新排列,生成音乐推荐。
以上是我的演讲内容。这里列出了我们 Milvus 的官网和地址,大家可以关注、了解我们的项目,和我们一起共建开源社区。
https://milvus.io
https://github.com/milvus-io/...
https://twitter.com/milvusio
https://medium.com/unstructur...
https://zhuanlan.zhihu.com/ai...
https://milvusio.slack.com/jo...
Q & A
提问:我对您的音频检索特别感兴趣,因为音频分了三类:人声、音乐以及波型,您这块做检索的话,我想请问,这个特征质量的提取有什么衡量指标?
陈室余:其实特征提取的话,我们通常会用到一些训练的模型,就像您提到的,我们之前有碰到过声纹、语音、音乐都不一样,这三种我们接触到的所用的模型也是不一样的。像您说到的数据,我觉得可能就是需要去做训练。
首先得有数据,有数据之后得针对数据做训练,提取出来的特征向量效果就会比较好。那么,怎么做衡量呢?我觉得一个是模型,它可能就会有一个算法来做衡量。
第二个,其实人的感官对这个也是有所衡量的。比如说刚才说的以图搜图,可能机器搜出来的图片和搜索的图片,机器觉得很像,但是我们人眼看起来并不像。所以说,衡量这块的话,可能是看模型,也可以自己做一些估量。
提问:我看你前面提到了一些多模态的搜索策略,我想请问这方面的一些方法,关于音频、视频的特征提取出来如何用于搜索?
陈室余:多模态的话,刚好我们最近发布了 Milvus 2.0,是支持多列向量的。
提问:你们主要是做搜索的,处理和提取音频、视频、图像的向量后,这两方面具体是怎么融合的。
陈室余:我们是分开做的。您刚刚说的融合,就是它对向量其实没有做一个结合,它是分开的,每列有不同的向量,但是我们最后会有一个融合的打分机制,就是会对那些模型做一些融合的打分,这样可能就会对模型的评估好一些。
关于七牛云、ECUG 和 ECUG Meetup
七牛云:七牛云成立于 2011 年,作为国内知名的云计算及数据服务提供商,七牛云持续在海量文件存储、CDN 内容分发、视频点播、互动直播及大规模异构数据的智能分析与处理等领域的核心技术进行深度投入,致力于以数据科技全面驱动数字化未来,赋能各行各业全面进入数据时代。
ECUG:全称为 Effective Cloud User Group(实效云计算用户组),成立于 2007 年的 CN Erlounge II,由许式伟发起,是科技领域不可或缺的高端前沿团体。作为行业技术进步的一扇窗口,ECUG 汇聚众多技术人,关注当下热点技术与尖端实践,共同引领行业技术的变革。
ECUG Meetup :ECUG、七牛云联合打造的技术分享系列活动,定位于开发者以及技术从业者的线下聚会,目标是为开发者打造一个高质量的学习与社交平台,期待每一位参会者之间知识的共创、共建和相互影响,产生新知推动认知发展以及技术进步,通过交流促进行业共同进步,为开发者以及技术从业者打造更好的交流平台与发展空间。