论文地址:Lin_Learning_Salient_Boundary_Feature_for_Anchor-free_Temporal_Action_Localization_CVPR_2021_paper.pdf
该论文的主要贡献有以下两点:
1.首次提出了一个纯无锚定的时间动作定位模型。该模型不仅具有更少的超参数来调优输出和更少的处理输出,而且具有更好的性能,从而两全其美。
2.为了充分利用无锚框架, 作者讨论了边界特征的影响,并提出了新的边界池方法,其输出与粗的建议一起生成细粒度的预测。此外,我们还引入了一种新的边界一致性学习策略,它可以约束模型学习更好的边界特征。
代码复现:使用和作者当时相同的环境10.2的cuda和1.4.0版本的pytorch复现成功

Abstract

虽然目前的大多数TAL模型通过使用预定义的锚和大量的操作性获得了良好的结果,但这种方法可能会涉及到大量的输出和与不同锚对应的位置和大小的重量调整。相反,无锚的方法更轻,消除了冗余的超参数,但很少受到关注。在本文中,我们提出了第一种有效的纯无锚定时间定位方法。我们的模型包括(i)一个端到端可训练的基本预测器,(ii)一个基于显著性的细化模块,通过一个新的边界池为每个建议收集更有价值的边界特征,以及(iii)几个一致性约束,以确保我们的模型在给定任意建议时能够找到准确的边界。

Introduction

目前的TAL模型主要关注学习每帧的动作性或预定义锚的调整,称为动作引导方法和基于锚的方法。尽管在基准数据集上取得了合理的良好结果,但这些方法仍然局限于以下几点:(1)这两种方法都将产生一堆冗余的建议。(2)动作引导方法只能提供时间边界的预测,而它们必须依赖额外的模型,如S-CNN和P-GCN进行分类。然而,这两个阶段的模型是孤立的,因此无法为端到端更新共享信息。(3)通常,基于锚的方法对一些关键的超参数非常敏感,比如预定义锚的数量和大小;在实际应用中调整这些超参数是非常重要的。
与现有的方法相比,无锚模型节省了大量预定义的锚,同时将边界回归和分类组合在一个模型中,这样效率很高。为此,本文提出了一种新的纯无锚TAL框架,称为无锚检测器(AFSD)。为了学习更准确的边界,我们参考了以前的TAL方法来表示边界或上下文特征。这些工作主要是将起止点的邻居通过卷积或平均池化合并来获得这些特征。然而,我们认为,事实上,在区分一个动作是开始还是结束方面,时刻级特征比区域级特征更有价值。如下图所示,在开始时刻和结束时刻附近的背景区域显示了其他不相关的场景,而动作内部的区域几乎相同,这不能提供任何判断动作是开始还是结束的信息。这样的例子表明了时刻级特性的重要性。

因此,我们提出了一种新的边界池,它不是聚合整个区域,而是试图找到起始和结束区域最显著的时刻级特征。我们进一步用新提出的边界一致性学习(BCL)策略装备边界池来正则化池化操作,为每个动作提供正确的边界特征。综上所述,我们的论文有以下贡献:1.我们首次提出了一个纯无锚定的时间动作定位模型。该模型不仅具有更少的超参数来调优输出和更少的处理输出,而且具有更好的性能,从而两全其美。 2.为了充分利用无锚框架,我们讨论了边界特征的影响,并提出了新的边界池方法,其输出与粗的建议一起生成细粒度的预测。此外,我们还引入了一种新的边界一致性学习策略,它可以约束模型学习更好的边界特征。

Method

Overview

AFSD结构图如上图所示。该模型分为 3 个阶段,第一个阶段为:用一个主干网络和特征金字塔来处理视频。以RGB帧为例,对每个视频X,我们用Kenetics预训练好的I3D模型来提取3D特征F∈RT′×C′×H′×W′F \in \mathbb{R}^{T^{\prime} \times C^{\prime} \times H^{\prime} \times W^{\prime}}F∈RT′×C′×H′×W′,其中 T′,C′,H′,W′T^{\prime}, C^{\prime}, H^{\prime}, W^{\prime}T′,C′,H′,W′ 时间步长,通道,高度和宽度。这个特征随后沿着一个三维空间被拉直为一个一维特征序列。这样的序列可以包含整个视频的时空信息。第二个阶段为:施加一个特征金字塔网络的时间卷积,将空间维度和时间维度合并在不同的层次。金字塔特征进一步被用来生成一个粗略的proposal序列{(ψ^i,ξ^i,y^iC)}\left\{\left(\hat{\psi}_{i}, \hat{\xi}_{i}, \hat{y}_{i}^{C}\right)\right\}{(ψ^​i​,ξ^​i​,y^​iC​)},并具有一个基本的无锚点预测模块,其中包括一个简单的回归器和分类器。第三个阶段为:基于显著性的细化模块 (saliency-based refinement module) 将调整动作类别分数、开始和结束边界,并预测每个粗略 proposal 的相应质量分数。对于每个建议,利用预测的时间区域得到边界池的显著边界特征。边界特征与特征金字塔一起被利用,输出一个细粒度的预测{(Δψ^i,Δξ^i,y^iR)}\left\{\left(\Delta \hat{\psi}_{i}, \Delta \hat{\xi}_{i}, \hat{y}_{i}^{R}\right)\right\}{(Δψ^​i​,Δξ^​i​,y^​iR​)},用于时间回归和动作分类。值得一提的是,该模型是一个完全端到端的方法,输入是视频,输出是动作以及对应的边界。
代码的复现中,作者提供了几个文件,一个是val_video_info.csv,每一行的五个值分别代表video名称,video每秒帧数,采样之后的每秒帧数,采样之前的帧数,采样之后的帧数。

然后是val_Annotation_ours文件,作者剔除了一些无效的视频,剩下的视频列表如下。每行分别代表视频名称,视频类别,开始时间,结束时间,开始的帧,结束的帧。

处理文件的函数如下:

def get_video_anno(video_infos,video_anno_path):df_anno = pd.DataFrame(pd.read_csv(video_anno_path)).values[:]originidx_to_idx, idx_to_class = get_class_index_map()video_annos = {}for anno in df_anno:video_name = anno[0]originidx = anno[2]start_frame = anno[-2]end_frame = anno[-1]count = video_infos[video_name]['count']  # 原来的帧率sample_count = video_infos[video_name]['sample_count']  # 采样之后的帧率ratio = sample_count * 1.0 / count  # 采样率start_gt = start_frame * ratio  # 因为抽样了,所以开始的帧数要除以3end_gt = end_frame * ratioclass_idx = originidx_to_idx[originidx]  # 转化为1-20的标签if video_annos.get(video_name) is None:video_annos[video_name] = [[start_gt, end_gt, class_idx]]else:video_annos[video_name].append([start_gt, end_gt, class_idx])return video_annos  # 字典的values部分是一个二维列表,包含该视频所有动作实例,keys部分是video的名字

Basic Prediction Module

我们首先建立了一个基本的无锚点预测模块来获得粗糙的时间边界。例如,对于第l个FPN级的特征,我们首先将其投影到嵌入在两个潜在空间中的特征floc和fcls,分别对应于具有两个时间卷积的两个分支的定位和分类。这两个特征floc和fcls都经过处理,所有FPN层的输出共享一层时间卷积,以得到每个位置i的粗起始和结束边界距离和类得分。接下来我们可以得到第l级第i个时间步的开始和结束时间如下:

l层FPN层一共生成了Tl个提议。这个简单的框架已经可以以无锚定的方式检测动作,它的优点包括不需要预先定义的锚点,以及较少但更准确的预测。

Saliency-based Refinement Module

由于不同的动作实例可能有不同的长度,由于接受域有限,很难通过几个简单的时间卷积来获得所有建议的边界信息。因此,我们提出了一个基于显著性的细化模块,如上图所示,在那里我们利用FPN特征和proposal的建议来帮助我们的模型收集边界特征,以重新细化预测。为简单起见,我们在以下细节中省略了代表FPN层的下标。以定位特征floc为例,首先我们通过卷积层将其投射到两个分别对启动活动和结束活动敏感的潜在空间中:
fs=Re⁡LU(GN(Conv⁡1(floc)))∈RTl×Cfe=Re⁡LU(GN(Conv⁡2(floc)))∈RTl×C\begin{aligned} &f^{s}=\operatorname{Re} L U\left(G N\left(\operatorname{Conv} 1\left(f_{l o c}\right)\right)\right) \in \mathbb{R}^{T_{l} \times C} \\ &f^{e}=\operatorname{Re} L U\left(G N\left(\operatorname{Conv} 2\left(f_{l o c}\right)\right)\right) \in \mathbb{R}^{T_{l} \times C} \end{aligned} ​fs=ReLU(GN(Conv1(floc​)))∈RTl​×Cfe=ReLU(GN(Conv2(floc​)))∈RTl​×C​
其中 GN 表示 Group Normalization。通过这种投射,该模型可以分别学习开始和结束敏感信号,从而减少对FPN特征的学习负荷,以进行更好的训练。
之后,给定第 l 层的 FPN粗略的 proposal 的结果{(ψ^,ξ^)}k=1Tl\{(\hat{\psi}, \hat{\xi})\}_{k=1}^{T_{l}}{(ψ^​,ξ^​)}k=1Tl​​,第 k 个开始和结束边界被如下式构造:
Tsk=[ψk−w^kδa,ψk+w^kδb]Tek=[ξk−w^kδb,ξk+w^kδa]\begin{aligned} T_{s}^{k} &=\left[\psi_{k}-\frac{\hat{w}_{k}}{\delta_{a}}, \psi_{k}+\frac{\hat{w}_{k}}{\delta_{b}}\right]\\ T_{e}^{k} &=\left[\xi_{k}-\frac{\hat{w}_{k}}{\delta_{b}}, \xi_{k}+\frac{\hat{w}_{k}}{\delta_{a}}\right] \end{aligned} Tsk​Tek​​=[ψk​−δa​w^k​​,ψk​+δb​w^k​​]=[ξk​−δb​w^k​​,ξk​+δa​w^k​​]​
其中 w^k=ψk−ξk\hat{w}_{k}=\psi_{k}-\xi_{k}w^k​=ψk​−ξk​ 表示 proposal 的长度, δa,δb\delta_{a}, \delta_{b}δa​,δb​ 为超参数。然后,分别对起始区域和结束区域的fsf^sfs和fef^efe应用聚合函数A来收集相关的边界特征。尽管在以前的作品中有很多聚合函数A的实例化,如平均池、高斯加权平均和直接收集和连接,这些方法将从和动作边界无关的视频帧中引入无用的知识,从而影响模型的精确预测。
因此,我们提出了一种新的边界池化方法来得到时刻级别的边界特征 f^s,f^e∈RTl×C\hat{f}^{s}, \hat{f}^{e} \in \mathbb{R}^{T_{l} \times C}f^​s,f^​e∈RTl​×C, 如上图(b)。Boundary Pooling 的工作方式如下:
f^s(k,i)=max⁡j∈Tskfs(j,i)i=1,…,C,f^e(k,i)=max⁡j∈Tekfe(j,i)i=1,…,C,\begin{array}{ll} \hat{f}^{s}(k, i)=\max _{j \in T_{s}^{k}} f^{s}(j, i)\quad i=1, \ldots, C, \\ \hat{f}^{e}(k, i)=\max _{j \in T_{e}^{k}} f^{e}(j, i) \quad i=1, \ldots, C, \end{array} f^​s(k,i)=maxj∈Tsk​​fs(j,i)i=1,…,C,f^​e(k,i)=maxj∈Tek​​fe(j,i)i=1,…,C,​
其中 f~s,f~e\tilde{f}^{s}, \tilde{f}^{e}f~​s,f~​e 为图像帧特征通过与上述 FPN 特征的一系列相同的特征提取操作得到的特征。最大化的目的是为沿时间区域的每个通道选择最大的激活细胞,即最显著的时刻。随着FPN越来越深,时间维度减小到太小,以至于边界池无法找到合适的边界。因此,我们通过对底部FPN特征应用上采样和多个卷积,添加了一个共享的帧级特征,从这些特征中提取起始和结束帧级特征,为每个提议使用与等式相同的投影和池化过程.
经过边界池化后,通过将原始特征和所有边界特征连接起来,构建细化后的特征。应用时间卷积来减少通道:

其中,·||·表示通道级连接。最后, 上述操作得到的这些特征被送到时序卷积来预测边界的偏移量 (Δψ^,Δξ^)(\Delta \hat{\psi}, \Delta \hat{\xi})(Δψ^​,Δξ^​), 并且得到的边界的偏移量还可以被送到粗略 proposal 提出阶段的网络来得到一个调整后的边界值 (ψ~,ξ~)(\tilde{\psi}, \tilde{\xi})(ψ~​,ξ~​), 以及动作类别分数 y^R\hat{y}^{R}y^​R 。

Boundary Consistency Learning

虽然边界池可以提取最显著的特征,但不能保证池化后的特征代表真实的动作边界。这样的特性是关键的,因为如果边界池集中在一个背景框架上,模型就不能有足够的有用信息,从而被误导到错误的结果。为了规范我们的边界池,我们进一步提出了边界一致性学习(BCL),它有两个组成部分:激活引导学习和边界对比学习。
Activation Guided Learning:具体来说,我们重新缩放敏感特征fs和fe,并取通道级的平均值:

这两个特征可以看作是揭示开始或结束时刻发生概率的置信度。我们可以通过以下定义得到GT:

式中,B(·)表示邻居,I(·)为指标函数。然后,我们就可以计算出交叉熵了:

其中,BCE表示二进制交叉熵。以gs和ge为指导,我们可以限制该特征在每个动作的发生和关闭时具有高激活度。
Boundary Contrastive Learning:考虑一个包含动作实例a和其他背景的视频X。如果我们分割动作并填充背景的随机部分,我们将有两个不完整的动作片段A1,A2和背景Bg。将这三个区域应用边界池会得到三对特征。一般来说,由于A1和A2是连续的,敏感特性应该彼此相似。然而,当模型在背景上学习采用高激活时,这一特性可能会被打破。因此,对这些特征应用对比学习,扩大动作片段的敏感特征与背景之间的距离,是保证特征合适的一个好方法。在形式上,它可以通过利用以下三重目标函数来实现:

总之, AFSD 是第一个 anchor-free 的单阶段时序动作定位方法。其中, AFSD 模型包括一个端到端 basic 预测器和一个 saliency-based Refinement Module。而在 saliency-based Refinement Module 中提出了一个新 Boundary Pooling 方法以及一个保持边界一致性模型训练技巧。且该模 型在 THUMOS14 上取得了显著的结果, 在 ActivityNet1.3 上也取得了较好的结果。这些结果表 明, anchor-free模型是解决 TAL 的一个好方法。

实验细节

数据预处理。以每秒 10 帧 (10 fps) 的帧率对 THUMOS14 的 RGB 帧和光流帧进行采样,并
将视频分割成片段。每个片段 T 的长度被设置为 256 帧。相邻片段有 m 帧的时间重叠,在训练中 m 设置为 30,在测试中 m 设置为 128。帧的长、宽被设置为 96。训练中使用随机裁剪、水平翻转作为数据增广。为了提取视频片段的特征,本实验中对一个经过 Kinetics数据集预训练的 I3D模型进行了微调。
实验参数设置及细节。训练。使用 Adam[13] 优化器,进行了 16 个 epoches 的训练,learning rate(学习率) 为 10−5,weight decay(重量衰减) 为 10−3、batch size(批量大小) 被设置为 1。其余有关损失函数的参数设置与 AFSD原文一致。测试。模型的输出为 RGB 帧和光流帧的模型预测结果的平均。也即是需要分别将 RGB 帧和光流帧作为输入训练得到两个不同的模型,再在测试阶段对进行两者的输出进行取平均操作来综合结果,以获得最终的动作类别以及起止时间。soft-NMS 中的 t-IoU 阈值设置为 0.5。
实验结果及分析。以 mAP 为指标的实验结果如下表。由表可以看出,作为第一个 TAL 任务下
的 anchor-free 模型的 AFSD 在只用 RGB 帧或者光流帧时,mAP 较低,但是也几乎与 GTAN
持平。而使用 RGB 帧加光流帧的综合模型时,mAP 大幅度提升,达到了 52.0,超过了之前的
模型。分析原因,可能是 RGB 帧主要提供原始图像数据,而光流帧侧重于两帧之间的变化,两者结合更利于 TAL 任务。由此可见,anchor-free 的模型也是一种很好的模型,它在没有大量的anchor 的情况下,性能甚至超过了 anchor-base 的方法。
结果可视化分析。如下图,左上角的图为一段较长动作,约 40 秒,模型对结束时刻预测较
好,但对开始时刻预测不准确;其余图动作时间约 10 秒,模型对右上角的动作开始和结束预测
较好,而对下方图都较差。

Learning salient boundary feature for anchor-free temporal action localization AFSD阅读笔记及代码复现相关推荐

  1. P-GCN:Graph Convolutional Networks for Temporal Action Localization 2019 ICCV

    论文下载链接:https://arxiv.org/pdf/1911.11462.pdf 1 摘要 大多数最先进的行为定位系统都是单独处理每个动作proposal,而不是在学习过程中显式地利用它们之间的 ...

  2. Background Suppression Network for Weakly-supervised Temporal Action Localization

    Background Suppression Network for Weakly-supervised Temporal Action Localization 提出问题: 弱监督视频动作定位中,先 ...

  3. Temporal action localization in untrimmed videos via Multi-stage CNNs SCNN论文阅读笔记

    文章标题:Temporal Action Localization in Untrimmed Videos via Multi-stage CNNs 文章链接:Shou_Temporal_Action ...

  4. RFA-Net: Residual feature attention network for fine-grained image inpainting 论文阅读笔记

    RFA-Net: Residual feature attention network for fine-grained image inpainting 论文阅读笔记 摘要 尽管大多数使用生成对抗性 ...

  5. Learning from Synthetic Data for Crowd Counting in the Wild 论文阅读笔记

    Learning from Synthetic Data for Crowd Counting in the Wild 论文阅读笔记 发表:CVPR 2019 人群计数任务在多变的环境,大范围的人群中 ...

  6. 时序动作定位:Rethinking the Faster R-CNN Architecture for Temporal Action Localization(TAL-Net)

    这篇是2018CVPR的文章,论文下载链接: http://cn.arxiv.org/pdf/1804.07667.pdf 1 背景 1.1 Faster R-CNN vs TAL-Net 得益于Fa ...

  7. 时序动作定位|使用 ‘注意力机制’ 的弱监督时序动作定位顶会论文理解笔记(Weakly-Supervised Temporal Action Localization)

    目录 Weakly Supervised Action Localization by Sparse Temporal Pooling Network(CVPR 2018) W-TALC: Weakl ...

  8. 《Feature Pyramid Networks for Object Detection》论文阅读笔记

    FPN 很多论文中都会采用含有FPN的backbone进行特征提取,因为FPN使用特征金字塔结构,将low-level的特征和high-level的特征进行融合,能提取更加准确的位置等特征信息. 所以 ...

  9. 【阅读笔记】《TDN: Temporal Difference Networks for Efficient Action Recognition》阅读笔记

    <TDN: Temporal Difference Networks for Efficient Action Recognition> 论文连接:https://arxiv.org/ab ...

最新文章

  1. 用 Pytorch 理解卷积网络
  2. 微生物生态学中的挑战:建立对于群落功能与动态的预测性认识
  3. assignment makes pointer from integer without a...
  4. 自定义Adapter中实现startActivityForResult的分析
  5. PowerDesigner教程系列(三)概念数据模型
  6. Java 11:运行单文件程序和“ shebang”脚本
  7. 轻量级代码生成器-OnlyCoder 第一篇
  8. python html转换为普通文本_将HTML表转换为可读的纯文本的Python解决方案
  9. 笨办法学 Python · 续 练习 24:URL 快速路由
  10. 【金融申请评分卡】数据准备 - 缺失值数据清洗
  11. 论文笔记之RL优化——高斯平滑的Q函数
  12. MySQL数据库中主键和候选键的区别?
  13. python基础之字典函数(12)
  14. ASA防火墙NAT发布失效
  15. 光刻机巨头ASML爆料:芯片太缺,都开始拆洗衣机了!
  16. day10图书编辑删除 字段参数choise(重要)多对多三种创建方式 ajax语法结构
  17. 性能服务器可以同时标注吗,关于服务器性能的一些思考
  18. 哈夫曼信源编码matlab,HomeWork4.m
  19. C++笔记--Linux网络编程(15-0)-socket(供自查,文档说明)
  20. Oasis montaj无法计算均衡重力异常

热门文章

  1. JS输出所有的水仙花数
  2. linux互信,Linux 下实现SSH互信
  3. shell编程计算1-1000中所有3或5的倍数之和
  4. mac catalina有道词典闪退解决方法
  5. 【渗透实战】日常挖洞第二期_旁站注入“花式”漏洞拿下大型服务器
  6. 不知名菜鸟的day5
  7. 基恩士PLC导通检测程序
  8. 如何寻找外链资源?SEO优化最全的外链资源
  9. centernet: objects as points
  10. python 抓取网页 库_5种流行的Web抓取Python库,你用过哪种?