【mmdetection】 运行Mask-Rcnn代码(Win11 pytorch版)

以下针对pytorch版本的Mask-Rcnn,tensorflow版本的可以参考介个Mask RCNN训练自己的数据集——程序调试记录_张十三、的博客-CSDN博客

为啥要提出pytorch版本呢?因为本人换电脑了,显卡升级为30系列,而30系列显卡的 CUDA 版本要求是 11.x ,不能在 tensorflow1.x 上运行。恰巧,之前代码版本是tensorflow 1.13.0的。哎....

本来,尝试用tensorflow2.x 代替 tensorflow1.x,改一下 bug ,结果不一样的地方实在太多,还不好改,于是脱坑,建立 pytorch 版本的 mask rcnn 代码。
参考:https://blog.csdn.net/WYKB_Mr_Q/article/details/127005238

            化学实验室自动化 - 1. 深度学习视觉检测(实例分割) - Mask-RCNN模型训练和预测_浙大炼金术士的博客-CSDN博客_maskrcnn预训练模型

代码连接:GitHub - open-mmlab/mmdetection: OpenMMLab Detection Toolbox and Benchmark

一、环境(win11 显卡 RTX 3060 12G)

Python 3.8

cuda 11.6

pytorch 1.12.0+cu116(利用官网语句下载即可)

labelme=5.0.1

二、mmdetection环境搭建

利用mim安装mmcv包:

pip install -U mim
mim install mmcv-full

安装mmdet包:

pip install mmdet

剩余的包缺什么按什么就可以。

三、数据准备(以coco数据集为例)

  1. 在 mmdetection-master 目录下新建一个 coco文件夹, 将处理好的 coco 格式数据集,按如下样式放入该文件夹中。( coco 文件夹,coco 文件夹下放 annotations 文件夹和 train, val以及 test文件夹,这三个文件夹下直接是图片。)
  2. 在mmdetection-master目录下新建 checkpoints 文件夹和 work_dirs 文件夹。

(重点!)自制的数据集,用 labelme 软件标注好,再转化为 coco 数据标注格式就行,数据制作方法参考:https://blog.csdn.net/wangjianwei19911218/article/details/126348135(巨好用!!)

 四、源代码修改

4.1 如果是自制的数据集,需要修改数据集的类别名称和类别数量。这里以 mmdetection-master 为根目录,主要修改两个文件:

./mmdetection-master/mmdet/datasets/coco.py
./mmdetection-master/mmdet/core/evaluation/class_name.py

目前我的数据集只有 cow 样本,一个类别要加逗号,因此直接按照我的来:
在这里插入图片描述

 4.2 修改配置文件

首先打开文件配置文件,找到需要修改的文件路径:
./mmdetection-master/configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py

在这里插入图片描述

需要对这4个路径中的文件进行一一修改:

(1)修改 mask_rcnn_r50_fpn.py 文件

修改第 47 行和第 66 行的类别数,根据自己的数据集,我的是 1 类。

在这里插入图片描述

(2)修改 coco_instance.py 文件

data_root 路径改为 ‘ …/data/coco ', 文件路径按我的来。

在这里插入图片描述

 在这里插入图片描述

(3)修改 schedule_1x.py 文件

原文中 8 个 GPU,学习率为0.02,咱们一个GPU,因此设为0.0025.

在这里插入图片描述

(4)修改 default_runtime.py 文件

在这里插入图片描述

我们主要用 tools 文件夹下的 train.py 文件进行训练。

在 pycharm软件下添加文件参数:

在这里插入图片描述

 在这里插入图片描述

 确定,点开始就可以训练了。

测试时,在config中加入如下代码:

../configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py E:\relate_code\mmdetection-master\tools\work_dirs\mask_rcnn_r50_fpn_1x_coco/epoch_12.pth --show --eval bbox segm

在这里插入图片描述

五、bug汇总

1 AttributrError:’ConfigDict‘ object has no attribute ’dataset‘

 解决方法:

在这里插入图片描述

 2 ValueError: need at least one array to concatenate

Traceback (most recent call last):
  File "tools/train_chicken.py", line 142, in <module>
    main()
  File "tools/train_chicken.py", line 138, in main
    meta=meta)
  File "/home/zlee/下载/mmdetection-master/mmdet/apis/train.py", line 111, in train_detector
    meta=meta)
  File "/home/zlee/下载/mmdetection-master/mmdet/apis/train.py", line 225, in _non_dist_train
    runner.run(data_loaders, cfg.workflow, cfg.total_epochs)
  File "/home/zlee/.local/lib/python3.5/site-packages/mmcv/runner/runner.py", line 359, in run
    epoch_runner(data_loaders[i], **kwargs)
  File "/home/zlee/.local/lib/python3.5/site-packages/mmcv/runner/runner.py", line 259, in train
    for i, data_batch in enumerate(data_loader):
  File "/usr/local/lib/python3.5/dist-packages/torch/utils/data/dataloader.py", line 193, in __iter__
    return _DataLoaderIter(self)
  File "/usr/local/lib/python3.5/dist-packages/torch/utils/data/dataloader.py", line 493, in __init__
    self._put_indices()
  File "/usr/local/lib/python3.5/dist-packages/torch/utils/data/dataloader.py", line 591, in _put_indices
    indices = next(self.sample_iter, None)
  File "/usr/local/lib/python3.5/dist-packages/torch/utils/data/sampler.py", line 172, in __iter__
    for idx in self.sampler:
  File "/home/zlee/下载/mmdetection-master/mmdet/datasets/loader/sampler.py", line 63, in __iter__
    indices = np.concatenate(indices)
ValueError: need at least one array to concatenate

解决方案:检查自己的Classname也就是修改源代码的第一步两个文件是不是同json文件中的label一致,我的是因为json中的label是”1“,而Classname=(cow,)不一致才出现报错,将其修改为(’1‘,)后可正常运行。

  • 3
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张十三、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值