TSN全称——Temporal Segment Networks,一种用于对视频中动作进行识别的网络。以往的视频动作识别所运用的神经网络会受到如下的限制:
文章对以上三个问题都提出了解决的方案,给出了一个思路简单、灵活并且具有适用性的框架。(该框架使用的是全局的稀疏抽样策略基于连续帧有大量冗余的视频)
所以采取了一种段采样的策略。所基于的思想就是:虽然帧被很密集地记录在视频中,但是其内容的变化是非常缓慢的。所以这种均匀的稀疏全局的采样策略总能大致地覆盖整个视频的额视觉片段。所以,采样的帧数将会被固定为一个独立于视频长度的初始值。
网络框架的主要流程如下3点:
根据上图,给出了论文中的第一个公式,该公式是对整个网络的一个整体描述
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=1∑Cyi(gi−logj=1∑Cegj)
∂ 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} ∂W∂L(y,G)=∂G∂Lk=1∑K∂F(Tk)∂G∂W∂F(Tk)
损失函数和损失函数对权重的导数如上所示。C代表动作类别的个数,yi代表第i个动作类别的正确标签,g代表分段聚合函数(G)的第j个动作的值,小写的k代表第k个(总共有大写的K个)卷积神经网络。
字母的定义顺延损失函数开头的定义。
最大池化。 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} ∂fik∂gi={1,if k = argmaxlfil,0,otherwise。总结可得:其实就是找到这么C个动作在这K个小片段中,能使得激活(activation)最大的那个网络(片段),用这个片段作为代表,或者说作为这个类别的视频级响应。
缺点就是缺乏对整个视频的建模,无法做到整合所有的小片段来理解视频级的动作。
平均池化。就是对所有的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=K1∑k=1Kfik,所以第i个动作的聚合函数对权重为W的卷积网络的第i个输出(动作)的导数: g i f i k = 1 K \frac{g_i}{f^k_i}=\frac{1}{K} fikgi=K1。这个方法利用了所有片段的响应,将所有片段的响应求平均作为视频级的预测。
好处是:整体把握整个视频,从整个视频中捕捉视觉信息。
坏处是:在有噪声的环境下,可能会平均到一些无关的新片段,这些背景片段可能会影响到最终的识别表现。
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=K1∑k=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.
这个聚合函数能够对不同的视频自适应地确认一个判别的小片段的自己,集合了最大池化和平均池化的优点,能有联系地对负责的相关片段进行建模的同时避免受到背景片段的影响。
线性加权。 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 ∂fik∂gi,∂ωk∂gi=fik。动作被分解成几个小段,不同的片段可以在识别动作的类型时作为不同的角色——即识别不同的特征,通过网络自适应地调整权重来识别不同的片段。
优点:线性加权的方法比起池化的方法可以更好地适应不同的数据。
缺点:缺乏考量视频之间差异的能力,因为片段和片段之间的关联在线性加权的场景下失效了。
注意力加权。通过学习一个函数的方式来自动地根据视频内容给每个小片段赋予一个重要性权重(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 ∂fik∂gi=A(Tk),∂A(Tk)∂gi=fik,对于最终的表现结果而言,注意力权重函数 A ( T k ) {\mathcal A}(T_k) A(Tk)的选择是非常重要的。
从每个小片段中提取视觉特征 R = R ( T k ) {\rm R}={\mathcal R}(T_k) R=R(Tk),注意卷积网络是相同的。
然后产生的注意力权重: 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一起训练得到的,这个注意力权重的方程是最后一个隐藏层的激活函数。其梯度可以如下表示:
所以整合到损失函数节中的梯度函数中有如下等式:
∂ 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) ∂W∂L(y,G)=∂G∂Lk=1∑K(∂F(Tk)∂G∂W∂F(Tk)+∂A(Tk)∂G∂W∂A(Tk))
优点:基于视频的内容自动地评估每个片段的重要性权重,这一方法加强了建模能力;这个R(每个片段提取的特征(通过神经网络之后提取出来的特征))是注意力模型的基石。注意力模型利用额外的反向传播信息来指导ConvNet参数的学习过程,并且非常有可能会加速训练的收敛。
同时提出了一种称之为多尺度时间窗口集成(Multi-scale Temporal Window Integration)的视频分类技术。其步骤如下:
拆分未剪切视频到各种固定持续时间的小窗口序列。
对每个窗口中的这些片段级的识别分数通过最大池化来独立的执行动作识别。
使用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=51∑l∈{1,2,4,8,16}Gl得到得分传给FC层得到最终的分类结果。
上图从左到右依次是RGB,RGB差异图像,光流场图像和翘曲光流场图像。
密集的光流场可以用于视频的动作识别,但是速度较慢,所以论文就提出了两个新的模态:
由于有标注的数据集规模较小容易导致过拟合,所以提出了以下几种策略:
因为动作实例已经被手动地从长视频中裁剪出来,所以可以被简单地视为分类问题。在TSN中,所有的片段级卷积网络共享模型参数,所以学习过的模型能够在帧级别评估上表现得和正常的卷积网络没有差别。完整的过程如下:
首先视频中有大量的无关内容会对识别结果产生干扰。简单地对视频的每个定位点(时间上的)进行平均,会导致将模型背景内容的那种不可预测的响应纳入考虑(计算)之中,造成巨大的风险。总结一下存在三个比较大的挑战:
所以论文提出了一个基于探测的方法(detection based method)来让动作模型适应未裁剪的视频。该方法步骤如下:
可以看出交叉预训练(主要提升了temporal convnets的效果)和带有dropout的部分BN 又明显提升。
可以看到一般而言融合多种类型的输入可以达到更好的效果,尤其是利用光流信息。
可以观察到增加片段数通常会带来更好的性能。然而,当段数K从7增加到9时,性能饱和。实验中设置了K=7。
在具有更复杂和多样时间结构的数据集上,高级聚合函数会有更好的识别精度。
可以看到TSN使用 BN-Inception 的权重进行预训练,可以达到94.9%的准确率,说明TSN和主流的网络模型一起使用也十分有效。