全网首发!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,一经查实,立即删除!

相关文章

909. 蛇梯棋(图的BFS)

使用广度优先搜索来遍历从1到n*n的可能的路径。 这道题可以看作一个有向图,每个值为x的节点指向x1点节点,在蛇桥处,是从x指向y 注意这里的x、x1、y都是值,可以根据值计算出对应的行列值,计算规则: 假设值…

Redis相关知识点

1.什么是Redis Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库 特征: 1.数据间没有必然的关联关系 2.内部采用单线程机制进行工作 3.高性能,官方提供测试数据,50个…

【修图】AI修图工具

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

回溯算法part06 算法

回溯算法part06 算法 今日任务&#xff1a; ● 51. N皇后 ● 37. 解数独 1.leetcode 51. N皇后 https://leetcode.cn/problems/n-queens/description/ class Solution {//存储结果List<List<String>> resultnew ArrayList<>();public List<List<St…

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

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

MySQL、Oracle、PostgreSQL 数据库备份用的 Shell 脚本

文章目录 一、概要二、MySQL 数据库备份与还原异地备份脚本2.1 MySQL 数据库异地备份脚本2.2 MySQL 数据库的恢复 三、Oracle 数据库备份与还原脚本3.1 Oracle 数据库异地备份脚本3.2 Oracle 数据库的恢复 四、PostgreSQL 数据库异地备份与还原脚本4.1 PostgreSQL 数据库备份脚…

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

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

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

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

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

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

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

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

管理篇 - 24到28

学习目标&#xff1a; 为了更轻松的工作 学习内容&#xff1a; 新手管理最常犯的错&#xff1a;太把自己当回事儿&#xff01;当管理比自己干活还累&#xff1f;升职加薪后他真香了&#xff01;管理误区&#xff1a;要不要和下属做朋友&#xff1f;很多人都只理解了第一层&…

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

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

vim基本操作命令

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

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

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

解决opencv出错:ImportError: numpy.core.multiarray failed to import

利用安装好opencv后&#xff0c;导入cv2的时候报错&#xff0c;如下 from .cv2 import * ImportError: numpy.core.multiarray failed to import这里是numpy库的版本过低或者过高&#xff0c;不合适刚刚装的opencv版本。 尝试升高或降低numpy版本&#xff0c;一般是升级到高版…

11.1、信赖域策略优化算法TRPO强化学习-从理论到实践

基于LunarLander登陆器的TRPO强化学习&#xff08;含PYTHON工程&#xff09; TRPO强化学习算法主要分为3个部分&#xff0c;分别介绍其理论、细节、实现 本文主要介绍TRPO的特点、思路、和优化式子的推导 TRPO系列&#xff08;TRPO是真的复杂&#xff0c;全部理解花费了我半…

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

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

算法训练营Day37

#Java #动态规划 Feeling and experiences&#xff1a; 目标和&#xff1a;力扣题目链接 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式 &#xff1a; 例如&#xff0c…

facebook广告素材制作要注意哪些

在制作Facebook广告素材时&#xff0c;需要注意以下几点&#xff1a; 目标受众&#xff1a;了解目标受众的喜好、需求和兴趣&#xff0c;以便制作能够吸引他们的广告素材。广告格式&#xff1a;选择适合广告内容的格式&#xff0c;如图片、视频、幻灯片等。同时&#xff0c;要…

jmeter--1.安装

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