当前位置:   article > 正文

视频动作分类网络《TSM: Temporal Shift Module for Efficient Video Understanding》学习笔记_tsm分类

tsm分类

TSM
全文按照原文的结构来描述(可以当做是翻译),尽可能保持作者原文想表达的意思,里面会穿插自己的想法(会注明),描述有问题的地方也欢迎指出。

Abstract

问题:

视频流的爆炸增长带来了对高准确度和低成本计算的视频理解挑战。常规的2D CNN 在计算上是相对廉价的,但其无法捕获时间维度的关系。而基于3D CNN 的方法可以达到良好的效果性能,但计算量大,因此部署成本很大。

解决方案:

结合以上提到的问题,本文提出了一个通用且高效的时间转换模块(TSM)。具体来说,它可以实现3D CNN的性能,但保持了2D CNN相对较小的计算量。

对TSM的简介:

那么TSM到底是怎么做的呢?TSM在时间维度上移动了部分通道,从而促进相邻帧在信息之间的交流。而这一操作插入到2D CNN中又基本算是实现了在零计算量的情况下对时间轴信息建模。

作者还将TSM扩展到了在线视频的检测,表现实时、低延迟,准确且高效,在文章发表日为止,在Something-Something数据集上表现排名第一。在手机端Galaxy Note8上,它实现了在线视频的13ms和35ms的低延迟识别。开源代码链接:https://github.com/mit-han-lab/temporal-shift-module

我的看法:

在效果一致的前提下,2D对于3D的优越性太大了,一方面计算量(当然这是最重要的),另一方面backbone也可以有更多的选择了(普通的backbone就可以用),作者的工作真的很棒。

Introduction

高效的视频理解是在云端和边缘上进行实际部署的重要一步。例如,每天有超过105个小时的视频上传到YouTube,需要进行推荐和广告排名;有TB级的医院敏感视频需要在边缘设备上进行本地处理,以保护隐私。所有这些行业都需要准确而有效的视频理解。

多年来,深度学习应用于视频处理已经成为一个标准。视频识别和图像识别之间的一个关键区别是对时间建模的需求。例如,打开盒子和关闭盒子的关系,如果颠倒顺序就会得到相反的结果,因此时间建模至关重要。


在这里插入图片描述
图1.时移模块(TSM)通过沿时间维度移动特征图来执行有效的时间建模。 它在2D卷积的基础上是没有多余的计算量的,但实现了强大的时间建模能力。 TSM有效地支持离线和在线视频识别。 双向TSM将过去和将来的帧与当前帧混合在一起,适用于高吞吐量离线视频识别。 单向TSM仅将过去帧与当前帧混合在一起,这适用于低延迟在线视频识别。

现有的有效视频理解方法直接使用2D CNN也有。 但是,单个帧上的2D CNN无法很好地对时间信息进行建模。 3D CNN 可以共同学习空间和时间特征,但是计算量很大,这使得在边缘设备上的部署变得困难。 它不能应用于实时在线视频识别。 有一些工作需要在时间建模和计算之间进行权衡,例如最后融合和中间时间融合。 此类方法牺牲了低级时间建模以提高效率,但是在时间融合之前,在特征提取期间会丢失许多有用的信息。

在本文中,本文通过提出一种新颖的时间移位模块(TSM),为视频理解中的有效时间建模提出了一个新的视角。具体而言,视频模型中的激活可以表示为A∈R(N×C×T×H×W),其中N是批处理大小,C是通道数,T是时间维,H和W是空间分辨率。传统的2D CNN只能在尺寸T上单独运行;因此,没有时间建模会产生影响(图1a)。相反,我们的时间移位模块(TSM)沿时间维度向前和向后移动通道。如图1b所示,来自相邻帧的信息在移位后与当前帧混合在一起。作者的直觉是:卷积运算由移位和乘法累加组成。我们将时间维度偏移±1,并将乘积从时间维度折叠到通道维度。为了实时了解在线视频,无法将未来的信息转移到现在,因此我们使用单向TSM(图1c)进行在线视频理解。

尽管移位运算具有零运算的性质,但根据经验,我们发现仅采用图像分类中使用的空间移位策略会引起视频理解两个主要问题:
(1)效率不高:移位运算在概念上是FLOP为零,但会导致数据移动。数据移动的额外成本不可忽略,并且会导致延迟增加。由于视频网络通常会占用大量内存(5D激活),因此这种现象在视频网络中更加严重。

(2)准确性低:在网络中移动太多通道会严重损害空间建模能力,并导致性能下降。为了解决问题,我们做出了两项技术贡献。
1.我们使用时间局部移位策略:为了有效地进行时间融合,我们只移位了一小部分信道,而不是移位所有信道。这种策略大大降低了数据移动成本(图2a)。
2.我们将TSM插入残差分支而不是外部,以便保留当前帧的激活,这不会损害2D CNN骨干的空间特征学习能力。

本文的贡献总结如下:

•我们为通过时间平移进行有效的视频模型设计提供了新的视角,该方法在计算上是免费的,但具有强大的时空建模能力。
•我们观察到,单纯的转变无法实现高效率或高性能。 然后,我们提出了两种技术改进:部分偏移和残余偏移,以实现高效的模型设计。
•我们建议在离线状态下使用双向TSM,以实现最先进的性能。 出版时,它在Something-Something排行榜上排名第一。
•我们建议在边缘设备上以低延迟在强大的时间建模能力下实现在线实时视频识别的单向TSM。

Related Work

这一段可以不看,就是说了一下前人的相关工作和存在的问题,突出一下自己模型的优点。

Deep Video Recognition

2D CNN。 使用2D CNN是进行视频识别的直接方法[24、39、48、11、8、9、2]。 例如,Simonyan等。 [39]设计了一种分别用于RGB输入(空间流)和光流[55]输入(时间流)的两流CNN。 时间分段网络(TSN)[48]从跨采样帧中提取平均特征。 与3D对应方法相比,此类方法效率更高,但无法推断时间顺序或更复杂的时间关系。

3D CNN。 3D卷积神经网络可以共同学习时空特征。 Tran等。 [45]提出了一种基于VGG模型的3D CNN,称为C3D,以从帧序列中学习时空特征。 Carreira和Zisserman [4]提出将Inception V1模型[43]中的所有2D卷积滤波器膨胀为3D卷积。 但是,3D CNN的计算量很大,因此部署困难。 与2D对应参数相比,它们还具有更多参数,因此更容易过度拟合。 另一方面,我们的TSM具有与3D CNN相同的时空建模能力,同时享有与2D CNN相同的计算和参数(内心BB: 什么叫NB,这TM就叫NB!)

Trade-offs。 已经尝试权衡表达和计算成本。 Lee等。 [27]提出了一种运动滤波器来从2D CNN生成时空特征。 Tran等。 [46]和谢等。 [53]提出研究混合的2D和3D网络,要么首先使用3D,然后使用2D(底部重),要么首先使用2D,然后再使用3D(顶部重)架构。 ECO [61]还使用类似的顶级架构来实现非常有效的框架。 另一种节省计算的方法是将3D卷积分解为2D空间卷积和1D时间卷积[46,33,42]。 对于混合的2D-3D CNN,他们仍然需要删除低层时间建模或高层临时模型。 与分解卷积相比,我们的方法完全消除了时间建模的计算成本,具有更高的硬件效率。

Temporal Modeling

用于时间建模的直接方法是使用如上所述的基于3D CNN的方法。 Wang等。 [49]提出了一个时空非局部模块来捕获远距离依赖性。 Wang等。 [50]提出将视频表示为时空区域图。 建模时间关系的另一种方法是使用2D CNN +事后融合[13,9,58,7]。 一些作品使用LSTM [19]来聚合2D CNN功能[54、7、41、10、12]。 注意机制也被证明对时间建模有效[37,28,32]。 周等。 [58]提出了时间关系网,以学习和推理有关时间依赖性。 前一类的计算量很大,而后者无法捕获在特征提取期间丢失的有用的低级信息。 我们的方法以2D CNN为代价提供了一种有效的解决方案,同时实现了低级和高级时间建模,就像基于3D-CNN的方法一样。

Efficient Neural Networks

二维CNN的效率已得到广泛研究。 一些工作着重于设计有效的模型[21,20,36,56]。 最近,已经引入了神经网络结构搜索[62、63、31],以自动找到有效的体系结构[44、3]。 另一种方法是修剪,量化和压缩现有模型以进行有效部署[16、15、29、59、18、47]。 地址移位是一种硬件友好的原语,也已经用于图像识别任务的紧凑2D CNN设计[51,57]。 尽管如此,我们注意到由于视频数据的复杂性,直接在视频识别任务中采用移位运算既不能保持效率也不能保持准确性。

Temporal Shift Module (TSM)

我们首先解释一下TSM背后的直觉:数据移动和计算可以卷积分离。 但是,我们观察到这种简单的换档操作既不能达到高效率,也不能达到高性能。 为了解决该问题,我们提出了两种技术来最小化数据移动并增加模型容量,从而获得高效的TSM模块。

Intuition

我们首先考虑一个常规的卷积运算:为了简便起见,我们使用一维卷积,内核大小以3为例。假设卷积的权重为W =(w1,w2,w3),并且输入X是无限长的一维向量。卷积运算符Y = Conv(W,X)可以写为:Yi = w1X(i-1) + w2X(i) + w3X(i + 1)。 我们可以将卷积运算解耦为两步:移位和乘法累加:我们分别将输入X移位-1、0,+ 1并乘以w1,w2,w3,这些总和为Y。 正式地,移位操作为:


在这里插入图片描述
乘法累加操作:
在这里插入图片描述
不进行任何乘法就可以进行第一步移位。 尽管第二步的计算费用更高,但我们的“时间移位”(TSM)模块将乘法累加合并到以下2D卷积中,因此与基于2D CNN的模型相比,它不会产生额外的成本。

时间移位(TSM)模块已经在图1中进行了描述。在图1a中,我们描述了具有C通道和T帧的张量。 每列中不同时间戳处的功能被标记为不同的颜色。 沿着时间维度,我们将通道的一部分移位-1,将另一部分移位+1,其余通道保持不变(图1b)。 对于在线视频识别设置,我们还提供了TSM的在线版本(图1c)。 在在线版本的设置中,我们无法访问未来的帧,因此我们只能以单向方式将过去的帧移向未来的帧。

Naive Shift Does Not Work

尽管所提出的TSM模块背后的原理很简单,但我们发现直接将空间偏移策略应用于时间维度并不能提供高性能或效率。具体而言,如果我们转移所有或大部分通道,则会带来两个灾难:
(1)由于大量数据移动而导致效率降低。移位操作不进行任何计算,但是涉及数据移动。数据移动会增加硬件的内存占用量和推理延迟。更糟糕的是,由于激活大小大(5D张量),这种效果在视频理解网络中更加严重。当使用朴素的移动策略移动每张地图时,我们观察到CPU延迟增加了13.7%,GPU延迟增加了12.4%,这使得总体推断变慢了。
(2)由于空间建模能力较差而导致性能下降。通过将部分信道移动到相邻的无意义帧,信道中包含的信息对于当前帧将不再可用,这可能会损害2D CNN主干的空间建模能力。与2D CNN基线(TSN)相比,使用朴素移位(naive shift)实现时,我们观察到准确性下降了2.6%。

在这里插入图片描述
图2. (a)由于数据移动,TSM的延迟开销。 (b)残余TSM的性能要比就地转换更好。 我们选择1/4比例残差作为默认设置。 它以可忽略的开销实现了更高的精度。

Module Design

为了解决上述问题,我们讨论以下两个技术的贡献。

Reducing Data Movement
为了研究数据移动的影响,我们首先在不同的硬件设备上测量了TSM模型和2D基线的推理延迟。我们转移了不同比例的通道并测量了延迟。我们使用ResNet-50主干和8帧输入(无偏移(2D基线),部分偏移(1 / 8、1 / 4、1 / 2)和全部偏移(所有通道都偏移))测量了模型。计时是根据服务器GPU(NVIDIA Tesla P100),移动GPU(NVIDIA Jetson TX2)和CPU(Intel Xeon E5-2690)进行的。我们报告了200次热身运行后1000次运行的平均延迟时间。我们将移位操作的开销显示为图2a中原始2D CNN推理时间的百分比。对于不同的设备,我们观察到相同的开销趋势。如果我们转移所有通道,则等待时间开销将占用CPU推理时间的13.7%,这在推理期间绝对不可忽略。另一方面,如果我们仅移动一小部分信道,例如1/8,则可以将等待时间开销限制为仅3%。因此,我们在TSM实现中使用部分移位策略来显着降低内存移动成本。


在这里插入图片描述
Keeping Spatial Feature Learning Capacity
我们需要平衡用于空间特征学习和时间特征学习的模型能力。 直接应用TSM的方法是将其插入每个卷积层或残差块之前,如图3a所示。 我们称这种实施为原地转移(in-place shift)。 这损害了骨干模型的空间特征学习能力,尤其是当我们移动大量通道时,因为存储在已移动通道中的信息对于当前帧而言会丢失。

为了解决这一问题,我们提出了一种移位模块的变体。 与其将它插入到原地,不如将它放在残差块中的残差分支内。 我们将这种形式的位移表示为残差位移( residual shift ),如图3b所示。 残差位移可以解决退化的空间特征学习问题,因为在通过身份映射进行时间移位之后,仍可以访问原始激活中的所有信息。

为了验证我们的假设,我们在 Kinetics 数据集上比较了in-place shift 和 residual shift 的性能。 我们研究了不同换档比例设置下的实验。 结果显示在2b中。 我们可以看到,对于所有移位比例, residual shift 都比in-place shift 获得更好的性能。 即使我们将所有通道都移动到相邻帧,由于shortcut connection, residual shift 仍比2D基线获得更好的性能。 另一个发现是,性能与移动通道的比例有关:如果比例太小,时间推理能力可能不足以处理复杂的时间关系。 如果太大,可能会损害空间特征学习能力。 对于 residual shift ,我们发现当通道的1/4(每个方向为1/8)位移时,性能达到了峰值。 因此,我们这篇文章的接下里所有都使用此设置。

我的总结:

作者通过一系列的对比实验,说明了Naive Shift Does Not Work,并不是简单的全部通道移动就是好的,大概是1/8的最好的;
in-place shift会损害backbone模型的空间学习能力,而residual shift由于有shortcut connection操作,可以解决退化的空间特征学习问题,效果更棒。

TSM Video Network

本节介绍了模型在离线视频处理和在线视频处理上的区别和优点

Offline Models with Bi-directional TSM

我们插入双向(bi-directional )TSM以建立离线视频识别模型。 给定视频V,我们首先从视频中采样T帧Fi,F1,…,FT。 帧采样后,二维CNN基线分别处理每个帧,并对输出对数取平均值以给出最终预测。 我们提出的TSM模型具有与2D模型完全相同的参数和计算成本。 在卷积层的推断期间,帧仍然像2D CNN一样独立运行。 不同之处在于,为每个残差块插入了TSM,从而无需任何计算就可以实现时间信息融合。 对于每个插入的时间移位模块,时间感受野将扩大2,就好像沿着时间维度运行内核大小为3的卷积一样。 因此,我们的TSM模型具有很大的时间感受野,可以进行高度复杂的时间建模。 在本文中,除非另有说明,否则我们使用ResNet-50作为主干。

TSM的独特优势在于,它可以轻松地将任何现有的2D CNN模型转换为可以处理空间和时间信息的伪3D模型,而无需添加其他计算。 因此,我们框架的部署是硬件友好的:我们只需要支持2D CNN的操作,这些2N CNN在框架级别(CuDNN [6],MKL-DNN,TVM [5])和硬件级别( CPU / GPU / TPU / FPGA)。

在这里插入图片描述

Online Models with Uni-directional TSM

在现实生活中,从在线视频流中了解视频非常重要。 许多实时应用需要具有低延迟的在线视频识别,例如AR / VR和自动驾驶。 在本节中,我们展示了我们可以在多级时间融合的同时,使TSM适应在线视频识别。

如图1所示,脱机TSM双向移动部分通道,这要求将来帧中的要素替换当前帧中的要素。 如果仅将特征从先前的帧转移到当前的帧,则可以使用单向TSM实现在线识别。

用于在线视频识别的单向TSM的推理图如图4所示。在推理过程中,对于每一帧,我们保存每个残差块的前1/8个特征图并将其缓存在内存中。 对于下一帧,我们将当前特征图的前1/8替换为缓存的特征图。 我们使用7/8当前要素图和1/8旧要素图的组合来生成下一层并重复。

使用单向TSM进行在线视频识别具有几个独特的优势:
1. Low latency inference.
对于每一帧,我们只需要替换和缓存1/8的功能,而无需进行任何额外的计算。 因此,每帧预测给出的等待时间几乎与2D CNN基线相同。 像[61]这样的现有方法使用多个帧来给出一个预测,这可能会导致较大的延迟。
2. Low memory consumption.
由于我们仅将一小部分功能缓存在内存中,因此内存消耗较低。 对于ResNet-50,我们仅需要0.9MB的内存缓存来存储中间功能。
3. Multi-level temporal fusion.
大多数在线方法仅在特征提取后才启用后期时态融合,例如[58]或中级时态融合[61],而我们的TSM则启用了所有级别的时态融合。 通过实验(表2),我们发现多级时间融合对于复杂的时间建模非常重要。

接下来就是各种实验对比展示了

Experiments

我们首先证明TSM可以显着提高2D CNN在视频识别上的性能,同时在计算上免费且硬件高效。 它进一步证明了与时间相关的数据集的最新性能,从而获得了更好的精度计算对等曲线。 与[50]中的传统I3D模型相比,TSM模型在测量的GPU吞吐量上实现了一个数量级的加速。 最后,我们利用单向TSM对视频识别和目标检测进行低延迟和实时在线预测。

Setups

Training & Testing. 我们对视频动作识别任务进行了实验。 Kinetics数据集的训练参数为:100个epoch,初始学习率0.01(在40和80epoch下降10%),重量衰减1e-4,batch_size 64和dropout 0.5。 对于其他数据集,我们将训练时期减少一半。 对于大多数数据集,该模型是根据ImageNet预先训练的权重进行微调的; 虽然HMDB-51 [26]和UCF-101 [40]太小且容易过拟合[48],但我们遵循常见的做法[48,49]从Kinetics [25]预训练重量中进行了微调。 并冻结批处理规范化(BN)层。 为了进行测试,当追求高精度时,我们按照[49,50]中的常用设置对每个视频采样多个剪辑(Kinetics为10,其他为2),并使用全分辨率图像进行评估,因此我们可以直接比较;当我们考虑效率时(例如,如表2所示),我们每个视频仅使用1个剪辑,而中心224×224切割图片用于评估。在同一表中比较的方法,我们保持相同的协议。

在这里插入图片描述
Model. 为了与现有技术[50]进行苹果对苹果的比较,我们在数据集(Something-Something V1 [14])上使用了相同的骨网络(ResNet-50)。 数据集专注于时间建模。 不同之处在于[50]使用3D ResNet-50,而我们使用2D ResNet-50作为骨干来证明效率。

Datasets. Kinetics数据集[25]是具有400个类别的大规模动作识别数据集。 正如[58,53]中指出的那样,诸如Something-Something(V1&V2)[14],Cha rades [38]和Jester [1]之类的数据集更着重于对时间关系建模,而UCF101 [40],HMDB51 [ 26]和Kinetics[25]对时间关系不太敏感。 由于TSM专注于时间建模,因此我们主要关注具有更强时间关系的数据集,例如Something-Something。 但是,我们还观察到了其他数据集上的出色结果,并进行了报告。

在这里插入图片描述

Improving 2D CNN Baselines

我们可以将TSM无缝地注入到普通的2D CNN中,并提高其在视频识别方面的性能。 在本节中,我们演示了二维CNN基线可以从TSM中受益,其两位数的准确性得以提高。 我们选择TSN [48]作为2D CNN基线。 我们对TSN和我们的TSM使用了相同的训练和测试协议。 唯一的区别是带有或不带有TSM。

Comparing Different Datasets.
我们在表1中的几个动作识别数据集上比较结果。该图表分为两部分。 上部包含数据集Kinetics[25],UCF101 [40],HMDB51 [26],其中时间关系不那么重要,而我们的TSM在无需额外计算的情况下仍然始终优于2D TSN基线。 在下半部分,我们在Something-Something V1和V2 [14]和Jester [1]上展示了结果,它们在很大程度上取决于时间关系。 2D CNN基线无法达到良好的精度,但是一旦配备了TSM,性能就会提高两位数。


在这里插入图片描述
Scaling over Backbones.
TSM可以很好地扩展到不同大小的骨网络。 我们在表3中显示了MobileNet-V2 [36],ResNet-50 [17],ResNext-101 [52]和ResNet-50 +Non-local模块[49]主干的Kinetics Top-1准确性。 即使对于已经具有时间建模功能的NL R-50,也可以提高不同骨干的精度。

在这里插入图片描述

Comparison with State-of-the-Arts

TSM不仅显着改善了2D基线,而且也胜过了严重依赖3D卷积的最新方法。 我们比较了Something-Something V1和V2上的TSM模型与最新方法的性能,因为这两个数据集都集中在时间建模上。

Something-Something-V1.
Something-Something-V1是一个具有挑战性的数据集,因为不能仅根据单个帧来推断活动(例如,从右向左推动某物)。 我们将TSM与表2中的最新技术进行了比较。除非另有说明,否则我们仅在测试过程中应用中心切割以确保效率。 TSM发布后在排行榜上排名第一。

我们首先显示基于二维方法TSN [48]和TRN [58]的结果。 由于缺少时间建模,具有不同主干的TSN无法获得良好的性能(<20%Top-1)。 对于TRN,尽管在特征提取后添加了后期时空融合,但其性能仍远低于最新技术,这表明跨所有级别的时域融合的重要性。

第二部分显示了最新的高效视频理解框架ECO [61]。 ECO使用早期2D +晚期3D架构,可实现中等水平的时间融合。 与ECO相比,我们的方法在较小的FLOP上可获得更好的性能。 例如,当使用8帧作为输入时,我们的TSM凭借33G FLOP达到了45.6%的top-1精度,这比ECO高4.2%的精度,而运算量却减少了1.9倍。 ECO的集成版本(ECOEnLite和ECOEnLiteRGB + Flow,使用{16、20、24、32}帧的集成作为输入)确实取得了竞争性的结果,但是计算和参数对于部署来说太大了。 虽然我们的模型效率更高:我们仅使用{8,16}帧模型进行集成(TSMEn),并且该模型使用少2.7倍的计算量和3.1倍的参数来实现更好的性能。

第三部分包含先前的最新方法:Non-local I3D + GCN [50],可实现所有级别的时间融合。 GCN需要在MSCOCO对象检测数据集[30]上受过训练的地区提案网络[34]来生成边界框,由于引入了外部数据(MSCOCO)和额外的培训成本,因此进行比较是不公平的。因此,我们比较了TSM它的CNN部分:Non-local I3D。 与Non-local I3D网络相比,我们的TSM(8f)在验证集上的FLOP减少了10倍,从而使精度提高了1.2%。 注意,像Non-local模块[49]这样的技术与我们的工作正交,也可以将其添加到我们的框架中以进一步提高性能。

Generalize to Other Modalities.
结果还表明,我们提出的方法可以推广到其他形式,如光流。 为了提取中间帧之间的光流信息,我们遵循[48]使用在OpenCV中使用CUDA实现的TVL1光流算法[55]。 我们在Something Something V1和V2数据集上进行了两个数据流实验,它不断改进RGB性能:引入光流分支对V1和V2的top-1改善了5.4%和2.6%。

Something-Something-V2.
我们还在Something-Something-V2数据集上展示了结果,该数据集是其先前版本的更新版本。 与其他最新方法相比的结果显示在表4中。在Something Something-V2数据集上,我们仅使用RGB输入就获得了最新的性能。

我们的TSM模型实现了非常有竞争力的性能,同时享受了高效率和低计算成本的快速推断。 我们在表2中显示了每个模型的FLOP。尽管GCN本身很轻,但是该方法使用基于ResNet-50的Region Proposal Network [34]提取边界框,其成本也在图表中考虑。 请注意,光流提取的计算成本通常大于视频识别模型本身。 因此,我们不报告基于两流方法的FLOP。

我们在图5中显示了精度,FLOP和参数折衷。在Something-Something-V1数据集的验证集上测试了准确性,并且参数的数量由圆圈区域指示。 我们可以看到,基于TSM的方法具有比以前的最新高效模型(基于ECO的模型)和高性能模型(基于非I3D的模型)更好的帕雷托曲线。 TSM模型既高效又准确。 它可以高效地达到最先进的精度:与ECO系列相比,它具有更高的性能,同时消耗的计算量减少了3倍。 考虑到ECO已经是一种注重效率的设计,因此我们的方法在硬件效率方面具有很高的竞争力。

Latency and Throughput Speedup
在这里插入图片描述

所测量的推理延迟和吞吐量对于大规模视频理解至关重要。 TSM具有低延迟和高吞吐量。 我们在单个NVIDIA Tesla P100 GPU上进行了测量。 我们使用批次大小1进行延迟测量; 批量大小为16的吞吐量测量。 我们做了两个比较:

(1)与[50]中的I3D模型相比,我们的方法以1.8%的精度提高了一个数量级(表5)。 我们还将我们的方法与最新的高效模型ECO进行了比较[61]:我们的TSM模型的延迟降低了1.75倍(17.4毫秒对30.6毫秒),吞吐量提高了1.7倍,并提高了2% 准确性。 ECO具有两分支(2D + 3D)架构,而TSM仅需要廉价的2D主干。

(2)然后,我们将TSM与高效的3D模型设计进行了比较。 一种方法是仅在每个块中增加前一个1×1卷积,如[49]中所示,在表中表示为“ [49]中的I3D”。 尽管由于池化,FLOP与之相似,但与TSM相比,它的等待时间高出1.5倍,吞吐率仅为55%,但准确性却更低。 我们推测原因是TSM模型仅使用针对硬件高度优化的2D卷积。 为了排除骨干设计的因素,我们将每个TSM原语替换为3×1×1卷积,并将此模型表示为I3Dreplace。 它仍然比TSM慢得多,并且性能更差。

Online Recognition with TSM
在这里插入图片描述

Online vs. Offline
在线TSM模型可以单向移动特征图,以便可以实时给出预测。 我们比较了离线和在线TSM模型的性能,以表明在线TSM仍然可以实现可比的性能。 按照[61],我们使用所有帧的平均预测值与离线模型进行比较,即在观察整个视频后比较性能。 表6中提供了性能。我们可以看到,对于时间相关性较低的数据集(如Kinetics,UCF101和HMDB51),与离线模型相比,在线模型可实现甚至是更好的性能。 对于更多与时间相关的数据集,Something-Something的在线模型比离线模型差1.0%。 尽管如此,在线模型的性能仍然明显优于2D基线。

我们还比较了纯2D骨干网(TSN)和在线TSM模型的每帧预测延迟。 我们在GPU上使用TVM [5]编译两个模型。 我们的在线TSM模型每帧仅增加了不到0.1ms的延迟开销,同时将精度提高了25%。 它说明了在线TSM对于要求严格等待时间的实时应用程序具有较高的硬件效率。

Early Recognition
更早识别旨在对视频进行分类,同时仅观察一小部分帧。 它可以快速响应输入视频流。 在这里,我们比较了UCF101数据集上的早期视频识别性能(图6)。 与ECO相比,TSM的准确性更高,尤其是在仅观察一小部分帧时。 例如,当仅观察视频帧的前10%时,TSM模型可以达到90%的精度,比最佳ECO模型高6.6%。

在这里插入图片描述
Online Object Detection
实时在线视频对象检测是自动驾驶汽车,机器人等领域的重要应用。通过将在线TSM注入到主干网络中,我们可以轻松地将时间线索纳入考虑范围,而开销却可以忽略不计,因此该模型可以处理较差的情况。物体的外观,例如运动模糊,遮挡,散焦等。我们在R-FCN [23]检测器上进行了实验,该检测器在ImageNet-VID [35]数据集上使用ResNet-101主干。我们将单向TSM插入主干,同时保持其他设置不变。结果显示在表7中。与2D基线R-FCN相比[23],我们的在线TSM模型显着提高了性能,尤其是在快速移动的对象上,TSM将mAP提升了4.6%。我们还比较了一个强大的基线FGFA [60],该基线使用光流聚合21帧(过去10帧和未来10帧)中的时间信息以进行离线视频检测。与FGFA相比,TSM可以实现相似或更高的性能,同时以更少的延迟实现在线识别。我们将补充材料中的一些视频片段可视化,以表明在线TSM可以利用时间一致性来纠正错误的预测。

Edge Deployment
TSM对移动设备也是友好的。 我们使用MobileNet-V2主干建立了在线TSM模型,该模型在Kinetics上达到了69.5%的准确性。 表8显示了NVIDIA Jetson Nano和TX2,Raspberry Pi4B,三星Galaxy Note8,Google Pixel-1的延迟和功耗。这些模型是使用TVM编译的[5]。 用功率计测量功率,减去静态功率。 TSM在边缘设备上实现了低延迟和低功耗。

Conclusion

我们提出了时间移位模块(TSM),以实现硬件高效的视频识别。 可以将其插入2D CNN主干中,以实现联合时空建模,而无需额外费用。 该模块沿时间维度移动部分通道,以与相邻帧交换信息。 我们的框架既高效又准确,可在边缘设备上实现低延迟的视频识别。

通篇读完没有任何生涩的地方,实验对比数据也很充分,效果和计算量小兼得,真的太厉害了

核心代码:

class TemporalShift(nn.Module):
    def __init__(self, net, n_segment=3, n_div=8, inplace=False):
        super(TemporalShift, self).__init__()
        self.net = net
        self.n_segment = n_segment
        self.fold_div = n_div
        self.inplace = inplace
        if inplace:
            print('=> Using in-place shift...')
        print('=> Using fold div: {}'.format(self.fold_div))

    def forward(self, x):
        x = self.shift(x, self.n_segment, fold_div=self.fold_div, inplace=self.inplace)
        return self.net(x)

    @staticmethod
    def shift(x, n_segment, fold_div=3, inplace=False):
        nt, c, h, w = x.size()
        n_batch = nt // n_segment
        x = x.view(n_batch, n_segment, c, h, w)

        fold = c // fold_div
        if inplace:
            out = InplaceShift.apply(x, fold)
        else:
            out = torch.zeros_like(x)
            out[:, :-1, :fold] = x[:, 1:, :fold]  # shift left
            out[:, 1:, fold: 2 * fold] = x[:, :-1, fold: 2 * fold]  # shift right
            out[:, :, 2 * fold:] = x[:, :, 2 * fold:]  # not shift

        return out.view(nt, c, h, w)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号