摘要
SSN(structured segment network,结构化的段网络)通过结构化的时间金字塔对每个行为实例的时间结构进行建模。金字塔顶层有decomposed discriminative model(分解判别模型),包含两个分类器:用于分类行为(针对recognition)和确定完整性(针对localization)。集成到统一的网络中,可以以端到端的方式高效地进行训练。
为了提取高质量行为时间proposal,采用temporal actionness grouping (TAG)算法。
在THUMOS14和ActivityNet数据集上取得了state-of-the-art的结果。
代码开源在:http://yjxiong.me/others/ssn
简介
目前,精确时间定位的一大挑战就是提取的时间proposal中存在大量未完成的行为片段。作者认为,检测器需要具备识别不同阶段(stage)的能力,比如:starting, course, and ending。见下图1,上面的那个检测器未用stage structures来构建特征,当视频片段与“翻跟斗”动作类似即可产生高响应。下面的SSN检测器通过结构化时间金字塔pooling利用了stage structures(starting, course, and ending)。
图1 在行为检测中考虑阶段结构(stage structures)的重要性
SSN的优势体现在:
(1)提供了一个有效的机制来建模活动的时间结构,从而区分完整和不完整的proposal;
(2)可以以端到端的方式有效地学习,并且一旦训练完毕,就可以对时间结构进行快速推测;
(3)该方法在主流数据集(THUMOS14和ActivityNet)上实现了卓越的检测性能
SSN介绍
SSN框架示意图如下图2所示:
图2 SSN框架概览
如图2,候选区域用绿色方框圈出,为了数据增强,需要扩展为黄色方框区域。对于每个proposal,结构时间金字塔池化(structured temporal pyramid pooling ,STPP)过程:
(1)扩展后的proposal被分为starting(橙色)、course(绿色)和ending(蓝色)三个阶段,在course阶段还构建了一个具有两个子部分的额外层次的金字塔。
(2)来自CNN的特征集中在这五个部分中,并连接起来形成全局区域表征。
(3)activity分类器和completeness分类器处理区域表征来获得行为概率和完成程度概率。这两个概率联合决定了一个特定的proposal是否为positive instance。
稀疏片段采样策略(sparse snippet sampling strategy):在训练期间,从均匀分割的片段中稀疏地采样 L=9L=9 个片段来近似密集时间的金字塔池。
Three-Stage结构
考虑一个给定的含
N
\ N
N个proposal的集合:
P
=
p
i
=
[
s
i
,
e
i
]
i
=
1
N
P={p_i=[s_i,e_i]}_{i=1}^N
P=pi=[si,ei]i=1N
其中,
s
i
\ s_i
si 为开始时间,
e
i
\ e_i
ei 为结束时间,则持续时长
d
i
=
e
i
−
s
i
\ d_i=e_i−s_i
di=ei−si。
扩展proposal为 p i ′ = [ s i ′ , e i ′ ] \ p_i'=[s_i',e_i'] pi′=[si′,ei′],其中, s i ′ = s i − d i 2 , e i ′ = e i + d i 2 \ s_i'=s_i−\frac {d_i} {2},e_i'=e_i+\frac {d_i} {2} si′=si−2di,ei′=ei+2di。
那么三个阶段(s,c,e)可以表示为:
p
i
s
=
[
s
i
′
,
s
i
]
,
p
i
c
=
[
s
i
,
e
i
]
,
p
i
e
=
[
e
i
,
e
i
′
]
p_{i}^{s}=\left[s_{i}^{\prime}, s_{i}\right], \quad p_{i}^{c}=\left[s_{i}, e_{i}\right], \quad p_{i}^{e}=\left[e_{i}, e_{i}^{\prime}\right]
pis=[si′,si],pic=[si,ei],pie=[ei,ei′]
即扩展后的proposal变为原来长度的2倍,前后各增加半个持续时长。
STPP
STPP(Structured Temporal Pyramid Pooling)灵感源于物体识别和场景分类中的spatial pyramid pooling。
给定一个扩展后的proposal,其包含三个阶段
p
i
s
,
p
i
c
,
p
i
e
\ p_{i}^{s}, p_{i}^{c}, p_{i}^{e}
pis,pic,pie,分别计算特征向量
f
i
s
,
f
i
c
,
f
i
e
\ f_{i}^{s}, f_{i}^{c}, f_{i}^{e}
fis,fic,fie。具体来说,对于某个阶段,将其分为
L
\ L
L 级时间金字塔,每一级均可以获得一个特征向量
v
t
\ v_t
vt,并且每一级被均匀划分为
B
l
\ B_l
Bl 部分,对于第 i 部分的第 l 级(其间隔为
[
s
l
i
,
e
l
i
]
\ [s_{li},e_{li}]
[sli,eli]),定义**池化特征(pooled feature)**为:
u
i
(
l
)
=
1
∣
e
l
i
−
s
l
i
+
1
∣
∑
t
=
s
l
i
e
l
i
v
t
u_{i}^{(l)}=\frac{1}{\left|e_{l i}-s_{l i}+1\right|} \sum_{t=s l i}^{e l i} v_{t}
ui(l)=∣eli−sli+1∣1t=sli∑elivt
则这个阶段的总体表征可以通过串联得到:
f
i
c
=
(
u
i
(
l
)
∣
l
=
1
,
…
,
L
,
i
=
1
,
…
,
B
l
)
\ f_i^c=(u_i^{(l)}|l=1,…,L,i=1,…,B_l)
fic=(ui(l)∣l=1,…,L,i=1,…,Bl)
对于course阶段,采用2级金字塔:L=2,B1=1,B2=2;对于starting和ending阶段,采用1级金字塔。
Activity和Completeness分类器
**一个activity分类器(A)**可以将输入proposal分为 K+1类(K 类动作,1 个背景类),仅在course阶段中进行分类,预测基于阶段级特征 f i c \ f_i^c fic。
K个completeness分类器(C)均为2值分类器,每个对应于一个行为类,预测基于STPP算出的全局特征 f i s , f i c , f i e \ f^s_i,f^c_i,f^e_i fis,fic,fie。
两种分类器部署在高级特征之上。对于一个proposal: p i \ p_i pi,A分类器给出一个经过softmax后的向量,条件分布表示为 P ( c i ∣ p i ) \ P(c_i|p_i) P(ci∣pi),其中 cici 表示类别。对于每个类别 k,对应的 Ck分类器给出一个概率值,分布为:P(bi|ci,bi),bi指示是否完成。
定义统一分类损失(unified classification loss):
L
c
l
s
(
c
i
,
b
i
;
p
i
)
=
−
log
P
(
c
i
∣
p
i
)
−
1
(
c
i
≥
1
)
log
P
(
b
i
∣
c
i
,
p
i
)
L_{c l s}\left(c_{i}, b_{i} ; p_{i}\right)=-\log P\left(c_{i} \mid p_{i}\right)-1_{\left(c_{i} \geq 1\right)} \log P\left(b_{i} \mid c_{i}, p_{i}\right)
Lcls(ci,bi;pi)=−logP(ci∣pi)−1(ci≥1)logP(bi∣ci,pi)
训练时,关注三种proposal样本:
(1)positive proposals(ci>0,bi=1):与最接近的groundtruth的IOU至少为0.7
(2)background proposals(ci=0):不与任何groundtruth重叠
(3)incomplete proposals(ci>0,bi=0)):其80%包含在groundtruth中,但IOU小于0.3,仅仅包含gt的一小部分
位置回归和多任务损失
通过位置回归来优化proposal本身的时间区间。作者设计了一组位置回归器 { R k } k = 1 K \ \left\{R_{k}\right\}_{k=1}^{K} {Rk}k=1K ,每个针对一个行为类。和RCNN的设计类似,将其适应到一维时域。
具体来说,对于一个positive proposals: p i \ p_i pi,回归区间中心位置(interval center)μi和跨度(span)ϕi(以对数刻度)的相对变化。
定义多任务损失函数为:
L
c
l
s
(
c
i
,
b
i
;
p
i
)
+
λ
⋅
1
(
c
i
≥
1
&
b
i
=
1
)
L
reg
(
μ
i
,
ϕ
i
;
p
i
)
L_{c l s}\left(c_{i}, b_{i} ; p_{i}\right)+\lambda \cdot 1_{\left(c_{i} \geq 1 \& b_{i=1}\right)} L_{\text {reg }}\left(\mu_{i}, \phi_{i} ; p_{i}\right)
Lcls(ci,bi;pi)+λ⋅1(ci≥1&bi=1)Lreg (μi,ϕi;pi)
这里,
L
r
e
g
\ L_{reg}
Lreg 使用平滑
L
1
\ L_1
L1 损失函数(Smooth
L
1
\ L_1
L1 loss function)
参考:https://blog.csdn.net/zhang_can/article/details/79782387