SENet,ResNet自学

SENet是一种提升网络性能的方法,通过Squeeze和Excitation操作建模特征通道间的关系,学习每个通道的重要性,增强有用特征并抑制无用特征。Squeeze操作提供全局感受野,Excitation操作通过全连接层学习通道相关性,最终通过乘法对特征进行重标定。
摘要由CSDN通过智能技术生成

已经有很多工作在空间维度上来提升网络的性能。那么很自然想到,网络是否可以从其他层面来考虑去提升性能,比如考虑特征通道之间的关系?我们的工作就是基于这一点并提出了 Squeeze-and-Excitation Networks(简称 SENet)。在我们提出的结构中,Squeeze 和 Excitation 是两个非常关键的操作,所以我们以此来命名。我们的动机是希望显式地建模特征通道之间的相互依赖关系。
具体来说,就是通过学习的方式来自动获取到每个特征通道的重要程度,然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征。
在这里插入图片描述
给定一个输入 x,其特征通道数为 c_1,通过一系列卷积等一般变换后得到一个特征通道数为 c_2 的特征。与传统的 CNN 不一样的是,接下来我们通过三个操作来重标定前面得到的特征。
首先是 Squeeze 操作,我们顺着空间维度来进行特征压缩,将每个二维的特征通道变成一个实数,这个实数某种程度上具有全局的感受野,并且输出的维度和输入的特征通道数相匹配。它表征着在特征通道上响应的全局分布,而且使得靠近输入的层也可以获得全局的感受野。
其次是 Excitation 操作,它是一个类似于循环神经网络中门的机制。通过参数 w 来为每个特征通道生成权重,其中参数 w 被学习用来显式地建模特征通道间的相关性。
最后是一个 Reweight 的操作,我们将 Excitation 的输出的权重看做是进过特征选择后的每个特征通道的重要性,然后通过乘法逐通道加权到先前的特征上,完成在通道维度上的对原始特征的重标定。
首先Ftr这一步是转换操作(严格讲并不属于SENet,而是属于原网络,可以看后面SENet和Inception及ResNet网络的结合),在文中就是一个标准的卷积操作而已
在这里插入图片描述
那么这个Ftr的公式就是下面的公式(卷积操作,vc表示第c个卷积核,xs表示第s个输入,vcs 代表一个3D卷积核),在这里插入图片描述
*表示卷积操作
以卷积为例,卷积核为
在这里插入图片描述
,其中vc 表示第c个卷积核。那么输出 在这里插入图片描述

Ftr得到的U就是Figure1中的左边第二个三维矩阵,也叫tensor,或者叫C个大小为H*W的feature map。而uc表示U中第c个二维矩阵,下标c表示channel

接下来就是Squeeze操作
在这里插入图片描述
因此公式2就将HWC的输入转换成11C的输出,对应Figure1中的Fsq操作。为什么会有这一步呢?这一步的结果相当于表明该层C个feature map的数值分布情况,或者叫全局信息。

再接下来就是Excitation操作,如公式3。直接看最后一个等号,前面squeeze得到的结果是z,这里先用W1乘以z,就是一个全连接层操作,W1的维度是C/r * C,这个r是一个缩放参数,在文中取的是16,这个参数的目的是为了减少channel个数从而降低计算量。又因为z的维度是11C,所以W1z的结果就是11C/r;然后再经过一个ReLU层,输出的维度不变;然后再和W2相乘,和W2相乘也是一个全连接层的过程,W2的维度是CC/r,因此输出的维度就是11C;最后再经过sigmoid函数,得到s。
在这里插入图片描述
也就是说最后得到的这个s的维度是1
1*C,C表示channel数目。这个s其实是本文的核心,它是用来刻画tensor U中C个feature map的权重。而且这个权重是通过前面这些全连接层和非线性层学习得到的,因此可以end-to-end训练。这两个全连接层的作用就是融合各通道的feature map信息,因为前面的squeeze都是在某个channel的feature map里面操作。

在得到s之后,就可以对原来的tensor U操作了,就是下面的公式4。也很简单,就是channel-wise multiplication,什么意思呢?uc是一个二维矩阵,sc是一个数,也就是权重,因此相当于把uc矩阵

### 回答1: 以下是SE-ASPP-ResNet模型的代码示例: ```python import torch import torch.nn as nn import torch.nn.functional as F class SELayer(nn.Module): def __init__(self, channel, reduction=16): super(SELayer, self).__init__() self.avg_pool = nn.AdaptiveAvgPool2d(1) self.fc = nn.Sequential( nn.Linear(channel, channel // reduction, bias=False), nn.ReLU(inplace=True), nn.Linear(channel // reduction, channel, bias=False), nn.Sigmoid() ) def forward(self, x): b, c, _, _ = x.size() y = self.avg_pool(x).view(b, c) y = self.fc(y).view(b, c, 1, 1) return x * y class ASPP(nn.Module): def __init__(self, in_channels, out_channels=256): super(ASPP, self).__init__() self.conv1 = nn.Conv2d(in_channels, out_channels, 1) self.conv2 = nn.Conv2d(in_channels, out_channels, 3, padding=6, dilation=6) self.conv3 = nn.Conv2d(in_channels, out_channels, 3, padding=12, dilation=12) self.conv4 = nn.Conv2d(in_channels, out_channels, 3, padding=18, dilation=18) self.avg_pool = nn.AdaptiveAvgPool2d(1) self.conv = nn.Conv2d(in_channels + 4 * out_channels, out_channels, 1) self.bn = nn.BatchNorm2d(out_channels) self.relu = nn.ReLU() def forward(self, x): feat1 = self.conv1(x) feat2 = self.conv2(x) feat3 = self.conv3(x) feat4 = self.conv4(x) feat5 = self.avg_pool(x) feat5 = F.upsample_bilinear(feat5, size=feat4.size()[2:]) x = torch.cat((feat1, feat2, feat3, feat4, feat5), dim=1) x = self.conv(x) x = self.bn(x) x = self.relu(x) return x class SEASPPResNet(nn.Module): def __init__(self, num_classes): super(SEASPPResNet, self).__init__() self.resnet = nn.Sequential( nn.Conv2d(3, 64, 7, stride=2, padding=3), nn.BatchNorm2d(64), nn.ReLU(), nn.MaxPool2d(3, stride=2, padding=1), nn.Conv2d(64, 64, 1), nn.BatchNorm2d(64), nn.ReLU(), nn.Conv2d(64, 64, 3, stride=2, padding=1), nn.BatchNorm2d(64), nn.ReLU(), nn.Conv2d(64, 256, 1), SELayer(256), ) self.aspp = ASPP(256, 256) self.fc = nn.Linear(256, num_classes) def forward(self, x): x = self.resnet(x) x = self.aspp(x) x = F.avg_pool2d(x, kernel_size=x.size()[2:]).view(x.size()[0], -1) x = self.fc(x) return x ``` 这是一个使用PyTorch实现的SE-ASPP-ResNet模型,其中包含SELayer、ASPP和SEASPPResNet三个类。模型的输入是一个RGB图像,输出是一个大小为num_classes的向量,表示图像属于每个类别的概率。 ### 回答2: SE-ASP+P-ResNet是一种图像分类模型,结合了SENet、ASPNet和ResNet的优点。这个模型主要的特点是引入了注意力机制和金字塔池化,使得模型在提取细节和重要特征方面更加强大和有效。 SENet是一种引入通道注意力机制的模型,它通过自适应地学习输入通道之间的关系,来提升模型的性能和泛化能力。在SE-ASP+P-ResNet中,SENet的思想被引入到了模型的设计中。通过添加SE模块,模型可以自动地学习每个通道的权重,并根据图像内容自适应地调整通道的重要性。 ASPNet是一种利用金字塔池化来获取多尺度特征的模型。在SE-ASP+P-ResNet中,ASPNet的思想也被应用到模型中。通过在网络中添加多个尺度的池化操作,可以捕捉到不同尺度下的语义信息,从而提高模型在不同尺度下的性能。 ResNet是一种使用残差块(residual block)的模型,可以克服深度神经网络中的梯度消失问题。在SE-ASP+P-ResNet中,也使用了残差块来构建网络。这样可以使得模型更深更复杂,并且可以在训练过程中更好地保持梯度的传播。 综上所述,SE-ASP+P-ResNet是一种提取图像特征的强大模型。它通过引入SENet的注意力机制和ASPNet的金字塔池化,结合了ResNet的残差块,可以在图像分类任务中获得更好的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值