(IEEE 2024)双池化时序注意力模块DPTAM,即插即用,即用即涨点

文摘   2025-01-09 17:20   上海  

论文介绍

题目:MIE-Net: Motion Information Enhancement Network for Fine-Grained Action Recognition Using RGB Sensors

论文地址:MIE-Net: Motion Information Enhancement Network for Fine-Grained Action Recognition Using RGB Sensors | IEEE Journals & Magazine | IEEE Xplore

QQ深度学习交流群:994264161

扫描下方二维码,加入深度学习论文指南星球!

加入即可获得,模块缝合、制作、写作技巧,学会“结构”创新、“创新点”创新,从三区到顶会,小论文大论文,毕业一站式服务

创新点

  • 提出了一种新型网络架构MIE-Net提出了一种运动信息增强网络(MIE-Net),结合RGB特征和运动增强特征,能够在端到端框架中进行细粒度动作识别。包含两个创新模块:自适应融合模块(AFM)双池化时序注意模块(DPTAM)

  • 自适应融合模块(AFM)通过选择性提取RGB特征与运动增强特征之间的关系,强化不同特征之间的信息交互,提升了融合特征的时空表示能力。

  • 双池化时序注意模块(DPTAM)在通道维度实现时序建模,提取细微特征,并可灵活嵌入现有的2D CNN骨干网络,如ResNet-50,而无需显著改变网络拓扑。

  • 构建了一个新的数据集SLJD收集了包含超过1000段视频的站立跳远数据集,具有背景无偏性强的特点,用于评估模型的鲁棒性和有效性。

  • 数据集提供了细粒度动作标注,如起跳、腾空等阶段,为细粒度动作分析提供了理想的验证平台。

  • 实验验证和性能提升在SLJD、Something-Something v2和Diving48等数据集上,MIE-Net的准确率超越了大多数现有的最先进方法。提供了更高的识别准确率,同时保持了较低的计算开销(FLOPs)。

方法

整体架构

       MIE-Net 模型是一种端到端的细粒度动作识别框架,通过视频帧采样生成 RGB 特征和运动增强特征,利用自适应融合模块(AFM)对两者进行交互式融合,再通过双池化时序注意模块(DPTAM)在时序和通道维度进行建模,增强时空特征表达。融合后的特征输入到以 ResNet-50 为主干网络的架构中,最终通过全连接层输出分类结果,实现高效且精准的动作识别。

1. 输入处理与视频分段

  • 输入视频序列 VV 被分为 TT 个等长的段,每段从连续的四帧中随机选取一帧生成 RGB特征 XRGBX_{\text{RGB}}

  • 使用 持续显著性模块(PA Module) 处理每段的四帧,生成 运动增强特征 XMIEX_{\text{MIE}},捕获相邻帧之间的细微动作变化和边界信息。


2. 特征融合模块:自适应融合模块(AFM)

  • 功能:融合RGB特征和运动增强特征,增强特征之间的交互关系。

  • 具体过程

  1. 首先将 XRGBX_{\text{RGB}} 和 XMIEX_{\text{MIE}}进行逐元素相加,生成初步融合特征 XNEWX_{\text{NEW}}

  2. 使用通道注意机制生成通道权重 MM,通过空间维度压缩特征以提取全局信息。

  3. 对RGB特征和运动增强特征分别施加注意权重,得到加权的 X^RGB\hat{X}_{\text{RGB}} 和 X^MIE\hat{X}_{\text{MIE}}

  4. 最后将两者按照权重进行加权连接,得到融合后的特征 X^ADP\hat{X}_{\text{ADP}}

3. 特征提取与时序建模:双池化时序注意模块(DPTAM)

  • 功能:增强模型对时序和通道维度信息的建模能力。

  • 具体过程

  1. 输入的4D张量 X0X_0 通过维度置换生成 X1X_1,对其空间信息进行全局描述。

  2. 使用1D卷积在时序维度上增强通道依赖性,并通过注意机制生成时序-通道的权重 F1F_1 和 F2F_2

  3. 结合时序权重和通道权重,进一步优化特征表示。

  4. 通过反置换操作恢复原始张量的形状,使其与后续网络兼容。

4. 主干网络:ResNet-50

  • 模型的主干网络为 ResNet-50,并在其Bottleneck模块中嵌入DPTAM(阶段2到阶段5)。

  • DPTAM通过局部和全局操作增强特征提取能力,在不显著改变网络拓扑的情况下提升了网络性能。

5. 分类与输出

  • 最终,融合后的特征通过全连接层进行分类,输出每个视频的动作类别分数。

即插即用模块作用

DPTAM 作为一个即插即用模块

  • 细粒度动作识别任务

  •        在需要捕获动作的细微变化(如肢体小幅度动作或复杂运动模式)的场景中,DPTAM 可以帮助模型提取局部和全局的时空特征。适用于诸如 SLJD(站立跳远数据集)和 Diving48(跳水数据集)等对动作细节敏感的数据集。

  • 时空特征建模任务

  •       适用于视频分析任务中需要建模时间维度信息的场景,例如动作分类、时序动作检测和视频理解任务。可用于动态视频中同时需要捕获空间结构(如人体姿态)和时间变化(如动作连续性)的任务。

  • 对效率有要求的模型部署场景

  •       由于其计算成本相对较低(比复杂的 NonLocal 模块更高效),DPTAM 适合资源受限的设备(如嵌入式系统或边缘设备)上的模型优化和部署。

  • 视频分类和事件检测任务

  •       在长时间或短时间跨度的视频中捕获时间依赖性,例如事件边界检测或视频摘要生成。

消融实验结果

  • 内容:比较了在 ResNet-50 的残差块中,不同位置插入 DPTAM 对模型性能的影响(DPTAM-1、DPTAM-2、DPTAM-3)。

  • 说明

    • 在 SLJD 数据集中,DPTAM 插入到第一个 1×11 \times 1 卷积后(DPTAM-1)性能最佳。

    • 在 Diving48 数据集中,插入到最后一个 1×11 \times 1 卷积后(DPTAM-3)效果更好。

    • 结果体现了不同任务对时序和通道建模的需求不同。

  • 内容:评估了五种特征融合策略,包括简单的逐元素加法、通道维度平均池化、加权连接等。

  • 说明

    • AFM 的融合策略(MIE&RGB_AS_CAT)在 SLJD 和 Diving48 数据集上均表现最佳。

    • 该结果表明 AFM 能有效增强 RGB 和运动增强特征之间的交互。

    • 内容:比较了 Squeeze-and-Excitation(SE)模块和 NonLocal(NL)模块的效果。

    • 说明

      • DPTAM 的性能优于 SE 和 NL 模块,同时保持了较低的计算开销。

      • 表明 DPTAM 在时空特征建模上具有更高的效率和精确性。

即插即用模块

import torch
import torch.nn as nn
import torch.nn.functional as F
import torchvision

class DPTAM(nn.Module):
    def __init__(self,
                 in_channels,
                 n_segment,
                 kernel_size=3,
                 stride=1,
                 padding=1):
        super(DPTAM, self).__init__()
        self.in_channels = in_channels
        self.n_segment = n_segment
        self.kernel_size = kernel_size
        self.stride = stride
        self.padding = padding
        print('DPTAM with kernel_size {}.'.format(kernel_size))

        self.conv_mask = nn.Conv2d(in_channels, 1, kernel_size=3)#context Modeling
        self.softmax = nn.Softmax(dim=2)
        self.p1_conv1= nn.Conv1d(in_channels , in_channels, 1, bias=False)


        self.dptam = nn.Sequential(
            nn.Conv1d(in_channels,
                      in_channels // 4,
                      kernel_size,
                      stride=1,
                      padding=kernel_size // 2,
                      bias=False), nn.BatchNorm1d(in_channels // 4),
            nn.ReLU(inplace=True),
            nn.Conv1d(in_channels // 4, in_channels, 1, bias=False),
            nn.Sigmoid())

    def forward(self, x):
        nt, c, h, w = x.size()

        t = self.n_segment
        n_batch = nt // t
        new_x = x.view(n_batch, t, c, h, w).permute(0, 2, 1, 3,4).contiguous()
        out = F.adaptive_avg_pool2d(new_x.view(n_batch * c, t, h, w), (1, 1))

        x_22=out.view(-1,c,t)
        x22_c_t = self.p1_conv1(x_22)
        x22 =x_22.mean(2,keepdim=True)
        x22 = self.p1_conv1(x22)
        x22 = x22_c_t * x22
        x22= x_22+x22

        local_activation = self.dptam(x22).view(n_batch, c, t, 1, 1)
        new_x = new_x * local_activation

        out = new_x.view(n_batch, c, t, h, w) #光local
        out = out.permute(0, 2, 1, 3, 4).contiguous().view(nt, c, h, w)

        return out



if __name__ == '__main__':
    n_segment = 16  

    block = DPTAM(in_channels=4, n_segment=n_segment)
    input = torch.rand(16, 4, 16, 16)
    output = block(input)
    print(input.size())
    print(output.size())

便捷下载方式

浏览打开网址:https://github.com/ai-dawang/PlugNPlay-Modules

更多分析可见原文


ai缝合大王
聚焦AI前沿,分享相关技术、论文,研究生自救指南
 最新文章