mmdetection训练自己的数据集

文章目录

  • 前言
  • 一、mmdetection的
    • 1.准备
      • 1.导入自己的coco数据集
      • 2.修改
      • 3.训练
      • 4.数据分析
      • 5.测试模型
  • 二、遇到的问题
    • 1.FileNotFoundError : [Errno 2] No such file or directory: 'data/coco/train217/furty_1860.jpg'
    • 2.FileNotFoundError: file "F:\detection\mmdetection\demo1_test\mask_rcnn_r101_fpn_2x_coco.py" does not exist
    • 3.test.py: error: the following arguments are required: --backend(以下参数是必须的)
    • 4.AssertionError: The `num_classes` (1) in Shared2FCBBoxHead of MMDataParallel does not matches the length of `CLASSES` 80) in CocoDataset
  • 总结


前言

人工智能小白,最近在学习目标检测,在此分享所学与学习过程中的问题


一、mmdetection的

项目仓库地址(源码):https://github.com/open-mmlab/mmdetection

1.准备

(注:官方提供的代码默认要求使用coco格式的数据集)

1.导入自己的coco数据集

新建data文件夹存储coco数据集,coco数据集按照如下目录存储(部分源码中的文件下图未体现,但不代表训练时未体现文件不需要):

mmdetection-master
├── mmdet
├── tools
├── configs
├── data
│ ├── coco
│ │ ├── annotations
│ │ ├── train2017
│ │ ├── val2017

最终呈现出的目录:
mmdetection训练自己的数据集_第1张图片

2.修改

(1)configs/base/datasets下的

coco_detection.py
coco_instace.py
coco_instace_semantic.py
这三个文件当中的img_scale=(,)(图片的最大长度和最小长度)根据自己电脑的GPU适当改动(以上三个文件当中,各有两处img_scale需要改,即总共需要改六处)

(2)configs/yolox/yolox_s_8x8_300e_coco.py(yolox->选择自己要使用的算法,不一定是我写的这个;yolox_s_8x8_300e_coco.py->自己所需的配置文件,不一定是这个名)下的

修改两个文件中的num_classes=80,将“80”改为自己数据集的种类个数(例如猫狗模型,那么种类即为2)

(3)mmdet/core/evaluation/classnames.py下的

CLASSES = (‘Glass_Insulator’, ‘Composite_Insulator’, ‘Clamp’, ‘Drainage_Plate’)替换为自己数据分类id

eg:我的数据分类id为1,因此我的修改如下图:

mmdetection训练自己的数据集_第2张图片

mmdetection/mmdet/core/evaluation/class_names.py下的

def coco_classes():
return [
‘Glass_Insulator’, ‘Composite_Insulator’, ‘Clamp’, ‘Drainage_Plate’
]修改为自己的数据分类id(即标定数据集时的命名)

mmdetection训练自己的数据集_第3张图片

3.训练

(1)打开tool/train.py进行训练

输入命令python tools/train.py configs/yolox(你选择的算法)/yolox_s_8x8_300e_coco.py(上面“第二步修改”时自己所选的配置文件名) --gpus 1 --work-dir demo1_test

(2)一旦开始训练后立即掐断(使用Ctrl+C掐断)
eg:大约看到像如下图片时就可以掐断了
mmdetection训练自己的数据集_第4张图片

(3)此时我们再看目录会发现生成一个“demo1_test”文件(名称与上一小步的–work-dir demo1_test相同),此时我们会发现在此文件下包含三个文件(目录大致如下图)

eg:下面文件名可能略有不同
├── demo1_test
│ ├── 20220122_104751.log
│ ├── 20220122_104751.log.json
│ ├── yolox_s_8x8_300e_coco.py

打开其中的生成的配置文件“yolox_s_8x8_300e_coco.py”(这个生成的文件与“第二大步修改”所选取的配置文件名相同)

找到 log_config=dict(interval=50,hooks=…)
interval=50表示50次迭代才会生成一次日志信息,但我们希望日志信息越详细越好,所以建议调小一点(例如:调成5)

(4)用自己生成的配置文件进行训练(在此训练前先删掉“demo1_test”文件下的两个.log.json和.log文件)

输入命令python tools/train.py demo1_test/yolox_s_8x8_300e_coco.py(生成的配置文件名)–gpus 1 --work-dir demo1_test

4.数据分析

打开tools/analyze_logs.py
a.将某些参数生成折线图

输入命令将某些参数生成折线图的命令语句,便于观察:
python tools/analize_logs.py pot_curve demo1_test/20220122_104751.log.json(生成的.json文件名) --keys acc(可以将acc替换成你所要查看的参数,也可以多个一起查看 --keys loss_cls loss_bbox loss_mask)

b.将生成的折线图保存成pdf(或jpg)

输入将生成的图片保存成pdf的命令语句:
python tools/analysis_tools/analyze_logs.py plot_curve demo1_test/20220122_104751.log.json --keys loss_obj loss time --out out.pdf(若要生成jpg文件,则将其换成–out out.jpg)

5.测试模型

(1)tools/test.py下

输入命令:
python tools/test.py demo1_test/yolox_s_8x8_300e_coco.py(你的配置文件)demo1_test/epoch_24.pth(你所选择的用来检测的模型,一般用最后一个模型) --show

此时展示的只是图片的ID并非名字

二、遇到的问题

1.FileNotFoundError : [Errno 2] No such file or directory: ‘data/coco/train217/furty_1860.jpg’

解决方法:在json文件中删掉有关“furty_186.jpg”的图片信息: 例如:报错如题目所示,则在json文件中删掉如下图的两部分
mmdetection训练自己的数据集_第5张图片

mmdetection训练自己的数据集_第6张图片

2.FileNotFoundError: file “F:\detection\mmdetection\demo1_test\mask_rcnn_r101_fpn_2x_coco.py” does not exist

解决方法:报这种错误,表示目录错误按照报错的目录重新排布一下即可

3.test.py: error: the following arguments are required: --backend(以下参数是必须的)

解决方法: 找运行入口的参数

4.AssertionError: The num_classes (1) in Shared2FCBBoxHead of MMDataParallel does not matches the length of CLASSES 80) in CocoDataset

解决方法:可能是源码或生成的配置文件内的num_classes没有改成自己数据集的“类”个数


总结

刚刚入门,可能存在很多问题,欢迎大家在下方评论区指出mmdetection训练自己的数据集_第7张图片

你可能感兴趣的:(人工智能)