使用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文件内容缺失、不标准引起的。经过使用上述的转化文件,解决数据集问题之后,就可以正常训练和测试了。

版权声明:本文为CSDN博主「菜菜2020」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_45584615/article/details/115802378

菜菜2020

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐