1.推荐阅读
[动作识别综述_1](本文主要翻译自该综述)
[动作识别综述_2](GitHub项目)
[动作识别开源集锦](GitHub项目)
[竞赛](ActivityNet)
Kinetics UCF101 HMDB-51 YouTube-8M(数据集)
2.Action Recognition 的难点
Action Recognition 需要对视频帧中的每一个动作进行识别,这些动作可能是贯穿于整个视频流,也可能是仅在某一时段出现一下,我们不仅要知道这个动作是什么,还需要清楚它的起始时间段。我们的终极目标是:知道一段视频中,谁(who)在什么时间段(when)在哪儿(where)干了什么(what)?简称“4w”。这有点像图像分类任务的拓展,我们需要根据每一帧的动作分类来预测整段视频包含什么内容。
事实上,图像分类已经取得了比较喜人的成绩,但是对于视频分类(video classification)、表征学习(representation learning)来说,深度学习的进展还显得比较缓慢。之所以会如此艰难,主要源于以下几方面的原因:
- 巨大的计算成本:传统的2D卷积在面对101分类任务时,通常只需要~5M参数;然后,将其扩展到3D空间之后,参数量将剧增至~33M。在UCF101数据集上进行3D卷积操作通常需要花费3~4天的时间,在Sports-1M数据集上则要花费大概两个月;不仅结构搜索空间很庞大,而且还容易产生过拟合。
- 需要捕捉上下文信息:动作识别需要在图像帧之间获取时空领域的上下文信息,与此同时空间信息还需要对相机移动进行补偿。即便是我们能够实现空间目标的检测,也很难去获取它的细节动作。例如:同样是检测到人和水,但是我们很难去区分出自由泳和蛙泳。
- 分类结构的设计:设计一个可以用来捕获时空信息的分类网络有很多种不同的策略,并且很难去评价这些策略孰优孰略。例如:(1)可以设计一个网络一次性获取时空信息,也可以设计两个网络分别获取时间、空间信息;(2)单帧预测或者是融合预测;(3)端到端的训练,或者是将特征提取和分类两过程分开。
- 无统一标准:目前最被公认的数据集就是UCF101和Sports-1M:在Sports-1M上搜索合理的网络结构代价是很昂贵的,而UCF101虽然和ImageNet拥有相同数量级的数据,但是由于图像在空间上的高度相关性,导致样本的真实多样性大打折扣。除此之外,这两个数据集都有相同的具体领域—运动,在将其推广到其他场景时适用性较弱,所以最近又出现了新的数据集Kinetics。
3.Action Recognition 的传统方法
在深度学习出现之前,CV领域的动作识别技术可以归结为以下三步:
- 提取描述视频的局部高维视觉特征,要么是密集的,要么是稀疏的兴趣点集;
- 将提取的特征融合到一个固定大小的视频级别描述中(?),常见的做法是使用词袋;
- 最后使用SVM或者RF在视觉词袋上进行训练,用来预测最终的结果。
这些算法在第一步特区特征的时候使用了hand-crafted-feature,目前该方向的SOTA是iDT(improve Densely Trajectories,使用密集采样的轨迹特征,代码与解析)。与此同时,3D卷积也被用在动作识别领域(2013年);之后出现了两片篇有突破性进展的文章(2014年),这形成了之后动作识别算法的backbone,它们之间的主要区别是:对于时空信息结合的设计方式有所不同。这两篇文章虽然是里程碑之作,但是年代久远、性能还是比较差,所以我们一般只关注它们的思想。
3.1Single Stream Network
论文:《Large-scale Video Classification with Convolutional Neural Networks》
在这篇文章中,作者使用2D卷积进行预训练,探索了多种从连续帧中融合时间信息的方法:
Single Frame 方法使用单线提取每一帧的特征,然后在最后将这些特征融合在一起;Late Fusion 方法使用双线,双线之间共享参数,以15帧为间隔分别提取特征,最后再进行融合;Early Fusion 则是对相邻的10帧进行特征提取,这相当于在卷积的第一层就进行了融合;Slow Fusion 寻求Late Fusion 和Early Fusion 之间的平衡,它开启多线模式,然后在后期慢慢的将多线合并达到逐步融合时空特征的目的。模型从整个视频中抽取多个片段,对每个片段的分类进行打分,然后取平均值作为最后的分类结果。
作者做了大量的实验,最终发现这种方法与当前的SOTA方法(hand-crafted-feature)相比效果差很多,分析可能的原因:(1)网络提取到的时空特征可能并没有抓取运动特征;(2)数据集的多样性较差,很难提取得到完备的动作库。
3.2Two Stream Networks
论文:《Two-Stream Convolutional Networks for Action Recognition in Videos》
吸取了Single Stream的失败教训,作者特别关注了深度网络对运动特征的学习:以叠加光流矢量的形式对运动特征进行显式建模。和之前的单个网络network不同,这里作者使用两个单独的网络,一个用来提取空间上下文(预训练完成),一个用来提取运动上下文。
Spatial Net的输入是视频的每一帧,Temporal Net的输入是光流,作者通过实验发现连续10帧叠加的双向光流效果最好。这两个网络分开训练,然后最后用SVM融合,最终的结果和之前一样:采样平均。这种方法虽然相比于Single Stream来说效果要好(因为它结合了时间光流信息),但是仍存在一些缺陷:(1)整段视频的预测采取的是采样平均的方式完成的,所以还是会丢失部分长时特征信息;(2)采样的时候可能会出现“虚假标签”的情况,因为采样的视频默认是跟整段视频的ground truth一致的,但实际上可能采样的那一小片段并非标注的动作;(3)该算法设计到光流的预计算和分开存储,并且两个网络是分别训练的,无法实现训练上的端到端。
4.深度学习中的 Action Recognition
受到上述两种思路的启发,后续产生了各种各样的动作识别算法,简述如下。
4.1 LRCN
论文:《Long-term Recurrent Convolutional Networks for Visual Recognition and Description》2014
代码:[caffe] [pytorch]
贡献:(1)不再使用传统的光流方法,而是引入RNN结构;(2)将编码解码结构拓展到视频表征领域;(3)为动作识别提出了一个端到端的训练结构。
简介:在此文之前有学者探索了在特征图上使用LSTM的想法,尝试从中捕获时间信息;遗憾的是,最终的结论证明卷积特征的时间池化比对特征图使用LSTM更有效。LRCN的作者基于此结论,设计了一种“编码-解码”网络,编码部分使用卷积块,解码部分使用LSTM单元,并对整个网络使用端到端的训练。他们还比较了以RGB图像和光流分别作为输入的效果,最终发现取二者的加权平均作为网络输入才是最优选择。
上图左边给出了用于Action Recognition的LRCN网络,右边则是通用类型的LRCN(可用于其他分类任务)。LRCN能够处理可变长视频序列,首先是每一帧送入CNN,这是一个编码过程;它的输出送入LSTM,一并送入LSTM的还有上一帧经过LSTM的输出(也就是说,对于每一帧的LSTM而言,它要接受当前帧的编码结果以及上一帧的解码结果)。不同长度的视频输入,一般会得到不同的动作分类结果,对于LRCN来说它可以接受任意长度的序列帧。
算法:实际训练时,作者将视频分割为一个个16帧的片段,每一个片段的分类结果是在时间步长上的输出(
y
1
∽
y
16
y_1\backsim{y_{16}}
y1∽y16)平均值,视频的分类结果则是所有片段预测值取平均。网络采取端到端的训练,输入为RGB或者光流。
效果(基于UCF101):
score | comments |
---|---|
82.92 | 输入为RGB与光流的加权平均 |
71.1 | 输入为RGB |
评论:LRCN仍然避免不了“虚假标签”的问题,因为它还是要将视频分割成片段;其次使用光流意味着单独计算流特性,耗时耗力;对于长范围的时间信息还是无能为力。后来有学者尝试弥补长时信息的缺陷,通过降低空间分辨率、增加剪辑片段的帧数(60帧),获得了更好的结果。
4.2 C3D
论文:《Learning Spatiotemporal Features with 3D Convolutional Networks》2014
代码:[caffe] [tensorflow]
贡献:(1)利用3D卷积网络作为特征提取器;(2)广泛搜索最佳的3D卷积核、3D卷积网络;(3)使用反卷积层来解释模型决策(?)。
简介:之前处理图像的卷积都是2D的,这里作者使用3D卷积构建了一个庞大的模型,用Sports-1M数据集来完成训练,然后以此作为其他数据集的特征提取器(这个特征提取器后来广泛被用作 Action Detection 的基础)。最终,作者实现了一个类似于SVM的简单线性分类器,该分类器的效果可以达到当时的SOTA。同时,如果再附带使用 hand-crafted-feature 例如iDT,效果会进一步提升。
上图上半部分给出了2D卷积和3D卷积的对比,下半部分给出了C3D的网络结构:8个卷积、5个池化、2个全连接,最后是一个softmax输出。所有3D卷积的尺寸都是3*3*3、步长为1,图中框内的数字表示卷积核的数量;池化层的位置如图中所示,处理pool1是1*2*2之外,其他池化层都是2*2*2。文章的另一个有趣的部分是使用反卷层来解释决策;作者在最初的几帧中关注空间外观,在随后的几帧中跟踪运动。
在训练时,作者为每个视频随机抽取两个时长为2s的片段,连带着groundtruth一起作为动作;在test过程,随机抽取10个片段,取这10个片段的预测结果的平均值作为最终的结果。
上面Figure3的注解说3D卷积的尺寸在spatial和temporal空间中都相同,如何理解?C3D属于 two stream 吗?这里使用的是单网络啊?
效果(基于UCF101):
score | comments |
---|---|
83.2 | C3D(1net)+ linear SVM |
85.2 | C3D(3nets)+ linear SVM |
90.4 | C3D(3nets)+ iDT + linear SVM |
评论:首先,长时信息(long range temporal information)的问题仍然没有解决;其次,这种自然图像下的预训练对于某些领域来说作用并不大,例如医学。和C3D同一时期,有学者提出了分离三维卷积(factorized 3D conv networks,
F
S
T
C
N
{F_{ST}CN}
FSTCN),该网络将3D卷积分解为空间上的2D卷积和时间上的1D卷积,1D卷积跟在2D卷积的后面,以这种方式在UCF101上得到的结果也能够与其他模型一较高下。
4.3 Conv3D & Attention
论文:《Describing Videos by Exploiting Temporal Structure》,2015
代码:[tensorflow] [Theano]
贡献:(1)建立一个3D CNN-RNN的“编码-解码”器,以此提取来提取局部时空信息;(2)在“编码-解码”框架中加入Attention机制,以此获取全局上下文信息。
简介:该文章并不是直接与动作识别相关的,但是它是视频表征(video representation)领域的里程碑之作。作者首先使用3D CNN来做预训练,然后用3D CNN加上LSTM作为基础框架来完成视频描述任务。网络的整体框架与LRCN基本一致,区别在于:
- 不再是简单的将3D CNN特征直接送入LSTM,而是需要将3D CNN特征图与2D CNN特征图进行融合,要注意的是这二者处理的帧是完全相同的,并且它们的参数是在预训练时确定的,这与LRCN的端到端训练不一样。
- 在LSTM中加入Attention机制,这就表明时序向量不再是以均值的方式来处理,而是加权平均;每一部分的权重大小取决于各时间段LSTM的输出值。
效果:(该网络基于Youtube2Text数据库完成视频描述任务 video caption,并没有做动作识别!)
评论:该论文第一次将注意力机制引入到视频表征任务中,是一个里程碑之作。
4.4 TwoStreamFusion
论文:《Convolutional Two-Stream Network Fusion for Video Action Recognition》,2016
代码:[Matlab]
贡献:(1)通过加入长时损失函数来实现长时信息建模;(2)提出了一个多级融合结构。
简介:该网络基于Two Stream结构提出两点创新,在不大量增加参数的情况下取得了较好的性能提升:
- 融合空间和时间流(这就相当于解决了how和when的问题),空间网络提取视频中的空间依赖性,时间网络提取空间中各位置的周期性运动。因此,将一个特定区域的空间特征图映射到相关的时间特征图就显得非常重要,需要在网络的早期阶段就对二者进行融合(后来 TAL-NET 证明晚融合的效果要更好),以便将相同像素位置的响应对应起来。
- 对时间网络进行跨时序帧融合,这样长时依赖关系就能够被建模。
论文中作者介绍了几种不同的方式来对spatial和temporal进行融合,在conv5_layer位置进行一次融合,之后分开,在网络的最后再次进行融合,这种方式的效果是比较好的。对于时间融合(temporal fusion)来说,时间网络输出、跨时叠加、卷积池化融合都将被纳入最终的损失函数计算中。
效果(基于UCF101):
score | comments |
---|---|
92.5 | TwoStreamFusion |
94.2 | TwoStreamFusion + iDT |
评论:在TwoStream方向中优势很大,它在不增加C3D参数的情况下很好的提高了动作识别的性能(?有3D卷积吗?)。
4.5 TSN
论文:《Temporal Segment Networks: Towards Good Practices for Deep Action Recognition》,2016
《Temporal Segment Networks for Action Recognition in Videos》,2017
代码:[Caffe] [Pytorch] [MMAction]
贡献:(1)提出了一种长时建模的高效解决方案;(2)实践性地使用了BN、dropout、pre-training。
简介:TSN还是一种TwoStream的方法,并且实现了当时的SOTA,主要的创新在于两点:
- 作者提出,在整个视频中稀疏地采样片段以更好地对长时信号建模,而不是对整个视频进行随机采样。
- 对于最终视频级别的预测结果,作者尝试了多种不同的策略,最终发现,在每一个片段上分别对时间流、空间流的得分进行平均,然后对时间流、空间流得分使用加权平均,最后以softmax分类结果作为最终预测值,这种策略的效果是最优的。
除此之外,作者还探讨了在小规模数据集上的过拟合问题,并给出了BN、dropout、pre-training的解决办法;对于网络输入,作者提出两种有别于光流的可选方案——翘曲光流(warped optical flow)和RGB差分(RGB difference)。
在实际训练中,每个视频按照时长被均分为 K 个部分,然后从每个部分中随机抽取一帧(snippet)组合成一个片段(clip);从每一个 snippet 中得到一个 snippet-level 预测结果,然后使用聚合方法将 clip 中的 snippet 联合起来形成最终的 video-level 动作分类。
效果(基于UCF101):
score | comments |
---|---|
94.0 | TSN(input:RGB + flow) |
94.2 | TSN(input:RGB + flow + warped flow) |
评论:作者尝试解决Action Recognition领域的两个大的问题:过拟合和长时信号建模,并且还取得了很好的效果,但是依然存在预计算光流和输入模态的问题。TSN 被后来很多 video understanding 类文章引用,是 action detection 的一个重要基础,可以说是必须掌握的。
TSN目前拥有一套完整的Action Analysis流程(包括recognition、detection、location),它集成于MMAction平台。
对于想使用TSN的同学,可以直接读它的第二篇文章(发表于2017年的),该文章主要创新有三点:(1)针对long-range temporal问题提出稀疏采样的方案,详细解释了它的出发点;(2)针对untrimmed video提出分层聚集策略,使得动作识别的场景更加合理化(其实就是解决了detection、location问题);(3)提出各种优化技巧,例如BN的使用、跨模态初始化,还添加了对TSN的可视化分析等。
4.6 ActionVLAD
论文:《ActionVLAD: Learning spatio-temporal aggregation for action classification》,2017
代码:[tensorflow]
贡献:(1)可学习的视频级(时空)融合特征;(2)利用视频级(时空)融合特征来完成端到端的模型训练,以此获取长时依赖性。
简介:本文最重要的创新点在于提出了一种可学习的融合特征——VLAD,和之前利用池化融合特征的方法相比是完全不同的。类似于视觉词袋(bag of visual words),VLAD基于词汇表用多个学好的锚点(anchor-point,
{
c
1
,
c
2
,
.
.
.
,
c
k
}
\{c_1,c_2,...,c_k\}
{c1,c2,...,ck})来表征 k 个与时空特征相关的典型动作。两个分支流的输出用“k维空间的动作词袋特征”进行编码,每一个特征都和其他的锚点相区分,如下图的上半部分所示。
平均池化或者是最大池化都是对一张图像的像素空间做出一个整体的描述,对于视频空间来说,它的描述可能不是由一个单独的维度空间来表征,那么pooling的方式就可能不是最佳的。于是作者将描述符空间划分为 k 个子单元格,然后在每个单元格内部进行池化,由多个sub-action来生成最后的表征,上图的下半部分给出了示意。
效果(基于UCF101):
score | comments |
---|---|
92.7 | ActionVLAD |
93.6 | ActionVLAD + iDT |
评论:使用VLAD作为高效池化的方式已经不再流行了,虽然该方式很鲁棒并且在2017年的时候取得了动作识别领域的SOTA。
4.7 HiddenTwoStream
论文:《Hidden Two-Stream Convolutional Networks for Action Recognition》,2017
代码:[Caffe]
贡献:使用一个单独的网络来实时产生光流作为输入。
简介:对于每一个采样帧来说,TwoStream方法中的光流必须提前计算,这样才可以保证不影响处理时的存储和计算速度,针对这个问题本文提出了一种无监督结构来生成一组帧的光流。光流可以看成是一个图像重构问题,对于给定的相邻帧
I
1
、
I
2
I_1、I_2
I1、I2,CNN需要产生一个流场
V
V
V;利用预测的流场
V
V
V 和相邻帧
I
2
I_2
I2,通过反向翘曲将
I
1
I_1
I1 重构为
I
1
′
I_1^{\prime}
I1′,使
I
1
I_1
I1 与重构值
I
1
′
I_1^{\prime}
I1′ 的差值最小化。
作者在保证不损失精度的情况下,坚持使用最大帧率和最小参数量,探索了多种网络结构来生成光流,最终得到的网络结构如上图所示:时间流分支多了一个光流生成网络MotionNet,该分支的输入也不再是预处理计算得到的光流了,而是顺序帧。要注意的是,非监督网络MotionNet将拥有额外的损失函数。作者还实验了用TSN来代替传统的TwoStream结构,这对于性能有一定的提升。
效果(基于UCF101):
score | comments |
---|---|
89.8 | HiddenTwoStream |
92.5 | HiddenTwoStream + TSN |
评论:本文主要的贡献在于提升了预测的速度,降低了预测的成本,和传统算法相比减少了对于光流计算网络的依赖。现在已经有很多专门用于光流计算的网络了,比如 SelFlow,PWC-Net 等,都是为了 Two-Stream 提取时序特征用。
4.8 I3D
论文:《Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset》,2017
代码:[tensorflow] [Pytorch]
贡献:(1)利用预训练将3D卷积模型和TwoStream结构相结合;(2)生成了Kinetics数据集,提高了动作识别数据集的多样性。
简介:该文章以C3D作为出发点,在TwoStream的两个分支结构中使用不同的3D卷积,在3D模型中使用了2D预训练模型的权重,空间分支的输入不再是单张图像而是带有时间维度的时序帧。
从上图上半部分的对比可以大致看出 I3D 的形成过程,下半部分则给出了单个分支中基于Inception V1的3D卷积实现。图中未标明步长的卷积和池化层默认stride为1,prediction之前的BN、ReLU以及softmax部分在图中省略了;与此同时,该图还给出了不同阶段模型的感受野,左边“Inc”指的就是Inception块,其具体实现在右边。
效果(基于UCF101):
score | comments |
---|---|
93.4 | TwoStream I3D |
98.0 | ImageNet + Kinetics pre-training |
评论:该论文证明了使用预训练2D卷积模型的益处,Kinetics开源数据集则是该文章的另一个突出贡献。它和 C3D、TSN 一起,作为后续 Action Detection 研究很重要的基础。
4.9 T3D
论文:《Temporal 3D ConvNets: New Architecture and Transfer Learning for Video》,2017
代码:[Pytorch]
贡献:(1)提出了一种在可变深度(?)中结合时间信号(temporal information)的网络结构;(2)提出了一种全新的训练模型和技术,可以监督从2D预训练到3D网络之间的切换过程。
简介:该文章延续了I3D的工作,不同的是作者主张使用基于3D DenseNet 的SingleStream(而不是TwoStream),在dense块的后面接上不同深度的时序池化层(Temporal Transition Layer),以此来获取不同的时序深度信息;不同深度的池化层拥有不同时序大小的池化核,如下图的上半部分所示。
上图的下半部分展示了基于2D卷积的预训练网络向基于3D卷积的DenseNet的转换过程,2D卷积处理的是单帧RGB,3D卷积则处理同一时间戳下的视频块,2D卷积通过这种“图像-视频协作”任务“教会”3D卷积学习中间层的特征表征。在训练过程中,为了使得模型高效习得3D卷积的参数,2D卷积的预训练参数将被冻结。
效果(基于UCF101):
score | comments |
---|---|
90.3 | T3D |
91.7 | T3D + Trsanfer |
93.2 | T3D + TSN |
评论:虽然T3D相比于I3D而言并没有多大的性能改善,但是占用的内存空间却要小很多;同时它还提出了一种2D向3D学习转换的监督技术。
上面的内容基本截止到2017,下面是一些该综述中未提到的、近期出现的、个人觉得比较好的方法。
5. 近期 Action Recognition 方法
5.1 Non-Local
论文:《Non-local Neural Networks》2018
代码:[Caffe]
贡献:(1)提出了一种非局部连接(Non-local operations)的计算块 (building block),用于处理视频和图像的长程依赖关系(long-range dependency);(2)在视频数据集Kinetics and Charades datasets,目前最优(对比2D或3D卷积网络);(3)图像分类数据集COCO,能够提升精度。
简介:Non-Local 方法来自于 NLM(Non-Local Means,非局部均值)的启发,NLM 主要用于图像降噪,之所以称之为“非局部”是因为它所运用的搜索框形式会使得当前像素点的像素值依赖的范围大大增加(一般搜索框大小是21*21),具体算法看这里。考虑将 NLM 用于卷积层之前,在提取特征的时候先进行降噪处理;具体思想可以用一个公式来概括
y
i
=
1
C
(
x
)
∑
∀
j
f
(
x
i
,
x
j
)
g
(
x
j
)
y_i=\frac{1}{C(x)}\sum_{\forall{j}}f(x_i, x_j)g(x_j)
yi=C(x)1∀j∑f(xi,xj)g(xj)其中
x
i
x_i
xi 表示中心点,
x
j
x_j
xj 表示该中心点的非局部搜索框里面的任意一点,
f
(
x
i
,
x
j
)
f(x_i, x_j)
f(xi,xj) 表示二者之间的相似度(其实就是一个权重),
C
(
x
)
C(x)
C(x) 是一个归一化系数。论文对于
f
、
g
f、g
f、g 给出了几种不同的实现方式,例如
f
f
f 使用高斯函数、边缘高斯等,
g
g
g 使用线性函数编码。Non-Local 块同时还有res残差块的痕迹,看下图:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6351a732328d4121b65dc53d11a4225b.png#pic_center)
实现细节:时域上,64帧窗口采样32帧作为输入;空域上,从[256, 320]上截取一个[224, 224]的区域;inference时,从一个视频里取10段分别做前向,再将结果做softmax后再取平均。
效果(基于Kinetics):
评论:非局部连接块已经成为神经网络中类似于残差块的一种优化结构,它不仅在视频分类模型中有较好的的表现,也能够添加到其他网络中。
5.2 ECO
论文:《ECO: Efficient Convolutional Network for Online Video Understanding》2018
代码:[pytorch]
贡献:(1)仿照TSN从 video 中均匀采样固定数量的视频帧,以此应对动作的长时结构问题;(2)利用 3D 卷积对从采样帧提取的 feature map 进行 end-2-end 的融合,效果更好且不再需要单独提取光流,速度提升10倍以上;(3)基于ECO提出一个视频理解的 online 处理框架,获得较好的效果。
简介:上图给出了 ECO-lite 的完整网络结构,
S
1
−
S
N
S_1-S_N
S1−SN 是从视频中采样得到的 N 个 RGB 的 segment,经过 2D-Net 可以产生 N 个
K
∗
28
∗
28
K*28*28
K∗28∗28 的特征图,堆叠后得到一个
K
∗
N
∗
28
∗
28
K*N*28*28
K∗N∗28∗28 的volume;将 volume 送入 3D-Net(这里其实就将时序特征融合的思想包含在里面),输出一个512维 video-level 的特征向量,最后经过一个全连接得到分类结果。如果在 3D-Net 的位置加一个 2D-Nets,对 volume 并行计算,输出一个1024维 video-level 的特征向量,然后将两个 video-level 特征向量concat,则得到 ECO-Full 模型,如下图所示。(ECO完整网络结构.pdf)
下图给出了 online 视频理解处理框架,它的亮点在于增加了一个记忆组
S
N
S_N
SN,使得预测时在以当前视频为主的同时兼顾过往视频的影响。(论文的详细分析参考)
效果:(基于UCF-101,下标
N
F
_{NF}
NF 表示视频采样帧数)
score | comments |
---|---|
87.4 | E C O l i t e − 4 F ECO_{lite-4F} ECOlite−4F |
90.3 | E C O 4 F ECO_{4F} ECO4F |
92.4 | E C O 12 F ECO_{12F} ECO12F |
93.0 | E C O 20 F ECO_{20F} ECO20F |
93.6 | E C O 24 F ECO_{24F} ECO24F |
评论:ECO 利用 3D 卷积来做融合是一个很好的思路,它无需依赖光流使得online成为可能,同时网络结构简单参数少,在速度和精度上都有良好的性能。
5.3 st-GCN
论文:《Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition》2018
代码:[Pytorch]
TODO
5.4 TSM
论文:《TSM: Temporal Shift Module for Efficient Video Understanding》2019
代码:[Pytorch]
贡献:提出了temporal shift的思想,能够兼顾2D CNN的高效以及3D CNN的时空建模能力;同时提出了partial shift、residual shift两种优化策略,能够保证模型的高效;在online video问题上给出uni-directional TSM方案,是一种低延时的解决办法。
简介:TSM全称Temporal Shift Module,和它最相似的论文应该是前面提到的TSN,后者的问题在于对时序信息的建模不够充分,之后有一些工作就是基于此进行的改进,例如I3D、P3D等。这些工作虽然能够有效捕捉时空特征,但从2D CNN发展到3D CNN不可避免的要引入额外计算量,TSM巧妙地通过将时间维度的特征进行位移,理论上用零额外计算开销达到了不同帧之间时空特征联合建模的目的。
这里仅就online video的实现方案做一个介绍。它的基本步骤跟TSN是一样的:首先对一段视频随机采样
T
T
T 帧,
{
F
1
,
F
2
,
…
,
F
T
}
\{F_1,F_2,\dots,F_T\}
{F1,F2,…,FT},然后将每一帧
F
i
F_i
Fi 送入2D CNN计算特征feature,最终得到属于该图像的输出,将
T
T
T 个输出做平均作为video-level的结果。TSM的改进之处在于:将
F
t
−
1
F_{t-1}
Ft−1 的每一层特征的前
1
/
8
1/8
1/8保存下来,在计算
F
t
F_{t}
Ft 的第
k
k
k 层特征时,用
F
t
−
1
F_{t-1}
Ft−1 的
k
−
1
k-1
k−1 层中前
1
/
8
1/8
1/8 特征替代掉
F
t
F_t
Ft 的
k
−
1
k-1
k−1 层的前
1
/
8
1/8
1/8,再做卷积计算,之后的以此类推。
之所以要在时间维度上进行这种特征通道的替换,是为了在当前图像特征中融合上一帧的部分信息,就能够有效建模时序特征,可参见下图左边理解。其次,由于部分通道特征的替换,会影响到空间特征的学习,作者引入了类似于残差块的 residual shift 结构,如下图右边所示,shift就是做替换的位置,替换之后的特征做完卷积会加上原始特征以保证不丢掉任何当前帧的空间信息。另外,取特征通道的前
1
/
8
1/8
1/8 是作者通过实验确定的,你不能替换的太少(时序建模效果不明显),也不能替换的太多(延迟太大,且会影响空间特征的学习),此称之为 partial shift。
效果:
评论:该方法提出一种全新的时序建模思路,具有极大的参考价值;虽然其本质还是注意力机制,但是它能很轻易地部署在任何边缘设备上,用sth-v2预训练模型实测TSM时,单个视频的识别速度在0.15s左右。
5.5 2s-AGCN
论文:《Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition》2019
代码:[Pytorch]
TODO