MMyolo入门知识点汇总

一.开启MMyolo之旅

1.1 15分钟上手MMYOLO目标检测

(1)配置文件准备

_base_ = 'C:/Users/13642/mmyolo/configs/yolov5/yolov5_s-v61_syncbn_fast_8xb16-300e_coco.py'
max_epochs = 100  # 训练的最大 epoch
data_root = 'C:/Users/13642/mmyolo/DUO/'  # 数据集目录的绝对路径
# data_root = '/root/workspace/mmyolo/data/cat/'  # Docker 容器里面数据集目录的绝对路径

# 结果保存的路径,可以省略,省略保存的文件名位于 work_dirs 下 config 同名的文件夹中
# 如果某个 config 只是修改了部分参数,修改这个变量就可以将新的训练文件保存到其他地方
work_dir = 'C:/Users/13642/mmyolo/work_dirs/test01_yolov5_s-v61_syncbn_0xb16-100e_duo'

# load_from 可以指定本地路径或者 URL,设置了 URL 会自动进行下载,因为上面已经下载过,我们这里设置本地路径
# 因为本教程是在 cat 数据集上微调,故这里需要使用 `load_from` 来加载 MMYOLO 中的预训练模型,这样可以在加快收敛速度的同时保证精度
load_from = 'https://download.openmmlab.com/mmyolo/v0/yolov5/yolov5_s-v61_syncbn_fast_8xb16-300e_coco/yolov5_s-v61_syncbn_fast_8xb16-300e_coco_20220918_084700-86e02187.pth'  # noqa

# 根据自己的 GPU 情况,修改 batch size,YOLOv5-s 默认为 8卡 x 16bs
train_batch_size_per_gpu = 16
train_num_workers = 4  # 推荐使用 train_num_workers = nGPU x 4

save_epoch_intervals = 2  # 每 interval 轮迭代进行一次保存一次权重

# 根据自己的 GPU 情况,修改 base_lr,修改的比例是 base_lr_default * (your_bs / default_bs)
base_lr = _base_.base_lr /3 #这里用3个GPU,每个GPU的bs是16,故为3X16/4X16=1/3)

anchors = [  # 多尺度先验框的基本尺寸
    [(14, 13), (21, 19), (28, 26)],  # P3/8
    [(37, 33), (47, 43), (70, 40)],  # P4/16
    [(62, 58), (84, 79), (126, 111)]  # P5/32
]

class_name = ('holothurian','echinus','scallop','starfish',)  # 根据 class_with_id.txt 类别信息,设置 class_name
num_classes = len(class_name)
metainfo = dict(
    classes=class_name, # 注意:这个字段在最新版本中换成了小写
    palette=[(220, 20, 60), (119, 11, 32), (0, 0, 142), (0, 0, 230)]  # 画图时候的颜色,随便设置即可
)

train_cfg = dict(
    max_epochs=max_epochs,
    val_begin=20,  # 第几个 epoch 后验证,这里设置 20 是因为前 20 个 epoch 精度不高,测试意义不大,故跳过
    val_interval=save_epoch_intervals  # 每 val_interval 轮迭代进行一次测试评估
)

model = dict(
    bbox_head=dict(
        head_module=dict(num_classes=num_classes),
        prior_generator=dict(base_sizes=anchors),

        # loss_cls 会根据 num_classes 动态调整,但是 num_classes = 1 的时候,loss_cls 恒为 0
        loss_cls=dict(loss_weight=0.5 *
                      (num_classes / 80 * 3 / _base_.num_det_layers))))

train_dataloader = dict(
    batch_size=train_batch_size_per_gpu,
    num_workers=train_num_workers,
    dataset=dict(
        _delete_=True,
        type='RepeatDataset',
        # 数据量太少的话,可以使用 RepeatDataset ,在每个 epoch 内重复当前数据集 n 次,这里设置 5 是重复 5 次
        times=5,
        dataset=dict(
            type=_base_.dataset_type,
            data_root=data_root,
            metainfo=metainfo,
            ann_file='annotations/instances_train.json',
            data_prefix=dict(img='train/'),
            filter_cfg=dict(filter_empty_gt=False, min_size=32),
            pipeline=_base_.train_pipeline)))

val_dataloader = dict(
    dataset=dict(
        metainfo=metainfo,
        data_root=data_root,
        ann_file='annotations/instances_test.json',
        data_prefix=dict(img='test/')))

test_dataloader = val_dataloader

val_evaluator = dict(ann_file=data_root + 'annotations/instances_test.json')
test_evaluator = val_evaluator

optim_wrapper = dict(optimizer=dict(lr=base_lr))

default_hooks = dict(
    # 设置间隔多少个 epoch 保存模型,以及保存模型最多几个,`save_best` 是另外保存最佳模型(推荐)
    checkpoint=dict(
        type='CheckpointHook',
        interval=save_epoch_intervals,
        max_keep_ckpts=5,
        save_best='auto'),
    param_scheduler=dict(max_epochs=max_epochs),
    # logger 输出的间隔
    logger=dict(type='LoggerHook', interval=10))
#如果不对训练过程进行可视化,则可以将下面一行删掉
visualizer = dict(vis_backends=[dict(type='LocalVisBackend'), dict(type='WandbVisBackend')])

(2)模型训练

 

(3)中断后恢复训练

 

(4)开启混合精度训练节省显存

后面直接加--amp

 (5)训练可视化

pip install wandb
# 运行了 wandb login 后输入上文中获取到的 API Keys ,便登录成功。
wandb login

 

 (6)可视化YOLOv5backbone输出的3个通道

 

(7)可视化YOLOV5neck输出的3个通道

 

 

(8)Grad-Based CAM可视化

安装依赖


最小输出特征图的Grad CAM:

中等输出特征图的Grad CAM:

 

 最大输出特征图的Grad CAM:

1.2中文解读资源汇总

1.2.1MMYOLO 社区倾情贡献,RTMDet 原理社区开发者解读来啦!

(1)rtmdet性能对比

 (2)数据增强模块

可视化pipeline结果如下

 

 

 1.2.2满足一切需求的 MMYOLO 可视化:测试过程可视化

(1)总体介绍

MMEngine 引入了可视化对象 Visualizer 和多个可视化存储后端 VisBackend,可视化对象负责绘制过程,而具体的存储交给可视化存储后端。可视化器绘制完成后,可以同时发给多个存储后端

(2)GT 和预测分开可视化

  --show-dir 将预测结果保存到本地。

1.2.3玩转 MMYOLO 工具类第一期: 特征图可视化

(1)最大激活

可视化 backbone 输出的 3 个层的最大激活层。

 

 (2)平均激活

可视化 neck 输出的 3 个层的所有输出特征图的平均激活

1.3推荐专题 

1.3.1模型复杂度分析

1.3.2关于可视化的一切 

(1)可视化coco标签

(2)可视化数据集 

1)查看原始图像

 

 2)查看trensformed图像

 3)查看pipeline图像

 

(3)可视化数据集分布

 

 功能一:显示类别和 bbox 实例个数的分布图,通过子函数 show_bbox_num 生成

 功能二:显示类别和 bbox 实例宽、高的分布图,通过子函数 show_bbox_wh 生成

 功能三:显示类别和 bbox 实例宽/高比例的分布图,通过子函数 show_bbox_wh_ratio 生成。

 

功能四:基于面积规则下,显示类别和 bbox 实例面积的分布图,通过子函数 show_bbox_area 生成

(4)优化器参数策略可视化 

 

  • 20
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值