基于MMDetection训练VOC格式数据集

news2025/1/18 1:51:46

一 环境说明

       基于前述安装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、待补充

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/10042.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习极简入门笔记-5-无监督学习-K-means

目录 第17章 KNN算法(有监督学习算法,放在此位置是为了与下一章的K-means做对比) 17.1 KNN算法原理 17.2 KNN中的K 第18章 K-means——最简单的聚类算法 18.1 K-means算法步骤 18.2 K-means算法具体细节 18.3 启发式算法 18.4 K-mean…

介绍a股level2数据接口委托队列的作用

a股level2数据接口可以实现量化交易的准确性,那用户在交易的过程中会发现在“委托队列”中,如果出现一些有规律性的单子,往往是主力之间的盘口暗语。 例如排在靠前的都是大单,封单相当坚决,如果细心一点还会发现都是拖…

Spring Security 自定义拦截器Filter实现登录认证

前言 需求来源: 微信小程序获取授权码code, 通过授权码code, 获取微信用户信息(比如openid,unionId), 并记录登录状态(比如token信息的获取); 原本打算使用Spring Security中OAuth2.0的机制 实现用小程序登录,发现小程序再已经获取授权码code登录流程和Spring Secu…

Intellij插件之~图形界面Swing UI Designer

资料 Java Swing 介绍 JavaFX快速入门 Java Swing 图形界面开发简介 GUI Designer Basics scrcpy ScrcpyController Services 创建一个Gui Form文件(类form文件) 创建一个Gui Form 此时生成两个类, 是自动关联的 鼠标可以拖入控件,每拖入一个组件,在TestForm…

领悟《信号与系统》之 信号与系统的描述-下节

信号与系统的描述-下节一、信号的基本运算1. 信号的基本运算1. 加法 、减法2. 乘法、除法3. 微分 、差分4.积分、迭分2. 关于时间(自变量)的运算1. 位移2. 反折3. 尺度变换二、阶跃信号与冲激信号1. 单位阶跃信号2. 单位阶跃信号的特性3. 单位冲激信号4.…

Android架构师学习必备学习宝典《Android架构开发手册》

吐槽 我想每个程序员在写代码的时候可能都有这些历程(夸张): 这坨代码谁写的,怎么要这样写啊,我这个需求该怎么加代码!(尝试在shit山上小心地走,并添加新代码)写的好难受,shit越改越chou了…算了&#xf…

协程设计原理

文章目录1、协程的背景1.1、同步与异步1.2、为什么使用协程1.3、协程的适用场景2、协程的原语操作3、协程的切换3.1、汇编实现4、协程的定义4.1、多状态集合设计4.2、调度器的定义4.2、调度策略生产者消费者模式多状态运行5、api 封装5.1、hook 机制5.2、hook 函数原型5.3、hoo…

React笔记——github案例(用到axios 和 pubsub)

案例github用上脚手架配置代理 1.完成静态页面构建 小技巧:先在原html页面搜索最外侧框 是否有样式存在,如果样式不存在则不需要剪切过去 给需求或效果分好组件,分别是 Search 和 List 、App 组件 class都改为 className 给图片添加上特定…

JS高级(二):继承、数组的一些api、Object.defineProperty()、call、apply、bind

JavaScript高级(二)一、继承1.call方法改变this指向2.构造函数中模拟类的super实现属性继承3.构造函数借助原型对象实现方法继承4.类的本质二、ES5几个新增方法1.数组forEach()2.数组filter()3.数组some()4.字符串trim()三、Object.definProperty()四、改…

基于STM32结合CubeMX学习Free-RT-OS的源码之深入学习软件定时器实现过程

概述 关于在CUBEMX上的配置 介绍 软件定时器基于硬件定时器实现。 软件定时器允许设置一段时间,当设置的时间到达之后就执行指定的功能函数,被定时器 调用的这个功能函数叫做定时器的回调函数。回调函数的两次执行间隔叫做定时器的定时周期,…

什么是需求分析,如何进行需求分析?

目录 前言 需求分析在分析什么 如何看待产品原型设计 技术同学培养产品意识 如何应对需求变更问题 总结 重点:配套学习资料和视频教学 前言 这篇文章,我会将软件工程中关于需求分析相关的知识进行总结梳理,并以自己理解的方式进行阐述…

iNFTnews|风口之上,耐克推出的web3平台.SWOOSH能否引领市场?

本周一,著名的体育运动品牌耐克宣布,公司将进一步进军Web3,并将发布一个旨在通过旗下的数字可穿戴设备吸引用户的新平台——.SWOOSH。 耐克表示,.SWOOSH将成为Web3教育的资源库,以及购买和交易虚拟运动鞋或运动衫等数…

Oracle SQL执行计划操作(3)——物化视图相关操作

3. 物化视图相关操作 该类操作与SQL语句执行计划中访问物化视图数据的路径和方式相关,主要包括物化视图访问类相关操作。根据不同的具体SQL语句及其他相关因素,如下各操作可能会出现于相关SQL语句的执行计划。 1)MAT_VIEW ACCESS FULL 对物化视图(Materialized View)直…

培训学校的教务管理系统存在的问题有哪些?

教务管理在培训学校管理里面占据不可或缺的地位。随着计算机、网络、大数据、人工智能等技术的发展,国家对智慧校园的重视,促进了培训学校教务管理信息化与智慧化建设。然而,随着科技进步速度不断加快,教育改革步伐的不断加大&…

解决:将Ubuntu系统打包成ios镜像并制作U盘系统

将Ubuntu系统打包成ios镜像并制作U盘系统一、安装 Systemback二、将创建的.sblive镜像文件转为.iso格式三、写入U盘进行安装四、制作系统U盘一、安装 Systemback Currently supported Ubuntu releases: - 14.04.X LTS - 15.04 - 15.10 - 16.04.X LTS - 16.10Systemback的作者在…

linux的基本指令(中)

文章目录1.man指令1.安装2.用法3.man数字1. printf函数的查询2.cp指令1.cp 文件1.拷贝到当前目录2.拷贝到 其他目录中3. 拷贝到上一级目录2.cp 目录1.返回上一级目录3. mv指令1.剪切2. 文件的重命名4. cat指令1.显示文件的全部内容并且不可以修改2.cat -n指令3. cat -s 指令5. …

6张思维导图,搞定项目管理!(PMP项目管理可用)

工作中,我们最常遇到的就是大大小小的工作项目。项目要怎么做,才能100%达成目标呢? 小哈总结了6组项目管理思维导图。只要从五大阶段掌握诀窍,用项目管理的思维去管理工作,工作就能有条不紊按预期达到目标&#xff0c…

GitHub Codespaces 安装 .NET 7

本文主要介绍如何在 GitHub Codespaces 这个云上 IDE 环境中安装 .NET 7 背景 GitHub 的 Codespaces 可以让我们随时随地编写代码,一些简单的修改也非常方便快捷。特别是 .NET 7 发布后,一些可以直接升级的小项目只需要更改配置就可以了,我们…

EN 14915实木镶板和包层—CE认证

实木镶板和包层CE认证(欧盟强制认证)-简介 在欧盟市场“CE”标志属强制性认证标志,以表明产品符合欧盟《技术协调与标准化新方法》指令的基本要求。这是欧盟法律对产品提出的一种强制性要求。 在实木镶板和包层上加贴CE标志不但可…

Active Directory报表计划

ADManager Plus的“计划报表”功能是一个独有模块,可使报表生成实现自动化。IT管理员现在可为任何所需的时间段(从一个小时到一个月)计划报表。因而,计划功能可提供一致、准确的报表交付,而不会产生任何麻烦和费用。本…