✏️ 编者按:
对于短视频产品而言,提升视频去重性能、降低误*率,是提升用户体验的必要环节。在此次 Milvus 社区发起的「Milvus 实战系列直播」中,我们有幸邀请到了 vivo 互联网服务器开发工程师马运杰,与大家分享开源向量数据库 Milvus 在 vivo 视频中的实践。
嘉宾简介:
马运杰,vivo 短视频后端架构师,负责 vivo 短视频服务端以及视频处理平台的系统架构设计,毕业于南京邮电大学,热衷新技术预研与难点攻坚。
业务背景为什么要视频去重?
对于观众来说,良好的观看体验与视频内容有着很大的关系。当前,全网范围内主要精品视频主要来自于 MCN 机构,一些公司为了更快更好地去覆盖全网内容,会选择和内容代理合作,而代理手上会有很多重复的版权内容,导致重复内容出现。另外,搬运类视频也会产生重复内容。如果将重复的内容直接分发给用户,就会造成极差的用户体验,堪称「劝退」。所以,内容进行去重处理是非常有必要的。
目前,视频去重面临哪些痛点?
目前,基础样本数据已达到大几千万,在不久的将来会过亿。目前的难点是,在亿级样本数据的基础上支持百万级别的吞吐量,同时需要兼顾去重的精度以及高召回率。接下来,我将为大家介绍我们是如何应对这几个问题的。
算法流程设计首先,进行视频特征提取,对视频进行抽帧。视频抽帧有多种策略,可以按照固定的时间间隔抽帧,或者抽取视频所有的关键帧等。我们首先对视频进行场景检测,优先抽取出场景切换中具有代表性的一些关键帧,然后利用图像算法提取关键帧的局部特征,之后再把这些局部特征去合并得到全局特征。全局特征是几千维的浮点型的向量,最后我们还会再进行一层哈希压缩,这层哈希压缩其实压缩了很多的数字量,但是也会给我们带来一些问题,后续会提到。除了视频特征之外,我们还会提取视频的音频指纹,作为比对的重要依据。
特征提取后,我们进行特征匹配。将历史提取的视频特征放在向量数据库 Milvus 中,经过 Milvus 数据库召回 topK 的向量,然后通过一定的策略进行过滤合并,得到相似的视频的候选集,经过细致的音频指纹的比对,基本可以得到相似视频的集合。最后,根据业务上的其他特征,如时长、标题等等特征的完整比对,最终形成相似视频集合。
识别效果需要同时兼顾召回和精度这两个方面。在视频召回的时候,我们会适当放宽整个限制,尽可能多地召回相似视频;而在音频比对当中,我们会更严格地进行筛选。这种策略有一定缺陷,比如短视频常用的“拍同款”功能中,拍出来的音频十分相似,比对结果可能不是很好。整体来看的话,这样的策略还是能达到 90% 以上的精度和召回率目标。
去重系统设计整体系统架构如上图,分为三个服务、四个步骤。第一个部分是特征提取,主要是负责视音频特征的提取以及特征文件的管理,其中还包括了视频的镜头检测以及抽帧。第二个部分是去重策略,主要包括了业务上的逻辑以及去重的策略控制。第三个部分是特征召回部分,主要是作为 Milvus 数据库的客户端代理工作,工作内容主要是负责创建集合以及索引。第四个部分则是基于 Milvus 数据库搭建的检索集群,里面分为主集群和备集群。