导语:MMDetection是一个基于Pytorch实现的目标检测框架,支持Faster-RCNN、Mask-RCNN、Fast-RCNN等主流目标检测算法。旧版本的MMDetection会有很多限制,比如不能运行在新的cuda上、做模型优化也受到很多限制。MMDetection从v1到v2改变很大,从权重到模型申明语句都经历了翻天覆地的变化。本文讨论在不重新训练模型的情况下,把mmdet升级到2.x的办法。
升级命令:
python3 upgrade_model_version.py old_model new_model --num-classes N
需要注意的是,类别数需要在v1基础上减1
权重升级完,还需要自己去改配置文件,适配v2。
v2配置文件样例:https://github.com/open-mmlab/mmdetection/tree/master/configs/base/models
具体改动如下:
# v1
anchor_scales=[8],
anchor_ratios=[0.5, 1.0, 2.0],
anchor_strides=[4, 8, 16, 32, 64],
# v2
anchor_generator=dict(
type='AnchorGenerator',
scales=[8],
ratios=[0.5, 1.0, 2.0],
strides=[4, 8, 16, 32, 64]),
# v1
bbox_roi_extractor=dict(
...
),
bbox_head=[
...
]
mask_roi_extractor=dict(
...
),
mask_head=dict(
...
)
# v2
roi_head=dict(
type='CascadeRoIHead',
num_stages=3,
stage_loss_weights=[1, 0.5, 0.25],
# 这里多了三个字段
bbox_roi_extractor=dict(
...
),
bbox_head=[
...
]
mask_roi_extractor=dict(
...
),
mask_head=dict(
...
)
)
# v1
num_classes=63
# v2
num_classes=62
# v1
dict(
type='SharedFCBBoxHead',
num_fcs=2,
...
# v2
dict(
type='Shared2FCBBoxHead',
...
# v1
target_means=[0., 0., 0., 0.],
target_stds=[0.1, 0.1, 0.2, 0.2],
...
# v2
bbox_coder=dict(
type='DeltaXYWHBBoxCoder',
target_means=[0., 0., 0., 0.],
target_stds=[0.1, 0.1, 0.2, 0.2]),
...
实践证明,直接转化权重会有略微的精度损失,如果对精度有极端要求,建议重新训练模型。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。