颜色表示方向,亮度表示速度
(1)RGB图(一帧图)获得appearance比如人、球、静态动作信息
(2)光流(好几帧形成的图)获得motion比如正在打球(动作)
有篇文章证明了,光流图不按顺序一帧一帧取和按一帧一帧顺序取的区别不大
(1)对长视频分类不明显,因为他就是处理单帧前后的信息
(2)当时数据少,很容易过拟合(现在好些了)
two-stream 卷积网络对于长范围时间结构的建模无能为力,主要因为它仅仅操作一帧(空间网络)或者操作短片段中的单堆帧(时间网络),因此对时间上下文的访问是有限的。视频级框架TSN可以从整段视频中建模动作。
和two-stream一样,TSN也是由空间流卷积网络和时间流卷积网络构成。但不同于two-stream采用单帧或者单堆帧,TSN使用从整个视频中稀疏地采样一系列短片段,每个片段都将给出其本身对于行为类别的初步预测,从这些片段的“共识”来得到视频级的预测结果。在学习过程中,通过迭代更新模型参数来优化视频级预测的损失值(loss value)。
由上图所示**,一个输入视频被分为 K 段(segment),一个片段(snippet)从它对应的段中随机采样得到。不同snippet的类别得分采用段共识函数(The segmental consensus function)进行融合来产生段共识(segmental consensus),这是一个视频级的预测。然后对所有模式的预测融合产生最终的预测结果。
具体来说,给定一段视频V,把它按相等间隔分为K段{S1,S2,⋯,SK}。接着,TSN按如下方式对一系列片段进行建模:
(1)采样得到子片段:(T1,T2,…,Tk)表示K个采样得到的snippets(子片段),也就是说Tk是从其对应(S1,S2,…,Sk)中随机采样出来的结果。
(2)子片段输入信息种类:Tk是一个snippet,每个snippet包含一帧图像和两个光流特征图(光流、扭曲光流)。这也就完成了作者说的稀疏采样。
(3)单个子片段的输出:式子中的W就是网络的参数,F(Tk;W)函数代表采用 W 作为参数的卷积网络作用于短片段 Tk,函数返回 Tk 相对于所有类别的得分,也就是该snippet属于每个类的得分。F函数的输出值对应于网络结构图中Spatial ConvNet(空间)或Temporal ConvNet(时序)的输出结果,ConvNet图后面的绿色条形图,代表的就是socre在类别上的分布。
(4)融合所有子片段结果:g是一个融合函数,在文中采用的是均值函数,就是对所有snippet的属于同一类别的得分做个均值。g函数的输出结果就是网络结构中Segmental Consensus的输出结果。**
(5)softmax计算概率:最后用H函数(文中用的softmax函数)根据得分算概率,概率最高的类别就是该video所属的类别。
(6)融合时序和空间结果:在输入softmax之前会将空间和时序两条网络的结果进行合并,默认采用加权求均值的方式进行合并,文中用的权重比例是spatial:temporal=1:1.5。
(7)所有子片段共享参数:网络结构中的K个Spatial ConvNet的参数是共享的,K个Temporal ConvNet的参数也是共享的,实际用代码实现时只是将K个子片段输入到同一个网络中。
结合标准分类交叉熵损失(cross-entropy loss),关于部分共识的最终损失函数G的形式为:
其中,C是行为总类别数,yi是类别i的groundtruth(真相),实验中片段的数量K设置为3。本工作中共识函数G采用最简单的形式,即Gi=g(Fi(T1),…,Fi(TK)),采用用聚合函数g(aggregation function)从所有片段中相同类别的得分中推断出某个类别分数 Gi。聚合函数g采用均匀平均法来表示最终识别精度。
TSN中利用反向传播算法来优化参数:
其中,K是TSN使用的segment数,TSN从整个视频中学习模型参数而不是一个短的片段。与此同时,通过对所有视频固定K,作者提出了一种稀疏时间采样策略,其中采样片段只包含一小部分帧。与先前使用密集采样帧的方法相比,这种方法大大降低计算开销。
介绍共识聚合函数的设计和推导出它们对于snippet的梯度及分析不同聚合函数的特性提供建模见解。
最大池化的基本思想是为每个动作寻找一个最具有区别性的snippet,然后用这个最强的激活作为这类视频的视频级响应。鼓励时间段网络从每个动作类的最具区别的片段中学习,但缺乏联合模型多个片段以实现视频级动作理解的能力
平均池化的思想是把所有动作识别的snippet平均,平均池化能从整个视频中获得信息。但是对于那些背景复杂的嘈杂视频 ,可能一些snippet会干扰识别表现
Top-k,在最大池化和平均池化中取得平衡先为每个动作选取K个最具区别的snippet,然后对这些snippet执行平均池化
线性权重,就是为每个snippet加一个权重
注意力权重(自适应加权 方法)上述线性加权方案是数据无关的,缺乏考虑视频之间的差异。A(Tk)根据视频内容自适应计算
TSN通过探索更多的输入模式来提高辨别力。除了像two-stream那样,空间流卷积网络操作单一RGB图像,时间流卷积网络将一堆连续的光流场作为输入,作者提出了两种额外的输入模式:RGB差异(RGB difference)和扭曲的光流场(warped optical flow fields)。
单一RGB图像表征特定时间点的静态信息,从而缺少上下文信息。如上图2所示,两个连续帧的RGB差异表示动作的改变,对应于运动显著区域。故试验将RGB差异堆作为另一个输入模式。
TSN将光流场作为输入,致力于捕获运动信息。在现实拍摄的视频中,通常存在摄像机的运动,这样光流场就不是单纯体现出人类行为。如上图2所示,由于相机的移动,视频背景中存在大量的水平运动。受到iDT(improved dense trajectories)工作的启发,作者提出将扭曲的光流场作为额外的输入。通过估计估计单应性矩阵(homography matrix)和补偿相机运动来提取扭曲光流场。如图2所示,扭曲光流场抑制了背景运动,使得专注于视频中的人物运动。
<1>对于RGB输入:采用在ImageNet上预训练的模型做初始化。
<2>对于其他输入模式(如RGB差异、光流场):它们基本上捕捉视频数据的不同视觉方面,并且它们的分布不同于RGB图像的分布。作者提出了交叉模式预训练技术:利用RGB模型初始化时间网络。
<3>交叉训练模式具体操作方式:首先,通过线性变换将光流场离散到从0到255的区间,这使得光流场的范围和RGB图像相同。然后修改RGB模型第一个卷积层的权重来处理光流场的输入。具体是对RGB通道上的权重进行平均,并根据时间网络输入的通道数量复制这个平均值。这一策略对时间网络中降低过拟合非常有效。
在学习过程中,Batch Normalization将估计每个batch内的激活均值和方差,并使用它们将这些激活值转换为标准高斯分布。这一操作虽可以加快训练的收敛速度,但由于要从有限数量的训练样本中对激活分布的偏移量进行估计,也会导致过拟合问题。因此,在用预训练模型初始化后,冻结所有Batch Normalization层的均值和方差参数,但第一个标准化层除外。由于光流的分布和RGB图像的分布不同,第一个卷积层的激活值将有不同的分布,于是,我们需要重新估计的均值和方差,称这种策略为部分BN。与此同时,在BN-Inception的全局pooling层后添加一个额外的dropout层,来进一步降低过拟合的影响。dropout比例设置:空间流卷积网络设置为0.8,时间流卷积网络设置为0.7。
数据增强能产生不同的训练样本并且可以防止严重的过拟合。在传统的two-stream中,采用随机裁剪和水平翻转方法增加训练样本。作者采用两个新方法:角裁剪(corner cropping)和尺度抖动(scale-jittering)。
<1>角裁剪
仅从图片的边角或中心提取区域,来避免默认关注图片的中心。
<2>尺度抖动
将输入图像或者光流场的大小固定为 256×340,裁剪区域的宽和高随机从 {256,224,192,168} 中选择。最终,这些裁剪区域将会被resize到224×224 用于网络训练。事实上,这种方法不光包括了尺度抖动,还包括了宽高比抖动。
<1>动作剪辑可能出现在视频的任何时间位置
<2>动作可能会持续很久或者很短
<3>视频中的背景会占据视频的很大一部分
首先是固定时间间距采样snippet,然后用TSN对其评分估计,然后定义几个滑动窗口L{1,2,4,8,16},然后按这个来划分,看里面有几个snippet,找出得分最大的snippet,再和其他的snippet聚合,得出视频动作分类,然后再让这几个窗口的函数取平均聚合。
了解多了再写