MMsegmentation教程 4: 自定义模型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MMsegmentation教程 4: 自定义模型相关的知识,希望对你有一定的参考价值。

参考技术A 假设您想增加一个新的叫 MyOptimizer 的优化器,它的参数分别为 a , b , 和 c 。
您首先需要在一个文件里实现这个新的优化器,例如在 mmseg/core/optimizer/my_optimizer.py 里面:

然后增加这个模块到 mmseg/core/optimizer/__init__.py 里面,这样注册器 (registry) 将会发现这个新的模块并添加它:

之后您可以在配置文件的 optimizer 域里使用 MyOptimizer ,
如下所示,在配置文件里,优化器被 optimizer 域所定义:

为了使用您自己的优化器,域可以被修改为:

我们已经支持了 PyTorch 自带的全部优化器,唯一修改的地方是在配置文件里的 optimizer 域。例如,如果您想使用 ADAM ,尽管数值表现会掉点,还是可以如下修改:

使用者可以直接按照 PyTorch 文档教程 去设置参数。

对于优化,一些模型可能会有一些特别定义的参数,例如批归一化 (BatchNorm) 层里面的权重衰减 (weight decay)。
使用者可以通过定制优化器的构造器来微调这些细粒度的优化器参数。

MMSegmentation 里主要有2种组件:

这里我们以 MobileNet 为例,展示如何增加新的主干组件:

在 MMSegmentation 里面,对于所有的分割头,我们提供一个基类解码头 BaseDecodeHead 。
所有新建的解码头都应该继承它。这里我们以 PSPNet 为例,
展示如何开发和增加一个新的解码头组件:

首先,在 mmseg/models/decode_heads/psp_head.py 里添加一个新的解码头。
PSPNet 中实现了一个语义分割的解码头。为了实现一个解码头,我们只需要在新构造的解码头中实现如下的3个函数:

接着,使用者需要在 mmseg/models/decode_heads/__init__.py 里面添加这个模块,这样对应的注册器 (registry) 可以查找并加载它们。

PSPNet的配置文件如下所示:

假设您想添加一个新的损失函数 MyLoss 到语义分割解码器里。
为了添加一个新的损失函数,使用者需要在 mmseg/models/losses/my_loss.py 里面去实现它。
weighted_loss 可以对计算损失时的每个样本做加权。

然后使用者需要在 mmseg/models/losses/__init__.py 里面添加它:

为了使用它,修改 loss_xxx 域。之后您需要在解码头组件里修改 loss_decode 域。
loss_weight 可以被用来对不同的损失函数做加权。

以上是关于MMsegmentation教程 4: 自定义模型的主要内容,如果未能解决你的问题,请参考以下文章

PythonmmSegmentation语义分割框架教程(自定义数据集训练设定数据增强)

MMSegmentation安装简明流程

mmsegmentation 训练自制数据集全过程

OpenMMLab 实战营打卡 - 第 7 课

mmsegmentation框架SegFormer训练自己的数据集

超详细!手把手带你轻松用 MMSegmentation 跑语义分割数据集