这篇笔记主要介绍我今年上半年投稿到ACM Multimedia会议的工作。这篇论文的实验大概从寒假放假回来后开始,在ICCV截稿前一个礼拜开始准备论文,但时间太赶没能完成实验和论文写作,所以花了一个多月完善后投稿了ACM multimedia。ACM multimedia 今年取消了long/short paper的区分,而是改为oral/poster paper,这两者均为9页长度(8页正文,1页引用),基本上和CVPR等会议是一样的形式。我投稿的文章依旧做的是temporal action localization 方向(也可以叫作 temporal action detection),最后录用为poster paper,论文可以在我的个人主页上下载: Tianwei Lin’s Homepage。
首先关于 temporal action detection 这个研究领域的介绍,可以见我之前写的专栏文章:Video Analysis 相关领域解读之Temporal Action Detection(时序行为检测)。 简单来说,temporal action detection是要在视频序列中确定动作发生的时间区间(包括开始时间与结束时间)以及动作的类别。与其关系紧密的一个领域是基于图像的object detection,object detection是检测物体在图像中的位置,包括长和宽两个维度,而temporal action detection则只需要确定时间维度上动作的位置。
由于temporal action detection与 object detection 问题有很大的相似性,所以很多工作都是将object detection中的一些方法思路迁移到temporal action detection中。很多方法使用划窗方法或者是通过特定的proposal model来获得temporal action proposals,再进行分类从而实现detection。可以看出,这些方法都采用了 R-CNN/Fast-RCNN/Faster-RCNN 类型的结构,即通过对proposal分类来实现detection。而在object detection 问题中,另一类被广泛使用的模型并不采用这种结构,而是同时进行proposal 以及 classification, 比如SSD 以及YOLO。这篇文章即结合了SSD与YOLO模型的特点,针对temporal action detection问题,设计并实现了 Single Shot Action Detector (SSAD) 模型。下面对论文进行简要的介绍,详细的细节欢迎阅读论文原文。
该图为论文首页图,展示了本文提出方法的大致流程,即先使用预训练好的模型对视频序列提取特征得到特征序列,再使用特征序列作为SSAD模型的输入,最终SSAD模型输出detection的结果。
该图则更为细致得展示了本文方法的几个主要流程。即(1)特征提取;(2)SSAD模型; (3)后处理(训练或测试)
本文的特征提取使用了two stream network中的spatial network以及temporal network(网络结构均为VGG16),以及基于3D CNN的C3D网络来提取特征。每个用作特征提取的视频帧单元称为一个snippet,包含图像帧以及光流等,具体的定义在论文中给出。我们拼接3个网络的最后一层输出(该层输出即代表输入snippet对应的每个动作的概率)作为后续使用的特征,该特征记作SAS(Snippet Action Score)特征。最终,对于一个包含T 帧图像的视频,我们可以得到等长的SAS特征序列。该特征序列实际上就是一个二维的矩阵。
在获得长度为T的特征序列后,就可以将其用作SSAD模型的输入。SSAD模型是一个全部由时序卷积(一维卷积)构成的网络。主要包括三种卷积层:base, anchor, prediction layer。 Base layers 的作用为缩短特征序列的长度,并增大特征序列中每个位置的感受野。在实验中,我们尝试了多种base layers的结构,如下图所示。最终,通过实验我们选择了结构B。可以看出,conv和pool均选用了较大的kernel size。在base layers中,我们发现使用大卷积核比使用多层小卷积核进行卷积能获得更好的效果。
接下来SSAD模型中继续使用anchor layers 来缩小特征序列的长度。anchor layer 输出的特征序列中的每个位置都被关联了多个尺度的anchor instances(一个instance代表视频中动作发生的那一段时间,可以理解为一个一维的default box)。之后,再通过prediction layer,来获取每个anchor instances所对应的 坐标偏移量,重叠置信度,以及类别分类结果。通过多层时间尺度不断缩小的特征序列,SSAD模型可以获得由小到大各个时间尺度的action instance预测。
训练时,首先将获得的anchor instances用坐标偏移量进行修正,再与 ground truth instances 进行匹配,来确定anchor instances是正样本还是负样本。具体的匹配策略见论文。SSAD模型使用如下的损失函数进行模型训练,主要包括分类损失,重叠置信度回归损失,边界回归损失以及正则化项。
测试时,同样先将获得的anchor instances用坐标偏移量进行修正,再用下式获得每个anchor instance的最终分类结果。
在获得了一段视频所有的预测action instance后,本文采用NMS(非极大化抑制)对重叠的预测进行去重。从而获得最终的temporal action detection结果。
本文主要在THUMOS‘14数据集以及MEXaction2数据上进行了实验。其实目前该方向数据规模最大的数据集是ActivityNet 1.3 数据集,但由于该数据集数据量太大,所以在做SSAD的时候并没有在ActivityNet上进行实验。
实验结果如上表所示,SSAD模型在THUMOS14上比起之前的方法(17年之前)提高了很多,将[email protected]从19.0%提高到了24.6%。不过,实际上最近几个月的一些新工作已经将THUMOS14上的[email protected]提高到了30%左右。
本文的主要贡献我认为包括两点,一是将基于时序卷积的Single Shot结构的模型引入了temporal action detection问题;二是探索了使用时序卷积网络进行temporal action detection的一些网络结构以及训练策略的设置。
SSAD模型的框架实际上还有很大的改进空间,有很多思路在当时没有时间来一一实现。最近我们团队在参加CVPR2017举办的ActivityNet Challenge 2017(即ActivityNet1.3 数据集), 我们采用了改进后的SSAD模型,在proposal 和 localization task上均超过了之前该数据集上的的state-of-the-art结果。比赛结束后我应该也会对竞赛方案进行简单的分享。
在这个方向做了半年多时间,感觉目前temporal action detection问题上各类方法的检测效果较之object detection问题还很低(主要指mAP),使该问题上产生的模型与方法尚未有实际场景下的应用。不过,过去一年多时间内temporal action detection 方向新方法层出不穷,不断提高着各个相关数据库上的性能指标,如同object detection方向上近年的发展,我相信未来几年时间内temporal action detection方向上的精度也会获得进一步的提高,从而能够用于实际场景下的视频分析。