刚刚给海尔寄去合作的合同,小编终于松了口气。这个项目中实验室主要负责机器人对于人的(动作)行为的理解。为什么机器人要能够理解人的动作(行为)呢?
比如对于一款照顾小朋友的服务型机器人,只有知道小朋友是否跌倒了,是否想要喝水,是否走向危险的地方,这样才能更好的照顾小朋友。
对于机器人该如何判断一个人的动作(行为)呢?让我们一起学习动作(行为)识别吧!
背景介绍
我们要判断一个人的动作,自然不能单从一张静态的图片来考量,所以动作识别指的是判断一段视频中人的行为的类别(Human Action Recognition)。尽管目前在图像分类上深度学习发展迅速,如 ImageNet,但是对于视频的分析和理解还差很多。
目前动作识别的难点主要是:
类内和类间差异, 同样一个动作,不同人的表现可能有极大的差异。
环境差异, 遮挡、多视角、光照、低分辨率、动态背景。
时间变化, 人在执行动作时的速度变化很大,很难确定动作的起始点,从而在对视频提取特征表示动作时影响最大。
缺乏标注良好的大的数据集。
算法速度,缺乏实际应用良好的高效算法。
举个例子,上图中,一个比较牛的图像分类器可以识别出来人,水中的躯体,我们可以识别出这个人在游泳;但是却很难区分这两种游泳动作的不同。
数据库介绍
目前在该领域最常用的数据库有 UCF101,UCF Sports,JHMDB,Sub-JHMDB,Sports1M,HMDB,Hollywood2Tubes,DALY,Kinetics。
UCF101:包含13,320个视频,101种动作类别,例如:滑雪,篮球扣篮,冲浪。
JHMDB:包含928个视频,21中动作类别,例如:坐,笑,运球。
Sub-JHMDB:包含316个视频,12种动作类别,例如:抓,高尔夫,投掷橄榄球,走路。
UCF Sports:包含150个视频,10种运动类别,例如:滑板,骑马,走路。
Sports1M:来源于 Youtube,包含1,133,158个视频,487种动作,例如:骑车,瑜伽,放风筝。
Hollywood2Tubes:包含1,707个视频,动作类别有:与另一个人打架,吃饭,从车中出来。
HMDB:来源于 Youtube,包含7,000视频,51种动作类别。
DALY:该数据集来源于 Youtube 中的日常生活的动作,包含3,600个视频,10种动作:刷牙,涂口红,打扫地板,刷洗窗户,喝水,折叠纺织品,熨烫,打电话,吹口琴,拍照/摄影。
Kinetics:2017年最新出品,来源于 Youtube,包含500,000个视频,600种动作类别,例如:演奏一些乐器,握手,拥抱等等等等。
上图即为 HMDB 数据库中的51种动作类别。
方法概述
在深度学习还没有火起来之前,大多数的传统的动作识别的算法都可以分为三个步骤:
提取视频局部的高维的稠密的或稀疏的特征;
组合提取的特征形成对于视频级别的特征描述。该步骤的一个变体是使用BOF(bag-of-features)方法生成视频级别的特征编码;
利用一个分类器,如 SVM 或者 RF,对 bag-of-features 的特征进行最终的预测。
再后来,人们对上述方法进行了改进。在第一步过程中,使用iDT(improved dense trajectories)特征来替代原有的特征。
特征的设计非常关键,而2013年提出的iDT方法一直是深度学习来临之前该领域前效果最好,稳定性最好,可靠性最高的方法。但是该方法的速度贼慢。
在 iDT 提出后不久的2014年,两篇文章带来了两个重大突破。这两篇文章主要的区别是围绕时空信息的设计选择的不同。下面来看这两个方法。
方法1:Single Stream Network
来源:Large-scale Video Classification with Convolutional Neural Networks
作者使用预训练的二维的卷积神经网络,探寻了多种方式从连续帧中融合时序信息。
上图中红色,绿色,蓝色分别表示卷积层,Normalization和池化层。该图是作者提出的不同的关于时间信息的融合方案。
本文做的是 clip level video prediction, 即 treat every video as a bag of short, fixed sized clips. 在预测的时候,对一段 video 的所有 clip 预测结果做平均。
主要思想是在CNN做图像分类的结构基础上探索了几种针对视频的结构,包括Single Frame(对一段clip只提取其中一帧),Late Fusion(将不同帧内容在第一个全连接层中融合),Early Fusion(将不同帧内容在第一层卷基层融合), Slow Fusion(将不同帧内容逐渐融合)。
其中,对每列对应的网络,使用共同的网络结构和参数。其中每种操作的作用如下:
Single Frame:和普通的识别作用相同,主要是为了贡献整个识别的精度;
Late Fusion:第一个全连接层可以通过比较两个自网络的输出来计算全局动作特性;
Early Fusion:结合了整个时间窗口上像素级别的信息,可以允许网络精确地检测局部动作方向和速度;
Slow Fusion:Late Fusion和Early Fusion的结合,贯穿整个网络缓慢地融合时间信息。
由于在训练过程中因为比较耗时,作者提出了一种 Multiresolution CNN,即将原有的 178x178 的帧分成两个 89x89的 stream,一个 stream 用于获取低分辨路的全局信息,另外一个 stream 用于获取中心区域的内容信息,最后将两个 stream 融合,这样的结构设计能够提高整个网络的效率。
实际上这种方法在最终的效果上还没有当时使用手动特征的最好的结果好。问题在于:
学到的时空特征没有捕捉到运动特征。
数据集并不是那么多样化,对于特征的学习比较困难;
方法2:Two Stream Networks
来源:Two-Stream Convolutional Networks for Action Recognitionin Videos
本篇作者实际上是对前面 Single Stream Networ 的改进。我们说过 Single Stream Networ 的问题是没有捕捉到运动特征(motion feature)。
而这篇文章的网络引入了密集光流序列来对运动特征进行建模。因此提出了上图中 Two Stream 的网络结构。
基本原理为对视频序列中每两帧计算密集光流,得到密集光流序列(即temporal信息)。
然后对于视频图像(spatial)和密集光流(temporal)分别训练 CNN 模型,两个分支的网络分别对动作的类别进行判断,最后直接对两个网络的 class score 进行 fusion(包括直接平均和svm两种方法),得到最终的分类结果。对于两个分支使用了相同的 2D CNN 网络结构。
尽管相比于前一个方法,该方法捕获到了局部的动作信息,但是仍然有很多缺点:
对于视频级别的预测是通过对采样片段的预测求平均得到的,因此在学习的特征中仍然缺少长距离的时间信息;
由于训练 clips 是从视频中均匀采样得到的,所以它们存在假标签的问题;
训练中需要的密集光流序列需要提交手动处理得到并保存下来,因此并不是一个端到端的网络。
后来又有非常多的方法基本都是基于这两种方法进行改进的,如:
LRCN
C3D
Conv3D & Attention
TwoStreamFusion
TSN
ActionVlad
HiddenTwoStream
I3D
T3D
细致的总结一下,实际上这些论文都是基于以下模型设计实现的:
该图来自于 Paper:Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset
其中K表示一个视频的总帧数,N 表示该视频中某子集(相邻的一些帧)的帧的数目。
下面我们来介绍上面提到的九种模型。
LRCN:
论文题目
Long-term Recurrent Convolutional Networks for Visual Recognition and Description
会议/期刊 | CVPR2015 |
论文地址 | https://arxiv.org/pdf/1411.4389.pdf |
代码地址 | https://github.com/LisaAnne/lisa-caffe-public/tree/lstm_video_deploy |
项目地址 | http://jeffdonahue.com/lrcn/ |
主要贡献 | 在以前的工作中使用 RNN 替代基于流的设计;拓展了编解码器的结构用于视频理解;端到端的网络结构 |
简略介绍 | 如下图所示,作者使用LSTM blocks作为解码器,卷积 blocks 作为编码器,然后训练该端到端的网络; 同时作者还比较了下使用 RGB 图像作为输入和使用光流信息输入的差别,发现结合两者,对结果附上权重(类似于集成了),会有更好的结果。 |
存在问题 | 首先既然将视频剪辑得到一些帧,就势必存在假标记的问题;无法捕获长时间的信息;使用光流意味着必须提前手动处理特征。 |
C3D:
论文题目
Learning Spatiotemporal Features with 3D Convolutional Networks
会议/期刊 | ICCV2015 |
论文地址 | https://arxiv.org/pdf/1412.0767.pdf |
代码地址 | https://github.com/facebook/C3D |
主要贡献 | 引入了3D卷积网络作为特征提取器;探究了最好的3D卷积核和结构;使用了反卷积层来解释了模型的决策 |
简略介绍 | 如下图所示,在整个视频上采样后使用3D卷积,而不是单独的处理2D的每一帧。对于手动特征iDT依然适用,且依然有很好的结果。最终的结果依然使用平均取值的方法。 |
存在问题 | 计算量是最大的问题,当视频帧数多时更是如此。比如对于医学图像的识别。 |
Conv3D & Attention:
论文题目
Describing Videos by Exploiting Temporal Structure
会议/期刊 | ICCV2015 |
论文地址 | https://arxiv.org/pdf/1502.08029.pdf |
代码地址 | https://github.com/yaoli/arctic-capgen-vid |
主要贡献 | 新的 3D CNN-RNN 编解码器,可以捕获局部的空间与时间的信息;引入注意力机制到网络结构中,可以捕获全局的上下文信息。 |
简略介绍 | 这篇文章并不是直接做的动作识别,而是对于视频理解的更基础的方法。 相比于传统的 3D CNN 直接使用 clips 作为输入,该网络利用每一帧作为输入,经过注意力机制处理后,再组合起来构成 3D 卷积网络的输入。 注意力机制中的权重利用 LSTM 在每个 time step 后进行确定。注意力机制的引入是2015年研究的一个热点。 |
注意力机制图示:
TwoStreamFusion:
论文题目
Convolutional Two-Stream Network Fusion for Video Action Recognition
会议/期刊 | CVPR2016 |
论文地址 | https://arxiv.org/pdf/1604.06573.pdf |
代码地址 | https://github.com/feichtenhofer/twostreamfusion |
主要贡献 | 通过较好的远距离损失( long range losses)进行远程时间建模;新的multi-level fused architecture。 |
简略介绍 | 本篇文章的思想是:融合空间和时间(spatial and temporal)的信息。 比如:对于刷牙这个动作, spatial 网络用于判断这个物体的种类,比如是牙还是头发;temporal 网络用于捕获前面判断的物体的动作信息。 相比于之前的 two stream architecture,作者提前进行了空间和时间特征的融合,可以保证更好的从空间到时间的映射关系。 |
上图为本文提出的两种融合时间和空间信息的策略。
TSN:
论文题目
Temporal Segment Networks: Towards Good Practices for Deep Action Recognition
会议/期刊 | CVPR2016 |
论文地址 | https://arxiv.org/pdf/1608.00859.pdf |
代码地址 | https://github.com/yjxiong/temporal-segment-networks |
主要贡献 | 应对长时间视频的有效的方法; |
简略介绍 | 改进了 two streams architecture。发现在视频中稀疏地采样,可以更好地对长距离时间信息建模,而不是在整个视频中随机采样。 对于视频的最终预测,作者探索了多种策略。最好的策略是:通过跨片段的平均来分别组合时间流和空间流的分数;使用加权平均融合最终空间和时间得分,并在所有类上应用 softmax。 |
在上图中,对于所有的 Snippets,ConvNets 共享参数。
ActionVLAD:
论文题目
Learning spatio-temporal aggregation for action classification
会议/期刊 | CVPR2017 |
论文地址 | https://arxiv.org/pdf/1704.02895.pdf |
代码地址 | https://github.com/rohitgirdhar/ActionVLAD/ |
项目地址 | https://rohitgirdhar.github.io/ActionVLAD/ |
主要贡献 | 如何聚合视频帧之间的特征来表示整个视频;在多流网络中(例如two-stream)里面如何整合不同流(双流)的信息。 |
简略介绍 | 一整段视频中虽然是单一的动作分类,但是可能有多个不同的子类特征,例如 basketball shoot 中有 hoop,dribbling,jump,group,throw,ball,running 等多个子类特征,如下图所示。所以作者想找方法去整合多个子类特征到一整段视频特征的表示中。 |
该论文使用的网络结构也是基于 two-stream 类型的网络:
HiddenTwoStream:
论文题目
Hidden Two-Stream Convolutional Networks for Action Recognition
会议/期刊 | CVPR2017 |
论文地址 | https://arxiv.org/pdf/1704.00389.pdf |
代码地址 | https://github.com/bryanyzhu/Hidden-Two-Stream |
主要贡献 | 新颖的网络结构,在网络传输过程中利用单独一个网络产生光流输入。且减少了成本,提升了预测速度。 |
简略介绍 | 光流信息在 two stream architecture 中的使用使得必须预先为每个采样帧计算光流,从而不利地影响存储和速度。本文提倡使用无监督架构来生成光流。 |
作者尝试了多种策略生成光流,并最终提出上图的网络结构。其中 MotionNet用于生成光流,使用额外的多级损失(multi-level loss)来无监督的训练 MotionNet。
I3D:
论文题目
Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset
会议/期刊 | CVPR2017 |
论文地址 | https://arxiv.org/abs/1705.07750 |
代码地址 | https://github.com/deepmind/kinetics-i3d |
主要贡献 | 将基于 3D 的模型整合进 two stream architecture,且对于 3D 模型借助了2D的预训练参数;提出 Kinetics dataset |
简略介绍 | 作者使用两个不同的 3D 网络来实现两个流。此外,为了利用预先训练的 2D 模型,作者在第三维中重复 2D 预先训练的权重。 空间流输入现在由在时间维度上堆叠的帧组成,而不是像在基本的 two stream architecture 中那样由单个帧组成。在算法设计上与基本的 two stream architecture 相同。Kinetics dataset 是本文重大的贡献。 |
T3D:
论文题目
Temporal 3D ConvNets: New Architecture and Transfer Learning for Video Classification
会议/期刊 | CVPR2017 |
论文地址 | https://arxiv.org/pdf/1711.08200.pdf |
主要贡献 | 时间变化与深度信息相融合的网络结构;新颖的将 2D 预训练网络迁移到 3D 网络的技术。 |
简略介绍 | 作者提出使用基于 3D DenseNet 的网络来捕获不同的时间变化与深度信息。 网络的输出是对整个视频的预测结果。如下图所示。 |
除此之外,作者还提出了新颖的将 2D 预训练网络迁移到 3D 网络的技术。
输入是一系列的帧和 Clips 对,这些对可能是同样的 label,也可能是不同的 label。
在训练中预训练好的 2D 网络的参数固定,最终两者提取出来的特征表示会相近(实际上类似于对抗的思想)。本文最大的贡献就是该迁移方法的提出。
参考:
https://www.cnblogs.com/nowgood/p/actionrecognition.html
http://blog.qure.ai/notes/deep-learning-for-videos-action-recognition-review
https://blog.csdn.net/wzmsltw/article/details/70239000
https://github.com/NiyunZhou/The21-dayExpendables/issues/15
https://github.com/jinwchoi/awesome-action-recognition#action-recognition
作者:王灿 中国科学技术大学研究生二年级在读 研究方向:迁移学习 情感计算 ,曾在 ACMMM(CCF 推荐 A 类)发表论文一篇