专栏名称: SIGAI
全方位覆盖AI经典算法与工业应用,紧跟业界最新趋势,让你始终站在技术最前沿。
目录
相关文章推荐
BCG波士顿咨询  ·  新年扬帆再出发,携手逐梦同奋进 ·  昨天  
汇易咨询  ·  JCI:蛇年大吉大利,美麦涨幅领先吐祥瑞 ·  昨天  
跟宇宙结婚  ·  祝您大年初五喜盈门|跟宇宙结婚 ·  4 天前  
51好读  ›  专栏  ›  SIGAI

浅谈动作识别TSN, TRN, ECO

SIGAI  · 公众号  ·  · 2018-09-24 13:58

正文

SIGAI 团队和你过中秋


SIGAI特约作者

Fisher Yu

CV在读博士

研究方向:情感计算

导言

什么是动作识别?给定一个视频,通过机器来识别出视频里的主要动作类型。


动作识别表面是简单的分类问题,但从本质上来说,是视频理解问题,很多因素都会影响其中,比如不同类型视频中空间时间信息权重不同?视频长短不一致?视频中动作持续的起始终止时间差异很大?视频对应的语义标签是否模糊?

 

本文主要对比 video-level 动作识别的经典方法TSN,及其拓展变形版本的TRN和ECO。


 

Temporal Segment Network

TSN(Temporal Segment Network[1], ECCV2016)提出的背景是当时业界做动作识别都是用 Two-stream CNN 和 C3D 比较多,它们都有个通病,就是需要密集采样视频帧,比如 C3D 中使用的是连续采样间隔的16 frames,这样当输入是个Long视频,计算量很庞大~

 

故文中就提出了 稀疏时间采样策略 ,就是不管输入视频的长短,直接分成K个Segment,然后在每个Segment再随机找出一个时间小片,分别用 shared CNN 来提取空间上的特征,再进行 feature-level 的融合,最后再 Softmax 分类:

公式中TK表示第K个Segment;函数F表示CNN网络出来的特征;G表示特征融合函数;H表示分类层Softmax。


整个网络框架图如下,很简洁:

TSN[1]


由于其中没有使用 3D conv,故为了更好进行 temporal 特征提取,文中也使用了类似双流的多模态输入:即上图的 Spatial ConvNet 的输入可以是 RGB图 或者 RGB差异图;Temporal ConvNet 的输入可以是 光流图 或者 wrapped光流:

不同模态输入[1]


从实验结果来看,使用Average fusion去融合特征效果最好;而当使用三模态输入(Optical Flow + Warped Flow + RGB)时,在HMDB51和UCF101超state-of-the-art;不过若只是RGB作为输入的话,性能不如 C3D~


总结:

Pros:

通过 Sparse temporal sampling 可以扔掉很多冗余帧,初步满足实际应用的real-time要求。


Cons:

对于Temporal特征欠考虑,更多地是 focus 在 apperance feature。文中亦无对比超参K值(Default K=3)的选取对结果的影响 及 Segment内部采样小片策略。

 

Temporal Relation Network

TRN(Temporal Relation Network[2], ECCV2018 )致力于探索时间维度上的关系推理,那问题来了,怎么样才能找到特征间在时间上的传播关系呢?其实像传统的3D conv架构(C3D,P3D,R(2+1)D, I3D),也是有 Temporal conv 在里头,也能从不同感受野即multi-temporal-scale来得到联系。本文是在TSN框架上,提出用于video-level的实时时间关系推理框架。

 

TRN的 main contribution 有两个:

1. 设计了新型的fusion函数来表征不同 temporal segment 的 relation,文中是通过MLP( concat feature -- ReLU -- FC -- ReLU -- FC)的结构来实现,而TSN中的fusion函数只是通过简单的 average pooling。


2. 通过时间维度上 Multi-scale 特征融合,来提高video-level鲁棒性,起码能抗快速动作和慢速动作干扰。

下图的框架图一目了然,算法实现流程就是先均匀地采样出不同scale的Segment 来对应 2-frame, 3-frame, ..., N-frame relation;然后对每个Segment里小片提取 Spatial feature,进行 MLP 的 temporal fusion,送进分类器;最后将不同scale的分类score叠加来作最后预测值。

TRN[2]


两个实现的细节点需要注意:

1. 对采样下来的N-frame,必须保持时序性,即从先到后;这样后面的temporal fusion环节MLP才能学会推理动作的时间关系。


2. 不同scale的采样帧对应的 MLP 都是独立的,不share参数,因为含的帧数信息量也不同,输入给MLP的大小自然也不同。


文中给出了几个非常有趣的实验结果:

1. 如下图所示,在不同的数据集, TRN和TSN的性能差异很大。这说明什么问题呢?在UCF, Kinectics, Moments里两者的性能相近,说明这三个数据集的动作与空间上下文具有强相关性,而对于时间上下文相关性较弱;而 Something-something, Jester, Charades 里动作较为复杂,时间上下文联系较强,TRN的性能明显高于TSN。

不同的fusion方式在6个数据集上的性能[2]


2. 保持帧间时序对于TRN的重要性,如下图所示,可见乱序输入的TRN在动作复杂的something-something数据集下性能严重下降;而在UCF101里并不严重,因为该数据集需要更多的是空间上下文信息。

正序和乱序的性能[2]

总结:

Pros:

更鲁棒的 action/activity 时空特征表达方式,即 MLP fusion + Multi-scale。


Cons:

Spatial 和 temporal 的联系还是太少,只在最后 embedding feature时用MLP融合了一下~~另应对比不同的fusion方式,如LSTM/GRU与MLP的性能差异~


ECO

本文通过 trade-off TSN系列 和 3Dconv列,来实现实时的 online videounderstanding(文中夸张地描述到 ECOruns at 675 fps (at 970 fps with ECOLite) on a Tesla P100 GPU)。


ECO[3], ECCV2018的主要贡献:

1. 使用 TSN 稀疏采样来减少不必要的冗余帧的前提下,对采样帧的 mid/high-level 进行 spatio-temporal 特征fusion,故比 TRN 只在最后特征层来做 temporal fusion的时空表达能力更强~


2. 提出了一整套工程化的 Online video understanding 框架。

 

来看看轻量级的ECO-Lite的网络框架图,对N个中的每个Segment中的帧来提取特征到某一层 K*28*28,然后通过 3D-ResNet(当然拉,这里你也可以使用 convLSTM + SPP 等方式来对比下效果) 提取N个Segment的时空特征,最后再分类。

ECO Lite[3]


完整的ECO框架就是在 ECO-Lite 的基础上,再接一个类似 TSN 的average pooling 的 2D 分支,最后再将两个分支特征进行融合及分类:

Full ECO[3]


在Something-something数据集下,集成 {16, 20, 24, 32} 下采样帧数的四个ECO-Lite子网络的average score的方法,性能远超 Multi-scale TRN:

something-something性能[3]


总结与展望:

当硬件的计算能力在上升,且成本下降后,无疑以后通过Sparse sampling后,直接从头到尾进行 3Dconv 出来的时空表征会更优 。而这个Sparse sampling,是否可以通过 temporal attention去自动选择最优的帧来计算也很重要。


Reference:

[1] Limin Wang, Temporal Segment Networks: Towards Good Practices for Deep Action Recognition, ECCV2016

[2]Bolei Zhou, Temporal Relational Reasoning in Videos,ECCV2018

[3]Mohammadreza Zolfaghari, ECO: Efficient Convolutional Network for Online Video Understanding,ECCV2018



SIGAI | 人工智能学习与实践平台

?想要搞定机器学习数学挑战:

SIGAI推荐精品课《人工智能的数学基础》现价399元原价599元

本课程将带你全面系统地回顾机器学习所需的数学知识,导师手把手带你玩转EM算法、梯度下降法的推导过程。

苹果手机用户购买请查看网页:http://sigai.cn/index.php?r=front/viewcourse&id=20

小编推荐:市面上唯一一门真正帮助你将学习精力集中在人工智能领域的课程:导师以算法应用为出发点,详细剖析推导每个基础数学知识;让你集中精力打好机器学习的必备数学基础的同时,免于陷入数学复杂体系,白白浪费精力

《人工智能的数学基础》完整大纲


?想要弄清算法本身的逻辑与思想,学会使用算法

SIGAI推荐精品课《机器学习》限时优惠价699元原价1399元

本课程带你轻松理解算法背后隐含的思想和逻辑,如DBSCAN算法,OPTICS算法,AdaBoost算法以及隐马尔科夫模型。近百个可视化实验和7大实践项目让你掐到每个算法的命门,做到逐一攻破,因势而用。

苹果手机用户购买请查看网页:http://sigai.cn/index.php?r=front/viewcourse&id=13


▲向上滑动查看机器学习课程目录(部分)




第 集机器学习简介

1.1 课程介绍

1.2 本集介绍

1.3 推荐的参考书

1.4 人工智能简介
1.5 机器学习简介
1.6 为什么需要机器学习

1.7 机器学习的发展历史

1.8 机器学习的典型应用

1.9 业内主要公司介绍

1.10 本课程讲授的算法

1.11 本集总结



第 集数学知识-1 

2.1 本集内容简介

2.2  学好机器学习需要哪些数学知识

2.3 推荐的参考书
2.4 本集所讲的知识点
2.5 机器学习算法所用的数学知识

2.6 导数

2.7 高阶导数

2.8 导数与函数的性质

2.9 一元函数的泰勒展开

2.10 向量
2.11 矩阵
2.12 行列式
2.13 偏导数
2.14 高阶偏导数
2.15 梯度
2.16 雅可比矩阵
2.17 Hessian 矩阵
2.18 极值判别法则
2.19 二次型
2.20 特征值与特征向量

2.21 特征值分解
2.22 多元函数的泰勒展开

2.23 矩阵和向量求导公式

2.24 奇异值分解
2.25 为什么需要概率论

2.26 随机事件与概率

2.27 条件概率与贝叶斯公式

2.28 随机事件的独立性

2.29 随机变量
2.30 数学期望与方差

2.31 常用的概率分布

2.32 随机向量
2.33 随机变量的独立性

2.34 协方差

2.35 常用的多维概率分布

2.36 最大似然估计
2.37 本集总结



第 集数学知识-2 

3.1 本集内容简介

3.2 最优化中的基本概念

3.3 为什么要用迭代法

3.4 梯度下降法
3.5 牛顿法

3.6 坐标下降法

3.7 优化算法面临的问题

3.8 拉格朗日乘数法
3.9 凸优化简介
3.10 凸集
3.11 凸函数
3.12 凸优化的性质
3.13 凸优化的一般表述

3.14 拉格朗日对偶
3.15 KKT 条件
3.16 本集总结



第 集基本概念

4.1 本集介绍

4.2 监督信号

4.3 有监督学习

4.4 无监督学习
4.5 强化学习
4.6 分类问题
4.7 回归问题
4.8 线性回归
4.9 判别模型与生成模型

4.10 准确率

4.11 回归误差

4.12 精度与召回率

4.13 ROC 曲线

4.14 混淆矩阵

4.15 交叉验证
4.16 欠拟合
4.17 过拟合
4.18 欠拟合与过拟合总结

4.19 偏差与方差分解

4.20 正则化

4.21 岭回归

4.22 本集总结



第 集贝叶斯分类器

5.1 本集简介

5.2 贝叶斯公式

5.3 朴素贝叶斯分类器

5.4 正态贝叶斯分类器

5.5 实验环节
5.6 实际应用
5.7 本集总结



第 集决策树
6.1 本集内容介绍

6.2 树与二叉树简介

6.3 决策树简介
6.4 决策树的表示能力
6.5 训练算法要解决的核心问题

6.6 递归分裂过程

6.7 寻找最佳分裂

6.8 叶子节点值的设定

6.9 属性缺失与替代分裂

6.10 过拟合与剪枝
6.11 实验环节
6.12 实际应用
6.13 本集总结



第 k近邻算法

7.1 本集简介

7.2 k 近邻算法

7.3 预测算法
7.4 距离函数
7.5 距离度量学习

7.6 实验环节

7.7 实际应用

7.8 本集总结


第 集数据降维1

8.1 本集内容简介

8.2 为什么需要数据降维

8.3 PCA 简介
8.4 计算投影矩阵
8.5 完整的算法流程

8.6 实验环节

8.7 实际应用

8.8 本集总结



第  集数据降维2
9.1 
本集内容简介

9.2 非线性降维技术简介

9.3 流形简介
9.4 流形学习简介
9.5 局部线性嵌入

9.6 拉普拉斯特征映射

9.7 局部保持投影
9.8 等距映射
9.9 实验环节

9.10 本集总结



第 10 集线性判别分析
10.1 本集内容简介
10.2 LDA 的基本思想
10.3 寻找最佳投影方向
10.4 推广到高维和多类的情况

10.5 PCA 与 LDA 的比较

10.6 实验环节

10.7 实际应用

10.8 本集总结



第 11 集人工神经网络 1
11.1 
本集内容简介
11.2 动物神经系统的基本原理

11.3 人工神经网络的基本思想

11.4 神经元的原理
11.5 sigmiod 函数
11.6 神经网络的结构
11.7 神经网络每一层完成的变换

11.8 正向传播算法
11.9 神经网络的本质
11.10 怎样用于实际问题


第 12 集人工神经网络 2

12.1 本集内容简介
12.2 反向传播算法概述

12.3 反向传播算法的历史

12.4 正向传播算法回顾

12.5 优化目标函数

12.6 欧氏距离的求导公式

12.7 链式法则
12.8 基础求导公式
12.9 求导的整体思路
12.10 权重和偏置的求导公式

12.11 输出层的求导

12.12 误差项的计算

12.13 完整的算法

12.14 算法总结

12.15 工程实现细节

12.16 本集总结



第 13 集人工神经网络 

13.1 本集内容简介

13.2 实验环节
13.3 理论分析

13.4 理论分析-拟合能力

13.5 理论分析-与神经系统的关系

13.6 实现细节问题
13.7 输入与输出值的设定
13.8 网络的规模
13.9 激活函数
13.10 损失函数
13.11 参数初始化
13.12 正则化
13.13 学习率的设定
13.14 动量项
13.15 挑战与改进措施
13.16 梯度消失问题
13.17 退化
13.18 局部极小值
13.19 鞍点问题
13.20 损失函数曲面分析
13.21 实际应用
13.22 实践项目
13.23 本集总结



第 14 集支持向量机 1

14.1 本集内容简介

14.2 支持向量机简介
14.3 线性分类器
14.4 分类间隔
14.5  线性可分的原问题

14.6 线性可分的对偶问题

14.7 线性可分的实验
14.8 线性不可分的原问题

14.9 线性不可分的对偶问题

14.10 KKT 条件的使用
14.11 线性不可分的实验

14.12 核函数实验
14.13 核映射与核函数

14.14 本集总结



第 15 集支持向量机 2
15.1 
本集内容简介
15.2 对偶问题求解面临的问题

15.3 SMO 算法简介
15.4 求解子问题
15.5 子问题是凸优化问题的证明

15.6 SMO 算法的收敛性
15.7 优化变量的选择
15.8 完整的算法
15.9 实现细节问题
15.10 本集总结



第 16 集支持向量机 3

16.1 本集内容简介

16.2 多分类问题

16.3 libsvm 简介

16.4 实验环节

16.5 实际应用

16.6 应用时的细节问题
16.7 SVM 整体推导思路的总结



第 17 集线性模型 1
17.1 
本集内容简介
17.2 线性模型
17.3 logistic 回归的基本思想

17.4 预测函数

17.5 试验

17.6 优化目标函数

17.7 凸优化证明

17.8  梯度下降法求解

17.9 另一种形式的对数似然函数

17.10 L2 正则化 logistic 回归

17.11 L1 正则化 logistic 回归

17.12 liblinear 简介
17.13 实验
17.14 softmax 回归
17.15 实际应用
17.16 本集总结



第 18 集线性模型 2
18.1 
本集内容简介
18.2 线性支持向量机简介

18.3 L2 正则化 L1-loss 原问题

18.4 L2 正则化 L2-loss 原问题

18.5 L2 正则化对偶问题
18.6 L1 正则化 L2-loss 原问题

18.7 多类线性支持向量机

18.8 实验
18.9 libsvm 和 liblinear 的比较

18.10 实际应用
18.11 本集总结



第 19 集随机森林
19.1 本集内容简介
19.2 集成学习简介
19.3 Bootstrap 抽样
19.4 Bagging 算法
19.5 随机森林的基本原理

19.6 训练算法
19.7 包外误差
19.8 计算变量的重要性

19.9 实验
19.10 实际应用
19.11 本集总结



第 20 AdaBoost算法

20.1 本集内容简介
20.2 再论集成学习算法

20.3 Boosting 算法简介

20.4 AdaBoost 的预测算法

20.5 训练算法

20.6 训练算法的解释

20.7 算法的总结

20.8 与随机森林的比较

20.9 训练误差分析



第 21 AdaBoost算法2
21.1 
本集内容简介
21.2 广义加法模型
21.3 指数损失函数
21.4 AdaBoost 训练算法的推导

21.5 实现细节问题

21.6 弱分类器的选择

21.7 弱分类器数量的确定

21.8 样本权重削减



第 22 AdaBoost算法3

22.1 本集内容简介

22.2 实验环节
22.3 应用简介

22.4 VJ 框架简介

22.5 滑动窗口技术
22.6 分类器级联
22.7 Haar 特征
22.8 积分图
22.9 训练算法的原理

22.10 训练自己的模型

22.11 VJ 框架的改进

22.12 AdaBoost 算法总结



第 23 集高斯混合模型与 EM 算法

23.1 本集内容简介
23.2 高斯混合模型简介
23.3 实际例子

23.4 训练算法面临的问题

23.5 EM 算法
23.6 实现细节与面临的问题

23.7 应用-视频背景建模

23.8 本集总结



第 24 集聚类算法 1
24.1 
本集内容简介

24.2 聚类问题简介

24.3 聚类算法的分类

24.4 层次聚类流程

24.5 层次聚类的实例

24.6 簇距离的定义

24.7k 均值算法的基本思想

24.8k 均值算法的流程
24.9 实现细节问题与改进方案

24.10 实验

24.11EM 算法简介

24.12Jensen 不等式

24.13EM 算法的推导

24.14EM 算法的流程

24.15EM 算法收敛性的证明



第 25 集聚类算法 2
25.1 
本集内容简介
25.2 基于密度的算法简介

25.3DBSCAN 算法简介
25.4 基本概念
25.5DBSCAN 算法的核心思想

25.6DBSCAN 算法的流程
25.7 实现细节问题
25.8 实验
25.9DBSCAN 算法的优缺点

25.10OPTICS 算法简介
25.11 基本概念
25.12 算法的流程
25.13 根据排序结果得到聚类结果

25.14 实验
25.15Mean Shift 算法
25.16Mean Shift 算法的流程

25.17 谱聚类算法简介
25.18 图切割问题
25.19 优化目标函数
25.20 算法的流程
25.21 聚类算法的评价指标
25.22 实际应用
25.23 聚类算法总结



第 26 集隐马尔可夫模型

26.1 本集内容简介
26.2 概率图模型简介

26.3 马尔可夫模型简介

26.4 状态与状态转移矩阵

26.5 马尔可夫性

26.6 马尔可夫模型

26.7 模型的训练
26.8 隐马尔可夫模型简介

26.9 隐马尔可夫模型的核心问题

26.10 估值问题
26.11 解码问题
26.12 训练问题

26.13 实际应用

26.14 本集总结



第 27 集强化学习 1
27.1 
本集内容简介

27.2 强化学习简介

27.3 马尔可夫决策过程

27.4 状态价值函数

27.5 策略价值函数

27.6 贝尔曼最优性方程

27.7 动态规划算法简介

27.8 策略迭代算法

27.9 价值迭代算法



第 28 集强化学习 2

28.1 本集内容简介
28.2 无模型算法简介
28.3 蒙特卡洛算法简介
28.4 状态价值函数估计
28.5 动作价值函数估计
28.6 蒙特卡洛控制
28.7 蒙特卡洛算法存在的问题

28.8 时序差分算法简介

28.9Sarsa 算法
28.10Q 学习算法
28.11 强化学习总结



第 29 集工程实践问题

29.1 本集内容简介

29.2 样本与标注

29.3 特征构造

29.4 特征预处理

29.5 模型选择问题

29.6 过拟合问题

29.7 参数调优

29.8 本集总结



第 30 





请到「今天看啥」查看全文