今天是国际海盗黑话推广日。首先,你要给自己起一个海贼的名字(比如戈尔·D·罗杰;蒙奇·D·路飞;马歇尔·D·帝奇;索隆;山治;娜美;罗宾;乔巴等等)。
然后,熟悉海贼黑话。就像这样:
Ahoy, me hearties! Ready yer sea legs and leave the landlubbers behind. And don't ye forget, every September 19 be International Talk Like a Pirate Day!
~ Careena the Sea Wench
所以今天禅师想对大家说:今天的第二条有价值99元的福利!
全文大约3000字。读完可能需要好几首下面这首歌的时间
?
我们要判断一个人的动作,自然不能单从一张静态的图片来考量,所以动作识别指的是判断一段视频中人的行为的类别(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种动作类别。
方法概述
在深度学习还没有火起来之前,大多数的传统的动作识别的算法都可以分为三个步骤:
再后来,人们对上述方法进行了改进。在第一步过程中,使用 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(将不同帧内容逐渐融合)。其中,对每列对应的网络,使用共同的网络结构和参数。其中每种操作的作用如下:
由于在训练过程中因为比较耗时,作者提出了一种 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 网络结构。
尽管相比于前一个方法,该方法捕获到了局部的动作信息,但是仍然有很多缺点:
后来又有非常多的方法基本都是基于这两种方法进行改进的,如:
细致的总结一下,实际上这些论文都是基于以下模型设计实现的:
该图来自于 Paper:Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset
其中K表示一个视频的总帧数,N 表示该视频中某子集(相邻的一些帧)的帧的数目。
下面我们来介绍上面提到的九种模型。
论文题目 | 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图像作为输入和使用光流信息输入的差别,发现结合两者,对结果附上权重(类似于集成了),会有更好的结果。 |
存在问题 | 首先既然将视频剪辑得到一些帧,就势必存在假标记的问题;无法捕获长时间的信息;使用光流意味着必须提前手动处理特征。 |
论文题目 | 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 依然适用,且依然有很好的结果。最终的结果依然使用平均取值的方法。 |
存在问题 | 计算量是最大的问题,当视频帧数多时更是如此。比如对于医学图像的识别。 |
论文题目 | 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年研究的一个热点。 |
注意力机制图示:
论文题目 | 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,作者提前进行了空间和时间特征的融合,可以保证更好的从空间到时间的映射关系。 |
上图为本文提出的两种融合时间和空间信息的策略。
论文题目 | 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。 |
论文题目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 类型的网络:
论文题目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。
论文题目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 是本文重大的贡献。
论文题目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网络的参数固定,最终两者提取出来的特征表示会相近(实际上类似于对抗的思想)。本文最大的贡献就是该迁移方法的提出。