全网首发!Yolov8_obb旋转框检测(DOTA1.0数据集)

一、YOLOv8环境搭建

(1)Pytorch的安装

如果你的环境没有部署请参考本人文章:NLP笔记(2)——PyTorch的详细安装_安装torchnlp-CSDN博客

(2)下载最新的Yolov8-obb代码:

 https://github.com/ultralytics/ultralytics

(2)安装配置文件,建议使用镜像源

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

二、DOTA1.0数据集转换

(1)原始数据集格式如下

937.0 913.0 921.0 912.0 923.0 874.0 940.0 875.0 small-vehicle 0

(2)通过坐标在 0 和 1 之间归一化的四个角点来指定边界框,支持的 OBB 数据集格式如下

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

 (3)新建一个yoloobb.py文件实现标签转换

from ultralytics.data.converter import convert_dota_to_yolo_obb
convert_dota_to_yolo_obb('C:\myyolo\ultralytics-main\dataobb')
#关于dataobb文件下的目录下面会详细说明

(4)跳转到convert_dota_to_yolo_obb.py函数,对class_mapping进行修改

class_mapping = {"plane": 0,"baseball-diamond": 1,"bridge": 2,"ground-track-field": 3,"small-vehicle": 4,"large-vehicle": 5,"ship": 6,"tennis-court": 7,"basketball-court": 8,"storage-tank": 9,"soccer-ball-field": 10,"roundabout": 11,"harbor": 12,"swimming-pool": 13,"helicopter": 14,
}

(5)在ultralytics-main下新建一个文件夹dataobb设置如下结构,分割后的数据集参考:

DOTA数据集切割处理——旋转框和水平框_dota数据集的切分-CSDN博客

其中,images/train和images/val放置原始图片文件,labels/train_original和labels/val_original分别放置原始的标签文件,labels/train和labels/val为空,然后运行步骤(3)的代码,运行结束转换后的标签会保存在labels/train和labels/val中,格式如下。

4 0.915039 0.891602 0.899414 0.890625 0.901367 0.853516 0.917969 0.854492

三、开始训练

(1)下载预训练权重

OBB - Ultralytics YOLOv8 Docs

(2)构建数据集,安装下面目录格式,其他test可为空,一定要对应。

(3)创建一个dota8-obb.yaml,然后将路径和类别改成自己的。

path: C:\myyolo\ultralytics-main\datasets # dataset root dir
train: images/train
val: images/val
#test: images/test
names:0: plane1: baseball-diamond2: bridge3: ground-track-field4: small-vehicle5: large-vehicle6: ship7: tennis-court8: basketball-court9: storage-tank10: soccer-ball-field11: roundabout12: harbor13: swimming-pool14: helicopter

(4)新建yolov8-obb.yaml,修改nc和scales,我使用的是yolov8n.

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8 Oriented Bounding Boxes (OBB) model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parameters
nc: 15  # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'# [depth, width, max_channels]n: [0.33, 0.25, 1024]  # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPs
#  s: [0.33, 0.50, 1024]  # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPs
#  m: [0.67, 0.75, 768]   # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPs
#  l: [1.00, 1.00, 512]   # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPs
#  x: [1.00, 1.25, 512]   # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs# YOLOv8.0n 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, 3, C2f, [128, True]]- [-1, 1, Conv, [256, 3, 2]]  # 3-P3/8- [-1, 6, C2f, [256, True]]- [-1, 1, Conv, [512, 3, 2]]  # 5-P4/16- [-1, 6, C2f, [512, True]]- [-1, 1, Conv, [1024, 3, 2]]  # 7-P5/32- [-1, 3, C2f, [1024, True]]- [-1, 1, SPPF, [1024, 5]]  # 9# YOLOv8.0n head
head:- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 6], 1, Concat, [1]]  # cat backbone P4- [-1, 3, C2f, [512]]  # 12- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 4], 1, Concat, [1]]  # cat backbone P3- [-1, 3, C2f, [256]]  # 15 (P3/8-small)- [-1, 1, Conv, [256, 3, 2]]- [[-1, 12], 1, Concat, [1]]  # cat head P4- [-1, 3, C2f, [512]]  # 18 (P4/16-medium)- [-1, 1, Conv, [512, 3, 2]]- [[-1, 9], 1, Concat, [1]]  # cat head P5- [-1, 3, C2f, [1024]]  # 21 (P5/32-large)- [[15, 18, 21], 1, OBB, [nc, 1]]  # OBB(P3, P4, P5)

(5)新建一个train.py,修改相关参数,即可运行

from ultralytics import YOLOdef main():model = YOLO('yolov8-obb.yaml').load('yolov8n-obb.pt')  # build from YAML and transfer weightsmodel.train(data='dota8-obb.yaml', epochs=100, imgsz=1024, batch=4, workers=4)
if __name__ == '__main__':main()

四、验证

from ultralytics import YOLOdef main():model = YOLO(r'best.pt')model.val(data='dota8-obb.yaml', imgsz=1024, batch=4, workers=4)
if __name__ == '__main__':main()

最后:

会不定期发布相关设计内容包括但不限于如下内容:信号处理、通信仿真、算法设计、matlab appdesigner,gui设计、simulink仿真......希望能帮到你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/614827.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【修图】AI修图工具

人脸替换 免费的人脸替换工具: Face Swap: https://vmodel.ai/face-swap 支持单人换脸、多人换脸 AI消除 SnapEdit https://snapedit.app/remove-object 不付费的话只能下载清晰度较低的版本 但我试了几个在线的AI消除工具,SnapEdit算是…

详细分析Java中的@JsonFormat注解和@DateTimeFormat注解

目录 前言1. JsonFormat注解2. DateTimeFormat注解3. Demo3.1 无注解3.2 有注解 4. 拓展 前言 下文中涉及MybatisPlus的逻辑删除的知识,可看我之前这篇文章:详细讲解MybatisPlus实现逻辑删除 对应的Navicat设置数据库最新时间可看我这篇文章&#xff1…

生活自来水厂污水处理设备需要哪些

生活自来水厂是确保我们日常用水质量安全的重要设施。在自来水的生产过程中,污水处理设备是不可或缺的环节。那么,生活自来水厂的污水处理设备都有哪些呢?本文将为您详细介绍。 首先,生活自来水厂的污水处理设备主要包括预处理设备…

第11章 GUI Page489~494 步骤三十 保存画板文件

为“保存”菜单项 MenuItemFileSave挂接事件响应函数: 实际运行时,现版TrySaveFile()函数有点儿傻,点击保存菜单,还会弹出对话框,问我们“要不要保存” 修改TrySaveFile()函数 函数声明修改为: 函数实现修…

药品不良反应智能监测系统,java药品不良反应(ADR)智能监测系统源码,基于SpringBoot+Vue+MySQL技术开发

java药品不良反应智能监测系统 系统概述: 基于AI技术和深度学习模型,系统构建ADR智能识别模型,实现病程记录分析,提取病程记录实体,并完成语义关系的分类识别。一方面可以根据医务人员设置的监测任务或主题&#xff0c…

Open CV 图像处理基础:(六)在Java中使用 Open CV进行图片翻转和图片旋转

在Java中使用 Open CV进行图片翻转和图片旋转 目录 在Java中使用 Open CV进行图片翻转和图片旋转前言图片翻转函数代码示例其它翻转方向垂直翻转两轴翻转 图片旋转函数代码示例 Open CV 专栏导航 前言 在Java中使用OpenCV进行图片翻转和旋转是一种基本的图像处理技术&#xff0…

MySQL面试题 | 02.精选MySQL面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

vim基本操作命令

一、vi简介 vi是“Visual interface”的简称,它在Linux上的地位就仿佛Edit程序在DOS上一样。它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制。Vi不是一个排版程序,它不象Word或WPS那样可以…

商城小程序(8.购物车页面)

目录 一、商品列表区域1、渲染购物车商品列表的标题区域2、渲染商品列表区域的基本结构3、为my-goods组件封装radio勾选状态4、为my-goods组件封装radio-change事件5、修改购物车中商品的选择状态6、为my-goods组件封装NumberBox7、为my-goods封装num-change事件8、修改购物车商…

【论文笔记】End-to-End Diffusion Latent Optimization Improves Classifier Guidance

Abstract Classifier guidance为图像生成带来了控制,但是需要训练新的噪声感知模型(noise-aware models)来获得准确的梯度,或使用最终生成的一步去噪近似,这会导致梯度错位(misaligned gradients)和次优控制(sub-optimal control)。 梯度错位…

jmeter--1.安装

目录 1. jmeter和jdk下载地址 2. jdk环境变量配置 3. Jmeter的环境变量配置 1. jmeter和jdk下载地址 链接:https://pan.baidu.com/s/1C8ItsR8ZUGJO9uyTJ-9QtQ?pwdx5m5 提取码:x5m5 2. jdk环境变量配置 2.1 我的电脑右键属性-->高级系统设置--&…

20240111在ubuntu20.04.6下解压缩RAR格式的压缩包

20240111在ubuntu20.04.6下解压缩RAR格式的压缩包 2024/1/11 18:25 百度搜搜:ubuntu rar文件怎么解压 rootrootrootroot-X99-Turbo:~/temp$ ll total 2916 drwx------ 3 rootroot rootroot 4096 1月 11 18:28 ./ drwxr-xr-x 25 rootroot rootroot 4096 1月…

详细分析Java中的分布式任务调度框架 XXL-Job

目录 前言1. 基本知识2. Demo3. 实战 前言 可视化任务调度 可视化配置 1. 基本知识 在Java中,分布式任务调度框架 XXL-Job 是一个开源的分布式任务调度平台,用于实现分布式系统中的定时任务调度和分布式任务执行。 下面是关于XXL-Job的一些概念、功…

05- OpenCV:图像操作和图像混合

目录 一、图像操作 1、读写图像 2、读写像素 3、修改像素值 4、Vec3b与Vec3F 5、相关的代码演示 二、图像混合 1、理论-线性混合操作 2、相关API(addWeighted) 3、代码演示(完整的例子) 一、图像操作 1、读写图像 (1)…

IDC机房服务器搬迁之运行了几年的服务器没关过机,今天关机下架,再上架突然起不来了,怎么快速处理?

环境 戴尔R420 服务器 1U 2台直连存储 4U CentOS 7 问题描述 IDC机房服务器搬迁之运行了几年的服务器没关过机,今天关机下架,再上架突然起不来了,怎么快速处理? 服务器上电开机就出现进入紧急模式 Welcome to emergency mode! After logging in, type “journalctl …

MYSQL篇--锁机制高频面试题

Mysql锁机制 1对mysql的锁有了解吗? 首先我们要知道,mysql的锁 其实是为了解决在并发事务时所导致的数据不一致问题的一种处理机制,也就是说 在事务的隔离级别实现中,就需要利用锁来解决幻读问题 然后我们可以聊到锁的分类 按锁…

软件测试|使用Python读取CSV文件的详细指南

简介 CSV(Comma-Separated Values)是一种常用的数据存储格式,它以逗号为分隔符将数据以文本形式存储在文件中。Python是一门强大的编程语言,提供了许多库和工具,使得读取和处理CSV文件变得非常简便。在本文中&#xf…

conda环境下cannot write keep file问题解决

1 问题描述 conda环境下执行如下命令报错: pip install githttps://github.com/wenet-e2e/wenet.git 错误信息如下: (pt) PS D:\code\ptcontainer> pip install githttps://github.com/wenet-e2e/wenet.git Looking in indexes: http://pypi.doub…

windows安装RabbitMq,修改数据保存位置

1、先安装Erlang, Erlang和RabbitMQ有版本对应关系。 官网RabbitMQ与Erlang版本对应RabbitMQ Erlang Version Requirements — RabbitMQ 2、安装RabbitMQ。 3、修改数据保存地址。找到安装目录下的sbin文件夹,找到rabbitmq-env.bat,编辑文件…

Windows和Linux安装jdk

一、Windows安装jdk 1、下载安装包 Jdk官网下载地址:Java Downloads | Oracle 需要登陆Oracle账号信息。 百度网盘下载地址:https://pan.baidu.com/s/1eN1PX6gKdKgwJ24CM0bDsw 提取码:4bpp 目前最新jdk的版本是21,可以下载不同…