【ECCV2016】Temporal Segment Networks(TSN)
〇、前言
虽然在行为识别领域算是挣扎了好几个月了,但是其实都像无头苍蝇一样出来一个顶会的论文,就去找关键字是action recognition的,然后再看看有没有的代码的,虽然知道了这个领域时序建模能力很重要,但是都没有很好的理解。也一直没有狠下心从头开始学习或者从最经典的开始,比如TSN我看完只知道是很多方法的baseline,但是不知道到底为什么是baseLine的,里面的consensus 又是什么意思?自己 看了一些基于TSN的代码的方法的consensus type = 'avg'
也不知道是什么意思,这些都严重阻碍进步。诸如此类的还有很多。
所以借助最近疫情期间的假期,不破不立,自己处理一遍TSN
一、论文提出的依据
TSN的提出主要是为了解决下面的问题:
- 【问题1】How to effectively learn video representation that captures long range
temporal structure(怎么有效的学习到能够捕捉到long-range时序信息的视频表示) - 【问题2】How to exploit these learned ConvNet models for the more realistic setting of untrimmed videos(怎么把学习到的网络模型应用在更为真实的视频中,比如没有裁剪的)
- 【问题3】How to efficiently learn the ConvNet models given limited training samples and apply them on large scale data(当训练数据很少的时候,用什么样的方法才能保证模型的正常训练并如何应用在大规模的数据上,也就是避免过拟合)
没错,这篇文章就是对上面三个问题进行了探索,然后就有TSN了。首先提出的ECCV版本的论文其实主要focus的是问题1和问题3,后面论文扩充成期刊的工作又针对问题2进行了探索和补充。
二、 如何解决上述问题?
【针对问题1】
自然就是经典的TSN了,主要就是之前的工作是没有办法进行Long-range的动作信息获取的(因为之前的工作都是基于单张的frame或者连续几帧stack起来的frames的,这就只有那一部分,没有stack起来的信息就会有所缺失)
所以用下面方法进行Long-Range的temporal information learning!
可以理解为是:稀疏但全局性的sampling!
给定一个描述动作的视频
- Step1:将视频划分为K段(K-segment)
- Step2:对于其中的每一个segment,抽取一个snipnet(也就是获取了视频的 representation了)
比一个包含踢足球的动作视频共30帧,那么就把这个视频分为三段,每段就是10帧,这就是上面Step1做的工作,在Step2中在每个Segment里面只取一帧,这样原本有30帧的视频数据,我们现在只需要取其中的3帧进行处理就好了,尤其
(1)取得数据少:所有快
(2)取得帧在整个视频片段里分布均匀,前中后程都有估计到:所以long-range
上面这两个特点满足后,那么就是effectively 的了
- Step3: 把数据送入网络学习(也就是对上一步得到的视频的representation送进网络进行特征的提取)
也就是后面的双流网络结构了,每一个ConvNet都是双流的,一个分支是snippet的single RGB frame,另一个分支数据是几种流数据,关于几种流的数据后面单独思考一下。 - Step4: 对每个ConvNet中得到的特征进行Aggregation
上面可以理解为一个certain动作的视频数据中的一个Segment就经过一个双流网络,那么比如这个视频有3个Segment,那这三个segment就要分别经过三个双流网络,因此,其中每个Segment经过网络后都会得到一个自己对动作类别的预测,最后TSN将综合考虑三个Segment的“提议”,毕竟兼听则明,多征求意见,对所有人的意见要进行自己的“判断”这里的判断就可以理解为是Aggregation Function,在期刊的文章里考虑了五种:
a)average pooling;
b)max pooling;
c) weighted average;
d) top-K pooling;
e) adaptive attention weighting。
其中最后两种原文是这么解释的:
The latter two are designed to automatically highlight
discriminative snippets while reducing the impact of less
relevant ones during training, thus contribute to a better
learned action model.
这里其实也就解答了我最开始的疑惑,那就是consensus type = 'avg'
没错,原来是对每个segment的aggregation的方式。
最终,每个Segment把自己想法表达之后,经过Aggregation操作后,整个TSN会得到自己对当前视频中动作类别的判断,也就是最后的动作类别
到此为止其实就是TSN的所有算法层面的东西了我觉得,后面的都是偏向工程的trick,但是也是价值很高,当前的很多工作都是在TSN的基础上进行的,相关的训练测试策略也都延续了TSN的风格。
【针对问题2】
提出了:Multi-scale Temporal Window Integration
这个我不太关心,原文中的介绍也比较详细,不多说了
【针对问题3】
主要是在训练网络的时候提出了一下策略:
- 交叉输入模式预训练:
- 正则化:
- 数据增强:
具体的可以参考这篇博客,自己读了之后也是受益匪浅:
[行为识别论文详解]TSN(Temporal Segment Networks)
三、Input
TSN对输入部分也进行了探索,之前的方法时域信息部分都是利用光流信息作为输入,但是在TSN中,作者进行了如下数据形式的探索:
单一RGB输入:
仅仅包含静态信息,缺少frame在时序维度上的联系
RGB difference:
两个连续的RGB frames的差异,可以表达动作的差异,也就是定义出了显著性的区域,这里看图,可以说是强调了动作
Optiacl Flow Field:
由于相机的移动,视频背景中存在大量的水平运动
Warped Optiacl Flow Field
这个是受到idt(improved dense trajectories)算法的启发的,通过估计估计单应性矩阵(homography matrix)和补偿相机运动来提取扭曲光流场,该方法可以抑制背景的运动,更加专注于视频中的动作。
四、思考
(1)关于光流:
之前记得有工作Hidden Two Stream的方法利用网络进行光流的提取,这样整个训练的框架就成了end-to-end的了,不知道有没有可能取学习Warped Optical Flow的产生,因为扭曲的光流信息更加关注动作本身,没准可以得到性能的提升。
(2)稀疏采样的事情
还是和之前一篇文章提到的一样,面对动作类别粒度比较粗的可以利用稀疏采样,但是遇到细粒度的数据集,帧帧都有用的?那该怎么半?long range的信息还将如何获取??
(3)时序信息建模
其实说白了TSN本身是不具备temporal modeling的能力的,之所以能获取较好的时序信息还是因为光流数据本身,那么该如何进一步探索时序信息建模的方案呢,比如当下只采用RGB作为输入的TSM,就是通过shift操作来进行的。这样的方案还能怎么改进呢???
(4)时序信息和空间信息的融合
这里是双流的,空间信息是单一的RGB stream进行获取的,时间信息通过光流信息得到的,然后时空之间的联系并没有得到很好的拓展,那么该怎么办呢?
五、关于实验
关于训练和测试的实验部分,待完成。
上一篇: python 嵌套函数及其练习题
下一篇: 4.提出TSN的2048特征