图像分割实战-系列教程15:deeplabV3+ VOC分割实战3-------网络结构1

这篇具有很好参考价值的文章主要介绍了图像分割实战-系列教程15:deeplabV3+ VOC分割实战3-------网络结构1。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

图像分割实战-系列教程15:deeplabV3+ VOC分割实战3-------网络结构1,图像分割实战,深度学习,pytorch,计算机视觉,图像分割,deeplab

🍁🍁🍁图像分割实战-系列教程 总目录

有任何问题欢迎在下面留言
本篇文章的代码运行界面均在Pycharm中进行
本篇文章配套的代码资源已经上传

deeplab系列算法概述
deeplabV3+ VOC分割实战1
deeplabV3+ VOC分割实战2
deeplabV3+ VOC分割实战3
deeplabV3+ VOC分割实战4
deeplabV3+ VOC分割实战5

本项目的网络结构在network文件夹中,主要在modeling.py和_deeplab.py中:
modeling.py:指定要用的骨干网络是什么
_deeplab.py:根据modeling.py指定的骨干网络构建实际的网络结构

5、modeling.py的 _segm_resnet函数

def _segm_resnet(name, backbone_name, num_classes, output_stride, pretrained_backbone):

    if output_stride==8:
        replace_stride_with_dilation=[False, True, True]
        aspp_dilate = [12, 24, 36]
    else:
        replace_stride_with_dilation=[False, False, True]
        aspp_dilate = [6, 12, 18]
  • 如果输出步长为8,则
  • 替换步长用膨胀率,如果为None,设置默认值为[False, False, False],表示不使用空洞卷积,通过使用空洞卷积替代增加步长的标准卷积
  • 膨胀率为[12, 24, 36],用于调整空洞卷积
  • 如果输出步长不是8,则设置另外的参数
    backbone = resnet.__dict__[backbone_name](
        pretrained=pretrained_backbone, replace_stride_with_dilation=replace_stride_with_dilation)
    inplanes = 2048
    low_level_planes = 256
  • 使用指定的ResNet版本构建backbone
  • resnet.__dict__是一个指向不同ResNet模型的字典
  • pretrained=pretrained_backbone指定是否加载预训练权重
  • replace_stride_with_dilation用于控制网络中卷积层的步长和膨胀
  • inplanes = 2048:设置网络最后一层的通道数
  • low_level_planes = 256:设置低层特征的通道数
    if name=='deeplabv3plus':
        return_layers = {'layer4': 'out', 'layer1': 'low_level'}#
        classifier = DeepLabHeadV3Plus(inplanes, low_level_planes, num_classes, aspp_dilate)
    elif name=='deeplabv3':
        return_layers = {'layer4': 'out'}
        classifier = DeepLabHead(inplanes , num_classes, aspp_dilate)
    # 提取网络的第几层输出结果并给一个别名
    backbone = IntermediateLayerGetter(backbone, return_layers=return_layers)
    model = DeepLabV3(backbone, classifier)
    return model
  • return_layers 是一个字典,定义返回层,这个键值不用管,out对应的是带有高维度特征的输出对应的是比较大的物体的分割,low_level即小物体
  • classifier 初始化分类器,inplanes 传入分类器的特征通道数, low_level_planes 是低层特征的通道数,num_classes 是目标分类的类别数,aspp_dilate 是ASPP模块中使用的膨胀率
  • IntermediateLayerGetter(backbone, return_layers=return_layers),这里的backbone是之前定义的基础网络如resnet,return_layers定义了要从哪些层输出,IntermediateLayerGetter使得我们可以在后续的网络部分中使用这些特定层的输出进行进一步的处理和特征融合,最后得到修改后的backbone
  • model = DeepLabV3(backbone, classifier)使用修改后的backbone 和定义好的classifier构建DeepLabHeadV3Plus模型

6、_deeplab.py的 DeepLabHeadV3Plus类

在前面的_segm_resnet函数我们调用了DeepLabHeadV3Plus类来构建我们的网络,这部分介绍一下DeepLabHeadV3Plus类

6.1 构造函数

class DeepLabHeadV3Plus(nn.Module):
    def __init__(self, in_channels, low_level_channels, num_classes, aspp_dilate=[12, 24, 36]):
        super(DeepLabHeadV3Plus, self).__init__()
        self.project = nn.Sequential( 
            nn.Conv2d(low_level_channels, 48, 1, bias=False),
            nn.BatchNorm2d(48),
            nn.ReLU(inplace=True),
        )
        self.aspp = ASPP(in_channels, aspp_dilate)
        self.classifier = nn.Sequential(
            nn.Conv2d(304, 256, 3, padding=1, bias=False),
            nn.BatchNorm2d(256),
            nn.ReLU(inplace=True),
            nn.Conv2d(256, num_classes, 1)
        )
        self._init_weight()
  1. self.project,定义一个执行序列,包含一个二维卷积、一个批归一化、一个ReLU激活
  2. self.aspp,调用ASPP类初始化一个对象
  3. self.classifier,定义一个执行序列包含一个二维卷积、一个批归一化、一个ReLU激活、一个二维卷积
  4. self._init_weight(),调用此类中一个函数,这个函数主要用于初始化权重

6.2 前向传播函数

图像分割实战-系列教程15:deeplabV3+ VOC分割实战3-------网络结构1,图像分割实战,深度学习,pytorch,计算机视觉,图像分割,deeplab

    def forward(self, feature):
        low_level_feature = self.project( feature['low_level'] )#return_layers = {'layer4': 'out', 'layer1': 'low_level'}
        output_feature = self.aspp(feature['out'])
        output_feature = F.interpolate(output_feature, size=low_level_feature.shape[2:], mode='bilinear', align_corners=False)
        return self.classifier( torch.cat( [ low_level_feature, output_feature ], dim=1 ) )
  1. 前向传播函数
  2. 从前面的定义中获取低纬度的特征,再经过一个卷积、归一化、激活的执行序列也就是1*1的卷积,得到最终的low_level_feature
  3. 从前面的定义中获取高纬度的特征,经过一个ASPP特征提取网络,得到最终的output_feature
  4. 使用双线性插值调整output_feature 匹配low_level_feature 的维度
  5. 最后将output_feature 与low_level_feature 拼接后再经过一个分类器执行序列,得到最终DeepLabHeadV3Plus类的输出特征

6.3 def _init_weight(self):函数

    def _init_weight(self):
        for m in self.modules():
            if isinstance(m, nn.Conv2d):
                nn.init.kaiming_normal_(m.weight)
            elif isinstance(m, (nn.BatchNorm2d, nn.GroupNorm)):
                nn.init.constant_(m.weight, 1)
                nn.init.constant_(m.bias, 0)
  1. 初始化权重函数
  2. 遍历模型 DeepLabHeadV3Plus 中的所有层
  3. 如果当前这个层是卷积层,则:
  4. 使用Kaiming初始化
  5. 如果是批量标准化(BatchNorm)或组标准化(GroupNorm)层,则:
  6. 将这些层的权重初始化为1
  7. 将这些层的偏置初始化为0

deeplab系列算法概述
deeplabV3+ VOC分割实战1
deeplabV3+ VOC分割实战2
deeplabV3+ VOC分割实战3
deeplabV3+ VOC分割实战4
deeplabV3+ VOC分割实战5文章来源地址https://www.toymoban.com/news/detail-805886.html

到了这里,关于图像分割实战-系列教程15:deeplabV3+ VOC分割实战3-------网络结构1的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 使用LabVIEW实现 DeepLabv3+ 语义分割含源码

    图像分割可以分为两类:语义分割(Semantic Segmentation)和实例分割(Instance Segmentation),前面已经给大家介绍过两者的区别,并就如何在labview上实现相关模型的部署也给大家做了讲解,今天和大家分享如何使用labview 实现deeplabv3+的语义分割,并就 Pascal VOC2012 (DeepLabv3Plus-Mobi

    2024年02月13日
    浏览(35)
  • deeplabv3+源码之慢慢解析 第二章datasets文件夹(1)voc.py--voc_cmap函数和download_extract函数

    第一章deeplabv3+源码之慢慢解析 根目录(1)main.py–get_argparser函数 第一章deeplabv3+源码之慢慢解析 根目录(2)main.py–get_dataset函数 第一章deeplabv3+源码之慢慢解析 根目录(3)main.py–validate函数 第一章deeplabv3+源码之慢慢解析 根目录(4)main.py–main函数 第一章deeplabv3+源码之慢慢解析 根目

    2024年02月13日
    浏览(41)
  • 改进 DeepLabV3+

    CFF结构图    10.28更新(解码复习)

    2024年02月13日
    浏览(32)
  • DeepLabv3+

    本文在进行语义分割任务时将空间金字塔池化(SPP)模块或encoder-decoder结构引入到深度神经网络中。以前的网络通过对输入的feature map使用多种尺度的卷积核或者池化操作以及多种感受野能够编码出多尺度的环境信息。而之后的一些工作中提出的网络通过逐渐恢复空间信息能

    2024年02月06日
    浏览(64)
  • Docker 部署深度学习 运行deeplabV3

    本文主要介绍docker发展历史,常用的镜像,容器命令。以及部署深度学习环境,运行deeplabV3 项目。 2010年,美国一家公司dotcloud做一些pass的云计算服务,lxc有关的容器技术,他们讲自己的技术(容器化技术)命名为Docker。 刚诞生的时候,没有引起关注,然后2013年,他们讲D

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

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

    2024年02月16日
    浏览(40)
  • DeepLabV3+:Mobilenetv2的改进以及浅层特征和深层特征的融合

    目录 Mobilenetv2的改进 浅层特征和深层特征的融合 完整代码 参考资料 在DeeplabV3当中,一般不会5次下采样,可选的有3次下采样和4次下采样。因为要进行五次下采样的话会损失较多的信息。 在这里mobilenetv2会从之前写好的模块中得到,但注意的是,我们在这里获得的特征是[-

    2024年01月19日
    浏览(47)
  • 深度学习——制作自己的VOC图像分割数据集

    1、数据集介绍 COCO数据集有80个类别,VOC数据集有20个类别。当这些数据集类别中没有自己需要的时候,就需要自己动手做自己的数据集了。 我自己在做数据集的时候主要使用到了labelme和labelImg两个工具。labelme主要是制作语义分割数据集(ImageSets,JPEGImages,SegmentationClass,Segmenta

    2024年02月04日
    浏览(34)
  • Transformer实战-系列教程15:DETR 源码解读2(整体架构:DETR类)

    有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 点我下载源码 DETR 算法解读 DETR 源码解读1(项目配置/CocoDetection类/ConvertCocoPolysToMask类) DETR 源码解读2(DETR类) DETR 源码解读3(位置编码:Joiner类/PositionEmbeddingSine类)

    2024年02月20日
    浏览(32)
  • OpenCV入门(十六)快速学会OpenCV 15 图像分割

    作者:Xiou 图像分割主要是指将图像分成各具特性的区域并提取出感兴趣目标的技术。图像分割是数字图像分析中的重要环节,在整个研究中起着承前启后的作用,既是对所有图像预处理效果的一个检验,也是后续进行图像分析与解译的基础。 图像阈值化分割是一种传统的、

    2024年02月09日
    浏览(62)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包