YOLOv8训练DOTAv2数据集(官网代码/数据集转换/2024.1.2)

发布时间:2024年01月03日

目的

由于项目里面需要用到机载的旋转目标检测(Oriented Bounding Box, OBB),本来想在yolov8上面直接加obb检测相关的模块,没想到官方更新了DOTAv2数据的yaml文件,意味着v8已经支持了obb检测,但是现在版本还不是很完善,遂记录一下在这里面的一些坑。

安装YOLOv8

可供参考的官网地址:https://docs.ultralytics.com/zh/modes/
官方支持用pip、conda、gitclone、Docker4种方法安装,需要注意的是在当前(2024.1.2)使用pip安装是不包含obb检测的,只能去git上面clone一下代码

   克隆ultralytics仓库
 git clone https://github.com/ultralytics/ultralytics

  导航到克隆的目录
 cd ultralytics

   为开发安装可编辑模式下的包
   pip install -e .

将DOTAv2的数据集装换成YOLOv8可以训练的模式

v8用起来爽的地方就是无脑用,官方已经更新了一个英文版教程,参考:https://docs.ultralytics.com/datasets/obb/#yolo-obb-format
这个过程中间其实还有挺多问题的,这里也记录一下:

  1. obb检测方法里面旋转框的表示方法有好几种,v8这里使用的是

    class_index, x1, y1, x2, y2, x3, y3, x4, y4(需要做归一化)
    示例:0 0.780811 0.743961 0.782371 0.74686 0.777691 0.752174 0.776131 0.749758

    要用自己数据的小伙伴们记得把数据转成这个格式。

  2. 把DOTAv2数据集转成YOLOv8可训练的模式
    官方已经写好了代码:

from ultralytics.data.converter import convert_dota_to_yolo_obb

convert_dota_to_yolo_obb('path/to/DOTA')

记得要自己新建一个py文件,然后把path改成指向DOTAv2数据集的地址。

DOTAv2数据集准备的形式

 Notes:
        The directory structure assumed for the DOTA dataset:
            - DOTA
                ├─ images
                │   ├─ train
                │   └─ val
                └─ labels
                    ├─ train_original
                    └─ val_original

        After execution, the function will organize the labels into:
            - DOTA
                └─ labels
                    ├─ train
                    └─ val

注意:DOTA数据集有3个版本,需要用v2的标注(1和1.5第一二行都是图片来源介绍,会有bug)

准备好数据和模型之后就可以直接开始训练了,参考代码:

yolo detect train data=DOTAv2.yaml model=yolov8n.pt epochs=100 imgsz=640

单卡3090ti训不动的,我把batch改成了4(好卡都给学生了哈哈哈哈)

有一个该看但是我还没看的地方是关于DOTA数据集里图像裁切的问题,我看DOTA数据集提供的toolkit里面自带了这个功能,但是v8有没有集成暂时还没有去细究

文章来源:https://blog.csdn.net/cc514981717/article/details/135367550
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。