MMYOLO 实例分割balloon demo

实例分割是计算机视觉中的一个任务,旨在将图像中的每个对象都分割出来,并为每个对象分配一个唯一的标识符。与语义分割不同,实例分割不仅分割出图像中的不同类别,还将同一类别的不同实例分开。

以可供下载的气球 balloon 小数据集为例,带大家 15 分钟轻松上手 MMYOLO 实例分割。整个流程包含如下步骤:

目录

数据集准备

配置准备

模型训练

模型测试

特征图相关可视化


数据集准备

Balloon 数据集是一个包括 74 张图片的单类别数据集, 包括了训练所需的标注信息。 样例图片如下所示:

balloon dataset

你只需执行如下命令即可下载并且直接用起来

python tools/misc/download_dataset.py --dataset-name balloon --save-dir ./data/balloon --unzip --delete
python ./tools/dataset_converters/balloon2coco.py

data 位于 mmyolo 工程目录下, train.jsonval.json 中存放的是 COCO 格式的标注,data/balloon/traindata/balloon/val 中存放的是所有图片

如果运行出现下列错误,需要对balloon2coco.py修改

TypeError: "tasks" must be a tuple object or a sequence object, but got <class 'dict_values'>

#balloon2coco.py修改

    for idx, v in enumerate(mmengine.track_iter_progress(list(data_infos.values()))):

配置准备

以 YOLOv5 算法为例,考虑到用户显存和内存有限,我们需要修改一些默认训练参数来让大家愉快的跑起来,核心需要修改的参数如下

  • YOLOv5 是 Anchor-Based 类算法,不同的数据集需要自适应计算合适的 Anchor

  • 默认配置是 8 卡,每张卡 batch size 为 16,现将其改成单卡,每张卡 batch size 为 4

  • 原则上 batch size 改变后,学习率也需要进行线性缩放,但是实测发现不需要

具体操作为在 configs/yolov5/ins_seg 文件夹下新建 yolov5_ins_s-v61_syncbn_fast_8xb16-300e_balloon_instance.py 配置文件(为了方便大家直接使用,我们已经提供了该配置),并把以下内容复制配置文件中。

_base_ = './yolov5_ins_s-v61_syncbn_fast_8xb16-300e_coco_instance.py'  # noqa

data_root = 'data/balloon/'
# 训练集标注路径
train_ann_file = 'train.json'
train_data_prefix = 'train/'  # 训练集图片路径
# 测试集标注路径
val_ann_file = 'val.json'
val_data_prefix = 'val/'  # 验证集图片路径
metainfo = {
    'classes': ('balloon', ), # 数据集类别名称
    'palette': [
        (220, 20, 60),
    ]
}
num_classes = 1
# 批处理大小batch size设置为 4
train_batch_size_per_gpu = 4
# dataloader 加载进程数
train_num_workers = 2
log_interval = 1
#####################
train_dataloader = dict(
    batch_size=train_batch_size_per_gpu,
    num_workers=train_num_workers,
    dataset=dict(
        data_root=data_root,
        metainfo=metainfo,
        data_prefix=dict(img=train_data_prefix),
        ann_file=train_ann_file))
val_dataloader = dict(
    dataset=dict(
        data_root=data_root,
        metainfo=metainfo,
        data_prefix=dict(img=val_data_prefix),
        ann_file=val_ann_file))
test_dataloader = val_dataloader
val_evaluator = dict(ann_file=data_root + val_ann_file)
test_evaluator = val_evaluator
default_hooks = dict(logger=dict(interval=log_interval))
#####################

model = dict(bbox_head=dict(head_module=dict(num_classes=num_classes)))

 以上配置从 yolov5_ins_s-v61_syncbn_fast_8xb16-300e_coco_instance.py 中继承,并根据 balloon 数据的特点更新了 data_rootmetainfotrain_dataloaderval_dataloadernum_classes 等配置。

模型训练

python tools/train.py configs/yolov5/ins_seg/yolov5_ins_s-v61_syncbn_fast_8xb16-300e_balloon_instance.py

运行以上训练命令 work_dirs/yolov5_ins_s-v61_syncbn_fast_8xb16-300e_balloon_instance 文件夹会被自动生成,权重文件以及此次的训练配置文件将会保存在此文件夹中。 在 4090 laptop显卡上,整个训练过程大概需要 25 分钟。

训练可视化

MMYOLO 目前支持本地、TensorBoard 以及 WandB 等多种后端可视化,默认是采用本地可视化方式,你可以切换为 WandB 等实时可视化训练过程中各类指标。

1 WandB 可视化使用

WandB 官网注册并在 https://wandb.ai/settings 获取到 WandB 的 API Keys。

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

在 configs/yolov5/ins_seg/yolov5_ins_s-v61_syncbn_fast_8xb16-300e_balloon_instance.py 配置文件最后添加 WandB 配置

visualizer = dict(vis_backends = [dict(type='LocalVisBackend'), dict(type='WandbVisBackend')])

重新运行训练命令便可以在命令行中提示的网页链接中看到 loss、学习率和 coco/bbox_mAP 等数据可视化了。

python tools/train.py configs/yolov5/ins_seg/yolov5_ins_s-v61_syncbn_fast_8xb16-300e_balloon_instance.py

2 Tensorboard 可视化使用

安装 Tensorboard 环境

pip install tensorboard

同上述在配置文件 configs/yolov5/ins_seg/yolov5_ins_s-v61_syncbn_fast_8xb16-300e_balloon_instance.py配置的最后添加 tensorboard 配置

visualizer = dict(vis_backends=[dict(type='LocalVisBackend'), dict(type='TensorboardVisBackend')])

重新运行训练命令后,Tensorboard 文件会生成在可视化文件夹 work_dirs/yolov5_ins_s-v61_syncbn_fast_8xb16-300e_balloon_instance/{timestamp}/vis_data 下, 运行下面的命令便可以在网页链接使用 Tensorboard 查看 loss、学习率和 coco/bbox_mAP 等可视化数据了:

tensorboard --logdir=work_dirs/yolov5_ins_s-v61_syncbn_fast_8xb16-300e_balloon_instance

模型测试

python tools/test.py configs/yolov5/ins_seg/yolov5_ins_s-v61_syncbn_fast_8xb16-300e_balloon_instance.py  work_dirs/yolov5_ins_s-v61_syncbn_fast_8xb16-300e_balloon_instance/best_coco_bbox_mAP_epoch_290.pth  --show-dir show_results

best_coco_bbox_mAP_epoch_300.pth每次训练结果不一样,需要修改为实际的

运行以上测试命令, 你不仅可以得到模型训练部分所打印的 AP 性能,还可以将推理结果图片自动保存至 work_dirs/yolov5_ins_s-v61_syncbn_fast_8xb16-300e_balloon_instance/{timestamp}/show_results 文件夹中。下面为其中一张结果图片,左图为实际标注,右图为模型推理结果。

 

特征图相关可视化

MMYOLO 中提供了特征图相关可视化脚本,用于分析当前模型训练效果。 详细使用流程请参考 特征图可视化

由于 test_pipeline 直接可视化会存在偏差,故将需要 configs\yolov5\ins_seg\yolov5_ins_s-v61_syncbn_fast_8xb16-300e_coco_instance.py 中 test_pipeline修改为如下配置:

test_pipeline = [
    dict(type='LoadImageFromFile', backend_args=_base_.backend_args),
    #dict(type='YOLOv5KeepRatioResize', scale=_base_.img_scale),
    dict(type='mmdet.Resize', scale=_base_.img_scale, keep_ratio=False), 
    # 删除 YOLOv5KeepRatioResize, 将 LetterResize 修改成 mmdet.Resize
    # dict(
    #     type='LetterResize',
    #     scale=_base_.img_scale,
    #     allow_scale_up=False,
    #     half_pad_param=half_pad_param,
    #     pad_val=dict(img=114)),
    dict(type='LoadAnnotations', with_bbox=True, _scope_='mmdet'),
    dict(
        type='mmdet.PackDetInputs',
        meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
                   'scale_factor', 'pad_param'))
]

我们选择 data/balloon/train/3927754171_9011487133_b.jpg 图片作为例子,可视化 YOLOv5 backbone 和 neck 层的输出特征图。

1. 可视化 YOLOv5 backbone 输出的 3 个通道

python demo/featmap_vis_demo.py data/balloon/train/3927754171_9011487133_b.jpg  configs/yolov5/ins_seg/yolov5_ins_s-v61_syncbn_fast_8xb16-300e_balloon_instance.py work_dirs/yolov5_ins_s-v61_syncbn_fast_8xb16-300e_balloon_instance/best_coco_bbox_mAP_epoch_290.pth --target-layers backbone --channel-reduction squeeze_mean

image

结果会保存到当前路径的 output 文件夹下。上图中绘制的 3 个输出特征图对应大中小输出特征图。

2. 可视化 YOLOv5 neck 输出的 3 个通道

python demo/featmap_vis_demo.py data/balloon/train/3927754171_9011487133_b.jpg  configs/yolov5/ins_seg/yolov5_ins_s-v61_syncbn_fast_8xb16-300e_balloon_instance.py work_dirs/yolov5_ins_s-v61_syncbn_fast_8xb16-300e_balloon_instance/best_coco_bbox_mAP_epoch_290.pth --target-layers neck --channel-reduction squeeze_mean

image

从上图可以发现物体处的特征更加聚焦。

  • 31
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值