PRCV2018美图短视频实时分类挑战赛落幕,第一名解决方案技术解读

今年5月,美图公司联合中国模式识别与计算机视觉学术会议(PRCV2018)共同举办的PRCV2018“美图短视频实时分类挑战赛”正式开赛。来自中科院自动化所、中科院自动化所南京人工智能芯片创研院的史磊、程科在张一帆副研究员的指导下获得了PRCV2018「美图短视频实时分类挑战赛」冠军。不同于以往只关注分类精度的比赛,本竞赛综合考察“算法准确率”和“实时分类”两个方面,将运行时间作为重要指标参与评估,将促进视频分类算法在工业界的应用。

以下是冠军团队对本次挑战赛的技术分享总结:

数据集介绍

本次竞赛使用的短视频数据集(MTSVRC数据集)一共有100,000个视频,其中训练集有50,000个视频,验证集和测试集分别有25,000个视频。视频主要以短视频为主,长度约为5 - 15s。数据集包含50个分类,视频类别包括舞蹈、唱歌、手工、健身等热门短视频类型,除了包含与人相关的一些行为类别,还有一些风景,宠物等类别。图片 1展示了一些数据样例: 数据样例

由于这些数据的主要来源为手机拍摄的日常视频,视频的大小,形状以及拍摄条件(例如光照,景深)等都不统一,造成了很大的类间差异与类内差异。同时,由于后期处理,视频经常会有一些特效和与类别无关的文字,也增加了视频识别的难度。图片 2展示了一些困难样例,这些样例对模型的设计带来了很大的挑战。

困难样例

评测方法

由于竞赛同时考虑时间和精度,所以以往的分类误差不足以评测模型性能。图片 3展示了此次竞赛所用的评测方法。

评测方法

其中橙色的三角形是官方提供的基准时间和误差,只有优于基准方法的成绩才被视为有效成绩,而其他成绩(黑色三角)则被视为无效成绩。时间和误差会根据基准成绩归一化到0-1之间。在有效成绩中,会找出最小误差和最短时间的两个成绩(绿色三角形和红色三角形),然后最小误差和最短时间会组成一个参考点(蓝色圆圈)。最终所有的有效成绩都会和参考点计算距离,距离最短的方法视为优胜。从评测方法分析,时间和精度都是很重要的因素。而时间和精度往往是矛盾的,所以必须进行一定的取舍。

视频解码

因为时间是一个很重要的因素,而视频解码又是一个很费时间的过程,所以如何设计解码模块是本次竞赛中的一个关键。我们采用了多线程软解提取关键帧的方法。

主流的视频编码方式中,每个视频主要包含三种图片帧,分别叫做:Intra-coded frame(I帧),Predictive frame(P帧)和Bi-Predictive frame(B帧)。其中I帧是一张完整的图片。P帧记录了与之前的帧的差别,所以在解码P帧时必须要参考之前的图片帧。而B帧不仅需要参考之前的图片帧,还需要参考之后的图片帧才能完整解码。图片 4阐明了这三个概念[2]。

I帧,P帧与B帧

显而易见,P帧和B帧的解码是相对较慢的,而直接解码I帧则可以获得更快的速度。同时,由于我们需要解码不止一帧,所以我们采用了多线程的方式,每一个线程负责解码一个关键帧。整个解码过程使用FFmpeg实现。

模型设计

解决了解码问题后,接下来的问题在于如何用所得的多帧来进行分类。

主流方法

目前主流的视频分类的方法有三大类:基于LSTM的方法,基于3D卷积的方法和基于双流的方法。图片 5展示了这三种框架的大体结构[3]。

  • 基于LSTM的方法将视频的每一帧用卷积网络提取出每一帧的特征,然后将每一个特征作为一个时间点,依次输入到LSTM中。由于LSTM并不限制序列的长度,所以这种方法可以处理任意长度的视频。但同时,因为LSTM本身有梯度消失和爆炸的问题,往往难以训练出令人满意的效果。而且,由于LSTM需要一帧一帧得进行输入,所以速度也比不上其他的方法。
  • 基于3D卷积的方法将原始的2D卷积核扩展到3D。类似于2D卷积在空间维度的作用方式,它可以在时间维度自底向上地提取特征。基于3D卷积的方法往往能得到不错的分类精度。但是,由于卷积核由2D扩展到了3D,其参数量也成倍得增加了,所以网络的速度也会相应下降。
  • 基于双流网络的方法会将网络分成两支。其中一支使用2D卷积网络来对稀疏采样的图片帧进行分类,另一支会提取采样点周围帧的光流场信息,然后使用一个光流网络来对其进行分类。两支网络的结果会进行融合从而得到最终的类标。基于双流的方法可以很好地利用已有的2D卷积网络来进行预训练,同时光流又可以建模运动信息,所以精度往往也很高。但是由于光流的提取过程很慢,所以整体上制约了这一方法的速度。

主流的视频分类的方法

综上所述,主流的方法都不太适用于短视频实时分类的任务,所以我们特别设计了一个适用于短视频实时分类的框架。

我们的方法

图片 4展示了我们的解决方案的整体框架:给定一个视频,我们首先会从中稀疏采样固定数量的图片帧,然后将这些帧组成一个batch,送入到一个BaseNet中。这个BaseNet是在已有的2D卷积网络基础上优化改进得到的,具有较强的特征提取能力。BaseNet输出的高层的特征往往具有很强的语义信息,但是却没有时间上的融合。所以我们特别设计了一个基于帧间注意力机制的融合模型,将BaseNet提取的不同帧的特征作为一个输入送入融合模型中,最终由融合模型得到预测的结果。由于融合模型比较小,推理速度很快,而且参数量较少,也比较容易训练。整个模型在mxnet上进行构建和训练。基于这样的设计,我们的模型可以得到很快的推理速度,同时又不会损失太多精度。

整体框架

模型压缩

当有了训练好的模型后,为了进一步提高速度,模型压缩是必不可少的。因为计算平台是GPU,所以我们使用了两种比较适用于GPU的方法:剪枝和量化。

模型剪枝

由于需要在GPU上运算,这里我们主要考虑在通道维度的剪枝。假设卷积的参数是具有稀疏性的,我们剪掉其中一些不重要的参数,网络仍然可以达到之前的精度。 剪枝

剪枝过程分为两步:首先,我们会基于LASSO回归来找到每一层中最具代表性的通道,然后将没用的通道去掉,再使用平方差损失微调剪枝后的网络来最小化重构误差。这样的操作会对每一层分别进行,经过几轮迭代后便可以达到不错的压缩效果,同时还可以保证精度不会损失太多。

模型量化

由于比赛提供的GPU是支持int8计算的,所以我们考虑将原来的基于float32数据类型训练的模型转换为int8的数据形式进行推断,也就是量化操作。这里我们采用的比较简单的线性量化,也是TensorRt中使用的方法[4]。

线性量化

假设每个张量的数据符合均匀分布,那么其中的每一个元素就可以表示为一个int8数和一个float32的比例因子相乘的结果。比例因子是对于整个数组共享的。这样在张量间进行相乘运算时就可以先进行int8的计算,最后再统一乘上比例因子,从而加快运算。那么接下来的问题在于如何确定比例因子,比例因子的作用是将原始张量的数值范围映射到-127到127(int8的数值范围)。由于大多数情况数据并不是完全的均匀分布,所以直接映射会造成精度损失。

基于阈值的线性映射

为了解决这个问题,TensorRt中会对每一层的数据分布进行统计,然后根据得到的分布确定一个阈值(如图片 9)。在映射的过程中,阈值之外的数会被统一映射到-127和127之 间,阈值之内的数据会假设为一个均匀分布然后进行映射。这样就可以保证在加快速度的同时也不至于有较大的精度损失。

总结

我们的解决方案可以归纳为三个部分:视频解码部分,我们采用了多线程提取I帧的方式。模型设计部分,我们采用了稀疏采样与帧间注意力融合的方法。模型压缩部分,我们采用了通道剪枝和量化的方法。最终我们的解决方案在测试集上的速度为平均每个视频58.9ms,精度为87.9%。

参考文献

[1]   “AI Challenge | Introduction.” [Online]. Available: https://challenge.ai.meitu.com/mtsvrc2018/introduction.html. [Accessed: 21-Nov-2018].

[2]   “視訊壓縮圖像類型,” 维基百科,自由的百科全书. 08-Jul-2018.

[3]   J. Carreira and A. Zisserman, “Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset,” in The IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2017.

[4]   S. Migacz, “8-bit Inference with TensorRT.” [Online]. Available: http://on-demand.gputechconf.com/gtc/2017/presentation/s7310-8-bit-inference-with-tensorrt.pdf.

工程中科院自动化研究所卷积神经网络LSTM视频识别PRCV
5
相关数据
重构技术

代码重构(英语:Code refactoring)指对软件代码做任何更动以增加可读性或者简化结构而不影响输出结果。 软件重构需要借助工具完成,重构工具能够修改代码同时修改所有引用该代码的地方。在极限编程的方法学中,重构需要单元测试来支持。

基准技术

一种简单的模型或启发法,用作比较模型效果时的参考点。基准有助于模型开发者针对特定问题量化最低预期效果。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

剪枝技术

剪枝顾名思义,就是删去一些不重要的节点,来减小计算或搜索的复杂度。剪枝在很多算法中都有很好的应用,如:决策树,神经网络,搜索算法,数据库的设计等。在决策树和神经网络中,剪枝可以有效缓解过拟合问题并减小计算复杂度;在搜索算法中,可以减小搜索范围,提高搜索效率。

模式识别技术

模式识别(英语:Pattern recognition),就是通过计算机用数学技术方法来研究模式的自动处理和判读。 我们把环境与客体统称为“模式”。 随着计算机技术的发展,人类有可能研究复杂的信息处理过程。 信息处理过程的一个重要形式是生命体对环境及客体的识别。其概念与数据挖掘、机器学习类似。

注意力机制技术

我们可以粗略地把神经注意机制类比成一个可以专注于输入内容的某一子集(或特征)的神经网络. 注意力机制最早是由 DeepMind 为图像分类提出的,这让「神经网络在执行预测任务时可以更多关注输入中的相关部分,更少关注不相关的部分」。当解码器生成一个用于构成目标句子的词时,源句子中仅有少部分是相关的;因此,可以应用一个基于内容的注意力机制来根据源句子动态地生成一个(加权的)语境向量(context vector), 然后网络会根据这个语境向量而不是某个固定长度的向量来预测词。

张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

验证集技术

验证数据集是用于调整分类器超参数(即模型结构)的一组数据集,它有时也被称为开发集(dev set)。

计算机视觉技术

计算机视觉(CV)是指机器感知环境的能力。这一技术类别中的经典任务有图像形成、图像处理、图像提取和图像的三维推理。目标识别和面部识别也是很重要的研究领域。

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

长短期记忆网络技术

长短期记忆(Long Short-Term Memory) 是具有长期记忆能力的一种时间递归神经网络(Recurrent Neural Network)。 其网络结构含有一个或多个具有可遗忘和记忆功能的单元组成。它在1997年被提出用于解决传统RNN(Recurrent Neural Network) 的随时间反向传播中权重消失的问题(vanishing gradient problem over backpropagation-through-time),重要组成部分包括Forget Gate, Input Gate, 和 Output Gate, 分别负责决定当前输入是否被采纳,是否被长期记忆以及决定在记忆中的输入是否在当前被输出。Gated Recurrent Unit 是 LSTM 众多版本中典型的一个。因为它具有记忆性的功能,LSTM经常被用在具有时间序列特性的数据和场景中。

推荐文章
暂无评论
暂无评论~