【mmdetection】使用cascade-rcnn、faster-rcnn训练自定义的coco数据集

目录

  • 一.开始
  • 二.配置训练环境
    • 1.创建虚拟环境、激活环境
    • 2.下载pytroch、torchvision、cudatoolkit
    • 3.下载mmcv-full
    • 4.下载mmdetection
    • 5.下载mmdetection需求包
    • 6.下载mmdet
  • 三.验证环境是否安装完所有依赖包
    • 1.下载预训练模型
    • 2.运行demo命令验证
    • 3.运行结果
  • 四.训练自己的模型
    • 1.制作coco数据集
    • 2.修改参数
      • 2.1.config文件夹
      • 2.2.mmdet文件夹
    • 3.修改完类别后一定要重新编译,否则可能会出现错误
    • 4.开始训练
    • 5.训练完成
  • 五.结语

一.开始

  1. 这篇文章主要是记录我第一次使用mmdetection工具包里面的cascade-rcnn训练自己模型的经过。
  2. 如果是想使用faster_rcnn训练,则修改_bash_的model文件内的faster_rcnn的class_num即可(第四步修改参数部分会介绍)。
  3. 这里可以看出mmdet使用的便利性,如果想使用其他模型训练,进行小修改也就可以了

二.配置训练环境

  • 本次是使用的系统是linux的ubuntu20.04
    • cuda=10.2
      cudnn=7.6.5
      anaconda=3(用于创建虚拟环境,后续的训练、测试模型也在这个虚拟环境中)
      (以上软件安装可以参考其他博客)
    • pytroch=1.5.0
      torchvision=0.6.0
      cudatoolkit=10.2.89
      mmcv-full=1.3.1
      mmdetection=v2.11
      mmdet=2.11.0
      (这些软件安装在下面介绍)

1.创建虚拟环境、激活环境

在桌面打开终端,进行创建和激活环境(创建虚拟环境opne-mmlab并激活python=3.7)

conda create -n open-mmlab python=3.7
conda activate open-mmlab

输出如下图:

2.下载pytroch、torchvision、cudatoolkit

其中pytroch1.5.0 torchvision0.6.0 cudatoolkit==10.2.89

conda install pytorch==1.5.0 torchvision==0.6.0 cudatoolkit=10.2 -c pytorch

如果下载较慢,可以到网站上下载对应的离线包,然后在虚拟环境中进入到下载文件夹,使用pip安装离线包到虚拟环境当中
Pytorch_stable下载地址.
清华镜像下载

3.下载mmcv-full

pip install mmcv-full

4.下载mmdetection

文件夹放到桌面上命名为mmdetection,如果下载过慢,就到mmdetection网站上下载

git clone https://github.com/open-mmlab/mmdetection.git

5.下载mmdetection需求包

从桌面终端进入根目录(在open-mmlab虚拟环境中),我下载的mmdetection版本是V2.11

cd mmdetection
pip install -r requirements.txt

如果上面的运行失败就使用下面的(每次选择其中一个进行尝试)

pip install -r build.txt
pip install -v -e .   
python setup.py develop

6.下载mmdet

pip install mmdet 

后续差什么依赖包就按照提示pip安装对应包
参考:球场书生的博文

三.验证环境是否安装完所有依赖包

1.下载预训练模型

创建文件夹checkpoints,并把下载的预训练模型放在其中

2.运行demo命令验证

python demo/image_demo.py demo/demo.jpg configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth

3.运行结果

【mmdetection】使用cascade-rcnn、faster-rcnn训练自定义的coco数据集_第1张图片

  • 如果可以出现上图,验证环境已下载完整

四.训练自己的模型

1.制作coco数据集

  • mmdetection兼容coco数据集以及voc数据集,但是coco数据集可能训练的结果比较好,所以本次使用的数据集是coco(训练前对数据进行数据增强可以得到更好的结果,数据增强可以参考imageaug,或者 我修改好的文件)
    (1)使用labelImg标注自己的图片,可以得到xml文件
    (2)首先创建一个叫tmp_xml的文件夹,里面存放标注好的xml和jpg图片,使用python代码(放在和tmp_xml文件夹同级的位置,需要修改部分代码例如数据集的年份改成2017,按照需求添加val代码,或者直接下载我修改好的文件)将xml及图片自己划分train、test、val文件转换成json文件(coco数据集以这个格式储存)
    (3)按照coco数据集的格式放入对应文件
    (4)coco数据集格式如下(annontations以及3个图片集)【mmdetection】使用cascade-rcnn、faster-rcnn训练自定义的coco数据集_第2张图片
    (5) annontations文件夹里面如下(包含3个json文件)【mmdetection】使用cascade-rcnn、faster-rcnn训练自定义的coco数据集_第3张图片
    (6) 修改好数据集后,在mmdetection根目录下创建data文件夹,将coco数据集放入,放入后格式如下

    mmdetection\data\coco
    —annotations
    ——instances_test2017.json
    ——instances_train2017.json
    ——instances_val2017.json
    —test2017
    —train2017
    —val2017
    —test.txt
    —train.txt
    —val.txt

2.修改参数

  • 修改文件夹共有两个
    • —config文件夹(包含3个,图片尺寸、学习率、训练次数、种类个数)
      ——coco_detection.py
      ——schedule_1x.py
      ——cascade_rcnn_r50_fpn.py(如果使用faster_rcnn,则修改faster_rcnn_r50_fpn.py即可,其余不用改)
    • ——mmdet文件夹(包含2个,种类名字)
      —— coco.py
      —— class_names.py

2.1.config文件夹

1.mmdetection\configs\cascade_rcnn\cascade_rcnn_r50_fpn_1x_coco.py
这个文件不修改,主要查看需要修改哪些文件及其位置(如果使用faster-rcnn也是需要打开对应的文件来查询更改文件的位置)
【mmdetection】使用cascade-rcnn、faster-rcnn训练自定义的coco数据集_第4张图片
2.mmdetection\configs_base_\datasets\coco_detection.py
修改图片尺寸
【mmdetection】使用cascade-rcnn、faster-rcnn训练自定义的coco数据集_第5张图片
3.mmdetection\configs_base_\schedules\schedule_1x.py
修改学习率lr,以及训练次数max_epochs(依照自己电脑配置)
【mmdetection】使用cascade-rcnn、faster-rcnn训练自定义的coco数据集_第6张图片
这里先查看自己电脑的GPU颗数,如果是1,lr设置为0.0025比较合适,如果是4则设为0.01,依次增加。设置过大容易梯度爆炸,设置太小则训练时间较长,需要自己权衡
查看命令如下图,我的电脑是1

【mmdetection】使用cascade-rcnn、faster-rcnn训练自定义的coco数据集_第7张图片
4.(1)mmdetection\configs_base_\models\cascade_rcnn_r50_fpn.py
修改你自己模型的class类别,我的种类共有5种,所以num_classes=5【mmdetection】使用cascade-rcnn、faster-rcnn训练自定义的coco数据集_第8张图片
(2)如果使用的是faster_rcnn,则修改mmdetection\configs_base_\models\faster_rcnn_r50_fpn.py
【mmdetection】使用cascade-rcnn、faster-rcnn训练自定义的coco数据集_第9张图片

2.2.mmdet文件夹

5.mdetection\mmdet\datasets\coco.py
修改类别名字为自己的,我这里是5种
【mmdetection】使用cascade-rcnn、faster-rcnn训练自定义的coco数据集_第10张图片
6.mmdetection\mmdet\core\evaluation\class_names.py
修改类别名字,与上一步一致
【mmdetection】使用cascade-rcnn、faster-rcnn训练自定义的coco数据集_第11张图片
参考:包子爱跑步的文章

3.修改完类别后一定要重新编译,否则可能会出现错误

AssertionError: The `num_classes` (5) in Shared2FCBBoxHead of MMDataParallel does not matches the length of `CLASSES` 80) in RepeatDataset
  • 错误原因:数据集的类别信息仍是coco类别80类,(我的数据集是5类)。
    在修改完 class_names.py 和 voc.py 之后一定要重新编译代码
python setup.py install

参考:ydwl_懒洋洋的博文
如果编译后还是失败,可以先删掉mmdetection,重新下载修改再编译。我之前也遇到编译后出错,重新下载一次就解决了。

4.开始训练

  • 进入到mmdetection根目录,进入到open-mmlab虚拟环境
    创建新文件夹work_dirs,用于存放训练后的模型
python tools/train.py configs/cascade_rcnn/cascade_rcnn_r50_fpn_1x_coco.py
  • 训练过程如下
    【mmdetection】使用cascade-rcnn、faster-rcnn训练自定义的coco数据集_第12张图片

5.训练完成

训练完成后work_dirs文件夹包含每轮训练的结果
【mmdetection】使用cascade-rcnn、faster-rcnn训练自定义的coco数据集_第13张图片
一般来说最后一次训练(lastest)的效果最佳,所以用它来查看训练效果
进入到mmdetection根目录,进入到open-mmlab虚拟环境

python tools/test.py configs/cascade_rcnn/cascade_rcnn_r50_fpn_1x_coco.py \
    work_dirs/cascade_rcnn_r50_fpn_1x_coco/latest.pth \
    --eval bbox --show

结果如下

训练完成后的模型可视化可以参考:可视化

五.结语

至此训练模型过程就结束了,本次训练的模型检测效果不算太好,对于部分瑕疵的识别准度还不够,后续会在数据集本身以及模型参数方面进行改进!感谢博客上其他大佬的文章,帮助我完成本次的模型训练
【mmdetection】使用cascade-rcnn、faster-rcnn训练自定义的coco数据集_第14张图片

你可能感兴趣的:(笔记,mmdetection,cascade-rcnn,深度学习,机器学习,pytorch)