「解析」DeepLabv3+ 模型搭建

「解析」DeepLabv3+ 模型搭建

经过最近一段时间的学习DeepLabv3+ 也基本吃透,在此整理成博客,供自己日后查看,同时也分享给各位小伙伴,不足之处还望大家多多指点

文章目录

1、模型分析

经过近两年的学习,特别是对于相对简单的模型,文章核心基本就是模型的架构图了

模型主要分为两个分支: {'layer1': 'low_level', 'layer4': 'out'}

  1. 在backbone 的 low-level feature map 分离出来,然后通过 1×1 conv处理,获得低层特征
  2. 将backbone 运行结束,获得 out ,然后再 经过 ASPP 处理获得高阶 feature map,但是此时的feature map 与分支1 的特征图尺寸不一致,因此需要经过 1×1 卷积 与 upsample 进行上采样,使其feture map shape 一致,然后便可以按通道进行 concat,最后再进行几个 3×3 卷积和 upsample 处理,使其与原始图像尺寸一致

优化器


optimizer = torch.optim.SGD(params=[{'params': model.backbone.parameters(),   'lr': 0.1 * opts.lr},
                                    {'params': model.classifier.parameters(), 'lr': opts.lr} ],
                                    lr=opts.lr, momentum=0.9, weight_decay=opts.weight_decay)

if opts.lr_policy == 'poly':
    scheduler = utils.PolyLR(optimizer, opts.total_itrs, power=0.9)
elif opts.lr_policy == 'step':
    scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=opts.step_size, gamma=0.1)

损失函数


if opts.loss_type == 'focal_loss':
    criterion = utils.FocalLoss(ignore_index=255, size_average=True)
elif opts.loss_type == 'cross_entropy':
    criterion = nn.CrossEntropyLoss(ignore_index=255, reduction='mean')

性能指标

性能指标 可以参考 「解析」图像分割性能指标 附代码

「解析」DeepLabv3+ 模型搭建

; 2、构建 DeepLab 模型

在此作者采用的是 opts.model = 'deeplabv3plus_resnet50',接下来依此讲解

model = models.modeling.__dict__[opts.model](num_classes   = opts.num_classes,
                                             output_stride = opts.output_stride,
                                             pretrained_backbone = True)

原作者并非上来直接构建 deepLab 而是通过不同参数配置将其分别创建了相关函数,因此上面的模型定义,第一步就是调用了 network.modeling 下面的

「解析」DeepLabv3+ 模型搭建

可以看出上面 deeplab定义函数真正起作用的还是 _load_model函数,如下

「解析」DeepLabv3+ 模型搭建

然而 _load_model 函数也只是空壳而已,核心是 _segm_resnet,至此,我们算是看到了 DeepLab 的相关代码了,可以看出,这里的代码也只是宏观上的,而非细节

_segm_resnet 分为以下几点:

  1. backbone 就是创建 不同骨架网络,在此直接调用即可
  2. classifier 是构建 除了股价网络之外的分支部分「⚠️ networks._deeplab查看」
  3. backbone 因为deepLabv3+ 不仅需要高阶特征还需要低阶特征,因此需要获取不同阶段的 feature map 「⚠️」

「解析」DeepLabv3+ 模型搭建

IntermediateLayerGetter

IntermediateLayerGetter 其实是遍历 backbone 不同module ,同时判断当前层是否是所要的 feature map,如果是的话,就将其feature map保存下来

「解析」DeepLabv3+ 模型搭建

; DeepLabHeadV3Plus

在此需要注意的是 forward 中传入的 feature 是 字典形式,这个可以在 BuildSegmentationModel 中看出,传入的 feature 其实就是从 backbone 中提取的 不同阶层的 future map

「解析」DeepLabv3+ 模型搭建

BuildSegmentationModel

「解析」DeepLabv3+ 模型搭建

至此,DeepLabv3+ 的模型就搭建完成了

Original: https://blog.csdn.net/ViatorSun/article/details/124252742
Author: ViatorSun
Title: 「解析」DeepLabv3+ 模型搭建

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/709130/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球