导读 视频动作识别是指对一段视频中的内容进行分析,判断视频中的人物做了哪种动作。视频分析领域的研究相比较图像分析领域的研究,发展时间更短,也更有难度。本次分享会是达摩院开放视觉智能实验室的 Open VI Tech talk第五期,邀请到开放视觉智能算法专家广渡为大家介绍视频动作识别前沿技术。
全文目录:
【资料图】
1. 动作识别基本概念
2. 主流前沿的动作识别算法介绍
3. 动作识别应用前景与落地实践
分享嘉宾|广渡 阿里巴巴达摩院 算法专家
编辑整理|杨科 湖南星汉数智科技有限公司
出品社区|DataFun
01
动作识别基本概念
1.视频动作识别任务
动作识别的输入是视频片段。一般做法是将视频片段采样为若干帧,常用的如8 帧、16 帧或者是32 帧,对采样帧的动作类别进行识别。从表现形式上看,这其实是一个视频分类任务。从本质技术上讲,主要是时空特征学习技术,即Spatio-temporal feature learning。要学习视频里面的时间和空间的特征,空间特征是视频里面包含什么人或者物;时间特征就是视频里面的人或者物是如何运动的。这两部分一起构成了时空特征。这就是视频动作识别任务的定义。
2.下游任务
视频动作识别任务是视频理解的一个基础任务,它有很多下游任务。典型的有时序动作定位(temporal action localization),时空动作定位和检测(Spatio-temporal action localization/detection )。时序动作定位的任务是从长视频中定位出动作发生的起始时间和动作类别。时空动作定位是从时间上和空间上进行动作定位和检测。还有视频文本检索或者对齐(video text retrieve)、视频问答(video question answering)、零样本动作识别(Zero-shot action recognition)、开放集动作识别(Open-set action recognition)等。
02
主流前沿的动作识别算法介绍
主流前沿的动作识别算法主要包括四类:第一类是基于 CNN 的算法,是比较经典的算法,在落地应用场景中很常见;第二类是基于 vision transformer 的算法,这是最近两年比较火的一类方法;第三类是基于自监督的方法。第四类是基于多模态大模型的方法。
1.基于CNN的方法
CNN 在2D卷积获得了很大的成功。主要是2015年ResNet提出之后,CNN在图像识别、目标检测领域取得的突破。在视频领域,人们很自然地想到增加一个维度,把2D扩展到3D,也就是3D卷积。但是3D卷积直接应用存在一些问题,主要是参数量、计算量巨大,模型训练困难,最终的效果并不是很好。
此后,人们对CNN方法进行了改进,主要分为三种:第一种是在2D卷积的基础上,引入temporal建模能力,例如two-stream和TSN;第二种是对3D卷积的改进,例如P3D、I3D和R(2+1D),这两种都是对C3D的改进;第三种是做一些更强的时空建模能力的探索,例如Non-local和SlowFast。
(1)Two-Stream CNN和TSN
Two-Stream CNN在图像2D卷积的基础上,增加了另外一个流,即光流,利用光流为来学习建模时序运动特征。TSN(temporal segment network)是在Two-Stream的基础上做了加强,把它沿着时序进行分割,分段学习再融合结果,主要解决长视频的动作特征学习问题。
(2)P3D 、I3D和 R(2+1)D
3D卷积训练非常困难。因此,出现了几种对3D卷积改进的方法。第一种是Inflated 3D,又叫I3D。它的主要思想是使用2D卷积在ImageNet上训练的参数来初始化3D卷积。2D卷积对应3×3的核,3D卷积对应3×3×3的核,通过把3×3的卷积核复制3 次再除以3,这样就可以用2D卷积核来初始化3D卷积核。这是最初利用2D卷积初始化3D卷积的思想。
在此基础上,出现了伪 3D 卷积和(2 + 1)D卷积。它们的思想是一样的,本质都是把 3D 卷积分解为空间上的卷积和时间上的卷积。空间上的卷积就是图像的卷积,就是 3×3 的卷积,时间上的卷积就是1D卷积,相当于把 3D 卷积分解成了一个时空间 2D卷积加一维时间上的卷积。相比于C3D 来说,它的参数量和计算量都有大幅度的减少,同时在行为识别的性能上也有比较明显的提升。
(3)Non-local和Slow-Fast
Non-local是对行为识别问题进行全局时空建模的一种探索。它利用了自注意力机制(self-attention)的思想。从图上可以看到它的三个分支,其实类似于自注意力里面的QKV,但当时还没有分块的思想。non-local采取直接对中间层特征图做attention的方式,每个像素类似于一个token,这种建模也获得了不错的效果,不过计算量还是很大。
Slow-Fast可以说是基于 CNN类方法的一个巅峰,它的性能相对来说非常好。主要思想是分为slow和fast两个流,这和前面的Two-Stream不一样。Slow流是高分辨率、低帧率,主要学习帧内的空间特征。Fast流是低分辨率、高帧率,主要学习帧间时序运动特征。最后把两者融合在一起,作为最终的特征学习结果。这在 CNN 时代取得了非常不错的效果。
2.基于Vision-Transformer的方法
(1)TimeSformer
当前视频行为识别的SOTA模型,都是基于Vision-Transformer的方法。Vision-Transformer(ViT)首先在图像分类领域取得了成功,性能超过了CNN的方法。它的主要思想是把图像分块,比如图中是分成 9 块,将其展平作为9个向量输入。然后采用stack 的网络结构,最终加一个MLP head 进行分类,这就是Vision-Transformer。
把它用在处理视频上,和2D卷积用到视频上是一样的。实现方法有3种:第一种是每一帧单独做attention,最后把多帧融合在一起;第二种是所有帧同时做attention,类似于3D卷积;第三种是对时空分开做attention。
在Facebook和Dartmouth College 2021年发表的《Is Space-Time Attention All You Need for Video Understanding?》论文中,提出了Video TimeSformer模型,把上面的几种方案应用到了视频上。如图所示。第一种方案就是最左边这一列,每一帧单独做attention,前后帧不相关,最后把它们的特征进行平均,作为最终视频分类的特征。第二种方案是把所有时空的token全部放在一起,做self-attention。它的明显的缺点就是计算量大,token数量增加了帧数倍。第三种方案就是把时空分解,类似于伪 3D 卷积中的时间和空间分开。在空间上,每一帧内部做self-attention;在时序上,同一个空间位置的token也做self-attention。这种方法简单并且效果好,也是当前常用的一种方法。后面还有两种方案,一种是稀疏的,一种是把h 和 w 两个维度分开做attention。目前最常用的就是第三种。
(2)Patch Shift Transformer
第二个要介绍的是Patch Shift Transformer。这是阿里团队提出的快速动作识别的时空自注意力模型。它的主要思想就是把不同帧的分块(token),按照一定的规则进行移动,最后只留最后形成帧的分块。这一帧的分块是由前中后多帧融合而来的。如图所示,以 3 帧为例,比如第一帧是红色,第二帧为绿色,第三帧为蓝色。从这几帧里面的每一帧均匀地取一些分块,再把它合并到一张图里面去。在这一张图里面做一个self-attention。这是个2D的操作,因为它的分块来自于时序上的其他帧,所以相当于引入了时空建模的能力。它不需要引入额外的参数或者计算量。它的主要步骤就是先移动,之后把不同帧的分块引入到同一帧里面,在这同一帧里面再做self-attention,完成之后再把它移动回去恢复。通过在一帧里面做2D的self-attention,就获得了做3D的self-attention 的效果。在右边的图中,上面一行的三帧是输入,中间一行我们对比了channel shift,它是把不同的channel进行移动。这里面是把一个分块的所有 channel 进行移动。Patch Shift Transformer把不同帧的信息压缩到同一帧里面去。它的原理基于它认为不同帧在空间上是稀疏的,所以我同一空间可以展示不同帧的时序的信息,每一帧在空间上占用一个稀疏的位置,最终形成的帧包含多帧的信息。实验结果证明,它比 channel shift一般能提升1%左右。
(3)Video Swin Transformer
第三个是Swin Transformer。它同样是从2D应用到3D的方法。Swin Transformer在2D中使用了两种模式的分割,把一张图的全局self-attention分割为多个局部的self-attention。之后这两种模式交替进行,可以达到减少计算量同时提升效果的目的。它的主要特点一是局部分块进行self-attention,而不是直接把整张图放在一起进行self-attention。二是进行multi-stage和patch merge操作,这两个操作会不断地降低分辨率也就是token的数量,这对于减少计算量是非常重要的,这也是它比原始 ViT性能好的主要原因。
把它扩展到3D的视频领域,方法也是一样的,只不过分割的方式是从 2D扩展到3D帧。比如分割窗口使用2×2×2,或者3×3×3。Swin Transformer在视频分类的数据集上获得了SOTA的结果,也是当前直接做分类任务的很好方法。
3.基于Self-supervised的方法
下面介绍基于自监督的方法。当前直接基于视频分类的方法,比如前面介绍的Video Swin Transformer,它们的性能已经达到上限。要想继续提升视频分类的性能,可以使用自监督的方法。
在自监督领域介绍两篇论文。一篇是Video MAE,一篇是Masked Autoencoders As Spatiotemporal Learners。MAE在图像的特征学习上获得了很好的效果,那能否用到视频上呢。这两篇文章做了实验,告诉大家是可以的。需要说明的是,这两篇文章的实验非常耗时,需要大量的显卡。
右图是MAE框架。它的主要思想是掩去一部分图像块,用剩余的图像块去恢复整幅图。它包含一个encoder和一个decoder。encoder在训练完成之后,可以作为图像特征提取的模型。
(1)Video MAE
Video MAE这篇论文是首次把 MAE思想用在视频上的论文。它主要的贡献在于探索了不同的掩码(mask)方法,测试了不同的掩码方法对于最终模型性能的影响。它的结论是管道式掩码的效果要优于随机式掩码。这里的管道式掩码的意思是,对于空间上相同的位置,所有帧要么都掩掉,要么都不掩掉。随机式掩码是所有帧的所有分块都放在一起进行随机掩码。每一个分块是否被掩掉都是独立的。
它的主要结构是,对于视频首先采样成若干帧,对帧进行掩码。然后进入encoder进行特征学习,再通过decoder恢复图像。最后再在视频动作识别的数据集上进行调优,其效果比直接有监督的训练有非常明显的提升。比如在Kinectics-400数据集上,直接进行有监督的训练性能大概达到80%。如果使用自监督训练,能再提升几个百分点。所以自监督目前已经成为了一个比较明显的技术趋势。
(2)Masked Autoencoders As Spatiotemporal Learners
接下来介绍Masked Autoencoders As Spatiotemporal Learners论文。这一篇论文和上一篇论文的工作非常相似,也几乎是同一时期出现的,工作方法也比较类似。区别在于,两者在掩码策略上有一个不同的结论。上一篇论文认为管道式掩码效果好于随机式掩码。因为同一空间的所有帧在同一个区域都被掩掉了,丢失的信息可能会比较多,导致后续重建的难度增加,所以自监督学习能够更好地学习时空特征,因此提升了效果。而这一篇文章则认为随机式掩码实验效果比管道式掩码更好。它的解释是随机式掩码可以避免归纳偏置(inductive bias),可以去掉一些先验,这样它的泛化性能更好。
这两篇文章做了类似的工作,却得出了不同的结论。后续也有一些研究再次做了类似的工作,证明不管是随机式掩码还是管道式掩码,其效果是比较接近的,两者不相上下。
4.基于Multimodal的方法
在图像领域,以 CLIP为代表的多模态方法,已经取得了非常大的成功。在视频领域也开始出现了类似的进展,接下来主要介绍三种视频多模态方法。
(1)Intern Video
第一种是Intern Video方法。它其实也不完全是多模态,它是训练了两个模型,使用了多模态的数据,包括图像、视频和文本。第一个模型是MAE,如上图所示,是自监督的训练,用来做视频重建。另一个模型是多模态对比学习,用于视频和文本的对齐。这两个模型一起形成了最终的模型。它在30多个任务上都取得了SOTA的结果。
具体方法是:首先训练两个预训练模型,一个是MAE掩码视频重建,和前面介绍的那两篇论文工作类似。另一个是视频、图像和文本三个模态进行对比学习。它的backbone实际上是UniFormerV2,这也是视频分类领域里面一个非常强的baseline。
经过多模态对齐之后,得到了视觉特征提取模型作为预训练模型。之后把这两个模型联合起来,重新给它们加一个head,并冻结两个模型的Encoder参数,只训练 head部分。接着在视频有监督任务上进行调优。最终模型输出的结果是这两个预训练模型结果的动态融合。融合的方式称为跨模型注意力(cross-model attention),图中把它称为跨表示学习(cross- representation learning)。通过跨模型注意力将两个模型学习到的知识进行交互。
(2)Omnivore和Omni MAE
Omnivore 和Omni MAE这两种方法也是多模态的,它们涉及的模态是图像、视频和Single-view 3D 的数据。
因为目前Transformer模型在各个模态包括NLP、图像、视频上都取得了非常不错的效果,各种SOTA模型基本都是基于Transformer的。所以在Omnivore 和Omni MAE两篇论文里,作者认为,既然Transformer 在各个模态都占据了统治地位,因此可以尝试基于Transformer模型从各个模态学习特征。就是将同一个Transformer模型同时应用到三个模态中,它在三个模态是通用的,不仅结构一样,而且参数也是共享的。论文里设计了一个有监督的分类任务,最终学习到的模型,发现它和用单个模态单独训练的模型相比效果会相当或者更好一些。这两篇文章主要是研究不同模态的数据或任务用相同的模型来训练的效果,最终发现不同模态之间是可以相互提升的。
如图所示。左边是一个有监督的训练。右边又做了一个自监督的训练,以及使不同的模态图像和视频进行重建。最终结果表明这样是可行的。不同模态之间,不管是用有监督的训练,还是无监督的训练,结合自监督的学习,都能针对不同模态同时学习,相互提升性能。
03
动作识别应用前景与落地实践
接下来简单介绍动作识别的应用实践,以及ModelScope开源模型。
1.危险动作识别
动作识别落地应用的项目开发周期一般从采集数据、标记数据开始,接着训练模型,然后进行现场部署,最后再回流数据。这里以危险动作识别为例,介绍整个的项目开发周期。
动作检测模型的工作过程为:模型输入为视频流,或者是输入视频的片段。首先经过3D 卷积神经网络进行特征提取。这里的3D卷积并不局限于C3D 卷积,也可能是 P3D 或者是 R(2+1)D等基于CNN的方法。再进行时间维度的全局池化。之后进行动作检测,比如跌倒,我们要同时预测它的位置和预测动作的类别,最终输出它的结果。在这里输入的是多帧,是视频的检测,类似于图像的目标检测。这样一个简单的模型就完成了,可以方便地部署到工业现场。
2.ModelScope动作识别模型介绍
接下来介绍我们在ModelScope开源社区已经发布的一些动作识别模型。第一个是PST,就是 Patch Shift Transformer动作分类模型,用来做视频分类。第二个是日常动作检测模型,目前包含9种日常的动作,包括吸烟、打电话、跌倒、玩手机或者睡觉等,可以识别出动作发生的具体位置和类别。
最后介绍一下视频行为识别领域面临的一些挑战。
第一个是时空特征建模的算法。当前的很多算法都是基于图像的,再加上temporal时间维度的计算,但还是需要更好的时空特征算法。
第二个是大模型。图像领域相对于视频领域,数据集的收集成本比较低,所以图像领域现在的模型比如生成模型,最大的数据量已经达到数十亿了,但是视频领域的数据量目前还在千万级别,样本数量少很多。视频领域还需要更多的数据、更高的算力。
第三个是对运动的建模。因为视频的本质就是图像运动,就是图像里面的对象的运动。所以对于运动的建模或者是运动的生成,也是未来可能的一个热点研究方向。
最后是落地应用。对于下游任务应用的探索,也有很大的空间。
今天的分享就到这里,谢谢大家。
关键词: