1.2.2 动作识别
动作识别的目标是识别出视频中出现的动作,通常是视频中人的动作。视频可以看作是由一组图像帧按时间顺序排列而成的数据结构,比图像多了一个时间维度。动作识别不仅要分析视频中每帧图像的内容,还需要从视频帧之间的时序信息中挖掘线索。动作识别是视频理解的核心领域,虽然动作识别主要是识别视频中人的动作,但是该领域发展出来的算法大多数不特定针对人,也可以用于其他视频分类场景。
网络视频中涉及的内容题材包罗万象,包含大量的细分内容维度。为了能更好地给用户推荐其感兴趣的视频,也便于用户通过关键词搜索对应的视频,以及视频审核和运营的需要,网络视频平台会雇佣大量的数据标注人员人工对视频进行标注和审核。其中,视频标注的基础内容是每个视频的分类(Category)和标签(Tag):每个视频的分类是唯一的,例如,对于一个美食“吃播”的短视频,标注的分类可能是“美食”;视频标签是对视频内容更精细的描述,每个标签是一个词或短语,一个视频通常可以用多个标签进行描述,例如,该美食“吃播”的短视频的视频标签可能是“美食吃播”“韩国冷面”“大胃王”“美女播主”。利用动作识别算法,可以自动化地预测视频的类别,节省大量的人力成本。
和动作识别有一个相近的词语叫作行为识别(Activity Recognition),两者有细微的差别。简单地说,动作通常是一个人在比较短的时间内完成的,而行为是由多个人之间发生的一系列动作组成的,比动作粒度更细的是运动(Motion)(Turage et al.,2008)。例如,腿或手的移动属于运动,一个人走路或游泳属于动作,两个人握手或一群人踢足球属于行为,读者刚开始时可以不用区分得这么精细。
动作识别看上去似乎是图像分类领域向视频领域的一个自然延伸,深度学习尽管在图像分类领域取得了举世瞩目的成功,目前深度学习算法在图像分类上的准确率已经超过普通人的水平,但是,深度学习在动作识别领域的进展并不像在图像分类领域那么显著,很长一段时间基于深度学习算法的动作识别准确率达不到或只能接近传统动作识别算法的准确率。概括地讲,动作识别面临以下几点困难:
● 训练视频模型所需的计算量比图像大了一个量级,这使得视频模型的训练时长和训练所需的硬件资源相比图像大了很多,导致难以快速用实验进行验证和迭代。
● 在2017年,Kinetics 数据集(Carreira & Zisserman,2017)诞生之前,缺少大规模通用的视频基准(Benchmark)数据集。在很长一段时间里,研究者都是在如UCF-101 数据集(Soomro et al.,2012)上比较算法准确率,而UCF-101 只有1.3 万条数据,共101个类别,平均每个类别只有约100个视频,相比于图像分类领域的ImageNet 数据集有128 万条数据,共1000个类别,平均每个类别约有1,000个视频,UCF-101 数据集显得十分小。数据集规模制约了动作识别领域的发展。
● 学习视频中帧之间的时序关系,尤其是长距离的时序关系,本身就比较难。不同类型的动作变化快慢和持续时长有所不同,不同的人做同一个动作的方式也存在不同,同时相机拍摄角度和相机自身的运动也会对识别带来挑战。此外,不是视频中所有的帧对于动作识别都有相同的作用,有许多帧存在信息冗余。
● 网络结构设计缺少公认的方案。图像分类领域的网络结构设计有一些公认的指导理念,例如,端到端训练、小卷积核、从输入到输出空间分辨率不断降低且通道数不断增大等。然而,在动作识别领域,同时存在多个网络设计理念,例如,帧之间的时序关系应该如何捕捉、使用2D卷积还是3D卷积、不同帧的特征应该如何融合等都还没有定论。
Kinetics(Carreira & Zisserman,2017)是一个大规模的动作识别数据集,有400 类人物动作,包括单一人体动作(如画画、喝水、笑、击打等)、人和人的交互动作(如拥抱、亲吻、握手等)、人和物的交互动作(如打开礼物、修剪草坪、洗碗等)。Kinetics的训练集大小为24.6 万个视频,验证集大小为2 万个视频。每个视频时长大约为10 秒,视频源于YouTube。由于有400 类,这个数据集被称为Kinetics-400。后来Kinetics 数据集经过不断发展,又产生了Kinetics-600(Carreira et al.,2018)和Kinetics-700(Carreira et al.,2019),其中Kinetics-600的训练集大小为39 万个,包含600 类;Kinetics-700的训练集大小为54 万个,包含700 类。由于YouTube 视频大多由非专业人员手持拍摄得到,视频可能会有摄像头抖动、拍摄视角变化、拍摄分辨率不一致等问题。
Kinetics 数据集对后续的动作识别领域的研究工作起到了重要的推动作用,这个数据集在动作识别领域的地位可以类比于ImageNet 数据集在图像分类领域的地位。此外,Kinetics 数据集的另一个作用是可以得到很多预训练(Pre-trained)模型(Hara et al.,2018)。在图像领域,通常是用已经在ImageNet上预训练好的模型作为初始化,之后在实际关心的任务的数据集上做微调(Fine-tuning)。在视频领域,也可以利用在Kinetics上预训练好的模型作为初始化,这比直接在实际任务的数据集上进行训练准确率会有所提升(Carreira & Zisserman,2017)。
除了Kinetics,还有一个重要的大规模动作识别数据集,称为YouTube-8M(Abu-El-Haija et al.,2016)。YouTube-8M的数据集规模更大,达到了610 万个,包含35 万小时的YouTube 视频,每个视频的时长在120秒到500秒之间。YouTube-8M是一个多标签数据集,共3,862 类。YouTube-8M中的类别不再局限为人的动作,而是包括艺术娱乐、游戏、汽车、运动、食物饮料、计算机电子、商业工业等24个大类。数据由半自动化的方式进行标注,每个类别由3位标注员验证在视觉上是否可识别,每个类别收集至少200个视频,最多的“游戏”类有超过78 万个视频,平均每个类别对应3,552个视频。每个视频至少有1个标签,最多有23个标签,平均有3.0个标签。
由于这个数据集规模特别大,为了降低计算开销,使其对于大多数研究团队可用,YouTube-8M 主办方将视频前6分钟按照1 FPS(Frames Per Second,帧每秒)进行抽帧,每帧提取ImageNet 预训练的Inception V3(见2.1.5节)模型的最后一层隐层特征作为该帧的图像特征,共2,048维。另外,使用VGGish(Hershey et al.,2017)对视频中的音频特征进行提取,维度为128维。为了进一步降低存储开销,最终对提取的图像特征进行PCA(Principal Component Analysis,主成分分析)和白化(Whitening),使特征降维至1,024。最终,从610 万个视频中得到26亿个视频帧和音频特征,占硬盘空间为2 TB。因此,基于YouTube-8M 数据集举办的YouTube-8M 竞赛的主要挑战是如何对已经提取好的视频帧和音频特征进行特征融合,得到有效的视频级别特征,进而基于视频级别特征进行分类。
所有的动作识别算法可以大致分为基于2D 卷积的动作识别算法和基于3D 卷积的动作识别算法两大类,第3章和第4章将分别对这两大类算法予以介绍。对动作识别领域感兴趣的读者可参考综述论文,如(Herath et al.,2017;Kong & Fu,2018)等。此外,(Hutchinson & Gadepally,2020)介绍了视频理解相关领域的研究工作。