不严肃的开场白
视频社交已经成为了时下最 in 的社交方式,相较于传统的文字、语音聊天,使用亲身录制的短视频、幽默搞笑的图片、表情包与好友进行交流,不仅更加风趣且更具人情味。
而随着视频社交的流行,每天产生的视频数据能够达到数千万小时,这些数据的质量参差不齐,其中有大量的不良视频,如涉暴、涉黄、涉政等。在海量数据面前,完全依靠人工审核无法解决内容审核的难题。因此也催生了智能内容审核的诞生。智能内容审核是指借助于人工智能技术,对海量视频进行自动分类,鉴别出其中涉及敏感内容的视频并予以禁播。
智能内容审核的第一步,是进行视频分类。今天,我们要聊的就是视频分类背后的算法。
严肃的开场白
故事要从深度学习说起。(因为从深度学习说起,可以显出本文是一篇有逼格的算法总结。)深度学习是一个近几年来火遍各个领域的词汇,在语音识别、图像分类、视频理解等领域,深度学习的相关算法在特定任务上已经能够达到甚至超过人类水平。本文从视频分类的角度,对深度学习在该方向上的算法进行总结。
视频分类是指给定一个视频片段,对其中包含的内容进行分类。类别通常是动作(如做蛋糕),场景(如海滩),物体(如桌子)等。其中又以视频动作分类最为热门,毕竟动作本身就包含「动」态的因素,不是「静」态的图像所能描述的,因此也是最体现视频分类功底的。
数据集
熟悉深度学习的朋友们应该清楚,深度学习是一门数据驱动的技术,因此数据集对于算法的研究起着非常重要的作用。网络上虽然有大量用户上传的视频数据,但这些数据大多数缺少类目标签,直接用于算法的训练会导致效果欠佳。在学术界,通常有一些公开的、已经经过完整标注的数据集,是算法训练的好帮手。具体到视频分类领域,主要有两种数据集,trimmed 和 untrimmed。Trimmed 是指视频经过剪辑,使其只包含待识别类别的内容; untrimmed 是指视频未经过剪辑,包含了动作/场景/物体之外的很多信息。Untrimmed 通常在视频分类的算法之外,还要加上动作检测算法。这不在今天的话题当中,有空我们可以再聊聊这一块的算法。
那么 trimmed video 的数据集比较常见的有 UCF101,HMDB51,Kinetics,Moments in time。Untrimmed video 的数据集比较常见的有 ActivityNet,Charades,SLAC。部分数据集的比较见下表:
视频分类常用数据集
需要指出的是,从上表中我们可以看出视频分类的数据集实际上比图像分类的数据集的规模小得多。这是因为在视频上进行标注远比对图像进行标注要费时费力。Trimmed 视频还好些,基本标注时间等于视频时长。如果是 untrimmed 视频,需要在视频中手工标注动作的起始和结束时间,根据测试,需要花费视频长度的 4 倍时间。
因此 ladies and 乡亲们,这些数据集,且用且珍惜吧。
研究进展
在视频分类中,有两种非常重要的特征:表观特征 (appearance) 和时序特征 (dynamics)。一个视频分类系统的性能很大程度上取决于它是否提取并利用好了这两种特征。但是提取这两种特征并不那么容易,会遇到诸如形变/视角转换/运动模糊等因素的影响。因此,设计对噪声鲁棒性强且能保留视频类别信息的有效特征至关重要。
根据 ConvNets(深度卷积神经网络)在图像分类上取得的成功,很自然地,我们会想到把 ConvNets 用到视频分类中。但是,ConvNets 本身是对二维图像的表观特征的建模,而对于视频来说,除了表观特征,时序特征也很重要。那么如果把时序特征用起来呢?通常有三种思路: LSTM, 3D-ConvNet 和 Two-Stream。
1. LSTM 系列
LRCNs[1] 是 LSTM 和 ConvNet 结合进行视频分类的方法。这种结合很自然,已经在图像分类任务上训练好的 ConvNet 分类器,可以很好地提取视频帧的表观特征;而对于时序特征的提取,则可以通过直接增加 LSTM 层来实现,因为 LSTM 能够将多个时刻的状态作为当前时刻的输入,从而允许时间维度上的信息得以保留。
视频分类任务是变长输入定长输出的。文章另外还介绍了 LRCNs 用于图像描述(定长输入变长输出)和视频描述(变长输入变长输出)的方案,感兴趣的同学可以自行查看。
2. 3D-ConvNet 及其衍生系列
C3D[2] 是 Facebook 的一个工作,它主要是把 2D Convolution 扩展到 3D。其原理如下图,我们知道 2D 的卷积操作是将卷积核在输入图像或特征图(feature map)上进行滑窗,得到下一层的特征图。例如,图 (a) 是在一个单通道的图像上做卷积,图 (b) 是在一个多通道的图像上做卷积(这里的多通道图像可以指同一张图片的 3 个颜色通道,也指多张堆叠在一起的帧,即一小段视频),最终的输出都是一张二维的特征图,也就是说,多通道的信息被完全压缩了。而在 3D 卷积中,为了保留时序的信息,对卷积核进行了调整,增加了一维时域深度。如图 © 所示,3D 卷积的输出仍是一个三维的特征图。因此通过 3D 卷积,C3D 可以直接处理视频,同时利用表观特征和时序特征。
关于实验效果,C3D 在 UCF101 上的精度为 82.3%,并不高,其原因在于 C3D 的网络结果是自己设计的简单结构(只有 11 层),而没有借鉴或预训练于其他成熟的 ConvNets 结构。
因此针对这一点,有很多学者提出了改进。
I3D[3] 是 DeepMind 基于 C3D 作出的改进,值得一提的是 I3D 这篇文章也是发布 Kinetics 数据集的文章。其创新点在于模型的权重初始化,如何将预训练好的 2D ConvNets 的权重赋值给 3D ConvNets。具体地,将一张图像在时间维度上重复 T 次可以看作是一个(非常无聊的)T 帧的视频,那么为了使该视频在 3D 结构上的输出和单帧图像在 2D 结构的输出相等,可以使 3D 卷积的权重等于 2D 卷积的权重重复 T 次,再将权重缩小 T 倍以保证输出一致。 I3D 在 Kinetics 数据集上进行预训练然后用于 UCF101,其精度可达到 98.0%。
P3D[4] 是 MSRA 基于 C3D 作出的改进,基本结构是把 ResNet 扩展为「伪」3D 卷积,「伪」 3D 卷积的意思是利用一个 133 的 2D 空间卷积和 311 的 1D 时域卷积来模拟常用的 333 的 3D 卷积,如下图所示。P3D 在参数数量、运行速度等方面对 C3D 作出了优化。
3. Two-Stream Network 及其衍生系列
Two Stream[5] 是 VGG 组的工作(不是 UGG 哦),其基本原理是训练两个 ConvNets,分别对视频帧图像(spatial)和密集光流(temporal)进行建模,两个网络的结构是一样的,都是 2D ConvNets,见下图。两个 stream 的网络分别对视频的类别进行判断,得到 class score,然后进行分数的融合,得到最终的分类结果。
可以看出 Two-Stream 和 C3D 是不同的思路,它所用的 ConvNets 都是 2D ConvNets,对时序特征的建模体现在两个分支网络的其中一支上。Two-Stream 的实验结果,在 UCF101 上达到 88.0% 的准确率。
在 spatial stream 和 temporal stream 如何融合的问题上,有很多学者作出了改进。
[6] 在 two stream network 的基础上,利用 3DConv 和 3DPooling 进行 spatial 和 temporal 的融合,有点 two stream + C3D 的意思。另外,文章将两个分支的网络结构都换成了 VGG-16。在 UCF101 的精度为 92.5%。
TSN[7] 是 CUHK 的工作,对进一步提高 two stream network 的性能进行了详尽的讨论。Two stream 在这里被用在视频片段(snippets)的分类上。关于 two stream 的输入数据类型,除去原有的视频帧图像和密集光流这两种输入外,文章发现加入 warped optical flow 也能对性能有所提高。在分支网络结构上尝试了 GoogLeNet,VGG-16 及 BN-Inception 三种网络结构,其中 BN-Inception 的效果最好。在训练策略上采用了跨模态预训练,正则化,数据增强等方法。在 UCF101 上达到 94.2% 的精度。
4. 其他
除了以上两种常见的思路以外,也有学者另辟蹊径,尝试与众不同的方法。
TDD[8] 是对传统的 iDT[9] 算法的改进(iDT 算法是深度学习以前最好的行为识别算法),它将轨迹特征和 two-stream network 结合使用,以 two-stream network 作为特征提取器,同时利用轨迹对特征进行选择,获得轨迹的深度卷积描述符,最后使用线性 SVM 进行视频分类。TDD 是一个比较成功的传统方法与深度学习算法相结合的例子,在 UCF 上达到 90.3% 的精度。
ActionVLAD[10] 是一种特征融合的方式,它可以融合 two stream 的特征,C3D 的特征以及其他网络结构的特征。其思想是对原有的特征计算残差并聚类,对不同时刻的帧进行融合,得到新的特征。ActionVLAD 是对视频空间维度和时间维度的特征融合,使得特征的表达更全面。
Non-local Network [11] 是 Facebook 何恺明和 RBG 两位大神近期的工作,非局部操作(non-local operations)为解决视频处理中时空域的长距离依赖打开了新的方向。我们知道,卷积结构只能捕捉数据的局部信息,它对于非局部特征的信息传递不够灵活。Non-local Network 则根据所有帧所有位置的信息对某个位置进行调整。文章把这个 block 加在 I3D 上做了实验,在 Charades 上精度提升 2%。
总结
以上所有的视频分类算法都是在近几年提出的,可以看出这一领域的发展之快。从学术角度,视频分类是开启视频理解这个领域的金钥匙,对它的研究可以为相关领域的研究打下坚实的基础,包括视频动作检测,视频结构化分析等,都用到了视频分类的技术。从我们实际生活的角度,视频分类已经在默默地做着很多事情,例如在文章一开始提到的智能内容审核,再例如视频检索、视频监控、视频广告投放、自动驾驶、体育赛事分析等。在不久的将来,相信视频分类以及其他的 AI 算法将为我们带来更多惊喜的变革。AI 让生活更美好。
本文转载自公众号七牛云(ID:qiniutek)。
原文链接:
https://mp.weixin.qq.com/s/siZf7RKl1ajPnd2i_dIIwg
评论