论文浏览(17) Actions as Moving Points
0. 前言
1. 要解决什么问题
- 要解决 Spatio-Temporal Action Detection 问题,也称为 tubelet detectors 问题。
- 之前常见的有两种解决方案:
- Frame-Level Detection:对一帧进行 action detector,然后再进行 frame-wise 的matching。
- Clip-Level Detection:输入若干帧,直接输出 tubelet。
- 现有的解决方案一般都是基于目标检测框架,如Raster R-CNN,SSD等,这些方法都依赖于众多的anchors。这类方法都存在以下问题
- 对超参数敏感(如bbox的box size, box number, aspect ratio)
- 在有检测结果很多时,会导致性能下降。
- 这类方法直接忽略了temporal dimension,认为所有行为都是立方体。
2. 用了什么方法
- 简单说,就是将CenterNet用于时空行为检测。
- 之前刚看到将CenterNet用于多目标跟踪,这篇感觉也是异曲同工。
- 解决方案如下图
- Backbone
- 假设输入的图像有K张,每张的尺寸都是
H, W, 3
。 - 假设出图的特征图尺寸是
H/R, W/R, 64
。 - 对每一帧分别用2D CNN提取特征。
- 假设输入的图像有K张,每张的尺寸都是
- Center Branch
- 判断关键帧的行为类别。
- 所谓关键帧,可以是输入K帧中的正中间一帧,也可以是最后一帧。
- 具体的应该数据如何导入模型时应考虑的问题。
- 猜测如果是offline版本,中间一帧比较合适;online版本,最后一帧比较合适。
- 输入是K帧图像提取特征后concat形成。
- 输出是
H/R * W/R * C
,其中C是类别数量,取值范围[0, 1]
。
- 判断关键帧的行为类别。
- Movement Branch
- 由于tubelet一般都不是立方体,所以相对于关键帧,动作可能会有偏移。
- 这个分支就用于预测相对于中心点的偏移。
- 对于每个中心点都有一组偏移。
- 输入是K真图像提取特征后
H/R, W/R, K*2
,也就是说,对每一帧对象的每个中心点位置,都对应了偏移。
- Box Branch
- 用于预测每一帧、每个中心点bbox的height与width。
- 对于每一帧都分别计算height与width,毕竟bbox与前后帧可没什么关系。
- Backbone
- Tubelet Linking
- 就是将多个检测出的tubelet关联起来。
- 说是完全使用了
Action tubelet detector for spatio-temporal action localization
这篇论文中的方法。 - 没细看,用到再说。
3. 效果如何
- 通过试验验证了 Movement Branch 的作用,尝试了多种Movement Branch的设计方式,结果不贴了。
- 与SOTA进行对比
- 分析该模型的运行时间
- 在TITAN Xp上运行
- 光流实现计算好
- K=7且双流融合。
- 使用的backbone是DLA34(与CenterNet一样)
- 每次输入一帧只处理一帧(历史特征都保留着)
- 所谓的3D方法指的是先用detector分别对关键帧进行检测,然后用3D CNN提取clip特征,融合检测的bbox他通过ROI提取特征进行行为识别。
4. 还存在什么问题
-
说了不适用于AVA,但目前想使用AVA,不知道修改网络结构后效果如何,期待开源。