原文链接:https://arxiv.org/abs/2104.02967
参考博客:https://blog.csdn.net/taoyc888888/article/details/127072042
本篇笔记是我一开始读论文时的笔记,现在更新了读了代码之后的做的模型细节图,
https://blog.csdn.net/m0_60273616/article/details/133101894
感兴趣的可以参考看看!
ACM-Net: Action Context Modeling Network for Weakly-Supervised Temporal Action Localization论文总结
一、任务背景:
传统方法主要关注仅有单一注意力分支和类别激活序列的前景和背景帧分离。然而,除了独特的前景和背景框架外,还有大量语义模糊的动作上下文。将这些上下文帧分组到同一个背景类是没有意义的,因为它们在语义上与特定的动作类别相关。因此,仅使用单一类别激活序列来抑制动作上下文帧是具有挑战性的。
二、研究内容:
针对这一问题,本文提出了一个动作-上下文建模网络ACM - Net,该网络集成了一个三分支注意力模块,用于同时度量每个时间点是动作实例、上下文或非动作背景的可能性。然后基于得到的三分支注意力值,构建了三分支类激活序列来分别表示动作实例、上下文和非动作背景。
1、动作上下文建模网络
a)特征提取:
- 经过预训练的I3D模型提取,得到片段级特征F
b)特征嵌入:
- 为了将提取的视频特征F映射到任务特定的特征空间,引入特征嵌入模块。具体地,使用一组卷积层和非线性激活函数将原始视频特征F映射到任务特定的视频特征X。
- 动作类别激活建模:为了定位未修剪视频V中的动作实例,基于嵌入的视频特征X,首先应用片段级动作分类分支来获得类别激活序列( CAS )。尽管该CAS不能很好地抑制那些语义模糊的动作上下文,但是它能够抑制动作相关和非动作相关的帧。将这个CAS作为动作实例的初始指标。具体来说,应用了一个多层的初始化来将嵌入的特征投影到动作类别空间。输出表示每个动作类随时间变化的分类logit。
c)动作上下文注意力建模:
-
给出定义:除了具有高区分度的动作实例帧和非动作背景帧外,还存在许多模糊帧,如与动作相关的背景场景模糊帧或不完整动作模糊帧,将其定义为action-contexts。
-
为了实现动作实例和上下文与初始CAS的分离,首先引入一个三分支的片段级动作注意力模块来检测类不可知的动作实例、语义不明确的上下文和非动作背景帧。具体来说,我们应用单个卷积层和softmax函数来衡量。三分支注意力模块的输出为 A = a t t i n s , a t t c o n , a t t b a k A={att_{ins},att_{con},att_{bak}} A=attins,attcon,attbak,分别表示片段s成为动作实例、动作上下文或背景场景的可能性。形式上,我们将三分支片段级动作注意力模块表示如下:
-
-
其中θatt表示三分支动作上下文注意力分支的可训练卷积层参数。
-
然后基于得到的注意力值,为了区分动作实例、上下文和动作背景框架,我们分别构建了新的三分支类激活序列 C A S i n s , C A S c o n , C A S b a k CAS_{ins},CAS_{con},CAS_{bak} CASins,CAScon,CASbak 。CASins的表达式简单表示为:
-
-
其中 C A S i n s CAS_{ins} CASins 仍然给出了每个片段的类激活分数,但是它可以抑制那些模棱两可的动作上下文片段的激活分数,并且对于动作实例片段仍然保持高值。类似地,对于CAScon,它可以忽略那些动作实例帧,而关注动作相关的上下文片段。而对于CASbak,加权类激活序列也会更加关注那些无动作背景片段。
d)多实例学习
-
具体来说,在MIL中,个体样本有两个包,分别是正包和负包。一个正包至少包含一个正实例,一个负包不包含正实例。MIL的目标除了对包进行分类,还为了区分每个实例是正的还是负的。
-
在这种情况下,将未修剪的视频V看作是一包视频片段,每个片段实例由对应的类激活分数表示。为了衡量每个CAS的损失,我们将每个动作类别的top - k动作分类得分和所有视频片段进行聚合,然后将其平均,构建视频级别的类激活得分。
-
-
k是超参数,与视频长度成正比。
-
Φ是包含c类k个片段动作分类分数的子集
-
然后,我们对聚合的平均top - kact分数应用softmax函数来获得每个动作类的视频级动作概率:其中p表示视频V包含动作类c的概率。
-
总之:三个分支经过MIL得到了三个概率,获得视频级别的概率分布。
-
我们将预测的视频级动作概率分布pc与真实视频动作概率分布yc之间的交叉熵损失函数应用于视频中不同动作类别的分类。对于 C A S i n s CAS_{ins} CASins 如下公式表示分类交叉熵损失
-
-
其中,Yc是视频V的第c类的归一化视频级标签。
-
我们设置视频级别的标签 Y i n s = [ y ( n ) = 1 , y ( C + 1 ) = 0 ] Y^{ins} = [y(n)=1,y(C+1)=0] Yins=[y(n)=1,y(C+1)=0]
-
由于采用了动作实例的注意力权重, C A S i n s CAS^{ins} CASins 中非动作背景和模糊动作上下文片段得到了抑制。
-
通过类似的方法,我们可以分别得到交叉熵法损耗Lcon和Lbak。设置视频级标签 Y c o n = [ y ( n ) = 1 , y ( C + 1 ) = 1 ] Y^{con} = [y(n)=1,y(C+1)=1] Ycon=[y(n)=1,y(C+1)=1]
-
Y b a k = [ y ( n ) = 0 , y ( C + 1 ) = 1 ] Y^{bak} = [y(n)=0,y(C+1)=1] Ybak=[y(n)=0,y(C+1)=1]
-
因为随着注意力值的加权,CAScon和CASbak更加关注动作上下文和背景场景,而不是动作实例片段。
-
总的分类损失 L c l s L_{cls} Lcls 为:
2、优化对象
除了上面的分类损失之外,作者还添加了额外的损失函数,提高了模型的整体性能。主要分为三个部分
-
注意引导损失Attention Guide Loss:用于约束 C A S i n s CAS_{ins} CASins 跟踪动作实例注意力
- 为了使动作分类分支在片段级别上区分动作实例片段和那些模棱两可的动作上下文帧,除了应用视频级别的交叉熵分类损失 L c l s L_{cls} Lcls ,引入了注意力引导损失。为每个视频片段设置动作实例注意力序列 a t t i n s att_{ins} attins 作为二进制指标,并使用它来指导加权 C A S i n s CAS_{ins} CASins 在片段级别抑制动作上下文和背景片段。
- 式中: p i n s p^{ins} pins 为加权 C A S i n s CAS_{ins} CASins 上应用softmax函数的预测片段级动作概率分布, p C + 1 i n s p^{ins}_{C+1} pC+1ins 表示片段s不包含动作实例的可能性, a t t i n s att_{ins} attins为片段s处的动作实例注意力分支值。通过最小化 L g u i L_{gui} Lgui ,我们可以指导网络在片段级优化CAS。
-
动作特征分离损失Action Feature Separation Loss:用于分离特征范数空间中的动作实例、动作上下文和背景片段特征。
-
为了使嵌入的视频片段特征与动作实例、动作上下文、背景特征更具有可区分性,在特征范数空间引入动作特征分离损失 L f e a t L_{feat} Lfeat 。
-
m为预先定义的特征范数分离间隔超参数。和Xins、Xcon、Xbak是基于上述top - k机制构建的视频级动作实例、动作上下文和背景特征。
-
-
其中argsort是一个函数,它返回将按降序排列数组的索引,kins是一个预定义的超参数,与前面提到的k一样与视频片段长度T成正比。以类似的方式,可以分别获得视频级动作上下文特征Xcon和背景特征Xbak。(为什么要这样构建啊!!为什么就可以分离了啊!!!)
-
-
稀疏注意力损失Sparse Attention Loss::用于约束动作实例和动作上下文分支更关注动作相关的框架。
- 约束网络优化过程,该过程基于一个假设,即一个动作可以通过视频中的一个稀疏的关键片段子集来识别。
3、时序动作定位
- 在推理过程中,给定一个测试视频,我们首先应用动作实例注意力来分类测试视频。
- 然后对CASins和attins应用阈值策略进行动作定位。我们应用中提出的外-内-对比函数(Outer-Inner-Contrastive function)来获得每个检测到的动作实例的置信度分数 φi 。具体地,定义置信度分数为:
- 其中,α是用于组合CASins和注意力值attins的超参数系数
- t l = ( t e − t s ) / 5 t^l=(t^e-t^s)/5 tl=(te−ts)/5 表示膨胀的对比区域the inflated contrast area
- c i c_i ci 表示对应的动作实例类别。
- 值得注意的是,为了增加提名池,我们对CASins和attins使用多个阈值,然后执行非极大值抑制( NMS )来删除重叠的动作实例提议。
4、实验
-
**评价指标:**使用不同时间交并比( tIoU )阈值下的平均精度( mean Average Precision,mAP )来评估我们的弱监督时间动作定位性能,记为mAP @ tIoU,
- THUMOS - 14的t - IoU阈值为[ 0.1:0.1:0.7 ]
- ActivityNet的t - IoU阈值为[ 0.5:0.05:0.95 ]。
-
与现有的强监督和弱监督时序动作定位方法进行了比较。
-
在THUMOS - 14数据集上:即使与引入了更强监督(对于每个动作实例, SFNet引入了时间点标注)的SF - Net相比,仍然可以取得更好的性能。此外,可以观察到,该方法在t - IoU 0.5时甚至可以达到与最近的强监督方法相当的性能。
-
-
在ActivityNet - 1.3数据集。性能提升不如THUMOS - 14数据集显著。这可能是因为ActivityNet - 1.3中动作实例的真值结果不如THUMOS - 14数据集精确,ActivityNet - 1.3上的动作实例标注更容易包含一些模糊的动作上下文帧。
-
-
-
消融实验
- **动作上下文建模的有效性:**实现超过14%和6%的平均性能增益
-
-
值得注意的是,与引入Lbak cls的实验4相比,仅基于Lins cls和Lcon cls约束的实验3能够获得更好的性能。这可能是由于在不引入额外约束Ladd的情况下,网络无法对动作实例、上下文和背景片段进行更清晰的区分。
-
此外,我们可以观察到,在THUMOS - 14数据集上,仅基于Lins cls和Lcon cls约束,在不引入任何其他技巧或损失的情况下,我们可以获得与当前SOTA方法相当的性能,这进一步证明了动作上下文建模机制的有效性。
-
(也就是说,12.34作对比,发现引入损失函数只是刷新了数据,提高了性能,动作上下文机制才是模型整体提高的关键)
-
- 额外损失的有效性:引入了额外的约束Ladd来进一步提高时间动作检测性能,探索每一项损失函数的加入。
-
-
如表所示,Lgui和Lfeat均有利于提高时间动作定位性能。
-
然而,Lspa并不能单独提高性能,这可能是因为直接最小化时间注意力值会导致网络更多地关注那些动作显著片段而忽略那些判别性较差的动作片段。
-
将Lgui、Lfeat和Lspa组合在一起作为L add时,可以获得3.6 %的性能提升。
-
- 视频片段数量T的分析:自然视频在时间长度上总是变化的,然而在时间动作定位问题的弱监督形式下,在训练过程中只能访问视频级别的标签。因此,为了实现网络的并行优化,论文采用了基于线性插值的采样策略,使得所有的训练视频具有相同的时间维度T,对T进行了探索。
-
-
从表中的结果可以得出,T与检测性能的增长并不是线性相关的。当T较小时,增大T可以带来明显的性能增益(从T = 250到T = 500获得51 %的平均mAP提升),但当T超过一定值(对于THUMOS - 14数据集, T = 750)时,检测性能又开始下降。这可能的原因是当T较小时,对于大多数视频无法实现全采样,而当T超过一定值时,导致过采样,从而导致在训练时引入更多的模糊上下文片段。
-
- **动作上下文建模的有效性:**实现超过14%和6%的平均性能增益
-
举例证明,给出图来说明。
- 该模型在帮助过滤那些假阳性错误,并获得更准确的时间动作定位结果。
- 然而,有时会**抑制真实的动作实例帧。**可能的原因是,这些动作实例帧很模棱两可,类似于动作上下文帧。
三、创新点:
- 不同于以往将视频的帧分为唯一的前景和背景帧的方法,作者认为存在一些语义模糊的动作上下文帧。本文研究了动作上下文建模如何影响弱监督时序动作定位。
- 提出了ACM - Net网络,集成了一个类别不可知的三分支注意力模块来同时度量每个时间点包含动作实例、动作上下文和非动作背景帧的可能性。基于得到的注意力值,构建了三个分支类激活序列来实现动作实例、动作上下文和非动作背景的区分。
四、我的问答
-
该论文的灵感来源?
-
弱监督和有监督方法之间仍然存在巨大的性能差距。
-
-
作者认为原因可能在于未修剪视频中除了具有判别性的前景动作实例和静态的非动作背景帧外,还包含了大量语义模糊的动作上下文帧。直接将这些上下文帧分配给背景类是没有意义的,因为它们与动作相关,不与其他动作类别的上下文共享相同的语义信息。
-
-
区分上下文和动作实例难点在于?实现思路?
-
文章里没写难点,只说为他们单独建立了不同的分支,来输出注意力权重。
-
在交叉熵损失函数中设置不同的标签
- 动作实例分支标签 Y i n s = [ y ( n ) = 1 , y ( C + 1 ) = 0 ] Y^{ins} = [y(n)=1,y(C+1)=0] Yins=[y(n)=1,y(C+1)=0]
- 上下文标签 Y c o n = [ y ( n ) = 1 , y ( C + 1 ) = 1 ] Y^{con} = [y(n)=1,y(C+1)=1] Ycon=[y(n)=1,y(C+1)=1]
- 背景标签设置 Y b a k = [ y ( n ) = 0 , y ( C + 1 ) = 1 ] Y^{bak} = [y(n)=0,y(C+1)=1] Ybak=[y(n)=0,y(C+1)=1]
- 由于采用了动作实例的注意力权重, C A S i n s CAS^{ins} CASins 中非动作背景和模糊动作上下文片段得到了抑制。随着注意力值的加权, C A S c o n CAS^{con} CAScon 和 C A S b a k CAS^{bak} CASbak 更加关注动作上下文和背景场景,而不是动作实例片段。
-
引入损失函数 L g u i L_{gui} Lgui注意力引导损失。为每个视频片段设置动作实例注意力序列 a t t i n s att_{ins} attins 作为二进制指标,。通过最小化 L g u i L_{gui} Lgui ,可以指导网络在片段级优化CAS。
-
-
三个分支之间的关系?
- 输入的都是经过映射后的特征X
- 经过相同的步骤,得到注意力值-CAS-经过MIL-视频级概率分布
- 通过集成一个三分支注意力模块,以同时测量每个时间点成为动作实例、上值下文或非动作背景的可能性。然后,基于获得的三个分支注意力,构建三个分支类激活序列,分别表示动作示例,上下文和非动作背景。
-
如何建模的?
- 三分支注意力部分:单个卷积层和softmax函数
-
对于动作上下文的定义,和动作实例的界定如何给出的?
- 用图片示例来说明的(上面的图就是)。
- 作者提出,除了具有高区分度的动作实例帧和非动作背景帧外,还存在许多模糊帧,如与动作相关的背景场景模糊帧或不完整动作模糊帧。将所有与动作相关的模糊上下文帧都将其表示为action-contexts。
-
该论文的优点:
- 每个点都讲的清晰,综述,结构,优化,实验细节,公式
- 公开数据集的实验数据很完整
- 对于模糊和可能会有问题的实验数据,也给出了自己的解答。