手把手教你如何使用MMDetection训练自己的数据集

2024-09-04 14:28

本文主要是介绍手把手教你如何使用MMDetection训练自己的数据集,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、配置环境
    • 1. 创建一个名为mmdetection的虚拟环境
    • 2. 安装GPU版本的PyTorch
    • 3. 安装mmdetection所需的包
  • 二、下载源码并安装配置文件
    • 1. 下载 GitHub 上的mmdetection源码到本地
    • 2. 安装源码中的配置文件
    • 3. 配置成功
  • 三、测试是否成功安装
    • 1. 下载配置文件和模型权重文件。
    • 2. 推理验证
  • 四、数据集准备
    • 1. 准备好coco格式的数据集
    • 2. 创建新的数据集类
    • 3. 录入数据集
  • 五、模型准备
    • 1. 模型选择
    • 2. 配置文件准备及修改
      • 生成配置文件
      • 修改配置文件
      • 注册数据集的metainfo
    • 3. 模型训练

参考 : MMDetection全流程实战指南:手把手带你构建目标检测模型

一、配置环境

1. 创建一个名为mmdetection的虚拟环境

conda create -n mmdetection python=3.9 -y
conda activate mmdetection

2. 安装GPU版本的PyTorch

# GPU版本
conda install pytorch torchvision -c pytorch

这里如果安装失败了需要去官网 pytorch官网 找对应的版本下载;

先输入nvidia-smi命令查看可下载的cuda的最高版本
在这里插入图片描述
我的可下载的最高CUDA版本为12.0,因此我选择11.8的这个下载命令进行下载

在这里插入图片描述
在这里插入图片描述

下载后进行检验是否安装成功

import torch
torch.cuda.is_available()
exit()

在这里插入图片描述
可以看到输出为true,安装成功。

3. 安装mmdetection所需的包

使用 OpenMMLab 推出的 MIM 来安装 MMEngine 和 MMCV 两个必要的库。

pip install -U openmim
mim install mmengine
mim install "mmcv>=2.0.0"

至此,需要下载的包就都全部完成了,可以使用conda list命令来查看一下是否都安装成功了。
在这里插入图片描述

二、下载源码并安装配置文件

1. 下载 GitHub 上的mmdetection源码到本地

cd /path #(进入到你自己下载mmdetection代码的位置)
# 在Github上git代码
git clone https://github.com/open-mmlab/mmdetection.git

如果git失败就直接下载源码即可

github-mmdetection

在这里插入图片描述

2. 安装源码中的配置文件

# 进入mmdetection对应的文件夹
cd mmdetection
# 安装配置文件
pip install -v -e .

在这里插入图片描述

3. 配置成功

在这里插入图片描述

三、测试是否成功安装

1. 下载配置文件和模型权重文件。

mim download mmdet --config rtmdet_tiny_8xb32-300e_coco --dest .

在这里插入图片描述
下载结束后可以在当前文件夹中发现两个文件

  • rtmdet_tiny_8xb32-300e_coco.py
  • rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth。
    在这里插入图片描述

2. 推理验证

python demo/image_demo.py demo/demo.jpg rtmdet_tiny_8xb32-300e_coco.py --weights rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth --device cuda

在输入命令后我遇到了 “AssertionError: MMCV==2.2.0 is used but incompatible. Please install mmcv>=2.0.0rc4, <2.2.0” 的问题

在这里插入图片描述

  • 解决方法:注释掉/mmdetection-main/mmdet/init.py文件中的相关断言
# assert (mmcv_version >= digit_version(mmcv_minimum_version)
#         and mmcv_version < digit_version(mmcv_maximum_version)), \
#     f'MMCV=={mmcv.__version__} is used but incompatible. ' \
#     f'Please install mmcv>={mmcv_minimum_version}, <{mmcv_maximum_version}.'

在这里插入图片描述
再次运行后成功

在这里插入图片描述
结果可在outputs文件夹中查看;

在这里插入图片描述
至此mmdetection的安装和配置完成,下面将进行自定义数据集的配置。

四、数据集准备

1. 准备好coco格式的数据集

coco格式数据集如下所示:

在这里插入图片描述
在mmdetection文件夹下新建一个data数据集,再新建一个子文件夹名为coco,然后存放自己的数据集;

在这里插入图片描述

2. 创建新的数据集类

进入 mmdet/datasets 这个文件夹里,并创建一个自己命名数据集的 Python 文件,我的叫做plantdoc.py

在这里插入图片描述
由于是 coco 格式的数据集,因此可以直接复制名为 coco.py 文件的内容到 plantdoc.py 文件,然后修改里面对应的内容。

我们需要把coco.py中的类名数据集中的类别标注的颜色换成自己的数据集的类名

  • 下图为coco.py中的内容
    在这里插入图片描述

  • 下图为我自己的plantdoc.py类
    在这里插入图片描述

3. 录入数据集

在mmdet/datasets/init.py中仿照coco的格式把我们自己的数据集进行录入。

  • import 的内容就是我们自定义的 dataset 名字
  • 最后在下面也要加上对应 Dataset 的名称。
    在这里插入图片描述

五、模型准备

1. 模型选择

在config文件夹中选择想要使用的目标检测模型,我这里选择的是deformable_detr

在这里插入图片描述

配置文件中设置的epoch=50,batch=32,我这里根据我自己的设备修改为了epoch=36,batch=8

在这里插入图片描述

2. 配置文件准备及修改

由于在 MMDetection 里大多用的都是 COCO 格式的数据集,因此在这里直接修改 work_dir 文件夹里对应的配置文件会比起重新创建更加的方便。

生成配置文件

首先运行deformable-detr的训练命令

python tools/train.py configs/deformable_detr/deformable-detr_r50_16xb2-50e_coco.py

可以看到mmdetection文件夹中生成了一个work_dirs子文件夹,deformable-detr_r50_16xb2-50e_coco.py中就是完整的配置文件;

在这里插入图片描述

修改配置文件

把配置文件修改成和我们自己的数据集适配

  • 修改数据集类别数:从80改为27(自己的数据集类别个数)

在这里插入图片描述

  • 修改dataset_type:从CocoDataset改为PlantdocDataset(自己的数据集名称)

在这里插入图片描述

  • 还可以修改学习率:比如数据集很少的话,可以把学习率调得比较小,从而让其能够慢慢的学习到图像的特征。

注册数据集的metainfo

在配置文件中创建一个 metainfo,将自己的 classes(标签类别)和 palette(调色板)写入,并且在 train_dataloader、val_dataloader 和 test_dataloader 里写入;

  • 我的数据集的metainfo:

在这里插入图片描述

metainfo = dict(classes=('Tomato Septoria leaf spot','Bell_pepper leaf','Corn rust leaf','Potato leaf late blight','Corn leaf blight','Strawberry leaf','Tomato leaf late blight','Blueberry leaf','Soyabean leaf','Tomato mold leaf','Squash Powdery mildew leaf','Raspberry leaf','Tomato leaf bacterial spot','Apple rust leaf','Peach leaf','Potato leaf early blight','Tomato Early blight leaf','Apple Scab Leaf','Grape leaf','Tomato leaf','Grape leaf black rot','Apple leaf','Corn Gray leaf spot','Bell_pepper leaf spot','Cherry leaf','Tomato leaf mosaic virus','Tomato leaf yellow virus',),palette=[(220,20,60,),(119,11,32,),(0,0,142,),(0,0,230,),(106,0,228,),(0,60,100,),(0,80,100,),(0,0,70,),(0,0,192,),(250,170,30,),(100,170,30,),(220,220,0,),(175,116,175,),(250,0,30,),(165,42,42,),(255,77,255,),(0,226,252,),(182,182,255,),(0,82,0,),(120,166,157,),(110,76,0,),(174,57,255,),(199,100,0,),(72,0,118,),(255,179,240,),(0,125,92,),(209,0,151,),])

在train_dataloader、test_dataloader、val_dataloader中都写入;

在这里插入图片描述
在这里插入图片描述

3. 模型训练

此时我们运行work_dirs目录下的配置文件,然后就可以开始训练啦

python tools/train.py work_dirs/deformable-detr_r50_16xb2-50e_coco.py

在这里插入图片描述
可以查看每个epoch的loss、剩余时间等等

这篇关于手把手教你如何使用MMDetection训练自己的数据集的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1136229

相关文章

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹

Spring 框架之Springfox使用详解

《Spring框架之Springfox使用详解》Springfox是Spring框架的API文档工具,集成Swagger规范,自动生成文档并支持多语言/版本,模块化设计便于扩展,但存在版本兼容性、性... 目录核心功能工作原理模块化设计使用示例注意事项优缺点优点缺点总结适用场景建议总结Springfox 是

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、