mmdetection2.6 模型微调
mmdetection提供了丰富的预训练模型文件,我们可以直接采用mdmetection提供的预训练模型在我们的数据集上微调。预训练模型参考//mmdetection.readthedocs.io/en/latest/model_zoo.html,其实也可以在configs文件夹中的readme文件中找到相应的模型链接。
在一个新的数据集上微调模型需要如下的两个步骤:
- 按照mmdetection2.6自定义数据集的方式给框架添加新数据集的支持。
- 修改config文件(这里讨论)
一、 继承base configs
mmdetection2.6采用config的继承模式,来防止写一整个模型的config文件容易造成的编码bug,例如当微调mask rcnn时,新的config文件继承
_base_/models/mask_rcnn_r50_fpn.py
来构建基本的模型,如果使用Cityscapes数据集,新的config文件需要继承
_base_/datasets/cityscapes_instance.py
,对于运行时设置,config文件必须继承 _base_/default_runtime.py
。
_base_ = [
'../_base_/models/mask_rcnn_r50_fpn.py',
'../_base_/datasets/cityscapes_instance.py', '../_base_/default_runtime.py'
]
如果不想要继承,也可以自己写所有的config文件。
二、 修改head
简单修改num_classes
即可。
model = dict(
pretrained=None,
roi_head=dict(
bbox_head=dict(
type='Shared2FCBBoxHead',
in_channels=256,
fc_out_channels=1024,
roi_feat_size=7,
num_classes=8,
bbox_coder=dict(
type='DeltaXYWHBBoxCoder',
target_means=[0., 0., 0., 0.],
target_stds=[0.1, 0.1, 0.2, 0.2]),
reg_class_agnostic=False,
loss_cls=dict(
type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0),
loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)),
mask_head=dict(
type='FCNMaskHead',
num_convs=4,
in_channels=256,
conv_out_channels=256,
num_classes=8,
loss_mask=dict(
type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))))
三、修改数据集
按照mmdetection2.6自定义数据集的方式给框架添加新数据集的支持。
四、 修改training schedule
直接在config文件中共修改即可
# optimizer
# lr is set for a batch size of 8
optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001)
optimizer_config = dict(grad_clip=None)
# learning policy
lr_config = dict(
policy='step',
warmup='linear',
warmup_iters=500,
warmup_ratio=0.001,
# [7] yields higher performance than [6]
step=[7])
total_epochs = 8 # actual epoch = 8 * 8 = 64
log_config = dict(interval=100)
五、 使用预训练模型
修改config文件中的load_from
参数即可
load_from = '下载的权重的保存路径,也可以直接放上官方的urls'
专栏所有文章请点击下列文章列表查看:
知乎专栏:小哲AI专栏文章分类索引跳转查看
AI研习社专栏:小哲AI专栏文章分类索引