首先需要准备好数据集,这里有xml标签数据转voc数据集格式的说明以及免费分享的数据集:xml转voc数据集 - 一届书生 - 博客园 (cnblogs.com)

1. 准备工作目录

我们的工作目录,也就是mmdetection目录,如下所示:

.
├── configs
│   ├── _base_
│   │   ├── datasets
│   │   ├── models
│   │   ├── schedules
│   │   └── default_runtime.py
│   ├──pascal_voc
│   │   └── ......
│   └──......
├── data
│   └── VOCdevkit
│      └── VOC2007
│ ├── Annotations
│ │   ├── 003002_0.xml
│ │   ├── 003002_1.xml
│ │   └── ......
│ ├── ImageSets
│ │   └── Main
│ │      ├── test.txt
│ │      ├── train.txt
│ │      ├── trainval.txt
│ │      └── val.txt
│ └── JPEGImages
│    ├── 003002_0.jpg
│    ├── 003002_1.jpg
│    └── ......
├── mmdet
│   ├── core
│   ├── datasets
│   └── ......
├── tools
│   └── ......
└── ......
  • configs就是我们的训练所设计的配置的文件夹,我们需要进行修改符合voc格式。

  • data就是我们的数据集文件,文件目录如上。

  • mmdet是我们所需要修改的,主要是对训练的一些数据进行配置,需要修改类别数,。

  • tools是我们的mmdetection提供的工具箱,里边包含我们要用的训练和测试文件。

2. 修改mmdetection模型的配置

主要分为两部分,configs文件夹和mmdet文件夹。

2.1 修改configs文件夹

配置文件指的是 mmdetection/configs 下的文件,也就是你要训练的网络的一些配置。默认情况下,这些配置文件的使用的是 coco 格式,只有 mmdetection/pascal_voc 文件夹下的模型是使用 voc 格式,数量很少。如果要使用其他模型,则需要修改配置文件,这里以mmdetection/configs/cascade_rcnn/cascade_rcnn_r50_fpn_1x.py 为例。

1️⃣ 我们先在目录 mmdetection/configs/pascal_voc 下创建一个 cascade_rcnn_r50_fpn_1x_voc0712.py 作为cascade使用voc数据集的配置文件。就是我们的模型,使用以下基础配置文件,如果想要修改,可以直接去基础配置文件里面改。

ascade_rcnn_r50_fpn_1x_voc0712.py 的内容如下:

_base_ = [
'../_base_/models/cascade_rcnn_r50_fpn_voc.py',
'../_base_/datasets/voc0712.py',
'../_base_/schedules/schedule_1x.py',
'../_base_/default_runtime.py',
] runner = dict(type='EpochBasedRunner', max_epochs=7) # max_epochs就是我们要训练的总数,根据自己情况修改。

2️⃣ 我们先对 mmdetection/configs/_base_/models 目录下的创建一个 cascade_rcnn_r50_fpn_voc.py配置文件,文件的内容从同目录下 cascade_rcnn_r50_fpn.py 里面复制一下,然后进行以下修改。

在 cascade_rcnn_r50_fpn_voc.py配置文件中搜索 num_classes ,改成自己的类别数量,比如说我有一个类,我就改成1。配置文件里一共有三处。

3️⃣ 【可选】如果自己的显存比较小的话,可以修改 _base_/datasets/voc0712.py 文件里面的 img_scale 共两处,例如改成(600,400)。

4️⃣ 【可选】为了让训练过程更直观,以及节省存储空间,可以修改 _base_/default_runtime.py 里面的 interval ,一共有两个,第一个是模型权重的保存间隔,一般我们设置的比较大一点,例如20(根据你训练的总epoch而定)。第二个是日志的保存间隔,一般我们设置的比较小一点,例如1(根据你训练的总epoch而定)。

2.1 修改mmdet文件夹(修改完这里边的内容需要重新编译)

1️⃣ 修改 mmdetection/mmdet/core/evaluation/class_names.py ,把 voc_classes() 方法返回值,修改为自己的类别。例如我只有一类,我就改成下面这样,只有一类的后边加个逗号,有多类的不用加逗号。

2️⃣ 修改 mmdetection/mmdet/datasets/voc.py ,把 CLASSES ,修改为自己的类别。例如我只有一类,我就改成下面这样,只有一类的后边加个逗号,有多类的不用加逗号。

️️️ 两个文件夹都修改完后,在mmdetection文件夹下,运行命令,python setup.py install,重新编译一下,为了让所修改的内容生效。如果报错类别数量不对的话,请参考:# AssertionError: The `num_classes` (3) in Shared2FCBBoxHead of MMDataParallel does not matches the length of `CLASSES` 80) in CocoDataset - 一届书生 - 博客园 (cnblogs.com)

3. 开始训练

1️⃣ 单GPU训练

python tools/train.py configs/pascal_voc/cascade_rcnn_r50_fpn_1x_voc0712.py

2️⃣ 多GPU训练

 bash tools/dist_train.sh configs/pascal_voc/cascade_rcnn_r50_fpn_1x_voc0712.py  2
  • configs/pascal_voc/cascade_rcnn_r50_fpn_1x_voc0712.py 就是我们要训练模型的配置文件
  • 2 是我们的GPU数目

4. 模型测试

python tools/test.py work_dirs/cascade_rcnn_r50_fpn_1x_voc0712/cascade_rcnn_r50_fpn_1x_voc0712.py work_dir s/cascade_rcnn_r50_fpn_1x_voc0712/latest.pth --show-dir work_dirs/cascade_rcnn_r50_fpn_1x_voc0712/test_show

可视化结果展示:

同时我们的 work_dirs/mask_rcnn_r101_fpn_2x_coco/ 目录下还会有个json文件,可以可视化我们的一些评价指标的变化情况。为了方便显示,我们在 mmdetection/ 目录下新建一个 logs 文件夹,讲 json 文件拷贝到 logs 文件夹。

python tools/analysis_tools/analyze_logs.py plot_curve logs/20211101_171556.log.json --keys loss_rpn_cls loss_rpn_bbox loss --out out.pdf
  • plot_curve 代表画折线

  • logs/20211101_171556.log.json 换成你自己的 json 文件

  • loss_rpn_cls loss_rpn_bbox loss 你想显示的数据

  • out.pdf 你输出的文件

显示结果如下图:

文章到此结束了,完结撒花。

mmdetection训练voc数据集的更多相关文章

  1. Win10 + YOLOv3训练VOC数据集-----How to train Pascal VOC Data

    How to train (Pascal VOC Data): Download pre-trained weights for the convolutional layers (154 MB):  ...

  2. MMDetection 快速开始,训练自定义数据集

    本文将快速引导使用 MMDetection ,记录了实践中需注意的一些问题. 环境准备 基础环境 Nvidia 显卡的主机 Ubuntu 18.04 系统安装,可见 制作 USB 启动盘,及系统安装 ...

  3. 搭建 MobileNet-SSD 开发环境并使用 VOC 数据集训练 TensorFlow 模型

    原文地址:搭建 MobileNet-SSD 开发环境并使用 VOC 数据集训练 TensorFlow 模型 0x00 环境 OS: Ubuntu 1810 x64 Anaconda: 4.6.12 P ...

  4. 目标检测:keras-yolo3之制作VOC数据集训练指南

    制作VOC数据集指南 Github:https://github.com/hyhouyong/keras-yolo3 LabelImg标注工具(windows环境下):https://github.c ...

  5. Fast RCNN 训练自己数据集 (1编译配置)

    FastRCNN 训练自己数据集 (1编译配置) 转载请注明出处,楼燚(yì)航的blog,http://www.cnblogs.com/louyihang-loves-baiyan/ https:/ ...

  6. PASCAL VOC数据集分析(转)

    PASCAL VOC数据集分析 PASCAL VOC为图像识别和分类提供了一整套标准化的优秀的数据集,从2005年到2012年每年都会举行一场图像识别challenge. 本文主要分析PASCAL V ...

  7. 自动化工具制作PASCAL VOC 数据集

    自动化工具制作PASCAL VOC 数据集   1. VOC的格式 VOC主要有三个重要的文件夹:Annotations.ImageSets和JPEGImages JPEGImages 文件夹 该文件 ...

  8. 【计算机视觉】PASCAL VOC数据集分析

    PASCAL VOC数据集分析 PASCAL VOC为图像识别和分类提供了一整套标准化的优秀的数据集,从2005年到2012年每年都会举行一场图像识别challenge. 本文主要分析PASCAL V ...

  9. 【Detection】物体识别-制作PASCAL VOC数据集

    PASCAL VOC数据集 PASCAL VOC为图像识别和分类提供了一整套标准化的优秀的数据集,从2005年到2012年每年都会举行一场图像识别challenge 默认为20类物体 1 数据集结构 ...

  10. YOLOV4在linux下训练自己数据集(亲测成功)

    最近推出了yolo-v4我也准备试着跑跑实验看看效果,看看大神的最新操作 这里不做打标签工作和配置cuda工作,需要的可以分别百度搜索   VOC格式数据集制作,cuda和cudnn配置 我们直接利用 ...

随机推荐

  1. 你想要一个简单的 MQ 吗?(最简单的那种)

    FolkMQ 一个简单的消息中间件(全球最简单的那种,要比谁都简单!).追世间简单为何物,可叫我生死相许! 面向简单编程 1) 启动服务 docker run -p 18602:18602 -p 86 ...

  2. WPF --- 重写圆角DataGrid样式

    引言 因要符合UI设计, 需要一个圆角的 DataGrid 样式,其需要一个,所以需要重写DataGrid的样式, 代码 具体样式代码如下: <ResourceDictionary xmlns= ...

  3. CYQ.Data 操作 Redis 性能测试:对比 StackExchange.Redis

    前言: 前几天,点开自己的博客,看了一下 CYQ.Data V5系列 都有哪些文章, 发现了一篇2019年写的:CYQ.Data 对于分布式缓存Redis.MemCache高可用的改进及性能测试,于是 ...

  4. WEBRTC回声消除-AECM算法源码解析之参数解析

    一 概述   webrtc 针对回声问题一共开源了3种回声消除算法,分别为aec,aecm,以及aec3,其中aec是最早期的版本,在后续的更新中aec3的出现代替了aec在webrtc 中的地位,而 ...

  5. C++ Qt开发:QUdpSocket网络通信组件

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QUd ...

  6. Sealos 云开发:Laf 出嫁了,与 Sealos 正式结合!

    千呼万唤始出来,Laf 云开发最近已正式与 Sealos 融合,入住 Sealos!大家可以登录 Sealos 公有云 体验和使用,现在正式介绍一下 Sealos 云开发. Sealos 云开发是什么 ...

  7. Spring Boot框架中针对数据文件模板的下载总结

    1.前言 在我们的日常开发中,经常会碰到注入导入Excel数据到系统中的需求,而在导入Excel数据时,一般的业务系统都会提供数据的Excel模板,只有提交的Excel数据满足业务系统要求的模板时,数 ...

  8. dbvisivuser连oracle数据库报错没有权限

    原因:数据库从11g升级为19c了 解决:ojdbc.jar也要换成最新的,导致报错的旧jar包2M大小,换成新jar包3M大小.替换jar包要将 dbvisivuser的tool driverMan ...

  9. 实现基于TCP的服务端/客户端

    服务端套接字创建过程 第一步:调用socket函数创建套接字 //成功时返回文件表述符,失败时返回-1 int socket(int __domain, int __type, int __proto ...

  10. MySQL数据库维护和改善性能

    备份数据   由于MySQL数据库是基于磁盘的文件,普通的备份系统和例程就能备份MySQL的数据.但是,由于这些文件总是处于打开和使用状态,普通的文件副本备份不一定总是有效.下面列出这个问题的可能解决 ...