yolov12-obb训练自己数据集
YOLO12 引入了一种以注意力为中心的架构,它不同于以往YOLO 模型中使用的基于 CNN 的传统方法,但仍保持了许多应用所必需的实时推理速度。该模型通过对注意力机制和整体网络架构进行新颖的方法创新,实现了最先进的物体检测精度,同时保持了实时性能。
数据集准备
roLabelImg.exe标注软件标注数据集
数据集文件夹格式为:
yolov12-level2
//images
…train
…val
…test
//labels
…train_original
…val_original
此处的标签为txt格式,需要将xml转txt。可参考yolov8-obb数据集制作
yolov12工程obb训练适配
yolov12工程位置:链接: link
将工程下载下来,然后添加自己的文件。
1、 在工程下新建dota2obbdata.py
两处路径修改为自己的路径。
// A code block
import sys
sys.path.append('/mnt/data/ysbo/python_examples/YOLOV12-MAIN/ultralytics')
from ultralytics.data.converter import convert_dota_to_yolo_obb
#==========level1=================================
# convert_dota_to_yolo_obb('/mnt/data2/ysbo/data/PuAn/level1/yolov12-level1/')
#========level2===================================
convert_dota_to_yolo_obb('/mnt/data2/ysbo/data/PinWei/1202-level1/2-min-pix/yolov12-level2/')
2、修改 ./yolo12-main/ultralytics/data/converter.py
修改line 458 将类别修改为自己的
修改 line 524 图像后缀
3、在./yolo12-main/ultralytics/cfg/datasets/中添加my-obb.yaml文件。my-obb.yaml内容如下:
// A code block
#==============level2=========================
path: /mnt/data/ysbo/python-example/yolo12-main/yolov12-level2 # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
# Classes for DOTA 1.0
names:
#================level=================
0: person
1: head
2: ununiform
3: helment
4: uniform
5: fire
6: extinguisher
7: smoke
8: upsleeve
4、在./yolo12-main/ultralytics/cfg/models/v12/中添加yolov12-obb.yaml,修改其中的类别数。yolov12-obb.yaml内容如下:
// A code block
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# YOLO12-obb Oriented Bounding Boxes (OBB) model with P3/8 - P5/32 outputs
# Model docs: https://docs.ultralytics.com/models/yolo12
# Task docs: https://docs.ultralytics.com/tasks/obb
# Parameters
nc: 9 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolo12n-obb.yaml' will call yolo12-obb.yaml with scale 'n'
# [depth, width, max_channels]
n: [0.50, 0.25, 1024] # summary: 287 layers, 2,673,955 parameters, 2,673,939 gradients, 6.9 GFLOPs
s: [0.50, 0.50, 1024] # summary: 287 layers, 9,570,275 parameters, 9,570,259 gradients, 22.7 GFLOPs
m: [0.50, 1.00, 512] # summary: 307 layers, 21,048,003 parameters, 21,047,987 gradients, 71.8 GFLOPs
l: [1.00, 1.00, 512] # summary: 503 layers, 27,299,619 parameters, 27,299,603 gradients, 93.4 GFLOPs
x: [1.00, 1.50, 512] # summary: 503 layers, 61,119,939 parameters, 61,119,923 gradients, 208.6 GFLOPs
# YOLO12n backbone
backbone:
# [from, repeats, module, args]
- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
- [-1, 2, C3k2, [256, False, 0.25]]
- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
- [-1, 2, C3k2, [512, False, 0.25]]
- [-1, 1, Conv, [512, 3, 2]] # 5-P4/16
- [-1, 4, A2C2f, [512, True, 4]]
- [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32
- [-1, 4, A2C2f, [1024, True, 1]] # 8
# YOLO12n head
head:
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
- [[-1, 6], 1, Concat, [1]] # cat backbone P4
- [-1, 2, A2C2f, [512, False, -1]] # 11
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
- [[-1, 4], 1, Concat, [1]] # cat backbone P3
- [-1, 2, A2C2f, [256, False, -1]] # 14
- [-1, 1, Conv, [256, 3, 2]]
- [[-1, 11], 1, Concat, [1]] # cat head P4
- [-1, 2, A2C2f, [512, False, -1]] # 17
- [-1, 1, Conv, [512, 3, 2]]
- [[-1, 8], 1, Concat, [1]] # cat head P5
- [-1, 2, C3k2, [1024, True]] # 20 (P5/32-large)
- [[14, 17, 20], 1, OBB, [nc, 1]] # Detect(P3, P4, P5)
5、运行python dota2obbdata.py
此时在数据集文件夹./labels/下会生成train、val两个标签文件夹。
6、开始训练:
这里需要说明一下,官方yolov12 obb模型链接为yolo11n-obb.pt ,原本以为不能用,最后下载下来,可以进行训练。
yolo obb train data=./yolo12-main/ultralytics/cfg/datasets/my-obb.yaml model=yolo11n-obb.pt epochs=100 imgsz=640 device=0 batch=2
7、测试
yolo obb predict model=./yolo12-main/runs/obb/train3/weights/best.pt source=./yolo12-main/test_img/001.jpg
结果是对的,涉及到项目,这里就不贴图像了。
8、工程地址:
链接: https://github.com/YSYS101010000/YOLOV12-OBB