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.hqwc.cn/news/703924.html

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

相关文章

1688阿里商品详情API接口(标题|主图|SKU|价格等属性)

1688阿里商品详情API接口(标题|主图|SKU|价格等属性) 通过1688开放平台的商品详情信息API接口,开发者可以获取商品的详细信息,包括商品名称、价格、库存、描述、参数等。这些信息对于构建电商应用、比价工具或进行数据分析都是非常有用的 可以获取任意1…

详细教程!VMware Workstation Pro16 安装 + 创建 win7 虚拟机!

嚯嚯嚯,很多宝子都想拥有自己不同的操作系统环境,用于学习或项目搭建。买服务器费钱,虚拟机则成为了一个很好的选择。本文详细介绍VMware Workstation Pro 16安装及win7虚拟机创建,保姆级教程奉上! 一、准备工作 VMw…

【C++算法】堆相关经典算法题

1.最后一块石头的重量 其实就是一个模拟的过程:每次从石堆中拿出最大的元素以及次大的元素,然后将它们粉碎;如果还有剩余,就将剩余的石头继续放在原始的石堆里面重复上面的操作,直到石堆里面只剩下一个元素&#xff0c…

住宅IP vs 数据中心代理IP

IP代理种类很多,其中包括住宅代理,数据中心代理,HTTP代理等多种分类。今天我们来介绍一下住宅IP代理与数据中心代理的区别。 住宅IP含义 住宅IP是指海外互联网服务供应商分配给家庭的IP地址,是固定的IP地址,可以为用户…

Leecode热题100---11:盛最多水的容器

题目: 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾…

Spring AI项目配置1.0.0-SNAPSHOT快照版指导

Spring AI项目配置1.0.0-SNAPSHOT快照版开发指导 说明pom文件修改 说明 请在更换Spring AI的全程中,科学上网,因为国内镜像和maven官方仓库还没有Spring AI的依赖,需要的依赖目前存放在https://repo.spring.io如果你使用的maven是自己配置&a…

鸿蒙生态融合进行时!菊风启动适配HarmonyOS NEXT,赋能原生应用实时

​​今日话题 鸿蒙HarmonyOS NEXT 自华为公开宣布鸿蒙 HarmonyOS NEXT 系统以来,该系统受到了业内广泛关注,和以往鸿蒙系统不同的是该系统底座完全由华为自研,摒弃了 Linux 内核和安卓 AOSP 代码,仅兼容鸿蒙内核及鸿蒙系统的应用…

navicat 无法连接mysql8

select host,user,authentication_string,plugin from mysql.user; alter user root%IDENTIFIED WITH mysql_native_password BY root; flush PRIVILEGES; select host,user,authentication_string,plugin from mysql.user;

嗨动PDF编辑器怎么对pdf修改?分享修改步骤

嗨动PDF编辑器怎么对pdf修改?PDF(Portable Document Format)格式因其跨平台、不易修改的特性,在日常工作和学习中得到了广泛的应用。然而,当需要对PDF文件进行修改时,许多人可能会感到困扰。此时&#xff0…

GPT4 是如何将文本 token 化的?

本文给出一个 GPT4 模型可视化token的工具网站,大家可以去上面测试一下效果。 网址: https://platform.openai.com/tokenizer 使用说明 通过该网站工具,你可以了解一段文本如何被GPT-4模型token化的,以及文本的被token化之后的…

4.StableDiffusion各项参数解读

经过前期的努力,我想大家都已经生成了自己的第一张AI作品,但是充满了随机性,每次都是不一样的,并且有时候生成的图片效果还不是很让人满意,暂且先不要着急,先跟着本篇文章,学习一些每个选项和参…

WT99C262-SG LoRa开发板使用教程

WT99C262-SG模块是全新一代的Wi-FiBLELoRa无线扩频模块,基于启明云端WTLRC262-SG系列模组设计开发的新一代LoRa扩频芯片方案设计的无线串口模块。具有多种传输方式,LoRa扩频技术,且模组大部分管脚均已引出至两侧排针,开发人员可根…