• SRM : A Style-based Recalibration Module for Convolutional Neural Networks论文笔记


    整体结构图:
    在这里插入图片描述

    Style Pooling风格池部分:
    在这里插入图片描述

    Style Integration风格集成部分
    在这里插入图片描述

    1.提出了一个基于风格的重新校准模块(SRM),他通过利用中间特征映射的风格来自适应地重新校准。

    2.SRM首先通过样式池从特征图的每个通道中提取样式信息,然后通过独立于通道的样式集成估计每个通道的重校正权重。
    style pooling简单来说就是通过一个降维操作,可以有效的提取样式信息

    3.SRM将个体风格地相对重要性融入到特征图中,可以有效地增强CNN的表征能力。
    个人认为这个所谓的SRM与注意力机制很相似

    4.SRM动态地估计单个风格的相对重要性,然后根据风格的重要性重新调整特征映射的权重,这允许网络专注于有意义的风格,而忽略不必要的风格。
    重要性机制,其实也就是注意力机制

    5.SRM主要由两个主要部分组成:样式池(风格池style pooling)和样式集成
    风格池操作符通过总结跨空间维度的特征相应从每个通道中提取风格特征。
    样式集成运算符,通过操作利用样式特性生成特定示例的样式权重。样式权重最终重新校准特征映射,以强调或抑制它们的信息。

    6.SRM还提供了一种直观的解释通道再校准的效果:它通过调整特征响应的全局统计数据来控制风格的贡献,同时保持它们的空间配置。

    主要创新:提出了一个基于风格的特征重新校准模块,通过将风格融入到特征映射中来增强CNN的表征能力。

    风格:自适应实例归一化进一步表明,传输通道均值和标准差可以有效地改变图像风格。可以与生成对抗网络GANs相结合,通过调整中间层的样式来改进生成器

    注意力和特征重新校准:SE提出了一种信道级再校准算子,它包含了信道之间的相互作用。它首先使用全局平均池聚合空间信息,并使用完全连接的子网络捕获通道依赖关系。

    CBAM表明,通过利用最大池化并结合空间注意力模块,可以改进SE块。我们在没有渠道关系或空间注意的帮助下,根据利用风格信息重新制定了渠道明智的重新校准。

    提出了一种样式汇集方法,它优于我们设置中的标准全局平均或最大汇集方法,以及一种与通道无关的样式集成方法,它比完全连接的同类方法更轻量级

    模式化校准模块:我们采用每个特征图的通道统计量均值和标准差作为风格特征(即d = 2),d是风格特征的数量

    SRM代码:
    class SRMLayer(nn.Module):
        def __init__(self, channel, reduction=None):
            # Reduction for compatibility with layer_block interface
            super(SRMLayer, self).__init__()
    
            # CFC: channel-wise fully connected layer
            self.cfc = nn.Conv1d(channel, channel, kernel_size=2, bias=False,
                                 groups=channel)
            self.bn = nn.BatchNorm1d(channel)
    
        def forward(self, x):
            b, c, _, _ = x.size()
    
            # Style pooling
            # AvgPool(全局平均池化):
            mean = x.view(b, c, -1).mean(-1).unsqueeze(-1)
            # StdPool(全局标准池化)
            std = x.view(b, c, -1).std(-1).unsqueeze(-1)
            u = torch.cat((mean, std), -1)  # (b, c, 2)
    
            # Style integration
            # CFC(全连接层)
            z = self.cfc(u)  # (b, c, 1)
            # BN(归一化)
            z = self.bn(z)
            # Sigmoid
            g = torch.sigmoid(z)
    
    
            g = g.view(b, c, 1, 1)
            return x * g.expand_as(x)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
  • 相关阅读:
    第28期 | GPTSecurity周报
    canal
    程序员如何选择职业赛道?
    数说故事以领先的大数据分析及服务实践,实力入围「Cloud 100 China 2022」首届榜单
    Web 开发中 route 和 router 有什么区别?
    Opencv图像缩放和平移
    windows系统c语言编译器安装
    BLUE引擎变量数据分析
    【JavaEE初阶】 Callable 接口
    Maven简介与作用
  • 原文地址:https://blog.csdn.net/weixin_43898383/article/details/127753241