《MS-TCN++》算法详解
论文地址: 《MS-TCN++: Multi-Stage Temporal Convolutional Network for Action Segmentation 》
代码地址:https://github.com/sj-li/MS-TCN2
从名字可以看出在该文章之前还有一篇《MS-TCN》发表于CVPR2019,MS-TCN在本文的前部分会被介绍。本文《MS-TCN++》则是发表于TPAMI2020。
一、MS-TCN网络结构
文章的网络结构是由多个自己提出的子模块组成的,下面先分别介绍各个子模块的结构,然后说明整个网络的结构。
1.1 Single-Stage TCN
文章认为做视频分割,应该将要有足够大的感受野,但是如果采用pooling操作则会减小时间维度的分辨率,如果采用全连接操作则会要求模型的输入是固定的且会引入大量的网络参数。文章只利用卷积来构建网络模块,当前模块命名为single-stage temporal convolutional network (SS-TCN)。
SS-TCN模块是第一层是一个的一维卷积,接着跟的是一些空洞卷积,它们的dilation factor逐层成倍的增加,例如1,2,...,512,且所有的空洞卷积参数是一样的,接着跟一个的一维卷积。
空洞卷积层文章采用了residual的结构,如下图所示,这一个res层定义为1层,总共有l层。
1.png用公式表示上述结构为
其中表示l层的输出,表示卷积操作,是空洞卷积的权重(3为卷积核大小,D为卷积核的个数),是卷积的权重,为bias向量。
每一层的感受野用下面公式表示:
其中,表示层数。这个公式只在空洞卷积的kernel size为3时成立。
为了使得每一个SS-TCN能够输出每一类的概率值,在SS-TCN最后的卷积后会接一个softmax激活函数:
其中,表示t时刻的每个类别的概率结果,表示SS-TCN模块中最后一个包含空洞卷积的残差层的输出结果(即最后的卷积的输入)。和分别表示最后的卷积的权重和偏置参数。C表示待分类的类别,D表示卷积的个数。
1.2 Multi-Stage TCN
文章认为将网络进行堆叠或者说那种multi-stage结构能够对前面层的结果有一个refine的效果,所以本文将这种思想用于时序动作分割任务上来。网络称为multi-stage temporal convolutional network(MS-TCN)。
如上面所述,multi-stage中每一个stage都是对上一个stage估计的结果进行refine,所以每一个stage的输入就是上一个stage的对于每个时刻每个类别的估计输出,如下面公式表示。这里个每个stage就是1.1所述的SS-TCN。
其中,表示第s个stage的输出,F表示一个SS-TCN。
二、MS-TCN++
2.1 Dual Dilated Layer
在MS-TCN网络中,dilation factor随着层数的增加而增加。这样的操作,虽然可以使得高层中的感受野较大,但是在底层中感受野确很小。而且,高层中的卷积由于有很大的dilation factor导致卷积应用到很大的时间跨度上(没法对一些local信息进行提取)。为了解决这个问题,本文提出了(Dual Dilated Layer)DDL,这个模块中的空洞卷积有两个,一个是随着层数的增大dilation factor增大(同SS-TCN中一样),另一个是随着层数的增大dilation factor减小。
DDL用公式表示如下:
其中,表示两个空洞卷积的权重,且它们的权重分别为和,为卷积的权重,表示对应的偏置项,表示concatenate操作。
DDL结果图示如下:
2.png
2.2 MS-TCN++
MS-TCN++是在MS-TCN中引入DDL结构。同MS-TCN,MS-TCN++第一个stage输出的是原始的预测结果,之后每个stage都是对前一个stage的输出结果进行refine操作。
文中经过试验得到的最终的MS-TCN++ 的结构图如下图所示,其中Prediction Generation Stage其实就是DDL,Refinement Stage就是SS-TCN。
3.png三、Loss
本文是对时序维度上每一个输入的feature进行每个类别的预测,所以采用的是分类使用的交叉熵函数。另外,为了缓解方式过分割的问题(over-segmentation errors),文章引入一个smoothing loss。loss如下所示:
其中,是平衡loss的超参,表示分类loss,表示smoothingloss。
分类loss:
上式中,表示t时刻gt类别为c类的预测结果。
smoothing loss如下所示,可以看出smoothing loss是尽量使得相邻特征类别相同,从而尽可能避免过度分割:
上式中,T表示视频时长(或者说是输入特征时序维度的长度),C表示待分类的类别总数,表示t时刻类别c的概率,其它的
这里需要注意的是计算BP时,只针对于(不作为BP的计算参数)