使用mmdetection中的YOLOv3训练自己的数据集

利用mmdetection中的yolov3训练自己的数据集

.xml转为.json链接:
https://blog.csdn.net/u010397980/article/details/90341223

1.mmdetection环境安装

参考官方网址open-mmlab或者上一篇博客mmdetection安装测试

2.准备自定义的数据集。

****mmdetection中yolov3模型使用的数据集格式为coco数据集格式,mmdetection在tools/datast_converters/pascal_voc.py提供了标准pascal voc数据集转换成coco格式的代码。在mmdetection目录下新建data/coco文件夹,将自定义的数据集转换成以下格式:
mmdetection
├── mmdet
├── tools
├── configs
├── data
│ ├── coco
│ │ ├── annotations
│ │ ├── train2017
│ │ ├── val2017
│ │ ├── test2017
其中train2017、val2017、test2017里面反别放置训练、验证、测试图片。
annotations中包含instances_train.json、instances_val.json文件。.json里面包括了“images”,“annotations”,“type”,"categories"等信息,"images"存放每个图像的名字宽高及图像id,"annotations"存放对应相同图像id的图像box的四个坐标位置及该框的类别id,"categories"则表示每个类别id到该类真实名字的对应关系。
在这里插入图片描述

****自定义的数据集不是标准的voc格式,可借鉴了一个大佬的.xml转为coco格式的.json文件代码,(原文链接:https://blog.csdn.net/u010397980/article/details/90341223)
#注意:

  1. 将图片和.xml文件放在同一文件夹下
  2. 其中xml_list = glob.glob(xml_dir +"/*.xml")中glob.glob要使用绝对路径。

运行该代码可将数据集按照9:1分成训练集和测试集。

3.修改相应的配置文件

  1. 修改数据种类,mmdetection/mmdet/datasets/coco.py。把CLASS改为自己数据集对应的种类
    如图所示
  2. mmdetection/mmdet/core/evaluation/class_names.py将coco_classes中的return改为自己数据集的种类
    如图所示
  3. 修改configs/yolo/yolov3_d53_mstrain-608_273e_coco.py中的model部分的num_classes。num_classes=数据集类别(有的博客写的是num_classes=数据集类别+1,其中加1是背景,我自己的是num_classes=数据集类别,加1反而报错。

4.训练

python tools/train.py configs/yolo/yolov3_d53_mstrain-608_273e_coco.py \
         --work-dir work_dirs

将训练数据和模型保存在work_dirs文件夹下。yolov3默认训练273个epoch,训练时间较长,如遇到需要中断训练,之后继续训练,可执行以下命令,在断点处继续训练。

python tools/train.py configs/yolo/yolov3_d53_mstrain-608_273e_coco.py \
         --resume-from work_dirs/latest.pth  --work-dir work_dirs

因训练273个epoch,将保存273个.pth文件,占用较大内存,可修改configs/base/default_runtime.py文件中:

checkpoint_config = dict(interval=10) # interval=10 表示10个epoch保存一次

5.测试

python tools/test.py \
    configs/yolo/yolov3_d53_mstrain-608_273e_coco.py \
    work_dirs/latest.pth \
    --eval bbox
    --show-dir results

对coco格式数据集 --eval可选proposal_fast, proposal, bbox, segm,对PASCAL VOC格式数据集–eval可选mAP, recall

遇到的问题

File "<__array_function__ internals>", line 6, in concatenate
ValueError: need at least one array to concatenate
Error in atexit._run_exitfuncs

在训练过程出现的问题经调试发现均是由数据集引起的,主要是.xml文件转化为.json文件内容缺失、不标准引起的。经过使用上述的转化文件,解决数据集问题之后,就可以正常训练和测试了。

### 使用mmdetection框架在COCO数据集训练YOLOv3 #### 准备工作 为了顺利使用mmdetection框架在COCO数据集训练YOLOv3模型,需先完成环境配置。这涉及安装必要的依赖库以及下载预训练权重文件等操作[^3]。 #### 数据集准备 确认所使用数据集遵循COCO格式标准,对于已经符合此格式的数据集来说,仅需调整`ann_file`和`data_prefix`参数即可快速适配项目需求[^2]。具体而言,在配置文件中指定标注文件路径(`ann_file`)与图片存储位置(`data_prefix`)。 #### 配置文件修改 针对特定任务定制化设置至关重要: - **类目定义**:编辑`mmdetection/mmdet/datasets/coco.py`文件内的CLASS变量,使其反映目标检测任务中的实际类别名称;同时更新`mmdetection/mmdet/core/evaluation/class_names.py`里的返回值列表以匹配新的分类标签。 - **网络结构适应性调整**:打开并编辑位于`configs/yolo/yolov3_d53_mstrain-608_273e_coco.py`下的配置文档,重点在于设定`num_classes`等于用户自定义数据集中存在的不同物体类型的总数(注意这里不额外增加用于表示背景的虚拟类别)[^4]。 ```python # 修改后的config片段示例 model = dict( ... bbox_head=dict( num_classes=NUM_YOUR_CLASSES, # 替换为您的数据集的实际类别数 ...)) ``` #### 开始训练 一切就绪之后,通过命令行启动训练流程: ```bash python tools/train.py configs/yolo/yolov3_d53_mstrain-608_273e_coco.py \ --work-dir work_dirs/my_yolov3_project ``` 上述指令会依据给定的配置执行YOLOv3模型的学习过程,并将实验结果保存至指定的工作目录下以便后续评估分析。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值