本篇文章是基于《R-C3D:Region Convolutional 3D Network for Temporal Activity Detection》的详解,欢迎批评指正。
动作检测(Action Detection)主要用于给分割好的视频片段分类,但在实际中视频多是未分割的长视频,对于长视频的分割并且分类任务叫做时序动作检测(Temporal Action Detection)。给定一段未分割的长视频,算法需要检测视频中的动作片段,包括开始时间、结束时间和动作类别。一段视频可以包含一个或多个相同或不同的动作片段。
Action Recognition和Temporal Action Detection之间的关系和Image Classification和Object Detection之间的关系很像。基于Image Classification产生了例如VGG等网络模型,这些模型在Object Detection中提取目标特征提供很大帮助。同样,Action Recognition相关的模型(例如C3D等)也被广泛用于Temporal Action Detection中提取相关动作特征。
由于Temporal Action Detection和Object Detection存在相似性,很多Temporal Action Detection方法采用与Object Detection相似的框架(例如R-C3D采用与Faster R-CNN相似的结构)。
时序动作检测难点较多,解决方法主要针对这些难点。1)目标检测边界框很明确,但时序动作边界比较模糊;2)时序动作检测必须将静态图像(帧图像)结合时序信息,只使用静态图像特征不可行;3)动作时间跨度非常大,少则1s,多则上百秒。
时序动作检测关键在于拥有高质量的时序片段和准确的动作分类。很多方法使用Proposal和Classification结合(例如R-C3D),对于这类方法,在保证平均召回率情况下,要尽量减少Proposal数量,提高速度。对于所有方法,获得准确的时序动作边界和分类都很重要。
时序动作检测主要用于对连续的、未分割的视频进行包含动作(帧)的裁剪,捕获动作类别,并定位出动作的开始和结束时间。本文提出的方法简称为“R-C3D”,它是一个端到端的网络架构,每秒可以处理569帧。
对于时序动作检测问题,已经存在的方法主要基于目标检测框架,例如使用滑动窗口等,本文使用的方法类似于Faster R-CNN框架,它是一个端到端的网络,有一个类似RPN网络的结构,用于提取视频的Proposal(给出视频段中心和长度)。3D RoI结构可以将任意尺寸特征图转变为相同尺寸特征图,便于输入全连接结构。同样类似于Faster R-CNN,网络框架同时优化Proposal Generation和Activity Classification。输入视频可以是任意长度,需要检测视频段也可以是任意长度。
下图1可以清晰看出网络结构信息。输入为视频流(帧),经过C3D(类似VGG、ResNet等特征提取网络,这里对视频也就是四维数据提取特征,增加特征L即视频帧维度)网络提取特征图。然后将提取的特征经过动作提议网络得到一系列粗略的动作序列,包含提取到的动作序列的中心点和长度。最后,经过分类网络和精调,得到动作序列的具体开始和结束时间以及动作类别。
图1
详细的R-C3D结构如下图2所示,此网络主要包含三个部分:共享的3D卷积特征提取器、时序提取网络和动作分类及精调网络。时序提取网络和动作分类网络共享了由3D卷积特征提取器提取到的特征。
图2
3D Convolutional Feature Hierarchies(3D卷积特征层次结构)
此部分采用C3D网络架构提取视频序列帧的特征,类似于2D卷积,3D卷积的形象描述如下图3(c)所示。3D卷积对H、W和L三个维度都进行卷积,而2D卷积(多通道(b))只对H和W两个维度进行卷积,因此3D卷积得到的是三维输出,而2D卷积得到的是二维输出。
图3
模型的输入是视频帧序列$\mathbb{R}^{3\times L\times W\times H}$,经过C3D提取特征图为$C_{conv5b}\in \mathbb{R}^{512\times \frac{L}{8}\times \frac{H}{16}\times \frac{W}{16}}$,此特征在提取网络和分类网络中共享(如图2红色箭头所示)。其中H=W=112,L长度任意,只要满足内存容量即可。
Temporal Proposal Subnet(时序提议子网络)
顾名思义,就是提取出上面特征图中(视频流)包含动作提议的视频帧段,类似于Faster R-CNN中RPN提取可能包含目标的锚框。这个过程是比较粗略的,简单的定位可能出现动作的视频段,标识出动作段的中心和长度,后面进行精调。具体流程见下图4。
图4
首先,接收上个C3D网络提取的特征图作为输入。然后,假设anchor(动作片段,类似RPN产生的锚框)均匀分布在L/8的时间域上,时间域上每个位置生成K个不同长度的候选时序anchor,总共有(L/8)×K个anchor。为了获得每个时间位置的特征,预测这些锚框,首先一个3D卷积过滤器3×3×3来扩展时序感受野。然后下采样空间维度,使用3D最大池化$1\times \frac{H}{16}\times \frac{W}{16}$得到特征图$C_{tpn}\in R^{512\times \frac{L}{8}\times 1\times 1}$。每个时序位置上的512维的特征向量用来预测中心位置和长度$\left \{ c_{i},l_{i} \right \}$的相对偏移$\left \{ \delta c_{i},\delta l_{i} \right \}$,它也预测了此提议(Proposal)是动作还是背景。通过在$C_{tpn}$上增加两个1×1×1卷积预测提议偏移和提议分数。对于众多的提议(L/8)×K个,本文选择IoU大于0.7作为正提议,IoU小于0.3作为负提议,比例1:1,其他抛弃。
Activity Classification Subnet(动作分类子网络)
动作分类子网络主要包含三个功能:从上一阶段选择出部分提议、对于选择的提议进行3D RoI(类似于2D RoI)池化挖掘固定尺寸特征和对于选中的提议基于特征整合进行动作分类以及边界回归(调整动作视频段中心和长度)。NMS消除了高度重叠提议和低提议分数的情况,使得提议数量更少质量更高,提高效率,见图5。
图5
选择的提议是任意长度的,为了平铺(Flatten)后得到固定维度的向量使得与全连接层连接,使用了3D RoI池化层。输入是共享的特征$C_{conv5b}\in \mathbb{R}^{512\times \frac{L}{8}\times 7\times 7}$,输出为512×1×4×4。最后,将这些特征喂入两个全连接层,通过分类层进行分类,通过回归层调整这些提议的开始和结束时间。
提议与动作有最高的IoU并且IoU大于0.5时提议定义为此动作,提议和任何GT动作的IoU都低于0.5是背景,正负样例比1:3。
Optimization(优化)
本文对分类和回归任务共同优化,分类使用Softmax损失函数,回归使用平滑的L1损失函数。目标函数如下:
$N_{cls}$和$N_{reg}$分别代表batch size和anchor的数量,$a_{i}$是提议或动作预测的可能性,$a_{i}^{*}$代表相应的GT,$t_{i}=\left \{ \delta \hat{c_{i}},\delta \hat{l_{i}} \right \}$表示anchor相对偏移,$t_{i}^{*}=\left \{ \delta c_{i},\delta l_{i} \right \}$代表对应坐标转换的GT,坐标转换如下:
$c_{i}$和$l_{i}$分别表示anchor中心位置和长度,而$c_{i}^{*}$和$l_{i}^{*}$分别表示相应的GT。
上面的损失函数同时运用在时序提议网络和动作分类网络。提议网络中,二元损失预测是否包含动作,回归损失优化提议和GT相对偏移;分类网络中,多元损失函数预测提议具体类,类个数为动作类个数加1(背景),回归损失优化动作和GT相对偏移。同时优化两个子网络的四个损失函数。
R-C3D动作预测分为两步:首先,提议子网络产生候选提议并且预测开始和结束时间以及每个提议分数;然后,通过NMS重新调整提议,被选择的提议喂入分类网络进行分类,预测提议的动作边界通过回归层重现调整。
数据集采用THUMOS14,网址为https://www.crcv.ucf.edu/THUMOS14/download.html。还有ActivityNet和Charades数据集,在论文中也有使用。THUNOS14数据分为训练集、背景、验证集和测试集,我们只使用验证集和测试集,验证集充当训练集,测试集就充当测试集。其中训练集包含200个视频数据,测试集包含213个视频数据,其中总共有20个动作类。每个视频可能包含一个或多个相同或不同的动作类。下图6是数据集的直观表示。具体的数据集使用方法我会在使用的代码实现中详细描述。
验证的主要标准是mAP(平均精度)和检测速度(fps,每秒钟处理多少帧图像)。
图6
代码的使用方法以及数据集的介绍我会在日后具体介绍。