AtentionUnet介绍

简介

        AttentionUnet 是一种基于经典 U-Net 架构改进的医学图像分割模型,通过引入注意力机制(Attention Gate, AG)来增强模型对目标区域的聚焦能力,抑制无关背景信息的干扰。其主要改进集中在跳跃连接(Skip Connection)部分,通过注意力门控动态调整特征图的权重,提升分割精度。AttentionUnet网络结构如下图所示:

注:关于U-NET的讲解可以看博主的这篇文章

https://blog.youkuaiyun.com/qq_73038863/article/details/151991801?fromshare=blogdetail&sharetype=blogdetail&sharerId=151991801&sharerefer=PC&sharesource=qq_73038863&sharefrom=from_link

网络结构

        可以看出,AttentionUnet对于U-NET的改进点主要在于添加了注意力门控(Attention Gate)。在 U-Net 的跳跃连接中,编码器(下采样)的特征图会直接与解码器(上采样)的特征图拼接。

        而在AttentionUnet 在拼接前加入注意力门控模块,动态计算编码器特征图的权重,加权处理后的编码器特征与解码器(上采样后的)特征拼接,替代原始 U-Net 的直接拼接

        这种机制能自动聚焦于目标区域,减少背景噪声的影响。也可以理解为抑制无关区域、突出目标结构

        AG的结构图如下图所示:

        g和xl分别为skip connection的输出和下一层的输出。

        示意图如下所示:

        Wg和Wx经过相加,ReLU激活,1x1x1卷积,Sigmoid激活,生成一个权重信息,将这个权重与原始输入xl相乘,得到了对xl的attention激活。这就是Attenton Gate的思想。

简单代码示例

        AG的简单代码示例(基于Pytorch框架):

class AttentionGate(nn.Module):
    def __init__(self, in_channels, gating_channels):
        super().__init__()
        self.W_g = nn.Conv2d(gating_channels, in_channels, kernel_size=1)
        self.W_x = nn.Conv2d(in_channels, in_channels, kernel_size=1, stride=2)
        self.psi = nn.Conv2d(in_channels, 1, kernel_size=1)
        self.relu = nn.ReLU()
        self.sigmoid = nn.Sigmoid()

    def forward(self, x, g):
        g_conv = self.W_g(g)
        x_conv = self.W_x(x)
        combined = self.relu(g_conv + x_conv)
        attention = self.sigmoid(self.psi(combined))
        return x * attention
 
Attention UNet是基于UNet网络结构的一种像分割方法,其中引入了注意力机制(Attention Mechanism)。在Attention UNet中,每个下采样层和上采样层之间都添加了一个Attention Gate,用于控制信息的传递和选择。 Attention Gate的运算过程如下: 1. 对于下采样层的特征 $x$,进行全局池化(Global Average Pooling),得到其平均值 $\mu$ 和标准差 $\sigma$。即: $$ \mu_x = \frac{1}{H \times W} \sum_{i=1}^{H} \sum_{j=1}^{W} x_{ij} $$ $$ \sigma_x = \sqrt{\frac{1}{H \times W} \sum_{i=1}^{H} \sum_{j=1}^{W} (x_{ij} - \mu_x)^2} $$ 其中 $H$ 和 $W$ 分别表示特征的高度和宽度。 2. 将 $\mu$ 和 $\sigma$ 通过两个全连接层(FC layer)映射到一个 $1 \times 1$ 的特征,分别得到 $\theta_{\mu}$ 和 $\theta_{\sigma}$。即: $$ \theta_{\mu} = FC(\mu) $$ $$ \theta_{\sigma} = FC(\sigma) $$ 3. 对于上采样层的特征 $y$,同样进行全局池化和特征映射,得到 $\phi_{\mu}$ 和 $\phi_{\sigma}$。 4. 将 $\theta_{\mu}$ 和 $\phi_{\mu}$ 以及 $\theta_{\sigma}$ 和 $\phi_{\sigma}$ 分别进行点乘运算,得到两个特征。即: $$ f_{\mu} = \theta_{\mu} \odot \phi_{\mu} $$ $$ f_{\sigma} = \theta_{\sigma} \odot \phi_{\sigma} $$ 其中 $\odot$ 表示点乘运算。 5. 将 $f_{\mu}$ 和 $f_{\sigma}$ 通过一个全连接层映射到一个 $1 \times 1$ 的特征,然后通过 sigmoid 函数进行归一化,得到注意力权重 $w$。即: $$ w = sigmoid(FC(f_{\mu} + f_{\sigma})) $$ 6. 将 $y$ 和 $w$ 进行 Hadamard 乘积(element-wise multiplication),得到加权后的特征 $y'$。即: $$ y' = y \odot w $$ 7. 将 $y'$ 和下采样层的特征 $x$ 拼接在一起,并通过一个 $3 \times 3$ 的卷积层进行特征融合,得到最终的特征 $z$。即: $$ z = Conv([y', x]) $$ Attention Gate的作用是通过对下采样层和上采样层的特征进行全局池化和特征映射,得到两个特征向量,然后通过点乘运算计算两个向量的相似度,然后通过一个全连接层和 sigmoid 函数将相似度归一化为注意力权重,最后将权重与上采样层的特征进行 Hadamard 乘积,得到加权后的特征。这样可以使模型更加关注需要分割的目标区域,从而提高分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值