全局响应归一化GRN解析

全局响应归一化(Global Response Normalization,GRN)是ConvNeXtV2中提出的一种归一化方法,其实也就是一种注意力机制,跟视觉中常用的SEECA、CBAM的作用一样,就是对特征进行重标定。
GRN的pytorch代码如下:

import torch
from torch import nn as nn


class GlobalResponseNorm(nn.Module):
    """ Global Response Normalization layer
    """
    def __init__(self, dim, eps=1e-6, channels_last=True):
        super().__init__()
        self.eps = eps
        if channels_last:
            self.spatial_dim = (1, 2)
            self.channel_dim = -1
            self.wb_shape = (1, 1, 1, -1)
        else:
            self.spatial_dim = (2, 3)
            self.channel_dim = 1
            self.wb_shape = (1, -1, 1, 1)

        self.weight = nn.Parameter(torch.zeros(dim))
        self.bias = nn.Parameter(torch.zeros(dim))

    def forward(self, x):
        x_g = x.norm(p=2, dim=self.spatial_dim, keepdim=True)
        x_n = x_g / (x_g.mean(dim=self.channel_dim, keepdim=True) + self.eps)
        out=x + torch.addcmul(self.bias.view(self.wb_shape), self.weight.view(self.wb_shape), x * x_n)
        return out

if __name__ == "__main__":
    net =  GlobalResponseNorm(dim=96,channels_last=False)
    x = torch.randn(5, 96, 112, 112)
    out = net(x)

GRN主要由全局特征聚合、特征归一化和特征校准三部分组成。
其中全局特征聚合的代码是:

x_g = x.norm(p=2, dim=self.spatial_dim, keepdim=True)

通过在H和W维度上使用L2范数,把空间特征聚合成为一个向量,其实也可以使用类似SE里的全局平均池化层,主要用于获取全局性的通道信息。

特征归一化的代码是:

x_n = x_g / (x_g.mean(dim=self.channel_dim, keepdim=True) + self.eps)

用于计算当前通道相对于其他通道的相对重要性,其值在0~1之间,该方法类似于SE里的sigmoid输出。

特征校准的代码是:

out=x + torch.addcmul(self.bias.view(self.wb_shape), self.weight.view(self.wb_shape), x * x_n)

这就是一个特征重标定的过程,特征归一化输出的其实是一个权重值,这个值载荷输入x相乘就能获得每个通道的重要程度,GRN中还加入了两个可学习参数weight和bias用于优化。
同时GRN里还使用了跳跃连接,论文说是为了更好的地用于训练优化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值