1、背景介绍
克拉克拉(KilaKila)是国内专注年轻用户的娱乐互动内容社区软件。KilaKila 推出互动语音直播、短视频、对话小说等功能,满足当下年轻用户个性化、碎片化的文娱需求。其中短视频每天都有海量的视频素材产生,这对用户造成了严重的信息过载,难以从中自主挑选感兴趣的内容。每一位视频内容的消费者同时也是生产者,期望自己的作品能够被更多的志同道合者所看到,获得最大的曝光度。但短视频在UGC场景下出现了大量重复视频内容,该重复视频被重复曝光、重复观看,造成了用户体验较差甚至于用户流失。本文重点介绍基于深度学习CNN技术构建视频重复内容检测服务并给出该方案的工程架构。该服务上线后,重复检测准确率80%,视频内容分发提效20%。
2、图像特征描述符方法
视频内容理解的第一步便是对视频进行片段化视频帧处理,也就是随机采样。视频抽帧指用视频的关键帧表征整个视频的完整含义,针对不同类型视频编码格式、帧速率、比特率、视频分辨率以及不同种类的视频,视频的抽帧大概分为按视频固定时间间隔抽帧和基于实际图像内容抽帧,具体可细分为聚类抽帧,基于运动抽帧,基于镜头抽帧本文采取深度学习CNN模型框架对图像进行提取特征,其中并对比了目前主流模型的特征提取能力并针对特征数据进行针对训练,以便得到更好的模型参数。
传统的特征描述符方法可以清晰看到特征点的移动,有利于特征点的跟踪而对于边 (edge) 、区域 (patch) 等特征则无能为力。深度学习方法可以保留图像邻域的联系和空间的局部特点(CNN)更容易处理高维图像。对使用者而言无需知道提取的特征有哪些。大量实践表明,深度学习在提取图像特征方面有明显优势。
图一:早期判断图片相似的网络结构
3、深度学习CNN的模型选择
1)深度学习算法之图片提取特征模型(2D-CNN)
FFmpeg按照视频时间的固定间隔抽取关键帧,抽帧间隔灵活选取。利用AlexNe版本的CNN模型处理原始图片为1000维的特征向量。输入的原始数据图像需要经过深度学习模型提取图片特征,以高维数据展示并存取图片对应名称以方便后续操作。
图二:高维数据
2)深度学习算法之视频提取特征模型(3D-CNN)
FFmpeg根据视频相关参数选取合理数量的clip作为单次输入数据。利用C3D版本CNN模型获取视频特征的高维向量表达。对基于视频分析的问题,2D卷积无法有效获取时序上的信息。采用可提取三维图像特征的3D卷积模型,对clip同时还可以提取时空特征,用高维向量表示。Clip固定帧数的视频片段。
图三:2D卷积
图四:3D卷积
图五:C3D模型网络结构
3)深度学习算法之视频提取特征模型
FFmpeg根据视频相关参数选取合理数量的clip作为metadata。利用R2Plus1D版本的CNN模型获取视频特征的高维向量表达。将3D卷积分解为空间卷积和时间卷积,采用ResNet网络的基础block。相比C3D模型在不增加参数量的前提下增强了模型的表达能力。
图六:a)R3D模型卷积核;b)R2Plus1D模型卷积核;R3D模型和R2Plus1D模型网络结构
。4、检索方法
1)哈希检索算法
此部分将CNN模型抽取出的1000维特征向量存入Redis数据库完成持久化存储,Redis数据库动态更新保存增量数据。为了保证相关特征向量的查询比对,其中的方案之一便是使用LSH算法,该算法是查询视频的高维特征向量再做高维数据空间向量的位置敏感哈希算法( Locality-Sensitive Hashing ),即将每个视频对应的图片计算得到的特征向量实现归一化后得到每张查询视频在数据库中最相似的视频所对应的特征向量。
2)聚类算法
聚类方法避免对全空间进行搜索,而是对全空间进行分割,将其分割成若干小的子空间,在搜索的时候,锁定查询向量应该落入的子空间,在该子空间中做遍历查询。通过增加索引子类空间的个数提高搜索的精准度。
图七:特征向量聚类算法
3)矢量量化方法 (vector quantiation) 是将一个向量空间中的点用一个有限子集来进行编码表示的过程。典型的有PQ乘积量化 (Product Quantization) 和倒排乘积量化 (IVFPQ) 。PQ乘积量化:本质是一种聚类的方法。
5、视频重复内容检测服务的工程架构选择
1)视频重复性检测系统架构(2D-CNN+LSH算法)
图八:2D-CNN+LSH算法流程图
2)视频重复性检测系统架构(3D-CNN+聚类算法)
图九:3D-CNN+聚类算法流程图