算法介绍
当时研究的不足(尤其是双流):
- 只能处理短期运动(short-term),对长期运动(long-range)时间结构进行理解不足
- 训练样本较小
提出的处理办法:
- 弥补第一个不足:使用稀疏时间采样策略和基于视频监督的策略,将视频进行时域分割后随机抽取片段
- 弥补第二个不足:交叉预训练、正则化技术和数据扩张技术
源码
公开源代码,基于caffe实现,以及另一种实现方式,基于pytorch实现
算法结构
- 对一个输入视频V被分为K个segment(S1,S2,…,Sk),并从中随机选择一个片段Tk(snippet),完成了稀疏时间采样
- 然后继续通过two-stream网络,将所有(k个)空域网络的输出进行类别score的分布统计,对时域网络的输出进行类别score的分布统计,每个segmental consesus的输出结果用均值处理一下
- 最后用softmax函数得出概率最高的类别
下图为TSN网络结构:
- 小结稀疏时间采样策略:不管输入视频的长短,直接分成K个Segment,然后在每个Segment再随机找出一个时间小片,分别用 shared CNN 来提取空间上的特征,再进行 feature-level 的融合,最后再 Softmax 分类
下图为稀疏时间采样策略:
参数配置
k个spatial convnet的参数是共享的
训练集预处理
- 在输入上,在two-stream基础上又增加了RGB difference(相邻两帧的差) 和 warped光流场
下图所示为RGB、RGB差值、光流场、warped光流场:
- 在防止过拟合上,使用了交叉预训练技术、正则化技术和数据扩张技术,需要预处理的是时域网络初始化以及对图像进行随机剪裁、镜像、画幅抖动的数据扩张方法
算法优势及原因
- 由于进行了时域分割和随机抽取,并有分布统计和独特的Loss函数,利用了整个视频的视觉信息进行的video-level的学习与分类
- 交叉预训练主要是针对时域网络的初始化,先将光流场离散线性变换至[0,255]区间内,这样就和RGB单通道的值域相同了,接下来对RGB模型第一个卷积层的权值作为光流场第一个卷基层的权值,并对RGB三通道取均值作为单通道作为时域网络的输入,从而完成时域网络的初始化
- 正则化技术主要用到的是partial BN,即冻结BN层的均值和方差参数(除了第一层),不再进行训练过程中的更新
- 数据扩张的方式还是4个角落+1个中心,以及宽高在256 ~ 224/192~168进行浮动
亮点
DeepDraw可以对训练后每层的输出进行可视化,更直观的观测到每一层DeepLearning都学习到了什么特征
下图所示为训练过程可视化:
训练结果
- 从训练过程来看,经过交叉预训练并使用局部BN的效果自然最好
下图为原始训练与预训练及局部BN的准确率对照:
- 从不同输入对比来看,RGB+光流+warped光流场的组合效果最优
下图为不同输入的准确率对照:
- 从不同合并方式来看,带有权重的平均效果最优
下图为不同合并方式的准确率对照:
- 从不同网络架构对比来看,BN-Inception的TSN效果最优
下图为不同网络架构准确率对照:
- 和主流算法的对比结果
下图为和主流算法的准确率对照: