基于MMDetection训练VOC格式数据集

2023-10-29

一 环境说明

       基于前述安装MMDetection,数据集为VOC格式,主要版本如下:

Python:3.7.8
CUDA:11.3
cuDNN:8.4.0
torch:1.12.0
torchvision:0.13.0
mmcv-full:1.6.0
MMDetection:2.25.3

二 数据集准备

     使用VOC格式进行模型训练,利用labelimg对图像进行标注,生成xml文件,准备好图片和标注文件,并对数据集进行划分,文件目录如下图所示。

mmdetection
├── mmdet
├── tools
├── configs
├── dataset
│   ├── ACID  # 自己给数据集取名字
│   │   ├── VOC2007
│   │   │   ├── Annotations # xml文件
│   │   │   ├── JPEGImages # 图片文件
│   │   │   ├── ImageSets
│   │   │   │   ├── Main
│   │   │   │   │   ├── test.txt 
│   │   │   │   │   ├── trainval.txt

三 修改默认labels

        1、在 .\mmdetection-v2.25.3\mmdet\core\evaluation\class_names.py中,修改函数

voc_classes下面的默认类别,修改为自己标注的类别。
def voc_classes():
    # return [
    #     'aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat',
    #     'chair', 'cow', 'diningtable', 'dog', 'horse', 'motorbike', 'person',
    #     'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor'
    # ]

    # SODA的数据标签,一共 15 个
    # 把配电箱 ebox,写成了 electric box,一直报错,所以要先检查labels
    # return [
    #     'person', 'vest', 'helmet', 'board', 'wood',
    #     'rebar', 'brick', 'scaffold', 'handcart', 'cutter',
    #     'ebox', 'hopper', 'hook', 'fence', 'slogan'
    # ]

    # ACID数据集标签,一共3个
    return [
            'excavator', 'dump_truck', 'concrete_mixer_truck'
        ]

    2、在  .\mmdetection-v2.25.3\mmdet\datasets\voc.py中,修改默认的VOC CLASSES为自己标注的类别,如下图所示。

class VOCDataset(XMLDataset):

    # CLASSES = ('aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car',
    #            'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse',
    #            'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train',
    #            'tvmonitor')

    # 修改为 SODA的类别
    # CLASSES = ('person', 'vest', 'helmet', 'board', 'wood',
    #             'rebar', 'brick', 'scaffold', 'handcart', 'cutter',
    #             'ebox', 'hopper', 'hook', 'fence', 'slogan')

    # ACID的类别,3个 'excavator', 'dump_truck', 'concrete_mixer_truck'
    CLASSES = ('excavator', 'dump_truck', 'concrete_mixer_truck')

四 选择模型

      在 .\mmdetection-v2.25.3\configs文件夹下,有很多模型,到底选择哪一个,到底那个支持VOC格式进行直接训练呢?

      目前,支持VOC直接训练的模型在 .\mmdetection-v2.25.3\configs\pascal_voc文件夹下,模型的数量不多,主要模型如下图所示。

      默认都是COCO格式的,COCO格式的模型也是可以手动改为VOC格式的,那个后面再说。

      【 刚开始以为随便一个模型都可以用来训练数据,结果报莫名其妙的错误 】

 五 生成模型全部配置文件

        当选择好模型后,需要对进行模型的参数进行配置,一种比较好的方法是生成单独的全部的配置文件,具体操作方法如下:

python tools/train.py configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc0712.py --work-dir VOC_SSD300

        生成的配置文件在定义的工作目录下,下一步对配置文件进行配置即可。

 六 配置文件修改

      重点修改标注的类别数,数据的路径,结果保存路径,大部分都不需要修改了。

num_classes=3  # 类别数

dataset_type = 'VOCDataset'
data_root = 'dataset/A/'

ann_file='dataset/A/VOC2007/ImageSets/Main/test.txt'
img_prefix='dataset/A/VOC2007/',


work_dir = 'VOC_SSD300'  # 工作目录

load_from = None  # 预训练模型

 七 预训练模型下载

       训练时通常加载预训练模型,一种方法是直接取model zoo下载,另一种是使用命令直接下载,指定配置文件名称和下载路径即可。

mim download mmdet --config yolov3_mobilenetv2_mstrain-416_300e_coco --dest checkpoints

八 训练模型

     模型训练的脚本就比较简单了,指定你配置文件的路径和结果保存路径即可,如下:

python tools/train.py my_config\ssd300_voc0712.py --work-dir VOC_SSD300

LAST 可能会遇到的问题

        1、class_names.py和voc.py中的类别都改了,但训练的时候还是报错:

AssertionError: The `num_classes` (15) in SSDHead of MMDataParallel does not matches the length of `CLASSES` 20) in RepeatDatasetn

你定义的类别数和默认的VOC的20个类别不一致,但是你已经改了文件,就是不起作业,解决方法见下图,将修改好的2个文件替换到安装包里的。

        2、待补充

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于MMDetection训练VOC格式数据集 的相关文章

随机推荐

  • es 修改mappings字段结构

    es不支持直接修改mappings字段结构 可以通过 reindex 重建索引 方式修改 POST reindex source index old index dest index new index op type create Ela
  • 记录:Qt Creator 10配置安卓开发环境

    Qt Creator 现在的安卓开发环境配置相比老版本方便了不少 本文以目前在线安装版的 Qt Creator 10 0 2 Qt 5 15 Qt 6 5 为例做演示 有些文件可能会因为网络问题需要科学上网才能下载 1 下载 JDK htt
  • 【css】css动画实现的3种方式

    css实现动画主要有3种方式 transition实现过渡动画 transform转变动画 animation实现自定义动画 一 transition过渡动画 1 语法 transition property duration timing
  • UnityAPI.Transform变换(Yanlz+Unity+API+Transform+)

    UnityAPI Transform变换 版本 作者 参与者 完成日期 备注 UnityAPI Transform V01 1 0 严立钻 2018 08 21 UnityAPI Transform变换 发布说明 UnityAPI Tran
  • Linux·C++多线程基础知识

    目录 1 多线程 1 1 多进程与多线程 1 2 多线程理解 1 3 创建线程 1 4 join与detach方式 1 join举例 2 detach举例 1 5 this thread 2 mutex 2 1 lock与unlock 2
  • 【Tensorflow】tf.nn.depthwise_conv2d如何实现深度卷积?

    实验环境 tensorflow版本1 2 0 python2 7 介绍 depthwise conv2d来源于深度可分离卷积 Xception Deep Learning with Depthwise Separable Convoluti
  • C#时间字符串转换

    class Program static void Main string args DateTime datetime DateTime Now 打印当前时间 Console WriteLine 时间为 n datetime n 方法1
  • Generator 函数

    Generator 函数 基本概念 与 Iterator 接口的关系 next 方法的参数 for of 循环 Generator prototype throw Generator prototype return next throw
  • docker quick start

    文章目录 安装 验证 设置阿里云加速代理 测试 常用命令 镜像和容器存储位置 容器生命周期 Dockerfile 构建镜像 部署tomcat 基础指令 构建redis镜像 容器间Link单向通信 容器间Bridge网桥双向通信 volume
  • 【Node.js实战】一文带你开发博客项目之日志(文件读写、stream流、写日志)

    个人简介 个人主页 前端杂货铺 学习方向 主攻前端方向 也会涉及到服务端 个人状态 在校大学生一枚 已拿多个前端 offer 秋招 未来打算 为中国的工业软件事业效力n年 推荐学习 前端面试宝典 Vue2 Vue3 Vue2 Vue3项目实
  • memcache清除缓存

    打开cmd 输入 telnet localhost 11211 flush all
  • 为博客添加樱花飘落的效果

    偶然看见别人博客中樱花飘落的效果 感觉很棒 于是我也给博客加上了樱花 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 新建 sakura js 新建一个 sakura js 文件 在里面填入下面的代码 代码来自于 折月
  • 快速排序的优化

    1 快速排序的基本思想 快速排序使用分治的思想 通过一趟排序将待排序列分割成两部分 其中一部分记录的关键字均比另一部分记录的关键字小 之后分别对这两部分记录继续进行排序 以达到整个序列有序的目的 2 快速排序的三个步骤 1 选择基准 在待排
  • 24. 在QML界面中嵌入QWidget窗口

    1 说明 目前QT官方主推的界面开发方式是采用QML进行界面设计 但在QML未流行之前 很多的项目都是采用QWidget开发的 把之前的代码全部转换为QML代码显然工作量非常大 如果能将QWidget窗口嵌入到QML界面中 那么开发效率将提
  • WTL 界面设计篇(CImageEx)

    头文件声明 CImageEx h pragma once include
  • chrony实现同步阿里云时间

    1 安装chrony yum install chrony y vim etc chrony conf 修改chrony配置文件 替换默认的centos server ntp1 aliyun com iburst server ntp2 a
  • 【Winform Vlc.DotNet Fill拉伸控件实现全屏】

    其实也有WPF得实现 但是这个效率更高 cpu占用在2 以内 基本都素在1 上下浮动 但是WPF基本就是3 起步了 想看WPF实现得右转 https blog csdn net weixin 38138153 article details
  • Linux usb子系统(二) _usb-skeleton.c精析

    drivers usb usb skeleton c 是内核提供给usb设备驱动开发者的海量存储usb设备的模板程序 程序不长 通用性却很强 十分经典 深入理解这个文件可以帮助我们更好的理解usb子系统以及usb设备驱动框架 写出更好的us
  • Python爬虫解析网页内容

    Python爬虫是一种自动化程序 可以模拟人类用户访问网页 获取网页中的内容 爬虫在信息采集 数据分析和网络监测等领域有着广泛的应用 在爬虫过程中 解析网页内容是非常重要的一步 Python提供了许多强大的库和工具 用于解析网页内容 其中
  • 基于MMDetection训练VOC格式数据集

    一 环境说明 基于前述安装MMDetection 数据集为VOC格式 主要版本如下 Python 3 7 8 CUDA 11 3 cuDNN 8 4 0 torch 1 12 0 torchvision 0 13 0 mmcv full 1