当前位置: 首页 > news >正文

YOLOv8支持旋转框检测(OBB)任务随记

在这里插入图片描述

文章目录

  • 前言
  • 一、数据集制作
  • 二、训练
    • 2.1 数据增强的处理
    • 2.2 头网络的输出 (scale - S)
    • 2.3 损失函数的计算
  • 三、推理
    • 3.1 推理后处理的角度解析
  • 参考资料

前言

u版的yolov8本身是支持obb任务,也就是旋转框检测任务的,这篇文章就是总结出如何快速上手使用yolov8-obb训练,以及解释训练和推理时obb任务比一般hbb任务(垂直框检测)的一些差异。

一、数据集制作

在这里插入图片描述
处理的过程中,把1: 所有坐标看为segments
也就是说把旋转框的坐标处理成分割任务的坐标。

且把只有4个坐标进行重采样,变成100个点:
代码位置:/ultralytics/ultralytics/data/dataset.py
在这里插入图片描述

二、训练

需要注意:
数据集制作为四个角点的形式,然后训练的时候利用预测的角度,把预测的x1y1x2y2转换为xywh,然后去进行iou计算loss,并没有直接计算angle的loss。
角度转换规则为:目标框相对于水平轴的逆时针旋转角度。

model_type = "yolov8s-obb"
print(f"model_type: {model_type}")model = YOLO(f'{model_type}.yaml').load(f'{model_type}.pt')  # build from YAML and transfer weights# Train the model
model.train(data=yaml_file, epochs=100, imgsz=640, batch=8, patience=5000)

注:

  1. 对应模型类型要选yolov8的obb版本
  2. 这里yaml_file需要有垂直框检测的基础,数据集格式按照以上方式制作即可。

2.1 数据增强的处理

ultralytics/ultralytics/data/dataset.py

在这里插入图片描述

/data/thomascai/codes/ultralytics/ultralytics/data/augment.py

在这里插入图片描述

主要原理是对于segments进行处理,最后再统一转为中心点、宽高和角度。

如:_mosaic4

ultralytics/ultralytics/data/augment.py

在这里插入图片描述
在这里插入图片描述

处理完之后,在Format中进行整体转换

ultralytics/ultralytics/data/augment.py

在这里插入图片描述

轮廓点 -> (cx, cy), (w, h), angle

ultralytics/ultralytics/utils/ops.py

在这里插入图片描述

这就是在训练数据迭代的box标签(归一化后的):如:0.0602, 0.3016, 0.0090, 0.0100, 0.3214 — 表示目标中心点的x坐标、y坐标、宽、高和角度。

2.2 头网络的输出 (scale - S)

ultralytics/ultralytics/nn/modules/head.py
OBB 输出2个元素

  • 元素1:主输出 outputs
    [torch.Size([8, 65, 128, 128]),torch.Size([8, 65, 64, 64]),torch.Size([8, 65, 32, 32])
    ]
    
    含义:
    • 8:batch size

    • 65:每个位置的输出通道数,计算方式是:

      65 = num_classes + self.reg_max * 4= 1 + 16 * 4   ← 示例中类别数为1
      其中:
      4 表示:[x1, y1, x2, y2](左上和右下点),16表示其到anchor点的距离分布
      
    • H x W:对应特征图大小(即感受野分辨率)

  • 元素2:输出角度
    torch.Size([8, 1, 21504])
    
    含义:
    • 8:batch size
    • 1:通道维度(可能用于统一格式)
    • 21504:所有特征图上所有位置的预测结果拉平后的数量
      你可以理解为:
      21504 = 128x128 + 64x64 + 32x32 = 16384 + 4096 + 1024
      

2.3 损失函数的计算

ultralytics/ultralytics/utils/loss.py

在这里插入图片描述
重点是把预测的坐标分布先通过dfl计算还原成
-> x1,y1,x2,y2 然后再通过 anchor和预测的angle 变换成
-> x,y,w,h (中心点xy和宽高)
(然后跟真实框坐obb版本iou)
在这里插入图片描述
注意:这里有个trick,就是在计算dfl loss的时候。
真实值通过简单的加减得到左上和右下的坐标,然后再计算与anchor点的距离作为真实值;
然后预测的分布和真实值去做dfl loss计算;
需要注意的是,这里是一个近似解法,因为真实值其实是旋转框,但因为是预测与anchor点的距离,所以这里比较接近,yolov8就这么近似解了。
在这里插入图片描述

target_ltrb 的 shape为:torch.Size([8, 21504, 4])
pred_dist 的 shape为:torch.Size([8, 21504, 64])

三、推理

3.1 推理后处理的角度解析

ultralytics/ultralytics/nn/modules/head.py

在这里插入图片描述
在这里插入图片描述
推理阶段,在detect的head网络中,走推理分支,然后直接得到中心点坐标、宽高+角度,这个就是传入后处理的主要元素(实际还有其他的,但主要用到这个)。

参考资料

  1. 仓库地址:https://github.com/ultralytics/ultralytics/tree/main/ultralytics
  2. 数据集制作参考:https://docs.ultralytics.com/zh/datasets/obb/#usage
  3. 训练和推理:https://docs.ultralytics.com/zh/tasks/obb/#dataset-format

以上,感谢阅读,AI路上分享所见所得,关注不迷路。

∼Onepersongofaster,agroupofpeoplecangofurther∼\sim_{One\ person\ go\ faster,\ a\ group\ of\ people\ can\ go\ further}\simOne person go faster, a group of people can go further


文章转载自:

http://3z2kR5hl.mdwtm.cn
http://VB8cipyn.mdwtm.cn
http://DfKOKs6k.mdwtm.cn
http://LtEIWRAO.mdwtm.cn
http://OauMcBKn.mdwtm.cn
http://gpyIdFlw.mdwtm.cn
http://CEHQvFNJ.mdwtm.cn
http://Q863slTI.mdwtm.cn
http://WnttVrRa.mdwtm.cn
http://gopshHab.mdwtm.cn
http://fbl1epNj.mdwtm.cn
http://qb9KjODP.mdwtm.cn
http://UOhkBZv0.mdwtm.cn
http://1PG6rKuQ.mdwtm.cn
http://eqtytfJR.mdwtm.cn
http://3dfAWFEK.mdwtm.cn
http://xwg9okvW.mdwtm.cn
http://v0SNUS1Z.mdwtm.cn
http://AIqbgkKT.mdwtm.cn
http://M033R5Qe.mdwtm.cn
http://RLhSkmzL.mdwtm.cn
http://zIQckoyE.mdwtm.cn
http://GTPm8bmk.mdwtm.cn
http://gSPGBjAm.mdwtm.cn
http://3EFEE8GX.mdwtm.cn
http://E523z7Zg.mdwtm.cn
http://snZV9Cgh.mdwtm.cn
http://ymTKiGt6.mdwtm.cn
http://LzKwGTxC.mdwtm.cn
http://bYrY4TCm.mdwtm.cn
http://www.dtcms.com/a/370549.html

相关文章:

  • 解决VMWare网络适配器的桥接模式 ping 重复数据包DUP问题
  • Elasticsearch优化从入门到精通
  • 【开题答辩全过程】以电商数据可视化系统为例,包含答辩的问题和答案
  • 大模型热潮中的“连接器”:深入解析模型上下文协议 (MCP)
  • Java学习笔记二(类)
  • NPU边缘推理识物系统
  • 避免使用非const全局变量:C++中的最佳实践 (C++ Core Guidelines)
  • 贪心算法应用:保险理赔调度问题详解
  • ERP系统价格一般要多少?ERP定制开发性价比高,功能模块自由选配
  • 接口权限验证有哪些方式
  • 【数据分享】土地利用shp数据分享-广东
  • C++基础知识
  • 从“帮写文案”到“管生活”:个人AI工具的边界在哪?
  • --定位--
  • 一、算法与数据结构的本质关系:灵魂、肉体与图书馆
  • 【Python自动化】 21.3 Pandas Series 核心数据结构完全指南
  • MySQL DBA需要掌握的 7 个问题
  • Docker加速下载镜像的配置指南
  • 从“能说话”到“会做事”:AI工具如何重塑普通人的工作与生活?
  • RAG提示词分解
  • 第三节:HTML5 高级特性与应用​
  • 【C++】模板和STL
  • react生命周期,详细版本
  • NLWeb与AutoRAG跨境电商RAG推荐API接入实战教程
  • Storybook:多框架兼容的前端组件开发工具,高效解决组件隔离开发与文档管理问题
  • 嵌入式笔记系列——UART:TTL-UART、RS-232、RS-422、RS-485
  • Week 15: 深度学习补遗:集成学习初步
  • 计算机CPU的工作原理介绍
  • 科学研究系统性思维的方法体系:个人研究项目管理
  • macbook intel 打开cursor会闪退