ICCV 2019 论文标题:Graph Convolutional Networks for Temporal Action Localization 论文地址:http://openaccess.thecvf.com/content_ICCV_2019/papers/

image.png


简介

本文将GCN引入视频动作识别和定位任务,提出了用P-GCN解析action proposal之间的时域关系 (proposal-proposal relation),从而使单个proposal的特征聚合其邻域proposal的特征,提高识别和定位精度。作者以action proposal为node创建graph,将node之间的relation分为两类:contextual和surrounding,作为edge。再用GCN经典的信息聚合更新函数对每个node的feature进行refine。最后,为了解决node的邻接结点过多,计算量大的问题,作者采用SAGE method在邻域进行采样,以降低网络计算量。在数据集THUMOS14和ActivityNet上进行测试,P-GCN表现出SOTA的效果。


Proposal Graph Construction

本文的P-GCN模型是构建在视频特征提取网络的基础上的。在实验中作者用了Two-stream Inflated 3D ConvNet
(I3D)模型提取视频的proposal和feature,这里就不详细介绍了,直接来看本文的核心内容P-GCN。
先给出一个概括性的公式说明P-GCN在做些什么:
image.png
式中image.png表示动作类别,image.png表示动作时域定位,image.png表示node feature,image.png表示graph。N为node的个数,即action proposal的个数。可以看出,P-GCN就是以action proposal为node构建graph,经过GCN网络在graph上聚合更新feature,最后经过映射函数F将特征映射为识别和定位的结果。简单来讲,本文就是用GCN对CNN提取的feature根据temporal relation做一个refine,使feature具有更强的表达能力。

再来看一下网络的整体结构,如图1:
image.png
可以明显看到,P-GCN由两个独立的GCN组成,他们的输入输出各不相同,但graph结构是相同的(并不共享参数)。其中GCN1用于做动作分类,GCN2用于做定位。因此作者让GCN2的输入做一个boundary extension,定位效果会更好。以上就是P-GCN的整体结构,下面来看网络细节。

Graph Node

前面讲到过,P-GCN以视频特征提取网络输出的action proposal为graph的node,以其提取出的feature为node的初始特征。这是一种很典型的方法,用GCN解决CV问题的论文大都这么做。但需要指出的是,其他论文中graph的各个node大多是在spatial域的,将空间划分为单个目标。而这篇论文的各个node是在temproal域的,对时间划分。很有意思。

Graph Edge

作者将proposal-proposal relation分为两类。第一类是contextual edge,由以下公式确定:
image.png
image.png时,两个proposal之间存在edge。很好理解,image.png是阈值,这个公式就是指时域邻近的两个proposal之间存在relation,用tIOU判断是否邻近。
第二类是surrounding edge,由以下公式确定:
image.png
image.pngimage.png时,两个proposal之间存在edge。这个公式可以画个图帮助理解,式中c是指proposal的时间中心值。整个公式表达的是两个proposal中心靠得越近,但边界离得越远,则存在surrounding关系。作者给出的解释是这种proposal有可能存在不同的action,但很可能场景是相同的,场景信息也有助于action的识别。
那么以上两个公式确定了node之间有没有edge,但edge的权值具体是多少,本文用以下公式计算:
image.png
式中A就是邻接矩阵,x表示node feature。整个公式是在衡量特征的相似性,称为cosine similarity。作者指出,在计算cosine similarity之前,可以先对特征做一个线性映射,也就是加一个全连接层。

Graph Convolution

以上,我们已经定义好了graph的结构,下面来看如何进行graph的聚合与更新。很多论文在这里下了很多功夫,但本文只用了最基础的方式:
image.png
其中A是邻接矩阵,image.png是node feature,image.png是learnable的weights。image.png就是初始权重,直接从特征提取网络获得。之后,对式中得到的image.png做一个非线性激活 (Relu),作为下一层GCN的输入。对于K层的CGN来说,其输出的特征为image.png。作者为了保留初始特征的信息,让image.pngimage.pngconcat起来,作为node最终输出的feature:
image.png
得到了最终的feature之后,用传统的全连接MLP做分类与位置回归:
image.png
image.png
其中image.png作者说是completeness,目的是防止出现tIOU很低,但分类score很高的情况,影响模型精度的评价。

SAGE Sampling

最后,作者提到一个问题:通常特征提取网络会得到成百上千个action proposal,如果将他们之间的relation全部考虑的话数量太多了,计算量比较大。所以在GCN聚合更新时,作者用SAGE method对node的邻接node进行采样。SAGE采样的具体方法我还没看懂,这里给出作者的描述:
image.png
(补充:大概看了下GraphSAGE原文,这里top-down passway大概就是说GCN上层node的embeding是聚合下层node的embeding得到的,聚合方法是固定数量在邻域随机采样。)
所以,聚合更新的函数变为以下形式:
image.png
其中image.png是固定的采样个数,实验中作者取4。另外,我们注意到这个公式中有image.png项,实际上这是在邻接矩阵中加了自环。

Experiments

作者在Experiments中描述了很多网络细节,比如特征的维度之类的。我们重点关注一下loss函数。本文中分类结果y和completeness c使用的loss分别是cross entropy和hinge loss。image.png时域边界回归loss是smooth L1。另外,在模型训练时需要SAGE采样,但测试时并不需要。在THUMOS14和ActivityNet数据集上,P-GCN都表现很好。作者还做了一些消融实验,详见原文。
image.pngimage.png
image.png

总结

个人第一次见到用GCN分析时域relation的文章,思路很新颖,模型好理解,值得借鉴。目前GCN已经开始蔓延到CV领域的各个角落了!但这些精巧的设计,为什么都不开源呢???另外,本文的GCN1和GCN2是否在计算上有点重复呢,要是能在保证精度的前提下合并起来就更好了。