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.pswp.cn/web/13061.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/13061.shtml
英文地址,請注明出處:http://en.pswp.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+論文+講解+售后

快速發展的社會中,人們的生活水平都在提高,生活節奏也在逐漸加快。為了節省時間和提高工作效率,越來越多的人選擇利用互聯網進行線上打理各種事務,通過線上物業管理系統也就相繼涌現。與此同時,人們開始接受方便的生活…

Swift頁面的跳轉和返回

之前一直使用的OC,現在也有不少人使用Swift,我也嘗試一下,寫一個簡單又基礎的功能:頁面的跳轉和返回。這里將顯示幾個swift文件的代碼。 文件Common.swift的代碼: // // Common.swift // MySwiftProject // // Cre…

怎樣讓貓給啥吃啥?生骨肉凍干拌糧哪有貓咪不吃的!

隨著科學養貓的普及,生骨肉凍干喂養越來越受歡迎,生骨肉凍干喂養對貓的好處很多,它符合貓咪的天性,可以提供全面的營養,保持牙齒和牙齦的健康,還有助于維持健康的消化系統。然而,許多貓主人在選…

考研操作系統-1.計算機系統概述

目錄 操作系統功能 操作系統的發展與分類 操作系統的運行環境 操作系統的體系結構 王道考研操作系統-1.計算機系統概述 操作系統 是指控制和管理整個計算機系統的硬件和軟件資源,合理地組織調度計算機的工作和資源的分配;提供給用戶和軟件方便的接…

PHP類和對象概念及用法

類和對象的關系 可以將類看成為一件模具,倒入不同的材料(屬性和方法),這些材料用于構建獨特的對象 類的基本組成部分 屬性:類中的變量,用于儲存數據 方法:類中的函數,用于操作和訪問類的屬性 類及其屬性和方法的創建…

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中點擊按鈕,就可以將當前的設計分享給其他人,無論是客戶、供應商還是團隊內部成員。共享的用戶只要打開瀏覽器里…

Python中的exec()函數,動態執行代碼的利器

簡介 在Python編程中,exec()函數是一個強大的工具,它允許你執行存儲在字符串或對象中的Python代碼。這種動態執行代碼的能力為腳本編寫、自動化測試、以及快速原型開發提供了極大的便利。 exec()函數的基本用法 exec()函數可以執行作為字符串輸入的Py…

一本專業130+總分400+上海交通大學819考研經驗上交電子信息與通信工程上岸,真題,大綱,參考書。

今年專業課819信號系統與信號處理130,總分400,復試表現中規中矩(初試分數查到才開始復習復試,希望大家汲取教訓,初試考完就可以錄取開始準備復試),交大初試比重很高,良心學校&#x…

LeetCode58.最后一個單詞的長度

題目鏈接: 58. 最后一個單詞的長度 - 力扣(LeetCode) 分析:普通的模擬題,只要有基本的算法思想就可以掌握。 算法思路:要統計最后一個單詞的長度,所以我們只要找到最后一個單詞出現的起始和終…

ASP.NET在線畢業論文提交系統的設計與實現

摘 要 本設計就很好的解決了上面的問題,它不但能實現畢業生論文的在線提交;還能給教師一定的權限,以在線的方式對自己指導的學生的論文進行審核;并且管理員還可以方便的將每個學生的論文信息按統一的論文排版本格式導出成word文…

高并發-線程池面試

文章目錄 高并發-線程池2024心得好的博客必會面試題為什么使用線程池線程池的實現原理線程池的拒絕策略阻塞隊列已滿,在提交任務會發生什么問題threadlocal原理和使用多線程配置 高并發-線程池2024 心得 面試都是圍繞著三高展開,高并發,高可…