TSN 论文阅读

TSN论文

提出的动机

TSN全称——Temporal Segment Networks,一种用于对视频中动作进行识别的网络。以往的视频动作识别所运用的神经网络会受到如下的限制:

  1. 长度问题。因为传统方法只关注于短期的动作,依赖于稠密采样(这样会带来超高的计算复杂度,同时对长视频进行采样会有丢失重要信息的风险)。
  2. 视频未裁剪。没有把可能会干扰动作识别模型的背景帧去掉。
  3. 构建模型存在困难。公开能获得的数据集无论是尺寸还是多样性都不够充足,使用光流提取带来了巨额的计算消耗,所以计算能力也成为了限制模型构建的一个瓶颈。

文章对以上三个问题都提出了解决的方案,给出了一个思路简单、灵活并且具有适用性的框架。(该框架使用的是全局的稀疏抽样策略基于连续帧有大量冗余的视频)

  1. 给出了关于长视频学习的解决方案。
  2. 分层聚合方案,将动作识别模型应用于未剪裁的视频。
  3. 调研了一系列好的方法来学习和应用深度动作识别模型。

为什么要基于段采样?

  1. 计算的角度。稠密的局部采样会带来大的计算量。
  2. 建模的角度。由于固定的采样间隔,所以时间上的覆盖范围依然很局部和受限。难于去捕获完整视频的视觉内容。(其实是因为对整个视频进行稠密的采样是不现实的)

所以采取了一种段采样的策略。所基于的思想就是:虽然帧被很密集地记录在视频中,但是其内容的变化是非常缓慢的。所以这种均匀的稀疏全局的采样策略总能大致地覆盖整个视频的额视觉片段。所以,采样的帧数将会被固定为一个独立于视频长度的初始值。

框架和公式

框架整体流程

网络框架的主要流程如下3点:

  1. 将视频分成K段。这每个片段都有一个卷积网络,但是所有片段的卷积网络都是共享参数的。
  2. 每个视频序列中随机地提取出小的片段。
  3. 使用段共识函数(segmental consensus function)聚合信息(这里的信息是通过神经网络传出来的视觉特征)。TSN网络能对整个视频的长时间结构进行建模。而这个建模所花费的时间其实是与视频长度无关的,只与视频分的段数相关。

TSN 论文阅读_第1张图片

根据上图,给出了论文中的第一个公式,该公式是对整个网络的一个整体描述

T S N ( T 1 , T 2 , … , T K ) = H ( G ( F ( T 1 ; W ) , F ( T 2 ; W ) , ⋯   , F ( T K ; W ) ) ) TSN(T_1,T_2,\dots,T_K)={\mathcal H}({\mathcal G}({\mathcal F}(T_1;{\bold W}),{\mathcal F}(T_2;{\bold W}),\cdots,{\mathcal F}(T_K;{\bold W}))) TSN(T1,T2,,TK)=H(G(F(T1;W),F(T2;W),,F(TK;W)))

其中出现的 F ( T 1 ; W ) F(T_1;W) F(T1;W)函数代表的是第1个卷积网络,W为权重,用于产生类别分数。 G G G为分段共识函数,用于结合多个短片段的输出以获得他们之间的类假设聚合结果(就是综合每个片段对第i个类的分数,进行综合判断)。 H H H为预测函数,论文中用的就是softmax函数。

损失函数

L ( y , G ) = − ∑ i = 1 C y i ( g i − l o g ∑ j = 1 C e g j ) {\mathcal L}(y, G)=-\sum\limits_{i=1}^C y_i\left(g_i-log\sum\limits_{j=1}^C e^{g_j}\right) L(y,G)=i=1Cyi(gilogj=1Cegj)

∂ L ( y , G ) ∂ W = ∂ L ∂ G ∑ k = 1 K ∂ G ∂ F ( T k ) ∂ F ( T k ) ∂ W \frac{\partial{\mathcal L}(y,G)}{\partial W}=\frac{\partial{\mathcal L}}{\partial G}\sum\limits_{k=1}^K\frac{\partial G}{\partial{\mathcal F}(T_k)}\frac{\partial{\mathcal F}(T_k)}{\partial W} WL(y,G)=GLk=1KF(Tk)GWF(Tk)

损失函数和损失函数对权重的导数如上所示。C代表动作类别的个数,yi代表第i个动作类别的正确标签,g代表分段聚合函数(G)的第j个动作的值,小写的k代表第k个(总共有大写的K个)卷积神经网络。

聚合函数的分析

字母的定义顺延损失函数开头的定义。

  1. 最大池化。 g i = m a x k ∈ { 1 , 2 , … , K } f i k g_i={\rm max}_{k\in\{1,2,\dots,K\}}f_i^k gi=maxk{1,2,,K}fik该式为第i个动作的聚合函数的输出值,代表的是总共K个片段的神经网络输出中对第i个动作的判断值中最大的那个。f取自于 F k = F ( T k ; W ) {\bold F}^k={\mathcal F}(T_k;W) Fk=F(Tk;W),所以可以得到第i个动作的聚合函数对权重为W的卷积网络的第i个输出(动作)的导数: ∂ g i ∂ f i k = { 1 , if k = argmax l f i l , 0 , otherwise \frac{\partial g_i}{\partial f_i^k}=\begin{cases}1,\text{if k = argmax}_lf^l_i,\\0,\text{otherwise}\end{cases} fikgi={1,if k = argmaxlfil,0,otherwise。总结可得:其实就是找到这么C个动作在这K个小片段中,能使得激活(activation)最大的那个网络(片段),用这个片段作为代表,或者说作为这个类别的视频级响应。

    缺点就是缺乏对整个视频的建模,无法做到整合所有的小片段来理解视频级的动作。

  2. 平均池化。就是对所有的K个网络的第i个动作的输出值进行加权求和: g i = 1 K ∑ k = 1 K f i k g_i=\frac{1}{K}\sum^K_{k=1}f_i^k gi=K1k=1Kfik,所以第i个动作的聚合函数对权重为W的卷积网络的第i个输出(动作)的导数: g i f i k = 1 K \frac{g_i}{f^k_i}=\frac{1}{K} fikgi=K1。这个方法利用了所有片段的响应,将所有片段的响应求平均作为视频级的预测。

    好处是:整体把握整个视频,从整个视频中捕捉视觉信息。

    坏处是:在有噪声的环境下,可能会平均到一些无关的新片段,这些背景片段可能会影响到最终的识别表现。

  3. Top-k池化。这是对前两个方法的综合考虑,先对每个类别找出其中最具区分能力的K个值,再对这K个数值求平均,其第i个动作的聚合函数,和g对f的导数如下所示: g i = 1 K ∑ k = 1 K α k f i k g_i=\frac{1}{\mathcal K}\sum^{\mathcal K}_{k=1}\alpha_kf^k_i gi=K1k=1Kαkfik g i f i k = { 1 K , if  α k = 1 , 0 , o t h e r w i s e . \frac{g_i}{f_i^k}=\begin{cases}\frac{1}{\mathcal K},\text{if }\alpha_k=1,\\0,otherwise.\end{cases} fikgi={K1,if αk=1,0,otherwise.

    这个聚合函数能够对不同的视频自适应地确认一个判别的小片段的自己,集合了最大池化和平均池化的优点,能有联系地对负责的相关片段进行建模的同时避免受到背景片段的影响。

  4. 线性加权。 g i = ∑ k = 1 K ω k f i k g_i=\sum_{k=1}^K\omega_kf_i^k gi=k=1Kωkfik ∂ g i ∂ f i k , ∂ g i ∂ ω k = f i k \frac{\partial g_i}{\partial f_i^k},\frac{\partial g_i}{\partial \omega_k}=f_i^k fikgi,ωkgi=fik。动作被分解成几个小段,不同的片段可以在识别动作的类型时作为不同的角色——即识别不同的特征,通过网络自适应地调整权重来识别不同的片段。

    优点:线性加权的方法比起池化的方法可以更好地适应不同的数据。

    缺点:缺乏考量视频之间差异的能力,因为片段和片段之间的关联在线性加权的场景下失效了。

  5. 注意力加权。通过学习一个函数的方式来自动地根据视频内容给每个小片段赋予一个重要性权重(important weight)。假设注意力函数为 A ( T k ) {\mathcal A}(T_k) A(Tk),那么有第i个动作的聚合函数(共识函数) g i = ∑ k = 1 K A ( T k ) f i k g_i=\sum_{k=1}^K{\mathcal A}(T_k)f_i^k gi=k=1KA(Tk)fik,那么第i个动作的共识函数对第i个动作第k个网络的输出和第k个网络的注意力函数的输出的导数如下所示: ∂ g i ∂ f i k = A ( T k ) , ∂ g i ∂ A ( T k ) = f i k \frac{\partial g_i}{\partial f_i^k}={\mathcal A}(T_k),\frac{\partial g_i}{\partial {\mathcal A}(T_k)}=f_i^k fikgi=A(Tk),A(Tk)gi=fik,对于最终的表现结果而言,注意力权重函数 A ( T k ) {\mathcal A}(T_k) A(Tk)的选择是非常重要的。

    1. 从每个小片段中提取视觉特征 R = R ( T k ) {\rm R}={\mathcal R}(T_k) R=R(Tk),注意卷积网络是相同的。

    2. 然后产生的注意力权重: e k = ω a t t R ( T k ) , A ( T k ) = e e k ∑ l = 1 K e e l e_k=\omega^{att}{\mathcal R}(T_k),{\mathcal A}(T_k)=\frac{e^{e_k}}{\sum^K_{l=1}e^{e_l}} ek=ωattR(Tk),A(Tk)=l=1Keeleek,其中的 ω a t t \omega^{att} ωatt代表的是在和网络权重W一起训练得到的,这个注意力权重的方程是最后一个隐藏层的激活函数。其梯度可以如下表示:

      • A ( T k ) ∂ ω a t t = ∑ l = 1 K ∂ A ( T k ) ∂ e l R ( T l ) \frac{{\mathcal A}(T_k)}{\partial \omega^{att}}=\sum\limits_{l=1}^K\frac{\partial {\mathcal A}(T_k)}{\partial e_l}{\mathcal R}(T_l) ωattA(Tk)=l=1KelA(Tk)R(Tl)
      • A ( T k ) ∂ e l = { A ( T k ) ( 1 − A ( T l ) ) , if  l = k − A ( T k ) A ( T l ) , otherwise \frac{{\mathcal A}(T_k)}{\partial e_l}=\begin{cases}{\mathcal A}(T_k)(1-{\mathcal A}(T_l)),\text{if }l=k\\-{\mathcal A}(T_k){\mathcal A}(T_l),\text{otherwise}\end{cases} elA(Tk)={A(Tk)(1A(Tl)),if l=kA(Tk)A(Tl),otherwise
    3. 所以整合到损失函数节中的梯度函数中有如下等式:

      ∂ L ( y , G ) ∂ W = ∂ L ∂ G ∑ k = 1 K ( ∂ G ∂ F ( T k ) ∂ F ( T k ) ∂ W + ∂ G ∂ A ( T k ) ∂ A ( T k ) ∂ W ) \frac{\partial {\mathcal L}(y,{\rm G})}{\partial {\rm W}}=\frac{\partial {\mathcal L}}{\partial {\rm G}}\sum\limits_{k=1}^K\left(\frac{\partial {\rm G}}{\partial {\mathcal F}(T_k)}\frac{\partial {\mathcal F}(T_k)}{\partial {\rm W}}+\frac{\partial {\rm G}}{\partial {\mathcal A}(T_k)}\frac{\partial {\mathcal A}(T_k)}{\partial {\rm W}}\right) WL(y,G)=GLk=1K(F(Tk)GWF(Tk)+A(Tk)GWA(Tk))

    优点:基于视频的内容自动地评估每个片段的重要性权重,这一方法加强了建模能力;这个R(每个片段提取的特征(通过神经网络之后提取出来的特征))是注意力模型的基石。注意力模型利用额外的反向传播信息来指导ConvNet参数的学习过程,并且非常有可能会加速训练的收敛。

滑动窗口技术

同时提出了一种称之为多尺度时间窗口集成(Multi-scale Temporal Window Integration)的视频分类技术。其步骤如下:

  1. 拆分未剪切视频到各种固定持续时间的小窗口序列。

  2. 对每个窗口中的这些片段级的识别分数通过最大池化来独立的执行动作识别。

  3. 使用top-K池化和注意力加权来聚合窗口的预测来产生视频级别的识别结果。因为这个方法会隐式地选择具有判别性动作实例的间隙同时抑制住背景噪声。

滑动窗口的数学细节

首先将视频以秒为度量进行描述: { T 1 , T 2 , … , T M } \{T_1, T_2,\dots,T_M\} {T1,T2,,TM},M表示视频的总秒数。

然后窗口大小的取值从集合 l ∈ { 1 , 2 , 4 , 8 , 16 } l\in\{1,2,4,8,16\} l{1,2,4,8,16}中进行选择。所有窗口将在整个视频的持续时间中滑动(从头到尾),滑动步长为 0.8 × l 0.8\times l 0.8×l

那么对于第 s t h s^{th} sth秒来说,通过滑动窗口将生成一系列帧 { T s + 1 , … , T s + l } \{T_{s+1},\dots,T_{s+l}\} {Ts+1,,Ts+l},然后把这些帧放入卷积网络中得到 { F ( T s + 1 ) , … , F ( T s + l ) } \{F(T_{s+1}),\dots,F(T_{s+l})\} {F(Ts+1),,F(Ts+l)},所以第s秒窗口大小为l的卷积网络输出的第i个类别的分数可以被如此表示: F i s , l = m a x p ∈ { 1 , 2 , … , l } { f i s + p } F_i^{s,l}= \underset{p\in\{1,2,\dots,l\}}{\rm max}\{f_i ^{s+p}\} Fis,l=p{1,2,,l}max{fis+p}

所以我们统计大小为 l l l的窗口有 N l = ⌊ M 0.8 l ⌋ N^l=\lfloor\frac{M}{0.8l}\rfloor Nl=0.8lM个。

应用top-K池化方案来从这Nl个窗口获得聚合函数Gl的值,这里的K的取值被定义为 K = m a x ( 15 , ⌈ N l 4 ⌉ ) K=max(15,\lceil \frac{N^l}{4}\rceil) K=max(15,4Nl)。这样我们能获得5组类别的得分对应size l ∈ { 1 , 2 , 4 , 8 , 16 } l\in\{1,2,4,8,16\} l{1,2,4,8,16}

最后对5组共识函数进行平均 P = 1 5 ∑ l ∈ { 1 , 2 , 4 , 8 , 16 } G l P=\frac{1}{5}\sum _{l\in\{1,2,4,8,16\}G^l} P=51l{1,2,4,8,16}Gl得到得分传给FC层得到最终的分类结果。

输入

TSN 论文阅读_第2张图片

上图从左到右依次是RGB,RGB差异图像,光流场图像和翘曲光流场图像。

密集的光流场可以用于视频的动作识别,但是速度较慢,所以论文就提出了两个新的模态:

  1. warped optical flow:对相机的运动具有稳定性,可以更专注于人的运动。
  2. RGB differences:光流提取带来的巨额时间消耗导致以双流为基础的方法不太好用,必须得寻找别的方法。

训练(解决过拟合的策略)

由于有标注的数据集规模较小容易导致过拟合,所以提出了以下几种策略:

  1. 跨模态初始化(cross-modality initialization)。从RBG转换为光流和RGB差异等模态。步骤如下:
    • 线性变换将光流场离散为 [ 0 , 255 ] [0,255] [0,255]这么256个数值。
    • 对于第一层中预训练的RGB模型的权重进行跨RGB通道求平均。然后通过时间网络输入的通道数复制平均值。
    • 最后时间网络中其余的层的权重直接从与训练的RGB网络中复制。
  2. 正规化(Regularization)。
    • 使用批归一化(BN),通过估计每个批次内的激活均值和方差来对这些激活值进行归一化来处理协变量偏移的问题(但是可能会增大过拟合的风险)。
    • 批归一化后,冻结除了第一层之外的所有批归一化层的均值和方差。
    • 光流图像和RGB图像的分布不同,所以一个卷积层的激活值也有截然不同的分布,所以需要重新估计均值和方差,该过程称之为局部BN操作。
    • 全局池化层之后添加一个高丢弃率的dropout层来减少过拟合。
  3. 数据增强(Data Augmentation)。在CS231n中有一节课专门讲到。该论文中使用了两种方法:
    • 边角裁剪(corner cropping):取图像边角处和正中心位的位置,来避免隐式更关注于中心区域。
    • 尺度抖动(scale-jittering):首先固定输入尺寸为 256 × 340 256\times 340 256×340。然后裁剪区域的尺寸在集合 { 256 , 224 , 192 , 168 } \{256, 224, 192, 168\} {256,224,192,168}中随机选择。最后将裁剪的区域形状resize成 224 × 224 224\times 224 224×224

模型实际表现

对于裁剪过的视频

因为动作实例已经被手动地从长视频中裁剪出来,所以可以被简单地视为分类问题。在TSN中,所有的片段级卷积网络共享模型参数,所以学习过的模型能够在帧级别评估上表现得和正常的卷积网络没有差别。完整的过程如下:

  1. 从采样的snippets中裁剪出四个边角、一个中心和这些图片的水平翻转用于评估卷积网络。
  2. 使用平均池化来聚合不同裁剪样本和小片段的预测结果。
  3. 对不同类型的预测进行融合。对于来自多种模态的预测的融合,对它们进行加权平均,其中融合权重由经验确定。
  4. 在softmax归一化前融合这25个帧(可能是被分成了25个片段)和不同的信息流的预测结果。

对于未裁剪的视频

首先视频中有大量的无关内容会对识别结果产生干扰。简单地对视频的每个定位点(时间上的)进行平均,会导致将模型背景内容的那种不可预测的响应纳入考虑(计算)之中,造成巨大的风险。总结一下存在三个比较大的挑战:

  1. 视频中有大量的无关内容。
  2. 动作的持续时间可长可短。
  3. 动作可能出现在这个视频的时间轴上的任何位置。

所以论文提出了一个基于探测的方法(detection based method)来让动作模型适应未裁剪的视频。该方法步骤如下:

  1. 固定比例采样。
  2. 评估采样片段。
  3. 在每个帧的分数上应用一系列不同大小的时间滑动窗口。
  4. 每个窗口都用其中所有类的最大分数来表示。
  5. 同样大小的窗口进行top-K池化进行聚合避免背景内容的干扰。
  6. 来自不同窗口大小的聚合结果用来决定整个视频的最终预测。

实验

不同训练策略

可以看出交叉预训练(主要提升了temporal convnets的效果)和带有dropout的部分BN 又明显提升。

TSN 论文阅读_第3张图片

不同输入模式

可以看到一般而言融合多种类型的输入可以达到更好的效果,尤其是利用光流信息。

TSN 论文阅读_第4张图片

不同片段数

可以观察到增加片段数通常会带来更好的性能。然而,当段数K从7增加到9时,性能饱和。实验中设置了K=7。

TSN 论文阅读_第5张图片

不同聚合函数

在具有更复杂和多样时间结构的数据集上,高级聚合函数会有更好的识别精度。
TSN 论文阅读_第6张图片

不同的深层卷积网络结构

可以看到TSN使用 BN-Inception 的权重进行预训练,可以达到94.9%的准确率,说明TSN和主流的网络模型一起使用也十分有效。

TSN 论文阅读_第7张图片

你可能感兴趣的:(深度学习,神经网络,机器学习)