Zexian Li

时空动作定位(spatio-temporal action localization)论文小记

2021-02-08 · 15 min read
STAD

发现了一个看起来很有趣的任务:时空动作定位(spatio-temporal action localization),简要记录几篇论文👨‍💻

任务定义

检测视频中所有动作的同时,在时序和空间位置上给出定位。

常用数据集

UCF101-24:由3207段未裁剪的视频组成,涵盖24类运动动作,常使用第一split的视频来衡量动作检测的性能;
JHMDB:由928段裁剪好的视频组成,涵盖21类运动动作,常使用前三个split的均值来衡量动作检测的性能。数据集包含单帧层面的人体光流、人体mask、骨骼关节点、动作类别、图像性质(相机运动/可见人体部分/相机视角/人数/视频质量)等。
AVA:每3秒片段仅有一个动作类别标签,主要致力于基于单关键帧的动作检测,且该数据集不适合验证动作管道的性能。
实践中,常采用前两个数据集来衡量时空动作检测的指标。

应用场景

视频监控、事件检测、人机交互、智能安防、异常检测、自动驾驶等

实现思路

  1. 使用动作检测器在每一帧进行独立检测,再组合各帧检测结果以得到动作管路;或对单一目标检测结果进行进行时序跟踪。这种方法既低效又难以利用时序上下文信息。
  2. 使用3D anchor和3D卷积,在视频片段层级执行动作分类和边界回归。此anchor-based方法是目前主流做法,eg人体检测(ResNet50-based Faster RCNN pretrained on ImageNet) +动作分类(I3D/S3D-G pretained on Kinetics + ROI pooling),但会面临超参多、计算开销极大、动作时序/空间边界不够灵活、缺乏时空上下文连结信息等问题。
  3. 基于目标跟踪轨迹线的anchor free动作检测方法,例如MOC。
  4. 基于融合时序特征的类目标检测算法,例如YOWO。

指标比对

以UCF101-24和JHMDB数据集IoU=0.5作为基准指标,比较各方法的mAP如下:

ID paper JHMDB Frame mAP JHMDB Video mAP UCF Frame mAP UCF Video mAP 附注
1 MOC 70.8 77.2 78.0 53.8 JHMDB averaged three split
2 YOWO(LFB) 75.7 85.9 87.3 53.1 JHMDB first split
3 TACNet 65.5 73.4 72.1 52.9
n 暴力3D sota 77.9 80.1 76.3 59.9

论文阅读

(1) (2020 ECCV)MOC: Actions as Moving Points

  • 针对痛点:
  1. 基于tubelet的检测器很依赖启发式anchor设计,计算开销大,定位不够精准。
  • 主要贡献:
  1. 通过将动作实例转换成对一个运动点的轨迹的分析与扩展,实现了高效而精准的检测框架MOC detector。
  • 实现流程:
    MOC实现流程图如下所示:
    MOC实现流程图
    (左侧feature提取部分,一次输入K张图片,R表示空间尺度下采样,默认为4,B为卷积后通道数,默认为64;右侧feature下的数字代表N、H、W、C,卷积层下的数字代表输入通道、输出通道、卷积核高度、卷积核宽度)。
    模型先将图片输入2D特征提取backbone DLA-34(来自CenterNet,在ImageNet/COCO上预训练),然后将任务分成三个步骤:
  1. Center分支:仅在关键帧处尝试找到动作实例中心点的可能位置,并进行动作分类;
  2. Movement分支:通过估计当前帧运动实例中心所在位置与管路中心的offset,实现连续帧内动作中心点的运动估计(将连续帧动作实例中心的移动转化为单点的运行轨迹);
  3. Box分支:在每帧图像的回归中心处预测当前帧动作bbox的尺寸。
    以上三分支可以从短视频片段从提取动作管道,在连结方法的基础上可以实现从长的未裁剪视频进行动作检测。
    MOC三阶段示意图如下所示:
    MOC三阶段示意图
  • 实现细节:
  1. Center分支:构建大小为W'*H'*C,数值为0至1的热力图,表征关键帧处第C类动作中心在各个空间位置发生的几率。具体地,使用高斯核函数扩张动作中心点GT所在范围;使用focal loss来解决正负样本分布不均衡的问题;筛选策略为:在每一动作类别内,若一点处取值大于等于其八近邻,则将其作为候选;对于一段短视频,仅选取得分最高的N=100个视频进行后续操作。
  2. Movement分支:对K帧连续图像,将其作为整体输入3D卷积层,再输出W'*H'*(k*2)的特征图,等同于为每帧输出W'*H'*2的offset数值,表征每一个中心点处的移动方向;通过Center分支和Movement分支即可得到特定动作中心点的运动轨迹;仅GT所涵盖的中心点处的移动参与反向传播,具体损失函数使用L1。
  3. Box分支:实验表明class-agnostic bbox的产生与时序信息无关,故仅采用当前帧的信息输入Box分支,每一帧输出W'*H'*2的数值,表征每一个中心点处的候选框大小;具体损失函数使用L1。
  4. 连结策略:对于任连续的K帧图片,选取动作通道(tubelets)并保留top10作为候选(candidate);
    初始化:对于首帧,每个候选通道开启一个link,对于其他帧,每个与现有link无交集的候选开启一个新link。
    连结:一个候选需至少满足三个条件中的一个方可添加到现有link中:1候选并未被其他link选取,2link和候选的交集大于阈值,3候选具有最高的得分。在非首帧时,我们基于link得分的降序将当前帧的候选与现有link相连结(link的得分即使管道所有得分的均值)。
    结束:当一个link在连续K帧没被扩展时,将link结束。
  5. 补充:以上几分支的损失函数进行均衡;采用尺度变换、位置表换、图像转换等视频数据增强方法;可实现实时动作检测,通过用内存保存前K-1帧的特征来实现;连结策略中的一点是会舍弃过低置信度和过短的动作管道。
  • 改进/Challenge/idea/Que:
  1. Center分支:仅在核心帧进行动作实例的中心点检测及动作分类,是不是不够好?应该在每一帧都看才对呀
  2. 是不是不够anchor free,一次只能输入一部分frame
  3. Movement分支为什么不是针对类别的?
  4. Box分支为啥没类别?

(2) YOWO: you only watch once: A unified CNN architecture for real-time spatio-temporal action localization

  • 针对痛点:
  1. two-stage时空检测方法(tubelet+classification):依赖人为设计的tubelet,计算开销大,边界难调整;双阶段网络难以全局优化;先检测人框再对3D anchor进行动作分类的方法过分关注人所在处的信息,忽略了背景等语义交互信息;计算开销更大,时间更久,更耗空间。
  • 主要贡献:
  1. 建立one-stage的实时时空动作检测框架YOWO,一分支通过2D卷积提取当前帧的空间信息,一分支通过3D卷积提取前些帧的时空信息,使用注意力机制和通道融合方法,在融合特征的基础上进行检测任务输出动作种类和人体bbox,在达到sota精度的同时有着较快的检测速度。
  • 实现流程:
    YOWO实现流程图如下所示,核心部分为3D卷积分支,2D卷积分支,CFAM模块,边界回归模块。
    YOWO实现流程图

  • 实现细节:

  1. 特征提取
    YOWO用于特征提取的2D/3D分支可使用任何形式的CNN替代,可在考量实时性和性能指标的基础上对其进行替换。
    具体地,3D卷积分支使用在Kinetics上预训练的3D-ResNext-101作为backbone,输入视频段NCHW,(C=3)N*C*H*W,(C=3),选取网络最后一层卷积层输出的特征NCHW,(N=1,H=H32,W=W32)N^{'}*C^{'}*H^{'}*W^{'},(N'=1,H'=\frac{H}{32}, W'=\frac{W}{32})
    2D卷积分支使用在PASCAL VOC上预训练的DarkNet-19作为backbone,输入图片CHW,(C=3)C*H*W,(C=3),输入特征CHW,(H=H32,W=W32)C^{''}*H^{'}*W^{'},(H'=\frac{H}{32}, W'=\frac{W}{32})
    两分支联合训练;使用StepLR策略;采用图像增强算法例如水平翻转、随机放缩、随机裁剪;使用阈值筛选bbox得分并通过NMS;鉴于数据集过小,在训练J-HMDB-21数据集时冻结了3D卷积的网络参数以加速收敛、避免过拟合。
    从实验结果分析,2D网络更擅长定位任务(localization),3D网络更擅长分类任务。从activation map角度分析,2D网络关注图像内所有的人,3D网络关注正在进行动作的发生位置。

  2. 特征融合CFAM(channel fusion and attension mechansim)

补充知识:n维欧式空间中任意k个向量之间两两的内积所组成的矩阵,称为这k个向量的格拉姆矩阵(Gram matrix),Gram矩阵可反映出一组向量中各个向量之间的关系。

Δ(α1,α2,,αk)=((α1,α1)(α1,α2)(α1,αk)(α2,α1)(α2,α2)(α2,αk)(αk,α1)(αk,α2)(αk,αk))\Delta\left(\alpha_{1}, \alpha_{2}, \ldots, \alpha_{k}\right)=\left(\begin{array}{cccc} \left(\alpha_{1}, \alpha_{1}\right) & \left(\alpha_{1}, \alpha_{2}\right) & \ldots & \left(\alpha_{1}, \alpha_{k}\right) \\ \left(\alpha_{2}, \alpha_{1}\right) & \left(\alpha_{2}, \alpha_{2}\right) & \ldots & \left(\alpha_{2}, \alpha_{k}\right) \\ \ldots & \ldots & \ldots & \ldots \\ \left(\alpha_{k}, \alpha_{1}\right) & \left(\alpha_{k}, \alpha_{2}\right) & \ldots & \left(\alpha_{k}, \alpha_{k}\right) \end{array}\right)

例如输入图像的特征维度为(C, H, W),通过flatten可得到(C, H*W)形式的矩阵,对该矩阵做内积,即将其与转置得到的(H*W, C)型矩阵做矩阵乘法,即得到(C, C)形式的Gram矩阵(显然Gram矩阵是一个对称矩阵)。
Gram矩阵可以看作特征之间的偏心协方差矩阵(未减去均值故偏心)。Gram矩阵第(i, j)个元素表示通道i特征和通道j特征的内积,故其可以代表i和j通道特征的相关程度,例如特征同时出现/此消彼长的程度等。
Gram可应用于风格迁移中,例如以原图和风格图像feature map对应的Gram矩阵差异化最小为目标进行优化,最近也有了在分割任务中的应用。
将2D分支和3D分支输出的特征沿通道叠加,流程如下图所示:
CFAM特征融合
特征C是由特征B的原始特征加上计算的通道权重得到的。将B至C的四条线分别认为是1~4步,则3、4步即为Gram矩阵计算过程,其中3输出(C, H*W)的矩阵,4输出(H*W, C)的矩阵,但随后进行softmax归一化操作以得到矩阵M(C, C);M矩阵与2输出的(C, H*W)矩阵点乘,再reshape得到(C, H, W)的矩阵F,最终C矩阵为C=αF+BC = \alpha F+Bα\alpha为从0开始学习的参数。
注意,前后的两层卷积层可以对2D分支、3D分支这样来自不同backbone,可能有分布差异的特征进行融合。CFAM的性能提升是显著的,但如果没有这四层卷积层,性能只有小幅提升。

  1. bbox连结策略(linking strategy)
    采用通用连结策略:

sc(Rt,Rt+1)=ψ(ov)[sc(Rt)+sc(Rt+1)+αsc(Rt)sc(Rt+1)+βov(Rt,Rt+1)]s_{c}\left(R_{t}, R_{t+1}\right)= \psi(o v) \cdot\left[s_{c}\left(R_{t}\right)+s_{c}\left(R_{t+1}\right)\right. +\alpha \cdot s_{c}\left(R_{t}\right) \cdot s_{c}\left(R_{t+1}\right) \left.+\beta \cdot o v\left(R_{t}, R_{t+1}\right)\right]

其中RtR_{t}代表t时刻检测区域;Rt+1R_{t+1}代表t+1时刻检测区域;ovo v代表两个区域的IoU值;ψ(ov)\psi(o v)为单值函数,ovo v为0时为0,其余相交时刻为1;scs_{c}代表c类别动作的得分。
在得到所有两两图像的连结得分后,使用Viterbi算法寻找最优路径以得到动作管道tubelet。

  1. 长时特征存储(Long-Term Feature Bank)
    YOWO仅输入当前时刻之前的短时频段(8/16帧)以保证实时性,但也可利用较长的前后视频特征以提高性能。在3D分支处,LFB方法使用以当前帧为中心的8个特征平均后的结果作为CFAM模块的输入(每个特征是由8帧图像得到的,相当于共利用了前后共64帧的信息)。该方法在损伤实时性的同时却显著提高了效果。

  2. 3D网络输入视频帧数及降采样频率
    降采样
    如图,作者做了详细的实验,eg frame-8 & d-3代表从24帧中采样8帧。16帧效果较好因为其包括了更多的时序信息,降采样频率较大效果不好是因为可能没有很好地捕获动作模式,且过长的序列可能破坏时序结构(eg对于较短的动作而言,较长的序列可能包含许多不相干的信息)。

  3. bbox回归
    沿袭YOLO的结构,在HWH^{'}*W^{'}的每个grid处,设计5个先验框,输出(5+numclass)HW(5+num_class)*H^{'}*W^{'},其中5代表xywh的offset和confidence score。
    具体地,使用多尺度训练,测试时将图片压缩至224*224;使用SGD+momentum+weight decay济宁训练;使用smooth L1损失函数以定位(对于坏点较L2更不敏感);使用focal loss以分类。

  • 改进/Challenge/idea/Que:
  1. 光流去哪里了
  2. 时序因果卷积可以加载哪里
  3. 作者认为,YOWO获取了过多的前置信息以至于有时会在动作开始前便给出高置信度,flase positive,这个是不是可以和我的时序方法综合一下,例如我输出score结果来辅助一下。
    同时作者认为,YOWO需要很多前置信息,以至于动作刚开始时容易判断错类别。
    我觉得这部分的工作可以很好地和proposal的score思路进行结合。·
Bad decisions make good stories.