大家下午好!很高兴参加ECUG和七牛云主办的ECUGMeetup,来和大家讨论音视频技术的最佳实践,我今天给大家介绍的是「音视频的相似性检索的技术实现」。
首先,自我介绍一下,我叫陈室余,是Zilliz的数据工程师,主要是从事数据处理、模型应用等方面的工作。
给大家介绍一下我们公司:
在座各位也是音视频领域的专家,我们一起来回顾一下音视频的一些特性。视频其实是由一系列的视频帧组成的,像我们看到的连环画,由一帧一帧的图片,可以组成视频。
视频还有一个重要因素是帧率,表示以帧为单位的图像连续出现在显示器上的频率。还有就是音频,音频是表示人耳能够听到的范围内的任何声音或噪音,声音有自己的振幅和频率,通常是WAV、Mp3等格式的,而带有音频的视频数据格式有MP4、RMVB、AVI等等。
这里提到的图片、音频和视频,我们都可以称之为非结构化数据。我们常说的数据一般分为三类:
关系型数据库、传统大数据这些技术都是为了解决结构化数据的问题,而半结构化数据,以通过基于文本的搜索引擎来处理。唯独非结构化数据,在我们的日常生活中每天都会产生,占总数据的80%,过去一直缺乏有效的分析方法。直到近年来人工智能、深度学习技术的兴起,非结构化数据得以应用。
深度学习模型的魅力在于,它可以将原本计算机难以处理的非结构化信息转化为机器容易理解的特征信息,利用深度学习模型把像图片、视频、语音、自然语言等非结构化数据提取出特征向量,最终通过对特征向向量的计算,实现对非结构化数据的分析。
我们通过AI技术可以将非结构化数据转换成向量,那么向量计算该怎么做呢?传统的关系型数据库可以计算吗?毕竟一个向量也像一个数字,准确地说,向量是由一组数字组成的。
那么向量和数字有什么区别?向量和数字的区别,我认为主要有两个方面:
首先,向量和数字的常用操作是不同的。数字之间常见的操作是加减乘除,但向量最常见的操作是计算相似度,比如计算向量之间的欧氏距离,这里我给出了欧氏距离的计算公式,可以看出向量的计算要比一般的数字计算复杂的多。
第二点,数据和向量的索引方式不同。两个数字之间,可以进行数值比较然后建立B树的数字索引。但是两个向量之间,我们不能进行数值比较。我们只能计算它们之间的相似度,它的索引通常基于近似最近邻ANN算法。这里我给出了两种ANN的方法,基于聚类的索引和基于图的索引。
由于这些显著的差异,传统的数据库和大数据技术很难满足矢量分析的要求,它们所支持的算法和所应用的场景都是不一样的。
因此,我们需要一套非结构化数据服务。
大家可以看到,上层输入和下层输出都是非结构化数据,AI技术主要作用于中间两层:绿色层模型推理和蓝色层数据服务。
模型推理的任务是将非结构化数据提取为特征向量。其实模型训练是一个成本很高的事情。但好消息是,业界已经有一些成熟的项目,比如NvidiaTensorRT、微软ONNXRT等。
但对于数据服务层,目前还没有全面的解决方案。有的人把向量放在传统的关系型数据库中,有的人放在HDFS中,然后通过Spark分析向量,也有的人使用一些ANN算法库,在这个领域,大家都在做尝试。这一部分主要的挑战在于如何高效地管理和分析向量,针对海量的非结构化数据,想要高速分析成本还是很高的。
针对这一挑战,我们给出的答案由Milvus向量数据库驱动的非结构化数据服务。它包含四个部分:
接下来举一个音视频处理的例子,也是一个基于流的,人工智能应用中十分典型的例子。比如说要分析一段视频,我们可以创建一些操作流来实现,通常称为管道Pipeline:
假如我还需要其他的场景,那么可以再添加Pipeline。可以看出AI应用十分灵活,可以通过扩展操作流增加AI应用;并且十分容易部署,甚至可以通过基于Web界面对操作流进行增加、修改等操作。同时通过操作流的划分,每个Pipeline也会变得相对简单。
我们可以看一看每个操作流都是如何实现的,比如图像搜索系统,我们也叫以图搜图。它主要分为两个流程:
比如说,图中蓝色的线表示插入,图片首先可以经过Yolo模型来做目标提取,提取图片当中的物体目标,然后将目标物体的图片在ResNet50模型中做特征向量提取。提取到图片的特征向量后,就可以插入到Milvus中,这时Milvus会返回向量对应的ID,然后可以存储向量的ID和图片路径的对应关系。
查找过程像黑线所表示的,同样经过Yolo模型和ResNet50模型,然后在Milvus中搜索库中的向量,此时Milvus会返回搜索结果的ID,根据ID就能找到对应的图片。
这样就完成了以图搜图的过程。
这里提到的以图搜图项目,在Github上面是开源的,感兴趣的小伙伴可以点开Link看一下。
前面说到我们公司的主要产品Milvus也是开源的。我们也是希望可以和大家一起来发展社区,维护项目。我们的这一套系统也有用户直接用来上生产使用了,比如有电商用户用来搜商品,设计师团队用来搜设计图等等。
这是以图搜图的前端界面,和传统给图片打标签有所不同的,AI技术可以自动为这些图片做分类。
那么,针对音频数据该如何处理呢?
就像前面所说的,通过AI模型可以将这些非结构化数据提取为特征向量,这里用到的是PANNS_INFERENCE模型,针对声音分类的一个模型,根据获取到的特征向量,然后在Milvus中存储并检索,返回相似的声音。同样,音频检索也是在Github上面有源码的。
接下来是一个视频分析的例子,通过对视频截帧,然后再把返回的视频帧提取图像特征,在Milvus中进行存储和分析。
第一个案例,一个运动平台对体育赛事中的人脸分析:
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、然后对检索到的歌曲进行排序和重新排列,生成音乐推荐。
提问:我对您的音频检索特别感兴趣,因为音频分了三类:人声、音乐以及波型,您这块做检索的话,我想请问,这个特征质量的提取有什么衡量指标?
陈室余:其实特征提取的话,我们通常会用到一些训练的模型,就像您提到的,我们之前有碰到过声纹、语音、音乐都不一样,这三种我们接触到的所用的模型也是不一样的。像您说到的数据,我觉得可能就是需要去做训练。
首先得有数据,有数据之后得针对数据做训练,提取出来的特征向量效果就会比较好。那么,怎么做衡量呢?我觉得一个是模型,它可能就会有一个算法来做衡量。
第二个,其实人的感官对这个也是有所衡量的。比如说刚才说的以图搜图,可能机器搜出来的图片和搜索的图片,机器觉得很像,但是我们人眼看起来并不像。所以说,衡量这块的话,可能是看模型,也可以自己做一些估量。
提问:我看你前面提到了一些多模态的搜索策略,我想请问这方面的一些方法,关于音频、视频的特征提取出来如何用于搜索?
陈室余:多模态的话,刚好我们最近发布了Milvus2.0,是支持多列向量的。
提问:你们主要是做搜索的,处理和提取音频、视频、图像的向量后,这两方面具体是怎么融合的。
陈室余:我们是分开做的。您刚刚说的融合,就是它对向量其实没有做一个结合,它是分开的,每列有不同的向量,但是我们最后会有一个融合的打分机制,就是会对那些模型做一些融合的打分,这样可能就会对模型的评估好一些。
关于七牛云、ECUG和ECUGMeetup
七牛云:七牛云成立于2011年,作为国内知名的云计算及数据服务提供商,七牛云持续在海量文件存储、CDN内容分发、视频点播、互动直播及大规模异构数据的智能分析与处理等领域的核心技术进行深度投入,致力于以数据科技全面驱动数字化未来,赋能各行各业全面进入数据时代。
七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化PaaS服务。围绕富媒体场景,七牛先后推出了对象存储,融合CDN加速,数据通用处理,内容反垃圾服务,以及直播云服务等。目前,七牛云已经在...