特征提取网络之res2net

这篇具有很好参考价值的文章主要介绍了特征提取网络之res2net。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

整理下res2net特征提取网络
论文地址:https://arxiv.org/abs/1904.01169
文中所提供的代码来自:[https://github.com/open-mmlab/mmclassification]

1.res2net

主要是在每个残差块内部构建特征金字塔结构,在特征层内部进行多尺度的卷积,形成不同感受野,获得不同细粒度的特征。

结构图

结构图与resnet类似,只不过为了更好的分成4组,每个残差块里的3x3卷积里的通道数变了。对应的resnet相关细节可以移步到https://blog.csdn.net/weixin_41311686/article/details/125934861
特征提取网络之res2net

2.代码解析

!!!这里主要是根据代码解析的,与原论文的开源代码或许有些不同,但基本差不多。
整个前向传播是和resnet的一样

    def forward(self, x):
        """Forward function."""
        if self.deep_stem:
            x = self.stem(x)
        else:
            x = self.conv1(x)
            x = self.norm1(x)
            x = self.relu(x)
        x = self.maxpool(x)
        outs = []
        for i, layer_name in enumerate(self.res_layers):
            res_layer = getattr(self, layer_name)
            x = res_layer(x)
            if i in self.out_indices:
                outs.append(x)
        return tuple(outs)

残差结构与resnet的比较
特征提取网络之res2net
通过将残差块的3x3卷积替换成类似特征金字塔的结构来更好的利用特征层内的不同尺度的特征。

整个堆叠残差结构的前向传播:

    def forward(self, x):
        """Forward function."""

        def _inner_forward(x):
            identity = x

            out = self.conv1(x)  # 64-104,和resnet不同的地方
            out = self.norm1(out)	
            out = self.relu(out)    

            if self.with_plugins:
                out = self.forward_plugin(out, self.after_conv1_plugin_names)

            spx = torch.split(out, self.width, 1)   # [n,104] ,104//26 = 4
            sp = self.convs[0](spx[0].contiguous())	#第一个组经过一个3X3卷积
            sp = self.relu(self.bns[0](sp))	#
            out = sp
            for i in range(1, self.scales - 1):	#循环
                if self.stage_type == 'stage':
                    sp = spx[i]
                else:
                    sp = sp + spx[i]
                sp = self.convs[i](sp.contiguous())	# 第二个组经过一个3X3卷积
                sp = self.relu(self.bns[i](sp))
                out = torch.cat((out, sp), 1)	# 在维度1上进行cat

            if self.stage_type == 'normal' or self.conv2_stride == 1:
                out = torch.cat((out, spx[self.scales - 1]), 1)	# 最后一个不进行卷积,全部拼接回原来的维度
            elif self.stage_type == 'stage':
                out = torch.cat((out, self.pool(spx[self.scales - 1])), 1)

            if self.with_plugins:
                out = self.forward_plugin(out, self.after_conv2_plugin_names)

            out = self.conv3(out)	# 1x1卷积
            out = self.norm3(out)

            if self.with_plugins:
                out = self.forward_plugin(out, self.after_conv3_plugin_names)

            if self.downsample is not None:
                identity = self.downsample(x)

            out += identity

            return out

        if self.with_cp and x.requires_grad:
            out = cp.checkpoint(_inner_forward, x)
        else:
            out = _inner_forward(x)

        out = self.relu(out)

        return out

一些结构的解析
conv1:是将输入通道由64变成104,主要是为了将通道分成4组(104//26),和resnet不同,resnet是不变。

self.conv1 = build_conv_layer(
            self.conv_cfg,
            self.inplanes,      # 64
            width * scales,     # 输出通道数:26*4=104
            kernel_size=1,
            stride=self.conv1_stride,
            bias=False)

conv1里的width是通过(输入通道x(26/64))得到的。开始输入是64,所以64x(26/64)=26。对应1x1卷积里的输出通道就是26x4=104.mmclassification是这样操作的。

width = int(math.floor(self.planes * (base_width / base_channels)))

self.convs:是三个3x3卷积,步长为1,padding=1.对应的是resnet里中间的一个3x3卷积

特征提取网络之res2net
conv3:是一个1x1卷积,将通道由104变到256,对应resnet的64变成256.
残差连接:self.downsample与resnet不同,是一个Sequential,里面包含了一个Avgpool2d+1x1卷积+BN.(与shufflenet里的有点类似)

downsample = nn.Sequential(
                nn.AvgPool2d(
                    kernel_size=stride,
                    stride=stride,
                    ceil_mode=True,
                    count_include_pad=False),
                build_conv_layer(
                    conv_cfg,
                    inplanes,
                    planes * block.expansion,
                    kernel_size=1,
                    stride=1,
                    bias=False),
                build_norm_layer(norm_cfg, planes * block.expansion)[1],
            )

res2net和resnet相比精度会更高,但消耗的时间也会更多,所以在3x3结构上,又做了变化,进行了分组卷积。
特征提取网络之res2net

总结

简单记录下,后面若有新的内容发现,会继续补充。文章来源地址https://www.toymoban.com/news/detail-457207.html

到了这里,关于特征提取网络之res2net的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • U2Net网络简介

    论文名称: U2-Net: Goging Deeper with Nested U-Structure for Salient Object Detetion 论文下载地址:https://arxiv.org/abs/2005.09007 官方源码(Pytorch实现):https://github.com/xuebinqin/U-2-Net 自己实现的仓库(Pytorch实现):https://github.com/WZMIAOMIAO/deep-learning-for-image-processing/tree/master/pytorch_segmentation/u2ne

    2024年02月09日
    浏览(51)
  • 图像语义分割 pytorch复现U2Net图像分割网络详解

    U2-Net: Going Deeper with Nested U-Structure for Salient Object Detection 网络的主体类似于U-Net的网络结构,在大的U-Net中,每一个小的block都是一个小型的类似于U-Net的结构,因此作者取名U2Net 仔细观察,可以将网络中的block分成两类: 第一类 :En_1 ~ En_4 与 De_1 ~ De_4这8个block采用的block其实是

    2024年01月22日
    浏览(48)
  • DeepLabV3+:ASPP加强特征提取网络的搭建

    目录 ASPP结构介绍 ASPP在代码中的构建 参考资料 ASPP:Atrous Spatial Pyramid Pooling,空洞空间卷积池化金字塔。 简单理解就是个至尊版池化层,其目的与普通的池化层一致,尽可能地去提取特征。 利用主干特征提取网络,会得到一个浅层特征和一个深层特征,这一篇主要以如何对

    2024年02月16日
    浏览(63)
  • 【MFEN:轻量级多尺度特征提取:SR网络】

    (MFEN:嵌入式轻量级多尺度特征提取超分辨率网络) 深度卷积神经网络(CNN)在超分辨率(SR)方面取得了显著的成绩。然而,基于深度神经网络的方法由于计算量大、内存消耗大,很难应用于嵌入式便携设备。针对上述问题, 通过构造多尺度特征提取块(multi-scale feature

    2024年02月06日
    浏览(43)
  • 计算机视觉的应用12-卷积神经网络中图像特征提取的可视化研究,让大家理解特征提取的全过程

    大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用12-卷积神经网络中图像特征提取的可视化研究,让大家理解特征提取的全过程。 要理解卷积神经网络中图像特征提取的全过程,我们可以将其比喻为人脑对视觉信息的处理过程。就像我们看到一个物体时,大脑会通

    2024年02月10日
    浏览(44)
  • 卷积神经网络提取图像特征的操作是怎样完成的

    。 卷积神经网络有以下几种应用可供研究:1、基于卷积网络的形状识别物体的形状是人的视觉系统分析和识别物体的基础,几何形状是物体的本质特征的表现,并具有平移、缩放和旋转不变等特点,所以在模式识别领域,对于形状的分析和识别具有十分重要的意义,而二维

    2024年02月07日
    浏览(41)
  • 【RT-DETR有效改进】利用EMAttention加深网络深度提高模型特征提取能力(特征选择模块)

    本文给大家带来的改进机制是 EMAttention注意力机制 ,它的 核心思想是 ,重塑部分通道到批次维度,并将通道维度分组为多个子特征,以保留每个通道的信息并减少计算开销。EMA模块通过编码全局信息来重新校准每个并行分支中的通道权重,并通过跨维度交互来捕获像素级别

    2024年02月21日
    浏览(42)
  • 【RT-DETR有效改进】轻量化CNN网络MobileNetV1改进特征提取网络

    👑欢迎大家订阅本专栏,一起学习RT-DETR👑     本篇文章给大家带来的改进机制是 MobileNetV1 ,其是专为移动和嵌入式视觉应用设计的轻量化网络结构。这些模型基于简化的架构,并利用深度可分离卷积构建轻量级深度神经网络,其 引入了两个简单的全局超参数 ,用于在延

    2024年01月19日
    浏览(44)
  • YOLOv5改进 | 主干篇 | 12月份最新成果TransNeXt特征提取网络(全网首发)

    本文给大家带来的改进机制是 TransNeXt特征提取网络 , 其发表于2023年的12月份是一个最新最前沿的网络模型 ,将其应用在我们的特征提取网络来提取特征,同时本文给大家解决其自带的一个报错,通过结合聚合的像素聚焦注意力和卷积GLU,模拟生物视觉系统,特别是对于中心

    2024年01月18日
    浏览(77)
  • YOLOv8改进 | 主干篇 | 华为移动端模型Ghostnetv1改进特征提取网络

    本文给大家带来的改进机制是华为移动端模型 Ghostnetv1 ,华为的 GhostNet 是一种轻量级卷积神经网络,旨在在计算资源有限的嵌入式设备上实现高性能的图像分类。 GhostNet的关键思想 在于通过引入Ghost模块,以较低的计算成本增加了特征图的数量,从而提高了模型的性能。这种

    2024年01月19日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包