FishAndWasabi / YOLO-MS

YOLO-MS: Rethinking Multi-Scale Representation Learning for Real-Time Object Detection
Other
222 stars 23 forks source link

请问如何训练自己的数据集 #4

Closed xywlpo closed 1 year ago

xywlpo commented 1 year ago

请问如何训练自己的数据集,包括数据路径写在哪里?超参数应该如何调整

FishAndWasabi commented 1 year ago
  1. 我们建议您先将数据集转换为COCO格式,下面是COCO目录结构的示例。其中,images文件夹存放图片文件,annotations文件夹存放标注文件(json格式)。标注文件可参考COCO官方提供的格式进行构建。MMYOLO提供了一些现成数据集(balloon, labelme, yolo)的转换脚本,我们也将其移植到了本仓库中。
.
└── .${DATA_DIR}
    ├── images # image files
    │    ├── image1.jpg
    │    ├── image2.png
    │    └── ...
    ├── annotations # annotated files
          ├── train.json # labels of the training dataset
          └── test.json # labels of the test dataset
  1. 可以使用下面的命令验证刚刚转换是否有问题:
python tools/analysis_tools/browse_coco_json.py --img-dir ${图片文件夹路径} \
                                                --ann-file ${COCO label json 路径}
  1. 在config文件里对文件路径进行修改
train_dataloader = dict(dataset=dict(data_root="${DATA_DIR}",           # 训练集根目录
                                     ann_file="annotations/train.json", # 训练集annotation路径
                                     data_prefix=dict(img="images")))   # 训练集image路径
val_dataloader = dict(dataset=dict(data_root="${DATA_DIR}",             # 验证集根目录
                                   ann_file="annotations/test.json",    # 验证集annotation路径
                                   data_prefix=dict(img="images")))     # 验证集image路径
test_dataloader = val_dataloader
  1. 建议可以尝试以默认的参数为基准对超参数进行调整。可以将我们提供的ckpt作为预训练模型,在新的数据集上进行finetune。RTMDet有类似的例子,可以参考一下。

我们的仓库基于MMYOLO构建,其他细节您可以参考他们官方文档提供的教程,里面有更详细的介绍。

感谢您对我们工作的关注!

Best Wishes! 😊

xywlpo commented 1 year ago

感谢您的回复,我在训练自己的数据集时,出现下面的错误,请问是什么原因如何解决呢? 显示有这样一个警告 image 然后会报错,报错内容如下 image

FishAndWasabi commented 1 year ago

warning为正常现象,对训练程序没有影响。报错需要在config里的dataloader里做一些处理:

train_dataloader = dict(
    ...
    collate_fn=dict(_delete_=True, type='yolov5_collate'),
    sampler=dict(_delete_=True, type='DefaultSampler', shuffle=True),
    ...
)

val_dataloader = dict(
    ...
    sampler=dict(_delete_=True, type='DefaultSampler', shuffle=True),
    ...
)

test_dataloader = val_dataloader

Best Wishes! 😊