文章目录
0. 前言1. 双流法1.2. 双流法第一篇1.2. 双流法+新特征融合方式
2. 3D卷积2.1. C3D2.2. I3D + Kinetics2.3. R(2+1)D2.4. SlowFast
3. 2D 卷积3.1. TSN3.2. TSM
4. 其他4.2. ECO4.3. Non-local
0. 前言
本文基本上就是2019年之前的论文。行为识别模型主要分为三类(好像一般大家都这么分,但我感觉不是特别合理……)
3D卷积
传统图像网络的输入是 (batch_size, h, w, 3),而视频数据相对于图像数据多了时间纬度,所以一般行为识别网络的输入是 (batch_size, t, h, w, 3)因为多了一维,就将普通2D卷积用3D卷积来替代,所以所谓的3D卷积就是指同时对 spatial-temporal 纬度进行卷积操作。优点:相对来说,能够较好的提取时间维度的特征(也就是提取不同帧的数据)。缺点:3D卷积的参数数量庞大、训练/预测时消耗的计算资源较多。 2D卷积
上面说了3D卷积存在消耗计算资源多的问题。如果能用2D卷积来提取时间特征,那么就既能够满足行为识别模型训练的需求,也能满足降低行为识别模型计算资源消耗的目标。 双流法(感觉双流法与2D/3D卷积并不冲突)
双流法指的是模型的输入包括了RGB帧也包括光流数据,其实中间提取光流特征的网络与提取RGB帧信息的网络是类似的……感觉双流法与2D/3D卷积并不冲突,提取光流/RGB流特征就用的是3D/2D网络。 论文分类与简介
双流法:就是引入了双流,以及探索双流融合方式。因为用不上所以不列了。3D卷积
C3D:3D版VGG。I3D:提出Kinetics-400数据集,基于InceptionV1的3D卷积网络。。R(2+1)D:使用tx1x1+1xdxd卷积替代txdxd卷积,使用ResNet作为Backbone。SlowFast:同一个模型中有多个分支(slow分支与fast分支,分别对应不同的帧率),每个分支都是I3D模型。 2D卷积
TSN:将视频分为N个部分、分别提取其中一帧作为模型输入,对每一帧分别使用2D CNN提取特征,融合(如avg)后使用分类网络判断行为类别。TSM:在TSN的基础上,对中间部分特征图(shape为NxTxHxWxC)的 T 维度上进行shift操作。 其他:
ECO:先2D提取特征再3D融合,提出了一种online video提取帧的新方法。Non-local:类似于attention,增加“感受野”
1. 双流法
1.2. 双流法第一篇
2014年6月arxiv: Two-Stream Convolutional Networks for Action Recognition in Videos,论文解读,Github要解决什么问题?
引入深度学习后,双流法处理行为识别的开山之作。如何通过卷积神经网络同时获取时间(光流)、位置信息(普通食品)。 用了什么方法解决?
引入了光流(Optical flow),用于表示时间信息。对于RGB/光流都是通过2D卷积提取特征。最后融合也比较直接。 效果如何?
当时在两个小数据集上达到SOTA。 还存在什么问题?
早期论文了,也没啥花头。光流需要实现处理得到,总体结构应该不是end-to-end的。从后一篇论文看,融合方式太过直接,有上升空间。 其他:光流相关内容需要进一步理解。
1.2. 双流法+新特征融合方式
2016年4月,题外话,看着像实验报告,不像论文arxiv: Convolutional Two-Stream Network Fusion for Video Action Recognition,论文解读,论文解读2,Github要解决什么问题?
之前的双流模型,特征融合过于简单,希望找到更好的融合方式。 用了什么方法解决?
就是各种实验,找到合适的方式……下图是几处可以特征融合的位置。
下图是几种特征融合的方式
下图是论文使用的特征融合模型结构,主要就是利用了3D卷积和3D池化进行特征融合,融合位置如上上图。
效果如何?
在某几个数据集上达到SOTA。 还存在什么问题?
还是感觉之前的模型过于简单了……
2. 3D卷积
2.1. C3D
2014年12月arxiv: Learning Spatiotemporal Features with 3D Convolutional Networks,论文解读,Github要解决什么问题?
利用3D卷积来处理视频数据。 用了什么方法解决?
利用3D卷积(即C3D)来提出视频的特征。将特征利用线性回归来分类,就能得到很好的效果。 效果如何?
这个应该是3D卷积第一次用来做行为识别吧,当时效果比较惊艳。 还存在什么问题?
早期模型了,现在看没啥花头,感觉就是用3D卷积谢了一遍VGG。 看了源码后发现,一切思想都很朴素:
输入图像的尺寸与图像分类一样,是固定的,比如 batch_size * clip_len * img_height * img_width * 3。这个图像序列的获取是有一定讲究的,对于一个视频要至少获取 clip_len 帧图像,一般都是间隔着获取。由于输入尺寸是固定的,所以得到的最终特征图尺寸也是固定的,可以reshape到一个固定的向量。通过这个向量直接通过全连接层即可获得结果。
2.2. I3D + Kinetics
2017年5月arxiv: Quo Vadis, Action Recognition A New Model and the Kinetics Dataset,论文解读,mmaction有实现要解决什么问题?
当时的行为识别数据集都太小。2D卷积无法提取时间特征。 用了什么方法解决?
提出Kinetics数据集。分析当时行为识别模型的结构,提出自己的结构。
(a) CONV+LSTM:融合单帧特征的一种方法就是LSTM。(b) 普通3D卷积:比较直接,仅利用了RGB图像,而没有利用光流。© 普通双流:对RGB和光流都利用2D卷积,然后再进行特征融合。(d) 作者提出的一种新结构:对于每一帧都利用2D卷积,然后最终将每一帧的信息融合,再利用3D卷积。(e) I3D结构:对RGB与光流分别进行3D卷积,然后再融合结果。 I3D模型本身使用的是InceptionV1的结构,而不是ResNet
效果如何?
在HMDB-51与UCF-101中,I3D都达到了SOTA。大数据集,有点训练不动。 还存在什么问题?
3D卷积都比较费时间、参数多,而且空间特征提取的并不太好。现在所谓的I3D模型好像都是基于ResNet的,跟I3D论文这里的好像没太多关系。
2.3. R(2+1)D
17年11月arxiv: A Closer Look at Spatiotemporal Convolutions for Action Recognition,论文解读,Github要解决什么问题?
使用3D卷积网络实现行为识别模型(I3D)虽然在当时达到了SOTA,但相比于iDT等非深度学习方法, 准确率提升的不多。当时的3D卷积都比较直白。 用了什么方法解决?
探索了一些3D卷积结构,或者替代3D卷积的结构。
所谓的(2+1)D其实就是用 tx1x1 卷积 + 1xdxd卷积替代普通的 txdxd 卷积。
R3D结构,估计R(2+1)D结构也与这个类似
效果如何?
当时在同等算力下,(2+1)D的效果最好。 还存在什么问题?
早起模型啦,模型总体结构还是比较朴素的。但(2+1)D这个结构在现在还是比较常见的。
2.4. SlowFast
arxiv: SlowFast Networks for Video Recognition,译文,论文解读,Github要解决什么问题?
intuition:图像在x,y两个维度上是均匀的,但在视频x,y,t中并非如此,且慢动作比快动作更可能发生。从上面的思路可以看出,那要如何同时处理时间维度和空间维度和空间维度的信息呢。双流法的一个缺陷:没有考虑不同速率的关系。 用了什么方法解决?
提出了SlowFastNet,分为两个分支,即Slow分支和Fast分支。
Slow分支:帧率较慢,用于获取语义信息(semantic information),猜测就是空间信息,计算量大。Fast分支:帧率较快,用于获取去时间信息,计算量小,大约是总体计算量的20%。 效果如何?
发表时认为在四个数据集 kinetics400/600, Charades, AVA上都达到SOTA。其实该论文精读不如TSM,但这篇论文的“故事”更好理解。 还存在什么问题?
卡多,牛逼,野兽派。
3. 2D 卷积
3.1. TSN
2016年8月arxiv: Temporal Segment Networks: Towards Good Practices for Deep Action Recognition,论文解读,mmaction有实现要解决什么问题?
当时的模型都对短视频比较友好,对长视频不太行。 用了什么方法解决?
提出了TSN结构,主要包括了Segments和Snippets两个概念。
首先将整段视频分为若干个Segments,再将每个segments中分为若干snippets,将这些snippets作为输入。从下图中可以看出,就是利用了多个双流结构,然后融合结果。 对于模型的输入,做了多种试验。
效果如何?
当时在两个小数据集上达到了SOTA。 还存在什么问题?
显然,双流模型不是end-to-end的。
3.2. TSM
2018.11arxiv: TSM: Temporal Shift Module for Efficient Video Understanding,论文解读,Github要解决什么问题?
视频行为识别需要考虑 temporal modeling。2D卷积虽然需要的操作量少但无法直接考虑 temporal modeling,3D卷积虽然能够考虑temporal modeling但参数量、计算量大。 用了什么方法解决?
提出了TSM结构,即利用了2D卷积的参数、操作量少,又兼顾了3D卷积的temporal modeling。TSM的结构如下图。
(b) 是离线模式,即在预测当前帧的信息时,会利用到未来的帧。© 是在线模式,即预测当前帧的时候,不会利用到未来的帧。 具体TSM的结构,利用了(b)形式,即残差形式。
效果如何?
查资料的时候看到不少,说这个网络效果好,但感觉有点奇怪
下面这个图霸气,纵坐标是精度,横坐标是计算量,圆圈大小是参数数量,可以看到TSM是啥都好……
还存在什么问题?
只知道效果好,但总感觉有点怪(我看得少,没看出来)
4. 其他
4.2. ECO
18年4月arxiv: ECO: Efficient Convolutional Network for Online Video Understanding论文解读,论文解读2,Github(caffe),Github(PyTorch)要解决什么问题?
当时常见的模型不会同时考虑几秒内不同帧的关系。当时常见的模型(主要指的是双流法)的视频预处理较慢,阻碍了实时视频理解。 用了什么方法解决?
提出了一种新结构,可融合处理视频不同时间点的帧信息。总体流程是:
第一步,将视频微分N段,每一段中随机选取一帧内容,共N帧信息。第二步,对N帧内容分别进行2D卷积进行特征提取(weight sharing),将结果concat后获取4D特征。第三步,将4D特征作为输入,进行3D卷积。 结构类型分为两种,即ECO Lite和ECO Full
提出了一种实时视频分类的方法,这种方法模型结构并没有变化,有变化的只是获取视频帧的过程。
效果如何?
准确率与当时的SOTA差不多(略差一点),但速度快了10-80倍。 还存在什么问题?
感觉这些网络都是以224*224的图像作为输入,会不会对一些距离镜头较远的动作检测效果不佳?
4.3. Non-local
17年11月
arxiv: Non-local Neural Networks,论文解读(强烈推荐),Github
要解决什么问题?
主要提出了local/non local两类操作的定义。
local 操作
每次只能处理一个邻域内的数据(process one local neightborhood at a time)普通的CNN/RNN都属于local操作主要缺陷有:计算效率低(computationally inefficient),优化较为困难(cause optimization difficulties),使得multihop dependency modeling(数据需要前后依赖的情况)更困难。 non local 操作:
主要优势:能够获取long-range dependencies,效率高且需要的层数少,输入与输出的尺寸相同(可较为方便地嵌入模块)。
用了什么方法解决?
定义了 non local 操作:
参考下论文解读中的描述,很清楚了:
上面的公式中,输入是x,输出是y,i和j分别代表输入的某个空间位置,x_i是一个向量,维数跟x的channel数一样。f是一个计算任意两点相似关系的函数,输出的是标量。g是一个映射函数,将一个点映射成一个向量,可以看成是计算一个点的特征,比如最简单的1*1卷积。也就是说,为了计算输出层的一个点,需要将输入的每个点都考虑一遍,而且考虑的方式很像attention:输出的某个点在原图上的attention,而mask则是相似性给出。参看下图: 具体实现方式参考下图:
Softmax分支代表的是mask。另外一路代表的就是transformed image。
效果如何?
在当时,进将non-local作为一个trick添加到行为识别网络中就能达到SOTA的效果。
还存在什么问题?
这玩意是个即插即用的小模块,能提点,但性能就……