赞
踩
由于项目里面需要用到机载的旋转目标检测(Oriented Bounding Box, OBB),本来想在yolov8上面直接加obb检测相关的模块,没想到官方更新了DOTAv2数据的yaml文件,意味着v8已经支持了obb检测,但是现在版本还不是很完善,遂记录一下在这里面的一些坑。
可供参考的官网地址: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 .
v8用起来爽的地方就是无脑用,官方已经更新了一个英文版教程,参考:https://docs.ultralytics.com/datasets/obb/#yolo-obb-format
这个过程中间其实还有挺多问题的,这里也记录一下:
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
要用自己数据的小伙伴们记得把数据转成这个格式。
把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)
01.08更新一下:如果要用这个代码修改自己的训练集的话,一个是要修改converter.py文件中第186-204行,把自己的类别对应上;第二个问题是,如果自己的数据不是png格式的,需要注释掉234-235行(这两行是判断文件夹下的文件是否是png格式,不是则直接跳过)
准备好数据和模型之后就可以直接开始训练了,参考代码:
yolo detect train data=DOTAv2.yaml model=yolov8n.pt epochs=100 imgsz=640
单卡3090ti训不动的,我把batch改成了4(好卡都给学生了哈哈哈哈)
有一个该看但是我还没看的地方是关于DOTA数据集里图像裁切的问题,我看DOTA数据集提供的toolkit里面自带了这个功能,但是v8有没有集成暂时还没有去细究
01.08更新一下
1月2日那天是跑失败了,最后还是hbb的框,后来继续follow这个问题,发现issue里面很多人也在问,1.5号晚上的时候官方update了一下代码和官网文档,在task下新增了obb,代码里也更新了obb检测相关的模块,更新代码之后,我加载yolov8n.pt为与训练权重,已经能跑通DOTAv2数据集了。
官方在issue里说会在1月10号发布最新的带有OBB的版本,那个时候应该支持通过pip直接安装了(1月8号目前还是只支持将代码下载后本地安装),拭目以待
目前我还在跑自己的数据集,成功了之后我会继续更新一下。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。