Representation Flow for Action Recognition
Representation Flow for Action Recognition 这篇文章入选了CVPR2019,感谢AI Studio课程使得能够有幸学习视频分类方向,了解了深度学习的视频分类,从最经典的TSN开始学习,打算复现如上这篇文章,所以本人借助软件帮助,翻译了这篇文章便于查看。这篇文章课程李老师介绍的很好。
之所以关注这篇文章是由于这篇文章把TVL1引入网络。这种方法可以应用到很多算法场景,对于我将来的学习研究有帮助,增加一种改进网络的手段。
课程地址链接 https://aistudio.baidu.com/aistudio/education/group/info/1340
论文摘要
在本文中,我们提出了一个受光流算法启发的卷积层来 学习运动表示… 我们的表示流层是一个完全可微层,旨在 捕获卷积神经网络中任何表示信道的“流”,用于动作识 别。 它的迭代“flow”优化参数与其他 CNN 模型参数一起以 端到端的方式学习,最大限度地提高了动作识别性能。 此 外,我们还引入了学习流动的概念f 通过堆叠多个表示流 层来表示。 我们进行了广泛的实验评估,证实了它在计算 速度和性能方面优于以往使用传统光流的识别模型。 代码 是公开的。
1. 导言
活动识别是计算机视觉中的一个重要问题,具有许多社会应用,包括监视、机器人感知、智能环境/城市等。 视频卷积神经网络(CNN)的使用已经成为这项任务的标准方法,因为它们可以学习更多的问题的最优表示。 双流网络 [20],以 RGB 帧和光流作为输入,提供了最先进的结果, 并已非常流行。 三维时空 CNN 模型,例如 I3D[3],XYT 卷积也发现这种双流设计(RGB+光流)提高了它们的精度。提取外观信息和显式运动流均有利于识别。 然而,光流计算是昂贵的。 它通常需要每个帧进行数百次优化迭代,并导致学习两个独立的 CNN 流(即 RGB 流和光流)。 这需要大量的计算成本和大量增加的模型参数来学习。 此外,这意味着该模型需要计算光流每帧,即使在推理和运行两个并行CNN,限制其实时应用程序。
以前有研究表示捕获运动信息而不使用光流作为输入的工作,如运动特征网络[15]和动作流网[16]。 然而,虽然 它们在模型参数的数量和计算速度方面更有利,但与 Kinetics[13]和 HMDB[14]等公共数据集上的两流模型相比,它们的性能较差。 我们假设,光流方法执行的迭代优化产生了一个重要的特征,其他方法无法捕获。 在本文中,我们提出了一个受光流算法启发的 CNN 层来学习动作识别的运动表示,而不必计算光流。 我们的表示流层是一个完全可微的层,旨在捕获模型中任何表示通道的“流”。 它的迭代流程优化参数与其他模型参数一起学习,最大限度地提高了动作识别性能。 这也是在没有/训练多个网络流的情况下完成的,从而减少了模型中的参数数量。 此外,我们新引入了通过叠加多个表示流层来学习 “流”表示的概念。我们对在哪里计算光流和各种超参数、 学习参数和融合技术进行了广泛的动作分类实验评估。 我们的贡献是引入了一个新的可微CNN 层,它打开了 TV-L1 光流法的迭代。 这允许学习光流参数,应用于任何 CNN 特征映射(即中间表示),以及在保持性能的同时降低计算成本。
2. 相关工作
研究了捕捉运动和时间信息的活动识别。 早期, 手工制作的方法,如密集轨迹,通过时间跟踪点捕获运动信息 [24] 。 已经开发了许多算法来计算光流, [8]作为捕捉视频中运动的一种方法。 其他的工作已经探索了学习帧的顺序, 以总结一个视频在一个“动态图像”用于活动识别。[1]
卷积神经网络(CNN)已被应用于动作识别。 最初的方法探索了基于池化或时间卷积的时间信息组合方法【12】【17】。 其他工作也探讨了利用注意力来捕捉动作的子动作【 20】 。 双流网络已经非常流行:它们接受单个 RGB 帧的输入(捕获外观信息)和一堆光流帧(捕获运动信息)。 通常,模型的两个网络流被单独训练,最终预测被平均在一起。 还有其他双流的 CNN ,探索不同的方式来“融合”或联合运动 CNN 与外观 CNN【7,6】。 也有大型的 3D XYT CNN 学习时空模式【26 3 】,由大型视频数据集,如Kinetics 【13】。 然而,这些方法仍然依赖于光流输入,以最大限度地提高其精度。
虽然光流是已知的一个重要特征,但为活动识别而优化 的流往往不同于真实的光流,这表明运动表示的端到端学习是有益的【19】。 最近,有研究使用卷积模型学习这种运动表示。 Fan 等人【5】利用深度学习库实现了 TV-L1 方 法,提高了其计算速度,并允许学习一些参数。 结果被输入到双流 CNN 进行识别。 几项工作探索了学习 CNN 来预测光流 , 这也可以用于动作识别 【4,9,11,16,21】。 Lee 等 人 【15】 将特征从顺序帧转移到以非迭代的方式捕捉运动。 Sun等人 【21】通过计算表示梯度和时间差异,提出了一种光流引导特征(OFF),但缺乏精确流动计算所需的迭代优化。 进一步地,它需要一个包含 RGB、光 流和RGB差异,以达到最先进的性能。 与以前的工作不同,我们提出的具有表示流层的模型只依赖于 RGB 输入,学习更少的参数,同时用迭代优化正确地表示运动。 它比需要光流输入的视频 CNN 要快得多,而它的性能仍然和双流模型一样好,甚至更好。 它在速度和精度上明显优于现有的运动表示方法,包括 TVNet 【5】和 OFF【21】, 我们实验证实了这一点。
3. 方法
我们的方法是一个完全可微卷积层启发光流算法。与传统的光流方法不同,我们方法的所有参数都可以端到端学习,最大限度地提高动作识别性能。 此外,我们的层被设计为计算任何表示通道的“流”,而不是将其输入限制为传统的 RGB 帧。
在描述我们的层之前,我们简要地回顾了光流是如何计算的。 光流方法是基于亮度一致性假设的。 也就是说, 给定顺序图像 I 1 I_1 I1 , I 2 I_2 I2 ,点 x,y 位于 I 1 I_1 I1 到点 x+dx,y+dy的 I 2 I_2 I2,或者
这些方法假设帧之间的小运动,因此这可以用 Taylor 级数近似:其中, u = Δ x u = \Delta x u=Δx, Δ y \Delta y Δy这些方程被解为 u u u ,但只能由于这两个未知数而近似。
用于逼近光流的标准变分方法(例如Brox【2】和TV-L1【27】方法)。 采用顺序图像
I
1
I_1
I1
I
2
I_2
I2 作为输入。 变分光流方法利用迭代优化方法估计流场
u
u
u。 张量
u
∈
R
2
∗
W
∗
H
u \in R^{2*W*H}
u∈R2∗W∗H 是图像中每个位置的
x
x
x 和
y
y
y 方向流。 以两个顺序图像作为输入,
I
1
I_1
I1
I
2
I_2
I2方法首先计算
x
x
x 和
y
y
y 方向的梯度:
▽
I
2
\bigtriangledown I_2
▽I2VI2。 初始流量设置为 0,
u
=
0
u=0
u=0. 然后,根据当前
u
u
u,捕捉两帧之间的运动残差
ρ
\rho
ρ ,可以计算。 对于
ρ
\rho
ρ,
ρ
c
\rho _c
ρc 的常数部分是预先计 算的:.
然后执行迭代优化,每个 updating
u
u
u:
这里
θ
\theta
θ 控制 TV-L1 正则化项的权重,
λ
\lambda
λ 控制输出的平滑性,
τ
\tau
τ控制时间步长。 这些超参数是手动设置的。
p
p
p 是用于最小化能量的双向量场。将
p
p
p 的散度,或后向差计算为:.
p
x
p_x
px 是
x
x
x方向和
p
y
p_y
py 是
y
y
y方向,
p
p
p 包含图像中的所有空间位置。 目标是最小化总变分能量:.
这种方法对多个输入尺度进行迭代优化,从小到大,并使用以前的流量估计 u u u 在更大的尺度上仿射变换 I 2 I_2 I2,提供了一 个粗到细的光流估计。 这些标准方法需要多个尺度和仿射变换才能获得良好的光流估计,需要数千次迭代。
3.2. 光流层
在光流算法的启发下,我们通过扩展上面概述的一般算法,设计了一个完全可微、可学习、卷积的表示流层。 主要的区别是:(i)我们允许该层捕获任何 CNN 特征映射的流,(ii)我们学习其参数,包括 θ \theta θ、 λ \lambda λ 和 τ \tau τ 以及散度权重。 我们还做了几个关键的改变来减少计算时间:(1)我们只使用一个尺度,(2)我们不执行任何warping (3)我们计算 CNN 张量上的流量,空间大小较小。 多尺度和波动在计算上是昂贵的,每个都需要多次迭代。 通过学习流量参数,我们可以消除对这些附加步骤的需要。 我们的方法应用于低分辨率 CNN 特征映射,而不是 RGB 输入,并以端到端的方式进行训练。 这不仅有利于其速度,而且允许模型学习为活动识别优化的运动表示。 我们注意到,亮度一致性假设同样可以应用于 CNN 特征映射。 而不是捕获像素亮度,我们捕获特征值一致性. .这 一假设成立,因为 CNN 被设计为空间不变的;也就是说, 它们为相同的对象产生大致相同的特征值。
给定输入
F
1
F_1
F1 ,
F
2
F_2
F2, 对于顺序 CNN 特征映射(或输入图像)的 单个通道,我们通过将输入特征映射与 Sobel 滤波器卷积来计算特征映射梯度:
我们初始化设置
u
=
0
u=0
u=0 ,
p
=
0
p=0
p=0,每个都有与输入匹配的宽度和高度,然后我们可以计算
ρ
c
\rho _c
ρc=
F
2
F_2
F2-
F
1
F_1
F1 . 接下来,在算法 1 之后,我们重复应用 公式2-5 中的操作。 对于固定次数的迭代,以实现迭代优化,为了计算散度, 我们在第一列(x 方向)或行(y 方向)上的zero-pad
ρ
\rho
ρ,然后用权重 对其进行卷积
w
x
w_x
wx ,
w
y
w_y
wy 计算方程6。
最初的
w
x
w_x
wx = [-1 1],
w
y
w_y
wy=[-1 1]’ .注意这一点 这些参数也是可微的,可以用反向传播来学习。 我们计算
▽
u
\bigtriangledown u
▽u 为
光流表示CNN ---- 算法 1 和 图2中描述我们的表示流层的过程。 我们具有 多个迭代的光流层也可以解释为具有一系列卷积层共享参数 (即图2中的每个蓝色框)。由于每一层的行为依赖于其上一层,因此该层变得完全可微,并允许学习所有参数, 包括(
τ
\tau
τ,
λ
\lambda
λ,
θ
\theta
θ)和权重
(
w
x
,
w
y
)
(w_x,w_y)
(wx,wy) 。 这使得我们学习的表示流层能够为其任务(即动作识别)进行优化。
计算流流标准光流算法
—计算两幅序列图像的流…光流图像包含有关运动方向和大小的信息。 将Flow算法直接应用于两幅流图像意味着我们正在跟踪在两个连续帧中显示相似运 动的像素/位置。在实践中,由于光流结果不一致和非刚性运动,这通常导致性能更差。 另一方面,我们的表示流层是从数据中“学习”的,并且能够通过在流层之间有多个规则卷积层来抑制这种不一致和更好的抽象/表示运动。图6 说明了这种设计,我们在实验部分确认了它的好处。 通过叠加多个表示流层,我们的模型能够捕获更长的时间间 隔,并考虑具有运动一致性的位置。
CNN 特征映射可能有数百或数千个通道,我们的表示流层计算每个通道的流,这可能需要大量的时间和内存。 为了解决这一问题,我们应用了一个卷积层来减少流层之前从 C C C到 C ′ C' C′的通道数(请注意, C ′ C' C′仍然比传统的光流算法要多得多, 这些算法只应用于单通道、灰度图像)。 为了数值稳定性, 我们将这个特征映射规范化为[0,255],匹配标准图像值。 我们发现 CNN 的特征平均很小(<0.5),TVL-1 算法的默认超参数是为[0,255]中的标准图像值设计的,因此我们发现 这一归一化步骤很重要。 使用归一化特性,我们计算流, 并将 x x x 和 y y y 流叠加,得到 2 C ′ 2C' 2C′通道。 最后,我们应用另 一个卷积层从 2 C ′ 2C' 2C′转换通道到 C C C 通道。 这将传递给其余的 CNN 层进行预测。 我们平均预测从许多帧分类每个视频, 如图3所示 。
3.3 动作识别模型
我们将表示流层放置在一个标准的动作识别模型中,以 a
T
∗
C
∗
W
∗
H
T*C*W*H
T∗C∗W∗H 张量作为 CNN 的输入。 在这里,
C
C
C是 3,因为我们的模型使用直接RGB帧作为输入。 T 是模型过程的帧数,W 和 H 是空间维度。 CNN 输出每个时间步骤的预测,这些都是时间平均的, 以产生每个类的概率。 该模型被训练以最小化交叉熵:
其中 p = M ( v ) p=M(v) p=M(v), v v v 是视频,函数 M M M 是分类 CNN, c c c 表示 K K K 类 v v v 属于哪一类。 也就是说,我们流层中的参数与其他层一起训练,使其最大化最终的分类精度。
4.试验
实现细节:
我们在 PyTorch 中实现了我们的表示流层,我们的代码和模型是可用的。 由于在视频上训练 CNN 在计算上是昂贵的,我们使用了一个子集的动力学数据集与 100K 视频从 150 个类:: Tiny-Kinetics。这样可以更快地测试许多模型,同时仍然有足够的数据来训练大型 CNN。对于大多数实验,我们使用 ResNet-34【10】 输入大小为 16x112x112( 即空间大小为 112 的 16 帧)。为了进一步减少许多研究的计算时间,我们使用了这种较小的输入,这降低了性能,但允许我们使用更大的批处理大小,并更快地运行许多实验。我们的最终模型是在标准 224x224 图像上训练的。 具体细节请查看附录.
在哪里计算光流?
为了确定在网络中计算流量的位置, 我们比较了在第一次卷积之后,在 RGB 输入上应用我们的flow层。 然后分别在 5 个剩余块之后。 结果如表1所示,我们发现计算输入上的流提供了较差的性能,类似于只有flow网络的性能,但即使是 1 层之后也有显著的提升,这表明计算特征的流是有益的,捕获了外观和运动信息。 然而,在 4 层 之后,由于空间信息过于抽象/压缩(由于池和大的空间接收场大小),并且顺序特征变得非常相似,包含较少的运动信息,性能开始下降。 请注意,与最先进的方法相比,我们在本表中的 HMDB 性能相当低,因为使用很少的帧和较低的空间分辨率(112x112)从零开始训练。 对于下面的实验, 除非另有说明,否则我们在第三个剩余块之后应用该层。在图7中。我们将学习到的运动表示计算机可视化在块 3 之后。
学什么?
由于我们的方法是完全可微的,我们可以学习任何参数,例如所使用的核 为了计算图像梯度,散度计算的核,甚至 τ \tau τ , λ \lambda λ, θ \theta θ。 在表2中,我们比较了学习不同参数的效果。 我们发现,学习 Sobel 核值会由于噪声梯度而降低性能,特别是在批处理大小有限的情况下,但是学习散度和 τ \tau τ , λ \lambda λ, θ \theta θ是有益的。
flow多少次迭代?
为了确认迭代是重要的,并确定我们需要 多少,我们尝试了不同数量的迭代。 我们比较了学习所需 的迭代次数(dibergence τ \tau τ , λ \lambda λ, θ \theta θ) 而不是学习参数。 在 3 个剩余块之后计算流量。 结果见表 3.我们发现,学习提供 更好的性能与较少的迭代 (类似于【5】),迭代计算特征是重要的。 我们在剩余的实验中使用 10 或 20 次迭代,因为它们提供了良好的性能和速度。
双流融合?
研究了融合 RGB 和光流特征的双流 CNN。 基于这些工作【20, 7】,我们比较了融合 RGB 和我们的流表示的各种方法,如图4所示。 我们比较不融合,后期融合(即分离 RGB 和流。和加法/乘法/连接融合。
在表 4 中,我们比较了网络中不同位置的不同融合方法。 我们发现,融合 RGB 信息是非常 重要的“当直接计算来自 RGB 输入的流时”。 然而,当计算表示流时,它并不像 CNN 已经将许多外观信息抽象出来的那样有益。 我们发现, 与其他特征相比,RGB 和流特性的 级联性能很差。我们没有在任何其他实验中使用双流融合, 因为我们发现计算第三剩余块后的表示流提供了足够的性 能,即使没有任何融合。
我们可以多次堆叠我们的层,计算流量(Fof)。 这具有将 更多的时间信息组合成单个特征的优点。 我们的结果如表 5.所示两次应用 TV-L1 算法的性能相当差,因为光流特征并不真正满足亮度一致性假设,因为它们捕获了运动的大小和方向(如图5所示)。 应用我们的表示流层twice表现明显优于 TV-L1 twice,但仍然比我们不这样做的基线更糟。 然而,我们可以在第一和第二流层之间添加一个卷积层,即流-conv-flow(FCF),(图 6),允许模型更好地学习更长期的流量表示. 我们发现这表现最好,因为这个中间层能够平滑流,并为表示流层产生更好的输入。 然而,由于空间接收场大小较大,增加第三流层会降低运动表示的性能。 在图中。我们将学习到的流动可视化,这是一个更平滑、类似加速度的特征,具有抽象的运动模式。
3D CNN 特征流
由于 3D CNN 是昂贵的训练,我们遵循 I3D【3】的方法,将在图像网络上预先训练的 ResNet-18 加载到 3D CNN 视频。 我们还比较了空间卷积的(2+l)D 方法。 其次是来自【26】的时间卷积,它产生了一个相似的特征,结合了空间和时间信息。 我们发现,即使有了 3D 和(2+1)D CNN,我们的流层也会提高性能:表 6 和 7 这些实验使用了 10 次迭代并学习了流量参数。 在这些实验中,没有使用 FCF。
我们还比较了使用OFF 【21】(2+1)D 和 3D CNN 。 我们 观察到,这种方法不会导致有意义的性能增加使用 CNN 捕获时间信息,而我们的方法是这样的。
比较其他运动表示方法
我们与现有的基于 CNN 的运动表示方法进行了比较,以证实我们的表示流的有用性。 对于这些实验,当可用时,我们使用了作者提供的代码,并以 其他方式实现了我们自己的方法。 为了更好地与现有的工作相比,我们使用了(16x)224x224 图像。表 8 显示了结果。
MFNet【15】通过空间移动 CNN 特征映射捕捉运动,然后对结果进行求和,TVNet【5】将卷积光流方法应用于 RGB 输入和动作流网【16】训练 CNN 共同预测光流和活动类。 我们还比较了只使用 RGB 输入的 OFF【21】。 请注意,【21】中的 HMDB 性能是使用它们的三流模型(即 RGB+RGB-diff+光流输入)得到的,这里我们将其与仅使用 RGB 的版本进行比较。 我们的方法在 CNN 特征映射上应用迭代流计算,表现最好。
计算时间
我们比较了我们的表示流与最先进的两流方法在运行时和参数数量。 使用TitanXGPU,batch 是32x224x224. 流/双流 CNN 包括运行 TV-L1 算法(OpenCV GPU 版 本)来计算光流的时间。所有 CNN 都基于 ResNet-34 体系结 构。 如表所示,我们的方法比依赖 TV-L1 或其他光流方法的双流模型要快得多,同时执行类似或更好。 我们的模型拥有的参数数量是其双流对手的一半(例如,21M vs 42M,在 2D CNN 的情况下)。
与最好方法比较
我们还比较了我们的动作识别精度与动力学和 HMDB 的最新技术。为此,我们使用 32x224 输入和完整的动力学数据集训练我们的模型,使用 8 V100s。 我们使用 2D ResNet-50 作为主干网络结构。 在实验的基础上,我们在第三 剩余块之后应用了表示流层,学习了超参数和divergence核,并使用了 20 次迭代。 我们还比较了我们的流量模型。 接下来, 使用参数随时间的运行平均值进行评估。 我们的结果,如 表所示,证实了这种方法显然优于现有的模型,只使用 RGB 输入,并且与耗资巨大的双流网络竞争。 我们的模型在那些不使用光流输入的模型中表现最好(即,在模型中,每个视频 只取=600ms)。 需要光流的模型要慢 10 倍以上,包括双流版本[【3 ,25, 26】
5. 结论
我们介绍了一个受光流算法启发的可学习表示流层。 我们实验比较了我们层的各种形式,以证实迭代优化和可学习参数是重要的。 我们的模型在标准数据集的速度和准确性方面明显优于现有的方法。 我们还引入了***“flow”***的概念来计算长期运动表示,并表明它有利于性能。
本文借助软件完成了翻译。文章有不专业的翻译错误请见谅!