介绍

主要贡献:

  1. 提出一种新奇的视频时序行为检测方法:AutoLoc,它能仅用视频级的标注预测出每个行为的时间边界。
  2. 提出OIC损失(out-inner-contrastive loss)来自动发现训练模型所需的supervision,并证明该损失是可微的。
  3. 在两个基准数据集上证明了AutoLoc的有效性:THUMOS14和ActivityNet。

使用阈值进行时序行为检测(UntrimmedNet、Hide-and-Seek等)会对CAS(Class Activation Sequence)中的噪声不鲁棒:当low activations包裹着high activations时,阈值过大可能会导致一个行为被过度分割为几段,阈值过小可能导致检测出的行为前后含有不相关的背景事件。

OIC Loss

请输入图片描述
AutoLoc能直接预测每个行为的中心位置和持续时间从而预测出行为边界。为了对其进行训练,我们提出OIC Loss来提供segment-level的supervision。

对于每个预测出的segment $\phi$,我们可以计算出它的OIC Loss。每个segment $\phi$包括一个inner boundary $[x_1, x_2]$,稍微扩张后得到的outer boundary $[X_1, X_2]$,和action class $k$。这些boundary的粒度是片段级的,为了在CAS上获取片段级的activation,我们将连续值的boundary取整到离它最近的整数。

前向传播

我们用$f_{k}(x)$表示CAS上第$x$个片段关于action $k$的class activation,则预测$\phi$的OIC Loss可以表示为outer区域的平均activation $A_{o}(\phi)$减去inner区域的平均activation $A_{i}(\phi)$(即图中红色区域的平均activation减去绿色区域的平均activation):

$$ \mathcal{L}_{\mathrm{OIC}}(\phi)=A_{o}(\phi)-A_{i}(\phi)=\underbrace{\frac{\int_{X_{1}}^{X_{2}}f_{k}(u)du-\int_{x_{1}}^{x_{2}} f_{k}(u)du}{\left(X_{2}-X_{1}+1\right)-\left(x_{2}-x_{1}+1\right)}}_{A_{o}(\phi)}-\underbrace{\frac{\int_{x_{1}}^{x_{2}} f_{k}(u)du}{\left(x_{2}-x_{1}+1\right)}}_{A_{i}(\phi)} $$

在训练时,将$k$设为ground truth action,最小化$\mathcal{L}_{\mathrm{OIC}}(\phi)$来鼓励内部的high activation,惩罚外部的high activation。

反向传播

预测的segment $\phi$关于inner boundary $[x_1, x_2]$的梯度为:

$$ \frac{\partial \mathcal{L}_{\mathrm{OIC}}(\phi)}{\partial x_{1}}=\underbrace{\frac{f_{k}\left(x_{1}\right)-A_{o}(\phi)}{\left(X_{2}-X_{1}+1\right)-\left(x_{2}-x_{1}+1\right)}}_{\frac{\partial A_{o}(\phi)}{\partial x_{1}}}-\underbrace{\frac{A_{i}(\phi)-f_{k}\left(x_{1}\right)}{\left(x_{2}-x_{1}+1\right)}}_{\frac{\partial A_{i}(\phi)}{\partial x_{1}}}; $$

$$ \frac{\partial \mathcal{L}_{\mathrm{OIC}}(\phi)}{\partial x_{2}}=\underbrace{\frac{A_{o}(\phi)-f_{k}\left(x_{2}\right)}{\left(X_{2}-X_{1}+1\right)-\left(x_{2}-x_{1}+1\right)}}_{\frac{\partial A_{o}(\phi)}{\partial x_{2}}}-\underbrace{\frac{f_{k}\left(x_{2}\right)-A_{i}(\phi)}{\left(x_2-x_1+1\right)}}_{\frac{\partial A_{i}(\phi)}{\partial x_{2}}}. $$

预测的segment $\phi$关于outer boundary $[X_1, X_2]$的梯度为:

$$ \frac{\partial \mathcal{L}_{\mathrm{OIC}}(\phi)}{\partial X_{1}}=\frac{\partial A_{o}(\phi)}{\partial X_{1}}=\frac{A_{o}(\phi)-f_{k}\left(X_{1}\right)}{\left(X_{2}-X_{1}+1\right)-\left(x_{2}-x_{1}+1\right)} $$

$$ \frac{\partial \mathcal{L}_{\mathrm{OIC}}(\phi)}{\partial X_{2}}=\frac{\partial A_{o}(\phi)}{\partial X_{2}}=\frac{f_{k}\left(X_{2}\right)-A_{o}(\phi)}{\left(X_{2}-X_{1}+1\right)-\left(x_{2}-x_{1}+1\right)} $$

因此,OIC Loss是可微的。

AutoLoc

请输入图片描述
AutoLoc的pipeline如图所示。在训练过程中,给定输入视频,将其分割为15帧长的不重叠片段。我们为每个片段提取出一个$D$维的特征向量。在提取特征之后,AutoLoc分为两个branch:一个classification branch,用于预测出每个片段的action scores来获得CAS(Class Activation Sequence);一个localization branch,用于直接预测行为边界,用inner boundary表示,并将其稍微扩张来获得outer boundary。基于视频的ground truth action(每个视频具有多个行为标签)的CAS,我们可以计算出OIC Loss,来提供训练边界预测网络所需要的segment-level supervision。

数据预处理和特征提取

与UntrimmedNet中所做的相同,首先将视频分割为15帧长的不重叠片段,然后对每个片段独立地提取特征。Temporal Segment Network是视频分析领域最先进的two-stream网络结构。我们首先提前训练一个UntrimmedNet,然后将其作为提取特征的backbone。该网络由一个接受RGB输入的spatial stream和一个接受optical flow的temporal stream组成。每个stream由带有BN的Inception网络结构组成,在global_pool层提取出1024维特征。最后,对于每个片段,将时间特征和空间特征连接形成2048维的特征向量。对于包含$T$个片段的输入视频,我们得到$2048 \times T$维的feature map。

分类分支

分类分支(classification branch)的目的是获取CAS。我们基于UntrimmedNet构建Activation Generator $S$。

在global_pool层后面,UntrimmedNet连接一个$K$节点的全连接层来将每个片段分类到$K$个行为类别,同时还连接一个1节点的全连接层来预测每个片段的attention score,spatial stream和temporal stream预测出的score取平均作为最终的score。对于每个视频,我们使用提前训练好的UntrimmedNet中的两个全连接层来分别提取一个$K \times T \left(\text{actions} \times \text{snippets}\right)$维的classification score sequence,和一个$T$维的attention score sequence。

对于每个片段,如果它的attention score比设定的阈值要低(实际选择的阈值是7),则将它的所有类别的classification score都设为0。然后,我们将这个门限过的classification score视作activation,其值范围为$[0,1]$。最终,对每个视频,我们得到了$K \times T \left(\text{actions} \times \text{snippets}\right)$维的CAS。

定位分支

定位分支(localization branch)的目的是学习一个能够预测边界值的模型。最近的TAL方法证明了anchor回归对于边界预测的有效性,边界通过回归两个值来确定:中心位置和持续时长。使用multi-anchor机制来覆盖不同时间规模的可能的segment。我们设计了一个定位网络$B$,它在feature map上的每个时间位置预测各个anchor的边界值。然后我们使用这些回归值获得预测的行为边界(inner boundaries),以及稍作扩张后得到的outer boundaries。

给定一个视频,它的feature map形如$2048 \times T$,将其输入到定位网络$B$中。$B$的前三层是3个相同的时序卷积层,有128个filters,在时间维度上kernel size为3,stride为1,padding为1。每个时序卷积层后面跟随一个BN层和一个ReLU层。最后,$B$添加一个额外的时序卷积层(时间维kernel size=3, stride=1, padding=1)$\text{pred}$来输出边界回归值。与YOLO类似,$B$预测出的边界值是类别无关(class-agnostic)的。$\text{pred}$层的filter个数为$2M$,其中$M$是anchor scale的个数。对每个anchor,$B$预测两个边界值:$t_x$表示anchor中心的偏移值;$t_w$表示如何放缩anchor的长度。
请输入图片描述

如图所示,边界预测过程包含三个步骤:

  1. anchor generation:获得边界值假设。在feature map上的时间位置$s_x$处,生成一个假设的anchor长度$w_a$。
  2. boundary regression:获得action segment的边界预测(inner boundary)。我们可以通过如下方式获得预测的segment:中心位置$c_{x}=s_{x}+w_{a} \cdot t_{x}$,时间长度$w=w_{a} \cdot \exp \left(t_{w}\right)$。然后使用inner boundary表示该segment:$x_{1}=c_{x}-w / 2$,$x_{2}=c_{x}+w / 2$。同时裁剪$x_1$和$x_2$使其满足在视频时长范围内。
  3. boundary inflation:获得outer boundary。一个正确的segment(即含有某个行为)通常在$[x_1,x_2]$区域有较高的activation,而在$x_1$之前和$x_2$之后的区域有较低的activation。因此我们使用比率$\alpha$来获得outer boundary:$X_{1}=x_{1}-w \cdot \alpha$,$X_{2}=x_{2}+w \cdot \alpha$。实验中将$\alpha$设为0.25。

最终,我们引入一个OIC layer,它使用OIC损失来度量每个segment含有action的几率,并删除含有action的几率较低的segments。在测试时,OIC layer输出一个预测的Segment集合。在训练时,OIC layer计算总体OIC损失并将梯度反向传播到边界预测网络中。

对于每个片段位置,$B$预测出$M$个类别无关的anchor segments。然后对于每个action,我们迭代地在CAS上使用以下步骤来获取最终的class-specific segment predictions。需要注意的是,在训练阶段我们只考虑ground truth actions,在测试阶段我们考虑所有的actions。如果CAS上一个时间位置的activation值小于0.1,我们忽略所有对应于该位置的预测。对剩下的每个预测,在它的$M$个anchor segment 预测中,我们只保留OIC loss最低的那个。最后,对剩下的segment predictions,我们删除OIC loss高于-0.3的。在保留的所有segment predictions上使用极大值抑制,overlap IoU阈值为0.4。

在训练阶段,总的损失是所有被保留的segment predictions的OIC loss之和。在测试阶段,所有保留下来的segment predictions都被输出为我们最终的segment predictions。每个segment prediction包括:预测的行为类别(predicted action class)、置信度(confidence score,设置为1减去OIC损失)、由inner boundary$[x_1, x_2]$(取整之前的连续值)转化而来的起始时间和终止时间。

实验结果

请输入图片描述

Last modification:August 11th, 2019 at 11:14 pm
如果觉得我的文章对你有用,请随意赞赏