经过最近一段时间的学习DeepLabv3+ 也基本吃透,在此整理成博客,供自己日后查看,同时也分享给各位小伙伴,不足之处还望大家多多指点
文章目录
- 1、模型分析
* - 优化器
- 损失函数
- 性能指标
- 2、构建 DeepLab 模型
* - IntermediateLayerGetter
- DeepLabHeadV3Plus
- BuildSegmentationModel
1、模型分析
经过近两年的学习,特别是对于相对简单的模型,文章核心基本就是模型的架构图了
模型主要分为两个分支: {'layer1': 'low_level', 'layer4': 'out'}
- 在backbone 的 low-level feature map 分离出来,然后通过 1×1 conv处理,获得低层特征
- 将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')
性能指标
性能指标 可以参考 「解析」图像分割性能指标 附代码
; 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 下面的
可以看出上面 deeplab定义函数真正起作用的还是 _load_model函数,如下
然而 _load_model 函数也只是空壳而已,核心是 _segm_resnet,至此,我们算是看到了 DeepLab 的相关代码了,可以看出,这里的代码也只是宏观上的,而非细节
_segm_resnet 分为以下几点:
- backbone 就是创建 不同骨架网络,在此直接调用即可
- classifier 是构建 除了股价网络之外的分支部分「⚠️ networks._deeplab查看」
- backbone 因为deepLabv3+ 不仅需要高阶特征还需要低阶特征,因此需要获取不同阶段的 feature map 「⚠️」
IntermediateLayerGetter
IntermediateLayerGetter 其实是遍历 backbone 不同module ,同时判断当前层是否是所要的 feature map,如果是的话,就将其feature map保存下来
; DeepLabHeadV3Plus
在此需要注意的是 forward 中传入的 feature 是 字典形式,这个可以在 BuildSegmentationModel 中看出,传入的 feature 其实就是从 backbone 中提取的 不同阶层的 future map
BuildSegmentationModel
至此,DeepLabv3+ 的模型就搭建完成了
Original: https://blog.csdn.net/ViatorSun/article/details/124252742
Author: ViatorSun
Title: 「解析」DeepLabv3+ 模型搭建
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/709130/
转载文章受原作者版权保护。转载请注明原作者出处!