Linux Python快速实现PySlowFast视频理解
https://blog.csdn.net/lly1122334/article/details/118162190
本文提出了用于视频识别的SlowFast网络。我们的模型包括:
(1)一条slow pathway,以低帧速率运行,以捕获空间语义;
(2)一条fast pathway,以高帧速率运行,以精细的时间分辨率捕获运动。
fast pathway可以通过减少通道容量而变得非常轻量,但可以学习有用的时间信息用于视频识别。模型在视频动作分类和检测方面都取得了较好的性能,我们的slowfast概念针对性能有很大的改进。并在Kinetics,Charades和AVA等基准上取得了最好的效果。
在识别图像I(x, y)时,习惯对称地处理两个空间维度x和y。自然图像的统计数据证明了这些合理性,即图像各向同性(所有方向都是等可能的)。但是视频中所有时空方向的可能性并不相同,慢动作比快动作更可能发生(事实上,我们所看到的世界大部分在某一时刻都处于禁止状态),我们可以分解网络结构来分别处理空间信息和时间事件。
空间范畴的语义演化缓慢,比如挥手不会改变“手”的类别,一个人从步行转为跑步,也总是处于“人”的类别。因此,对分类语义(以及他们的颜色、纹理、光照等)的识别可以相对缓慢地刷新。但对于正在执行的动作可以比其主体身份更快地发展,例如拍手、挥手、摇晃、步走或跳跃。可以期望使用快速刷新帧(高时间分辨率)来有效地模拟可能快速变化的运动。
基于上述推论,提出了一个视频识别的双路径slowfast模型。根据上述描述,slow路径显然是为了捕获空间语义信息,并且顾名思义,该路径以较低的帧速度和较慢的刷新速度运行。fast路径负责捕获快速变化的运动,以快速刷新速度和高时间分辨率运行。尽管这条路径具有很高的时间速率,但它非常轻,约占总计算量的20%。这是由于该路径有较少的通道和较弱的能力来处理空间信息,因为空间信息可以由slow路径提供。这两条path是由横向连接融合。
fast pathway由于其轻量性,不需要时间池化操作(因为它可以在所有中间层的高帧速率下运行,并保持时间准确性)。slow pathway由于时间速率较慢,更加关注空间语义。通过以不同的时间速率处理原始视频,这两种途径在视频建模方面拥有自己的专业知识(fast掌握时间信息,slow掌握空间信息)。
另外,还有一种著名的视频识别架构即two-stream模型,它也是双流设计,但它没有探索不同时间速度的潜力,而这是我们方法中的一个关键概念。此外,two-stream方法对两个流采用相同的主干结构,而我们的快速路径更轻。我们的方法不计算光流,因此,我们的模型是从原始数据端到端的学习的。在实验中,我们观察到slowfast更有效。我们对kinetics行为分类的综合消融实验证明了slowfast的效果。重要的是,slowfast 在四个数据集(kinetics400,kinetics600,AVA,Charades)上都实现了最高的水准。
我们的方法部分受到了灵长类视觉系统中视网膜神经节细胞的生物学研究的启发,尽管不可否认这个类比是粗糙和不成熟的。这些研究结果表明,在这些细胞中,大约80%是小细胞(p细胞),大约15-20%是巨细胞(m细胞)。m细胞的工作频率很高,对快速的时间变化有反应,但对空间细节或颜色不敏感。p细胞提供良好的空间细节和颜色,但较低的时间分辨率,对刺激反应缓慢。我们的框架在以下几个方面是类似的:(i)我们的模型有两个路径分别在低和高时间分辨率下工作;(ii)我们的Fast路径旨在捕捉快速变化的运动,但捕获的空间细节较少,类似m细胞;(iii)我们的Fast路径是轻量级的,类似于m细胞的小比例。我们希望这些关系将启发更多的计算机视觉模型用于视频识别。
我们评估了我们的方法在Kinetics-400,Kinetics-600,Charades,AVA数据集上。我们在Kinetcs动作分类方面的综合消融实验证明了SlowFast的有效性。
慢速网络在所有数据集上都取得了最新的进展,比文献中先前的系统有显著的进步。我们的综合能力
2、相关工作
时空滤波器:动作可以表示为时空对象,并通过时空中的定向滤波捕获,如HOG3D和cuboids。3D ConvNets将2D图像模型扩展到时空域,同样处理时空维度。也有相关的方法专注于长期滤波和利用时间跨距的池化,以及将卷积分解为单独的二维空间和一维时间滤波器。
除了时空过滤或其可分离版本,我们的工作追求通过使用两种不同的时间速度来更彻底地分离知识建模。
视频识别的光流:基于光流的手工时空特征是一个经典的研究分支。这些方法,包括流直方图、运动边界直方图和轨迹,在深度学习普及之前,这些方法已经在动作识别方面表现出了竞争性能。
在深度神经网络的背景下,双流方法利用光流作为另一种输入模态。该方法是文献中许多竞争结果的基础。然而,考虑到光流是一种手工设计的表示,它在方法上是不令人满意的,而且双流方法往往不是与流一起端到端学习的。
slowfast网络可以被描述为以两种不同帧速率运行的单流体系结构,但我们使用路径的概念来反映与生物中的Parvo-和Magnocellular对应物的类比。我们的通用架构有一条slow pathway和fast pathway,fast pathway通过横向连接至slow pathway 融合形成slowfast网络。
可以看出,fast pathway的时间维度分辨率和通道数分别是slow pathway的a倍和b倍。
慢路径可以是任何卷积模型将一段视频作为一个时空体积。我们的慢路径的关键概念是输入帧上的大时间跨度τ,也就是说,它只处理τ帧中的一个。我们研究的τ的一个典型值为16—这个刷新速度是对于30帧的视频大约每秒采样2帧。表示Slow路径采样的帧数为T, 原始视频长度为T × τ坐标系。
与慢路径并行,Fast路径是另一个具有以下属性的卷积模型。
高帧率: 我们的目标是在时间维度上有一个良好的表示。我们的快速路径在τ /α的小时间跨度下工作,其中α > 1是快速和缓慢路径之间的帧速率比。这两种途径在同一个原始视频长度上运行,所以Fast途径对αT帧进行采样,其密度是Slow途径的α倍。在我们的实验中,一个典型值是α = 8。
α的存在slowfast概念的关键。它明确指出这两条路径在不同的时间速度下工作,从而驱动两个子网络的参数学习进而实例化这两条路径。
高时间分辨率特征: 我们的Fast路径不仅具有高输入分辨率,而且追求高分辨率特征贯穿整个网络层次中。在我们的实例化中,我们在整个Fast路径中没有使用时间下采样层(既没有时间池也没有时间跨度卷积),直到分类之前的全局池化层。因此,我们的特征张量在时间维度上总是有αT帧,尽可能地保持时间保真度。
低通道容量: 我们的快速路径也与现有模型的区别在于,它可以使用显著地较低的信道容量来实现良好的准确性SlowFast模型。这使得它很轻。
简而言之,我们的Fast pathway是一个类似于Slow路径的卷积网络,但有一个β比率的(β<1)慢通道。在我们的实验中,典型值是β = 1/8。请注意,公共层的计算(浮点数运算,或FLOPs)通常是其通道比例的二次型。这就是fast pathway比slow pathway计算效率更高的原因。在我们的实例化中,Fast pathway通常占用总计算量的20%。有趣的是,正如第一节所提到的,证据表明灵长类视觉系统中15-20%的视网膜细胞是m细胞(对快速运动敏感,但对颜色或空间细节不敏感)。
低信道容量也可以解释为较弱的空间语义表达能力。从技术上讲,Fast pathway没有对空间维度进行特殊处理,因此由于通道较少,其空间建模能力应该低于Slow pathway。模型结果表明,Fast pathway 在弱化其空间建模能力的同时增强其时间建模能力是一种理想的折衷。
基于这一解释,我们还探索了在Fast pathway中削弱空间容量的不同方式,包括降低输入空间分辨率和去除颜色信息。正如我们将通过实验证明的那样,这些版本都可以提供良好的准确性,这表明具有较少空间容量的轻量级Fast pathway是有益的。
这两条pathway的信息被融合,所以其中一条路径并不是不知道另一条路径学习到的表征。我们通过横向连接来实现这一点,横向连接已被用于融合基于光流的两流网络。在图像目标检测中,横向连接是一种流行的融合不同空间分辨率和语义的技术。
类似于[12,35],我们在每一个阶段都在两条通路之间附加一个横向连接”(图1)。特别是ResNets[24],这些连接紧跟在pool1、res2、res3和res4之后。这两条路径有不同的时间维度,因此横向连接执行转换来匹配它们(详见3.4节)。我们使用单向连接,将Fast路径的特征融合到Slow路径中(图1)。我们对双向融合进行了实验,发现了类似的结果。
最后,对每个路径的输出执行一个全局平均池。然后将两个合并的特征向量连接起来作为全连接分类器层的输入。
我们关于SlowFast的想法是通用的,它可以用不同的backbone(例如,[45,47,24])和实现细节进行实例化。在这个小节中,我们将描述网络架构的实例。
表1中指定了一个示例SlowFast模型。我们用T*S^2表示时空大小,其中T是时间长度,S是方形空间作物的高度和宽度。下面将详细描述。
Slow-pathway:表1中的slow-pathway是一个临时跨越的3D ResNet,由[12]修改而来。它有T = 4帧作为网络输入,稀疏地从64帧原始剪辑与时间跨度τ = 16采样。在这个实例化中,我们选择不执行时间下采样,因为当输入步幅很大时这样做是有害的。
与典型的C3D / I3D模型不同,我们使用非简并的时间卷积(时间核大小>1,表1中划线)仅在res4和res5中;从conv1到res3的所有滤波器本质上都是这个路径中的二维卷积核。这是由我们的实验观察引起的,在早期层中使用时间卷积会降低精度。我们认为,这是因为当物体移动快且时间跨度大时,除非空间感受域足够大(即在后面的层次中),否则时间感受域内几乎没有相关性。
作者指出了CNN用在action recgonition中的两个缺陷
(1)视频是一个长时序结构的,而主流的CNN只专注于静态图像或短时序图像。
(2)现有的公开标注视频资源太少,使用深层的CNN很可能会导致过拟合。
作者提出了两个问题:
(1)怎么样设计一个有效的视频级框架来做动作识别。
(2)在有限的标注资源下,怎样训练CNN模型。
设计思想:
(1)在训练模型中发现Dense temporal sampling会存在大量高度相似的帧,为解决这个问题,设计了TSN。即,将视频分为多个snippets(片段),每次训练都是从每个snippet中随机抽帧,并将结果进行汇总,得到最终结果。
(2)对于框架中卷积网络的选取,作者选取了深层的BNInception。而为解决上述生成网络容易过拟合问题,探索了许多可以增强数据的方法。
一是cross-modality交叉模态预训练:通过更多的输入形式来增强TSN模型的判别能力。之前的通用做法是使用RGB作为spatial stream输入,optical flow作为temporal stream输入。作者提出了两种新的输入方法:RGB diff和warped optical flow 。作者认为单一的RGB缺少上下文信息,而通过连续两帧得到的RGB dif可以得到动作信息。一般的optical flow 有时会聚焦在运动的背景上,而不是动作本身上,对此,作者提出了warped optical flow 。
二是regularization tech:batch Normalization可以有效地处理covariate shift协变量转变问题,BN通过减每个batch的mean并除以variance,将数据转化成标准的高斯分布。这样可以加快训练的收敛,但也可能会导致过拟合,因为有限的训练数据和真实环境可能会有偏置。所以作者在预训练初始化模型后,将除第一层外的其它BN层的mean和variance 全部固定。作者将该做法称为partial BN。
三是data augmentation:主流方法是通过random crop 和horizontal flipping 来进行增强数据,作者再次基础上提出了Corner cropping和scale jittering。
Corner cropping是为了避免在裁剪时总是集中在图像的中心区域。
Scale jittering 是在裁剪时按一定范围的随机选择裁剪尺寸。
作者希望能够设计出一个简单可靠的模型,希望该模型具有通用、简洁、高效和简单易实现等特性。
作者认为3D卷积是具备以上特点的最佳选择。3D卷积可以汇聚视频的目标,场景和动作等信息,并适用于多种任务。
其实在本文之前,已经有人提出了3D卷积网络。
本文相比前人的3D卷积,最大特点有以下3种:
(1)前人提出的3D卷积,在训练时需要将视频做分段处理,现在本文的3D卷积可以接受整个视频的帧。
(2)本文的3D卷积网络相比前人的更深了
(3)在设计深层次的3D卷积时,借鉴了传统的2D卷积,并得到了一个相对最优模型。
作者指出在图像分类的领域中,通过ImageNet获取的预训练模型可以很好地应用到其他领域和任务中;那么是否可以有这样的一个大规模的视频数据集,通过该数据集训练得到的模型在小数据集(HMD51,UCF101等)上取到更好的效果,然后作者就搞了一个名为kinetics的大数据集。
作者首先总结了当前的主流视频动作识别模型:
1、2D卷积+LSTM(结构a):2D卷积只能处理单帧数据,对于视频数据来说,需要将2D处理的多张单帧数据做融合,融合方法一种是aggregation,一种是LSTM。作者认为LSTM在理论上讲是更好的方法。
2、3D卷积(结构b):3D卷积看似更适合做视频处理,但有个主要问题是它比2D有更多的参数,这样就会更难训练。现在作者有一个大规模的视频数据集–kinetics,所以3D卷积相比2D是一个更好的选择。
3、Two-stream网络(结构c):LSTM在卷积的顶层获取高层次(明显)的动作(毕竟时序处理中会有信息损失),而不能获取关键的低层次动作。而且在做反向传递时,由于多帧铺展,训练起来也非常的耗时。为了能够有效的捕捉动作信息,双流可以说是一种有效简单的方法。
Two-stream构造:使用两个通过ImageNet预训练好的卷积(2D)模型,一个做RGB数据处理,一个做optical flow数据处理。
作者根据以上各个模型的优缺点,设计了一个基于3D卷积的双流模型(Two-stream Inflated 3DConvNets)(结构e)
因为是3D卷积模型,没有像2D卷积那样成熟的预训练参数。作者便借鉴成熟的2D卷积网络----Inceptionv1,将该网络中的2D换为3D。H、W 对应的参数都直接从Inception中获取,但D参数需要自己训练。
I3D的训练方式是先通过Kinetics数据集进行预训练,再训练HMD51和UCF101并验证效果,效果有明显提升。
TSN3D卷积输入的是单帧图片序列,需要将视频分段,C3D的输入虽然是一个16帧的样本,但是可以通过模型实现自动提取。RGB和光流信息分组处理,基本都是在双流法 的基础上进行结构改进的,C3D与双流思路融合就是现在的I3D方法。
**Fast pathway:**表1显示了α = 8和β = 1/8的Fast pathway的例子。它具有更高的时间分辨率(绿色)和更低的通道容量(橙色)。
Fast路径在每个区块中都有非简并的时间卷积。这是由于观察到该路径对时域卷积具有良好的时间分辨率,以捕捉详细的运动。此外,Fast通道设计上没有时序下采样层。
Lateral connections:我们的横向连接从fast融合到slow pathway。在融合之前,它需要匹配特征的大小。表示Slow pathway的特征形状为{T, S^2, C}, Fast路径的特征形状为{αT, S^2, βC}。我们在横向连接中试验了以下转换:
(i)time-to-channel:将{αT, S^2,βC}转化为{T, S^2, αβC},这意味着我们将所有的α帧打包到一个帧的通道中。
(ii)Time-strided-sampling:我们简单地从每一个α帧中选取一个,所以{αT, S^2, βC}变成{T, S^2, βC}。
(iii)Time-strided convolution:我们用2βC的输出通道和α步长用511核进行3D卷积。横向连接的输出通过累加或串联的方式融合到slow pathway中。
我们在四个视频识别数据集使用标准评估协议评估我们的方法。对于本节介绍的动作分类实验,我们考虑了广泛使用的Kinetics- 400[30],最近的Kinetics- 600[3]和Charades[43]。在第5节的动作检测实验中,我们使用具有挑战性的AVA数据集[20]。
**Training:**我们在Kinetics上的模型是从随机初始化(从零开始)训练的,没有使用ImageNet[7]或任何预先训练。我们按照[19]中的配方使用同步的SGD训练。详细信息请参见附录。
对于时域,我们从全长视频中随机抽取一个片段(αT *τ帧),进入慢路径和快路径的分别是T帧和αT帧;对于空间域,我们从一个视频中随机裁剪出224 224个像素,或者它的水平翻转,在[256,320]像素中随机选取较短的边。
Inference:按照通常的做法,我们沿着时间轴一致地从一个视频中选取10个片段。对于每个片段,我们将较短的空间边缩放到256像素,并取3个256*256的crop覆盖空间维度,作为全卷积测试的近似,遵循[56]代码。我们将softmax分数平均用于预测。
我们报告实际的推理时间计算。由于现有的论文在空间和时间上裁剪的推理策略不同。与之前的工作相比,我们报告了每个时空视图的FLOPs”(带有空间裁剪的时间片段)在推理和使用的视图数量。回想一下,在我们的案例中,推理时间空间大小是2562(取代训练的2242),每个有3个空间片段(30个视图)使用了10个时间片段。
Datasets:
kinetics - 400包含240k训练视频和20k验证视频,涵盖400个人类动作类别。
Kinetics-600拥有392k个培训视频和30k验证视频,涵盖600个类别。我们报告top-1和top-5分类准确度(%)。我们报告一个单独的、在空间中裁剪的片段的计算成本(以FLOPs为单位)。
Charades拥有9.8k的培训视频和1.8k的验证视频,涵盖一个多标签分类设置的157个类别,平均持续30秒的活动。性能是用平均精度(mAP)来衡量的。
Kinetics-400。表2显示了使用各种输入采样(T*τ)和骨干的SlowFast实例化的最新结果的比较:ResNet-50/101 (R50/101)[24]和Nonlocal (NL)[56]。
与之前最先进的[56]相比,我们的最佳模型提供了2.1%的顶级精度。值得注意的是,我们所有的结果都比没有经过ImageNet预处理的现有结果好得多。特别是,我们的模型(79.8%)比之前这类模型的最佳结果(73.9%)绝对好5.9%。我们对SlowFast网络的ImageNet预训练进行了实验,发现它们在预训练和从零开始(随机初始化)的变体上表现相似(0.3%)。
我们的结果以较低的推理时间成本实现。我们注意到,许多现有的工作(如果报告的话)在时间轴上使用了非常密集的样本采样,这可能导致在推理时产生100个视图。这一成本在很大程度上被忽视了。相比之下,我们的方法不需要很多时间片段,因为高时间分辨率还需轻量级的快速路径。我们每个时空视图的成本可以很低(例如,36.1 GFLOPs),但仍然是准确的。
将表2中的SlowFast变异体(具有不同的主干和样本率)与对应的Slow-only路径进行比较,以评估Fast路径带来的改进。水平轴测量256^2空间大小的单个输入片段的模型容量,与总体推理成本的1/30成正比。
Fig2表明,对于所有的变体,Fast路径能够以相对较低的成本持续提高慢路径的性能。下一小节将对Kinetics-400进行更详细的分析。
Kinetics-600 数据相对较新,现有的结果是有限的。所以我们的目标主要是在表3中提供结果供以后参考。请注意,Kinetics-600验证集与Kinetics-400训练集[3]重叠,因此我们不对Kinetics-400进行预训练。在最新的ActivityNet 2018[15]挑战赛中获胜的参赛作品[21]报告了79.0%的最佳单模型、单模态精度。我们的变体显示出良好的性能,最好的模型为81.8%。最近的kinetics700[4]的SlowFast结果在[11]中。
Charades[43]是一个具有更长的活动范围的数据集。表4显示了我们在它上面的SlowFast结果。为了进行公平的比较,我们的基线是只有39.0 mAP的慢速版本。SlowFast比这一基线增加3.1 mAP(至42.1),而额外的NL导致额外的0.4 mAP。在预先训练动力学-600时,我们的mAP也达到了45.2。总的来说,在表4中,我们的SlowFast模型以更低的成本,以稳定的利润率超过了之前的最佳数字(STRG[57])。
本节提供了kinetics-400的消融研究,比较精度和计算复杂性。
Slow vs slowfast。我们的第一个目标是通过改变Slow pathway的采样率(T* τ)来探索SlowFast的互补性。因此,本消融研究了快路径与慢路径的帧率比α。图2显示了Slow和SlowFast模型的各种实例化的准确性与复杂性的权衡。可以看到,在慢路径中增加一倍的帧数可以提高性能(垂直轴),同时增加一倍的计算成本(水平轴),而SlowFast在计算成本小幅增加的情况下显著地扩展了所有变体的性能,即使慢路径运行在更高的帧速率上。绿色箭头表示将Fast路径添加到相应的Slow-only架构的好处。红色箭头表示SlowFast提供更高的精度和更低的成本。