论文题目:Single Shot Temporal Action Detection
论文地址:https://arxiv.org/pdf/1710.06236.pdf
开源代码:https://github.com/HYPJUDY/Decouple-SSAD
概述
在 2017 年,T. Lin 等人提出了 single shot temporal action detection(SSAD)模型,整体结
构类似于 SSD,该模型先使用预训练好的模型对视频序列提取特征得到特征序列,再使用特征序列作为 SSAD 模型的输入,最终 SSAD 模型输出 TAL 的结果。特征提取部分使用 two stream network、中的 spatial network 提取单帧特征以及其中的 temporal network 来提取光流特征,以及 C3D网络来提取视频片段特征。每个用作特征提取的视频帧单元称为一个 snippet,包含上述提到的图像帧、光流帧、视频片段。之后,拼接 3 个特征提取网络的最后一层, 代表输入snippet 对应的每个动作的概率的输出,作为后续使用的特征,该特征被称作 SAS(Snippet Action Score) 特征。最终,对于一个包含 T 帧图像的视频,可以得到等长的 SAS 特征序列。在获得长度为 T 的特征序列后,就可以将其用作 SSAD 模型的输入。SSAD 模型是一个全部由一维时序卷积构成的网络。主要包括三种卷积层:base、anchor、prediction layer。Base layers 的作用为缩短特征序列的长度,并增大特征序列中每个位置的感受野。anchor layers 继续缩小特征序列的长度,且输出的时间维度的金字塔特征序列中的每个位置都被关联了多个尺度的 anchor instances。最后再通过 prediction layer,来获取每个 anchor instances 所对应的边界坐标偏移量、重叠置信度以及类别分类结果。
方法简介
该图为论文首页图,展示了本文提出方法的大致流程,即先使用预训练好的模型对视频序列提取特征得到特征序列,再使用特征序列作为SSAD模型的输入,最终SSAD模型输出detection的结果。
该图则更为细致得展示了本文方法的几个主要流程。即(1)特征提取;(2)SSAD模型; (3)后处理(训练或测试)。下面对各部分进行简要介绍。
特征提取
本文的特征提取使用了two stream network中的spatial network以及temporal network(网络结构均为VGG16),以及基于3D CNN的C3D网络来提取特征。
所以,对于视频片段
S
t
=
(
x
t
,
F
t
,
X
t
)
S_{t}=\left(x_{t}, F_{t}, X_{t}\right)
St=(xt,Ft,Xt) :
x
t
x_{t}
xt 是单张图片,使用Spatial Network进行片段分类,侧重利用空间特征,输出的概率预测结果记做
p
S
,
t
p_{S, t}
pS,t ,长度为
K
+
1
,
K
K+1 , K
K+1,K 是动作总类别数量,
+
1
+1
+1 表示背景类别
F
t
F_{t}
Ft 是堆叠的光流数据,共10帧,使用Temporal Network进行片段分类,侧重利用时序运动特征
p
T
,
t
p_{T, t}
pT,t ,长 度为
K
+
1
,
K
K+1 , K
K+1,K 是动作总类别数量,+1表示背景类别
X
t
X_{t}
Xt 是堆叠的图像数据,共16帧,使用C3D Network进行片段分类,侧重利用时空特征
p
C
,
t
p_{C, t}
pC,t ,长度为
K
+
1
,
K
K+1, K
K+1,K 是动作总类别数量,+1表示背景类别
每个用作特征提取的视频帧单元称为一个snippet,包含图像帧以及光流等,具体的定义在论文中给出。我们拼接3个网络的最后一层输出(该层输出即代表输入snippet对应的每个动作的概率)作为后续使用的特征,该特征记作SAS(Snippet Action Score)特征。最终,对于一个包含T 帧图像的视频,我们可以得到等长的SAS特征序列。该特征序列实际上就是一个二维的矩阵。
SSAD 模型
在获得长度为T的特征序列后,就可以将其用作SSAD模型的输入。SSAD模型是一个全部由时序卷积(一维卷积)构成的网络。主要包括三种卷积层:base, anchor, prediction layer。 Base layers 的作用为缩短特征序列的长度,并增大特征序列中每个位置的感受野。在实验中,我们尝试了多种base layers的结构,如下图所示。最终,通过实验我们选择了结构B。可以看出,conv和pool均选用了较大的kernel size。在base layers中,我们发现使用大卷积核比使用多层小卷积核进行卷积能获得更好的效果。
接下来SSAD模型中继续使用anchor layers 来缩小特征序列的长度。
使用1D时序卷积进一步缩小特征图,采用卷积核大小为3,步长为2,输出通道数为512的1D卷积操作。经过Conv-A1、Conv-A2、Conv-A3之后,时间维度大小分别减小为原来的1/32、1/64、1/128。这三种尺度的Anchor Layer输出特征使得SSAD网络可以多种尺度的特征图。在每种尺度的特征图的每个位置(cell)使用多种尺度(尺度是对于时间维度来说的)anchor box。Conv-A1层具有更大的特征图和更小的感受野,所以在Conv-A1特征图上的anchor box负责检测short action,Conv-A2检测middle action,Conv-A3检测long action,这点和YoloV2的多个检测头类似。
anchor layer 输出的特征序列中的每个位置都被关联了多个尺度的anchor instances(一个instance代表视频中动作发生的那一段时间,可以理解为一个一维的default box)。之后,再通过prediction layer,来获取每个anchor instances所对应的 坐标偏移量,重叠置信度,以及类别分类结果。通过多层时间尺度不断缩小的特征序列,SSAD模型可以获得由小到大各个时间尺度的action instance预测。
训练与预测
训练
训练时,首先将获得的anchor instances用坐标偏移量进行修正,再与 ground truth instances 进行匹配,来确定anchor instances是正样本还是负样本。具体的匹配策略见论文。SSAD模型使用如下的损失函数进行模型训练,主要包括分类损失,重叠置信度回归损失,边界回归损失以及正则化项。
L
=
L
class
+
α
⋅
L
o
v
e
r
+
β
⋅
L
l
o
c
+
λ
⋅
L
2
(
Θ
)
L=L_{\text {class }}+\alpha \cdot L_{o v e r}+\beta \cdot L_{l o c}+\lambda \cdot L_{2}(\Theta)
L=Lclass +α⋅Lover+β⋅Lloc+λ⋅L2(Θ)
测试
测试时,同样先将获得的anchor instances用坐标偏移量进行修正,再用下式获得每个anchor instance的最终分类结果。
p
final
=
p
over
′
⋅
(
p
class
+
p
‾
sas
)
\boldsymbol{p}_{\text {final }}=p_{\text {over }}^{\prime} \cdot\left(\boldsymbol{p}_{\text {class }}+\overline{\boldsymbol{p}}_{\text {sas }}\right)
pfinal =pover ′⋅(pclass +psas )
在获得了一段视频所有的预测action instance后,本文采用NMS(非极大化抑制)对重叠的预测进行去重。从而获得最终的temporal action detection结果。