mmdetection训练(1)voc格式的数据集(自制)

mmdetection训练(1)voc格式的数据集(自制)

  • 提前准备
  • 一、voc数据集
  • 二、修改配置代码进行训练(敲黑板!!!!!)
    • 1.数据集相关内容修改
    • 2.自定义配置文件构建
  • 三、训练及其评估测试
  • 总结


提前准备

voc数据集,mmdetection代码库

一、voc数据集

需要有以下三个文件夹的格式数据
(这里不需要完全按照vocdevkit/voc2007这种进行构建,下面教大家如何修改)
在这里插入图片描述
存放xml标签文件
在这里插入图片描述
放的train.txt,test.txt,和val.txt
在这里插入图片描述
存放原始的图片数据

二、修改配置代码进行训练(敲黑板!!!!!)

强调:这里包括以下的内容,均在自己创建模板文件下进行修改,原则上不对原始代码进行修改,修改原始代码繁琐且容易搞混破坏代码整体结构,以下均为自己创建配置文件,请自己按需改写(个人喜欢这样的配置方式)。

1.数据集相关内容修改

(1)configs/base/datasets/voc0712.py中
修改相关的路径与voc数据集保持一致(这个文件夹中只要修改路径不要修改别的东西)

# dataset settings
dataset_type = 'VOCDataset'
# data_root = 'data/VOCdevkit/'
data_root = '/home/ubuntu/data/Official-SSDD-OPEN/BBox_SSDD/'# Example to use different file client
# Method 1: simply set the data root and let the file I/O module
# automatically Infer from prefix (not support LMDB and Memcache yet)# data_root = 's3://openmmlab/datasets/detection/segmentation/VOCdevkit/'# Method 2: Use `backend_args`, `file_client_args` in versions before 3.0.0rc6
# backend_args = dict(
#     backend='petrel',
#     path_mapping=dict({
#         './data/': 's3://openmmlab/datasets/segmentation/',
#         'data/': 's3://openmmlab/datasets/segmentation/'
#     }))
backend_args = None###数据增强的方法
train_pipeline = [dict(type='LoadImageFromFile', backend_args=backend_args),dict(type='LoadAnnotations', with_bbox=True),dict(type='Resize', scale=(1000, 600), keep_ratio=True),dict(type='RandomFlip', prob=0.5),dict(type='PackDetInputs')
]
test_pipeline = [dict(type='LoadImageFromFile', backend_args=backend_args),dict(type='Resize', scale=(1000, 600), keep_ratio=True),# avoid bboxes being resizeddict(type='LoadAnnotations', with_bbox=True),dict(type='PackDetInputs',meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape','scale_factor'))
]###数据加载
train_dataloader = dict(batch_size=2,num_workers=2,persistent_workers=True,sampler=dict(type='DefaultSampler', shuffle=True),batch_sampler=dict(type='AspectRatioBatchSampler'),dataset=dict(type='RepeatDataset',times=3,dataset=dict(type='ConcatDataset',# VOCDataset will add different `dataset_type` in dataset.metainfo,# which will get error if using ConcatDataset. Adding# `ignore_keys` can avoid this error.ignore_keys=['dataset_type'],datasets=[dict(type=dataset_type,data_root=data_root,# ann_file='VOC2007/ImageSets/Main/trainval.txt',ann_file='voc_style/ImageSets/Main/train.txt',data_prefix=dict(sub_data_root='voc_style/'),filter_cfg=dict(filter_empty_gt=True, min_size=32, bbox_min_size=32),pipeline=train_pipeline,backend_args=backend_args),# dict(#     type=dataset_type,#     data_root=data_root,#     ann_file='VOC2012/ImageSets/Main/trainval.txt',#     data_prefix=dict(sub_data_root='VOC2012/'),#     filter_cfg=dict(#         filter_empty_gt=True, min_size=32, bbox_min_size=32),#     pipeline=train_pipeline,#     backend_args=backend_args)])))val_dataloader = dict(batch_size=1,num_workers=2,persistent_workers=True,drop_last=False,sampler=dict(type='DefaultSampler', shuffle=False),dataset=dict(type=dataset_type,data_root=data_root,ann_file='voc_style/ImageSets/Main/test.txt',data_prefix=dict(sub_data_root='voc_style/'),test_mode=True,pipeline=test_pipeline,backend_args=backend_args))
test_dataloader = val_dataloader# Pascal VOC2007 uses `11points` as default evaluate mode, while PASCAL
# VOC2012 defaults to use 'area'.
val_evaluator = dict(type='VOCMetric', metric='mAP', eval_mode='11points')
test_evaluator = val_evaluator

(2)修改 mmdet/datasets/voc.py文件
修改自己数据集的类别信息与框的颜色,并且一定注释取消voc2007和2012版本判断的要求,方便后面使用自己的数据集路径。

# Copyright (c) OpenMMLab. All rights reserved.
from mmdet.registry import DATASETS
from .xml_style import XMLDataset@DATASETS.register_module()
class VOCDataset(XMLDataset):"""Dataset for PASCAL VOC."""# 标准的voc格式类别信息# METAINFO = {#     'classes':#     ('aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat',#      'chair', 'cow', 'diningtable', 'dog', 'horse', 'motorbike', 'person',#      'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor'),#     # palette is a list of color tuples, which is used for visualization.#     'palette': [(106, 0, 228), (119, 11, 32), (165, 42, 42), (0, 0, 192),#                 (197, 226, 255), (0, 60, 100), (0, 0, 142), (255, 77, 255),#                 (153, 69, 1), (120, 166, 157), (0, 182, 199),#                 (0, 226, 252), (182, 182, 255), (0, 0, 230), (220, 20, 60),#                 (163, 255, 0), (0, 82, 0), (3, 95, 161), (0, 80, 100),#                 (183, 130, 88)]# }### 修改的数据类别信息METAINFO = {'classes':('ship', ),# palette is a list of color tuples, which is used for visualization.'palette': [(106, 0, 228)]}def __init__(self, **kwargs):super().__init__(**kwargs)# if 'VOC2007' in self.sub_data_root:#     self._metainfo['dataset_type'] = 'VOC2007'# elif 'VOC2012' in self.sub_data_root:#     self._metainfo['dataset_type'] = 'VOC2012'# else:#     self._metainfo['dataset_type'] = None

(3)修改网络配置文件中的输出类别(非必须操作)
configs/base/models/faster-rcnn_r50_fpn.py

2.自定义配置文件构建

(1)在代码根目录新建myconfig.py的文件,
(2)复制以下内容到其中:
新的配置文件主要是分为三个部分
1、倒入相应的库文件(base
2、模型加载文件:一定要家在修改num_classses=‘你的类别’
3、数据集配置:直接复制configs/base/datasets/voc0712.py即可

# 新配置继承了基本配置,并做了必要的修改
# _base_ = './configs/faster_rcnn/mask-rcnn_r50-caffe_fpn_ms-poly-1x_coco.py'
_base_ = './configs/faster_rcnn/faster-rcnn_r50_fpn_1x_voc.py'
# 我们还需要更改 head 中的 num_classes 以匹配数据集中的类别数
########------模型相关配置--------#########
model = dict(roi_head=dict(bbox_head=dict(num_classes=1)))########------修改数据集相关配置--------#########
backend_args = None# dataset settingsdataset_type = 'VOCDataset'
# data_root = 'data/VOCdevkit/'
data_root = '/home/ubuntu/data/Official-SSDD-OPEN/BBox_SSDD/'###数据增强的方法
train_pipeline = [dict(type='LoadImageFromFile', backend_args=backend_args),dict(type='LoadAnnotations', with_bbox=True),dict(type='Resize', scale=(1000, 600), keep_ratio=True),dict(type='RandomFlip', prob=0.5),dict(type='PackDetInputs')
]
test_pipeline = [dict(type='LoadImageFromFile', backend_args=backend_args),dict(type='Resize', scale=(1000, 600), keep_ratio=True),# avoid bboxes being resizeddict(type='LoadAnnotations', with_bbox=True),dict(type='PackDetInputs',meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape','scale_factor'))
]###数据加载
train_dataloader = dict(batch_size=2,num_workers=2,persistent_workers=True,sampler=dict(type='DefaultSampler', shuffle=True),batch_sampler=dict(type='AspectRatioBatchSampler'),dataset=dict(type='RepeatDataset',times=3,dataset=dict(type='ConcatDataset',# VOCDataset will add different `dataset_type` in dataset.metainfo,# which will get error if using ConcatDataset. Adding# `ignore_keys` can avoid this error.ignore_keys=['dataset_type'],datasets=[dict(type=dataset_type,data_root=data_root,# ann_file='VOC2007/ImageSets/Main/trainval.txt',ann_file='voc_style/ImageSets/Main/train.txt',data_prefix=dict(sub_data_root='voc_style/'),filter_cfg=dict(filter_empty_gt=True, min_size=32, bbox_min_size=32),pipeline=train_pipeline,backend_args=backend_args),# dict(#     type=dataset_type,#     data_root=data_root,#     ann_file='VOC2012/ImageSets/Main/trainval.txt',#     data_prefix=dict(sub_data_root='VOC2012/'),#     filter_cfg=dict(#         filter_empty_gt=True, min_size=32, bbox_min_size=32),#     pipeline=train_pipeline,#     backend_args=backend_args)])))val_dataloader = dict(batch_size=1,num_workers=2,persistent_workers=True,drop_last=False,sampler=dict(type='DefaultSampler', shuffle=False),dataset=dict(type=dataset_type,data_root=data_root,ann_file='voc_style/ImageSets/Main/test.txt',data_prefix=dict(sub_data_root='voc_style/'),test_mode=True,pipeline=test_pipeline,backend_args=backend_args))
test_dataloader = val_dataloader
###数据加载
train_dataloader = dict(batch_size=2,num_workers=2,persistent_workers=True,sampler=dict(type='DefaultSampler', shuffle=True),batch_sampler=dict(type='AspectRatioBatchSampler'),dataset=dict(type='RepeatDataset',times=3,dataset=dict(type='ConcatDataset',# VOCDataset will add different `dataset_type` in dataset.metainfo,# which will get error if using ConcatDataset. Adding# `ignore_keys` can avoid this error.ignore_keys=['dataset_type'],datasets=[dict(type=dataset_type,data_root=data_root,# ann_file='VOC2007/ImageSets/Main/trainval.txt',ann_file='voc_style/ImageSets/Main/train.txt',data_prefix=dict(sub_data_root='voc_style/'),filter_cfg=dict(filter_empty_gt=True, min_size=32, bbox_min_size=32),pipeline=train_pipeline,backend_args=backend_args),# dict(#     type=dataset_type,#     data_root=data_root,#     ann_file='VOC2012/ImageSets/Main/trainval.txt',#     data_prefix=dict(sub_data_root='VOC2012/'),#     filter_cfg=dict(#         filter_empty_gt=True, min_size=32, bbox_min_size=32),#     pipeline=train_pipeline,#     backend_args=backend_args)])))val_dataloader = dict(batch_size=1,num_workers=2,persistent_workers=True,drop_last=False,sampler=dict(type='DefaultSampler', shuffle=False),dataset=dict(type=dataset_type,data_root=data_root,ann_file='voc_style/ImageSets/Main/test.txt',data_prefix=dict(sub_data_root='voc_style/'),test_mode=True,pipeline=test_pipeline,backend_args=backend_args))
test_dataloader = val_dataloader# 使用预训练的 Mask R-CNN 模型权重来做初始化,可以提高模型性能
# load_from = 'https://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth'

三、训练及其评估测试

模型训练的命令:

python tools/train.py myconfig_voc.py```
模型测试的命令```bash
在这里插入代码片

总结

训练遇到的问题
记录下遇到的问题。训练SSDD数据集的时候,发现coco格式训练正常,但voc格式训练出现map值很低,一直升不上去。试了下2.x版本的mmdetection训练voc格式没问题,解决方案是在configs/base/datasets/voc0712.py中删掉bbox_min_size=32即可,原文链接:https://blog.csdn.net/Pliter/article/details/134389961

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

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

相关文章

云曦实验室期中考核题

Web_SINGIN 解题: 点击打开环境,得 查看源代码,得 点开下面的超链接,得 看到一串base64编码,解码得flag 简简单单的文件上传 解题: 点击打开环境,得 可以看出这是一道文件上传的题目&#x…

【if条件、for循环、数据框连接、表达矩阵画箱线图】

编程能力,就是解决问题的能力,也是变优秀的能力 From 生物技能树 R语言基础第七节 文章目录 1.长脚本管理方式if(F){....}分成多个脚本,每个脚本最后保存Rdata,下一个脚本开头清空再加载 2.实战项目的组织方式方法(一&…

圆上点云随机生成(人工制作模拟数据)

1、背景介绍 实际上,很多地物外表形状满足一定的几何形状结构,如圆形是作为常见一类。那么获取该类目标的点云数据便是位于一个圆上的点云数据。如下图所示为两簇典型的点云,其中一种为理想型,点均位于一个圆上,另外一簇则是近似位于一个圆上,这种更加符合真实情况。有时…

好烦啊,我真的不想写增删改查了!

大家好,我是程序员鱼皮。 很想吐槽:我真的不想写增删改查这种重复代码了! 大学刚做项目的时候,就在写增删改查,万万没想到 7 年后,还在和增删改查打交道。因为增删改查是任何项目的基础功能,每…

性能测试工具—jmeter的基础使用

1.Jmeter三个重要组件 1.1线程组的介绍: 特点: 模拟用户,支持多用户操作多个线程组可以串行执行,也可以并行执行 线程组的分类: setup线程组:前置处理,初始化普通线程组:编写…

springboot+vue+mybatis物业管理系统+PPT+论文+讲解+售后

快速发展的社会中,人们的生活水平都在提高,生活节奏也在逐渐加快。为了节省时间和提高工作效率,越来越多的人选择利用互联网进行线上打理各种事务,通过线上物业管理系统也就相继涌现。与此同时,人们开始接受方便的生活…

怎样让猫给啥吃啥?生骨肉冻干拌粮哪有猫咪不吃的!

随着科学养猫的普及,生骨肉冻干喂养越来越受欢迎,生骨肉冻干喂养对猫的好处很多,它符合猫咪的天性,可以提供全面的营养,保持牙齿和牙龈的健康,还有助于维持健康的消化系统。然而,许多猫主人在选…

考研操作系统-1.计算机系统概述

目录 操作系统功能 操作系统的发展与分类 操作系统的运行环境 操作系统的体系结构 王道考研操作系统-1.计算机系统概述 操作系统 是指控制和管理整个计算机系统的硬件和软件资源,合理地组织调度计算机的工作和资源的分配;提供给用户和软件方便的接…

GDPU 竞赛技能实践 天码行空 期末小测

1. 除法(原题) 👨‍🏫 实验二:1.简单枚举 输入正整数n,按从小到大的顺序输出所有形如abcde/fghij n的表达式,其中a~j恰好为数字0~9的一个排列(可以有前导0&a…

复杂json解析(其中有一个key的value是json格式的字符串)

app上报的参数如下: {"clientId": "8517895440514039afcf6d3e5d7832ae","dua": "SNDOCKCJPH90_GA&VN900042418&BN0&VCXiaomi&MOM2012K11AC&RL1080_2239&CHIDunknown_unknown&LCID&RV&OSAndroid13&…

邦注科技 即热式节能模温机的原理及应用介绍

模温机是一种用于控制模具温度的设备,它在各种工业领域中发挥着重要作用,特别是在塑料加工行业中。以下是关于模温机的原理及应用的详细介绍: 原理 模温机的工作原理主要是通过加热和冷却功能,维持模具温度在一个恒定的范围内。…

Hadoop 3.4.0 项目实战

1环境基于 上一篇搭建 高可用分布式集群 2 官方提供MapReduce程序 #评估圆周率 cd /data/hadoop/share/hadoop/mapreduce/ hadoop jar hadoop-mapreduce-examples-3.4.0.jar pi 2 6 3 实例项目分析1 #预分析的文件如,如单词统计 # #上传文件到hdfs hdfs …

SOLIDWORKS 2024云服务新功能

一、简单的分享一下,在线观看,轻松标记 在达索系统SOLIDWORKS 2024云服务中,您只需在达索系统SOLIDWORKS中点击按钮,就可以将当前的设计分享给其他人,无论是客户、供应商还是团队内部成员。共享的用户只要打开浏览器里…

一本专业130+总分400+上海交通大学819考研经验上交电子信息与通信工程上岸,真题,大纲,参考书。

今年专业课819信号系统与信号处理130,总分400,复试表现中规中矩(初试分数查到才开始复习复试,希望大家汲取教训,初试考完就可以录取开始准备复试),交大初试比重很高,良心学校&#x…

ASP.NET在线毕业论文提交系统的设计与实现

摘 要 本设计就很好的解决了上面的问题,它不但能实现毕业生论文的在线提交;还能给教师一定的权限,以在线的方式对自己指导的学生的论文进行审核;并且管理员还可以方便的将每个学生的论文信息按统一的论文排版本格式导出成word文…

洗衣洗鞋店做小程序有什么优势?

互联网洗衣洗鞋小程序闪亮登场,想知道这款小程序有何魅力吗? 如今,众多商家纷纷推出预约上门洗鞋服务,💁‍♀️并倾力打造洗鞋小程序,旨在拓展线上销售渠道。🌟那么,这款洗鞋小程序究…

网络配置的加密存储

随着数据泄露事件的增加,扰乱了公司的正常工作周期,企业遭受了损失。事实上,数据泄露可以通过存储加密来控制,存储加密是防止黑客对网络数据库造成严重破坏的最有效方法之一。在网络配置管理器中,存储加密可用于存储设…

Unity 模拟放大镜局部放大UI 效果实现

UI 放大实现 RectTransformUtility.ScreenPointToLocalPointInRectangle(rectScale, eventData.position, eventData.pressEventCamera, out localPos); 使用IPointerDownHandler 获取鼠标点击时的有效负载,并将鼠标坐标转成对应的UI 坐标,rectScale 为…

【Win】一键恢复IE11工具:让旧版浏览器在新系统中重生

微软在2020年8月的时候就已经公告IE11的生命周期终点,多次提醒将在2022年6月15日起不再支持IE 11,呼吁用户尽快转换到Chromium-based Microsoft Edge。微软也陆续终止旗下服务支持这个旧式浏览器。2021年3月,Chrome浏览器已不支持旧IE App。2…

欢迎光临Java中的客“栈”

就目前而言,相信大家对数组、链表还有栈都基本已经有了一些了解,本篇文章将以栈为主体,探究栈和数组,栈和链表之间的一些联系。 当然在开始对栈的学习之前,我们先回顾有关数组、链表的基础知识点。 学习代码就是一个…