欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

YOLOv8 OBB: 实现自定义数据集缺陷旋转检测的逐步指南(包括数据标记格式转换和训练)

最编程 2024-02-14 11:32:32
...

????????????本文内容:YOLOv8 OBB实现自有数据集缺陷旋转检测,从数据标记到训练的手把手教程

1.如何OBB旋转目标

YOLO OBB格式通过四个角点指定边界框,坐标在0到1之间归一化。它遵循以下格式:

class_index, x1, y1, x2, y2, x3, y3, x4, y4

在内部,YOLO以xywhr格式处理损失和输出,xywhr格式表示边界框的中心点(xy)、宽度、高度和旋转。

1.1 labelme下载

# 安装labelme
pip install labelme

1.2 labelme介绍

1)Create Polygons生成polygon框;

1.3 数据集标注

2.数据集格式转换

2.1标记后的数据格式如下

一张图片对应一个json文件

json部分内容如下:

{
  "version": "5.1.1",
  "flags": {},
  "shapes": [
    {
      "label": "defect",
      "points": [
        [
          160.21164021164026,
          25.312169312169328
        ],
        [
          447.5132275132275,
          23.19576719576721
        ],
        [
          448.04232804232805,
          448.06349206349205
        ],
        [
          162.32804232804233,
          445.4179894179894
        ]
      ],
      "group_id": null,
      "shape_type": "polygon",
      "flags": {}
    }
  ],

2.2 obb生成适合yolo格式的txt

obb_json_to_txt

详见博客

3.OBB旋转目标训练

下载最新版即可,已支持OBB

GitHub - ultralytics/ultralytics: NEW - YOLOv8 ???? in PyTorch > ONNX > OpenVINO > CoreML > TFLite

3.1 defect_obb.yaml

# Ultralytics YOLO ????, AGPL-3.0 license
# DOTA 1.0 dataset https://captain-whu.github.io/DOTA/index.html for object detection in aerial images by Wuhan University
# Documentation: https://docs.ultralytics.com/datasets/obb/dota-v2/
# Example usage: yolo train model=yolov8n-obb.pt data=DOTAv1.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── dota1  ← downloads here (2GB)

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ./data/defect_obb/defect_obb  # dataset root dir
train: images/train  # train images (relative to 'path') 1411 images
val: images/val  # val images (relative to 'path') 458 images
#test: images/test  # test images (optional) 937 images

# Classes for DOTA 1.0
names:
  0: defect​

3.2 如何训练

import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO

if __name__ == '__main__':
    model = YOLO('ultralytics/cfg/models/v8/yolov8-obb.yaml')
    model.load('yolov8n-obb.pt') # loading pretrain weights
    model.train(data='data/defect_obb/defect_obb.yaml',
                cache=False,
                imgsz=640,
                epochs=50,
                batch=2,
                close_mosaic=10,
                workers=0,
                device='0',
                optimizer='SGD', # using SGD
                project='runs/train',
                name='exp',
                )

3.3训练结果可视化

YOLOv8-obb summary (fused): 187 layers, 3077414 parameters, 0 gradients, 8.3 GFLOPs
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 2/2 [00:00<00:00,  8.20it/s]
                   all          4          4      0.986          1      0.995      0.904

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!