前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >不重训模型情况下,MMDetection模型V1升级V2

不重训模型情况下,MMDetection模型V1升级V2

原创
作者头像
aaronwjzhao
发布2022-02-25 17:54:14
7140
发布2022-02-25 17:54:14
举报
文章被收录于专栏:AI工程落地

导语:MMDetection是一个基于Pytorch实现的目标检测框架,支持Faster-RCNN、Mask-RCNN、Fast-RCNN等主流目标检测算法。旧版本的MMDetection会有很多限制,比如不能运行在新的cuda上、做模型优化也受到很多限制。MMDetection从v1到v2改变很大,从权重到模型申明语句都经历了翻天覆地的变化。本文讨论在不重新训练模型的情况下,把mmdet升级到2.x的办法。

1. 权重升级

官方升级脚本:https://github.com/open-mmlab/mmdetection/blob/master/tools/model_converters/upgrade_model_version.py

升级命令:

代码语言:txt
复制
python3 upgrade_model_version.py old_model new_model --num-classes N

需要注意的是,类别数需要在v1基础上减1

权重升级完,还需要自己去改配置文件,适配v2。

2. 配置文件升级

v2配置文件样例:https://github.com/open-mmlab/mmdetection/tree/master/configs/base/models

具体改动如下:

  • anchor设置方式改动:anchor由三个的独立参数整合为由anchor_generator统一管理:
代码语言:txt
复制
# 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]),
  • roi_head整合:bbox_roi_extractor, bbox_head, mask_roi_extractor ,mask_head四个字段整合至roi_head下,而不再与rpn_head等平级出现
代码语言:txt
复制
# 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(
            ...
            )
    )
  • 类别数减1:
代码语言:txt
复制
# v1
num_classes=63

# v2
num_classes=62
  • SharedFCBBoxHead 变为 Shared2FCBBoxHead
代码语言:txt
复制
# v1
        dict(
            type='SharedFCBBoxHead',
            num_fcs=2,
            ...
# v2
        dict(
            type='Shared2FCBBoxHead',
            ...
  • target_means, target_stds由bbox_coder管理
代码语言:txt
复制
# 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]),
                    ...
  • bbox_head去掉num_fcs属性
  • roi_layer内部的out_size属性改为output_size,sample_num属性改为sampling_ratio值改为0# v1 roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2) # v2 roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=0)

实践证明,直接转化权重会有略微的精度损失,如果对精度有极端要求,建议重新训练模型。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 权重升级
  • 2. 配置文件升级
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档