基于YOLOv8开发构建目标检测模型超详细教程【以焊缝质量检测数据场景为例】

news2024/11/23 0:13:28

超详细教程系列在我前面的文章中也有不少的实践记录,感兴趣的话可以自行阅读即可:

《基于yolov7开发实践实例分割模型超详细教程》

《YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程》

《基于yolov5-v7.0开发实践实例分割模型超详细教程》

《轻量级模型NanoDet基于自己的数据集【接打电话检测】从零构建模型超详细教程》

《基于YOLOv5-v6.2全新版本模型构建自己的图像识别模型超详细教程》

《基于自建数据集【海底生物检测】使用YOLOv5-v6.1/2版本构建目标检测模型超详细教程》

《超轻量级目标检测模型Yolo-FastestV2基于自建数据集【手写汉字检测】构建模型训练、推理完整流程超详细教程》

YOLOv8出来也有一段时间了,但是由于这次改动的方式比较大,官方将其转化为了一个安装包的形式,其实我不是很习惯这种形式,所以就没有经常用到这里,最近正好在整理这块的内容,就想着把自己的实践记录整理记录下来。

 github打开搜索YOLOv8,然后打开第一个项目,官方的项目地址在这里,如下所示:

 从yolov8开始,变成了一个可以直接导入使用的安装包形式了,客观来讲,单纯对于使用者来说上手肯定是更加方便了,但是对于从yolov3一路跟随发展到yolov7来说,肯定是不习惯的,包括如果自己想要去改一些代码的话肯定也是不如之前的版本来的直接的。

安装很简单如下所示:

pip install ultralytics

一条命令就可以了,当然了也可以升级到最新的版本如下所示:

pip install --upgrade ultralytics

就我的使用体验来说,最好使用最新的版本,不然容易报错这样那样的问题,尤其是一个属性缺失的问题。

从YOLOv8开始,官方其实推荐使用的就是终端命令行的形式来使用模型,训练也是如下如下所示:

# Build a new model from YAML and start training from scratch
yolo detect train data=coco128.yaml model=yolov8n.yaml epochs=100 imgsz=640

# Start training from a pretrained *.pt model
yolo detect train data=coco128.yaml model=yolov8n.pt epochs=100 imgsz=640

# Build a new model from YAML, transfer pretrained weights to it and start training
yolo detect train data=coco128.yaml model=yolov8n.yaml pretrained=yolov8n.pt epochs=100 imgsz=640

当然了也可以编写简单的脚本代码来使用,如下所示:

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.yaml')  # build a new model from YAML
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)
model = YOLO('yolov8n.yaml').load('yolov8n.pt')  # build from YAML and transfer weights

# Train the model
model.train(data='coco128.yaml', epochs=100, imgsz=640)

就我自己来说更倾向于使用第二种方式。

这里就以焊缝质量检测场景为例来看下整体操作实践过程吧。

 实例数据标注样例如下所示:

1 0.137019 0.134615 0.274038 0.269231
0 0.151442 0.533654 0.120192 0.442308
0 0.514423 0.548077 0.129808 0.475962
0 0.685096 0.143029 0.216346 0.286058

训练数据配置文件如下所示:

 更前面各个系列不同,这里path、train、test、val各个字段的配置需要使用绝对路径才可以的不然的话会报错,如下所示:

RuntimeError: Dataset 'self.yaml' error
Dataset 'self.yaml' images not found , missing paths ['E:\\projects\\datasets\\images\\test']
Note dataset download directory is 'E:\pp-projects\datasets'. You can update this in ......

配置完成后就可以开始训练了,日志输出如下所示:

 训练完成后结果目录文件详情如下所示:

 直观来看结果文件跟之前的版本还是有所区别的。

首先就是混淆矩阵,这里同时提供了两种形式的混淆矩阵,一种是原始数值形式的混淆矩阵,一种是经过归一化处理后的混淆矩阵,如下所示:

 其次就是results.png跟之前的版本样式差异还是比较明显的,如下所示:

 接下来是评估指标相关的结果数据了。

【F1值曲线】

 【Precision曲线】

 【Recall曲线】

 【PR曲线】

 【Batch计算实例】

 整体来讲,YOLOv8的易用程度还是比较高的,相比于前面系列的模型来说新手上手的速度肯定更快,门槛更低,但是如果是想要灵活性的话感觉就不如之前的系列了。

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

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

相关文章

实现java参数非必传

1、路径参数: PathVariable(required false)实现参数aaa非必传 2、非路径参数: RequestParam(required false) 实现参数aaa非必传 3、实体参数: RequestBody(required false)实现实体aaa非必传

Java基础---集合类

目录 典型回答 Collection和Collections有什么区别 Java中的Collection如何遍历迭代 Iterable和Iterator如何使用 为什么不把Iterable和Iterator合成一个使用 哪些集合类是线程安全的 典型回答 什么是集合 集合就是一个放数据的容器,准确的说是放数据对象引用…

32位ARM M0+内核单片机 XL32F001简单介绍,Flash 24K,SRAM 3K

XL32F001 系列微控制器采用高性能的 32 位 ARM Cortex-M0内核,宽电压工作范围的 MCU。嵌入 24Kbytes Flash 和 3Kbytes SRAM 存储器,最高工作频率 24MHz。包含多种不同封装类型多款产品。芯片集成 I2C、SPI、USART 等通讯外设,1 路 12bit ADC…

十六、flex应用练习做淘宝按钮界面

目录: 目标小技巧实现最终代码 一、目标:我们要做一个手机版本的淘宝网,蓝色框住的按钮这部分。 二、 小技巧:如何在网页上看手机版本的页面 首先在网页上打开淘宝网,然后按F12,进入调试状态;&…

信号完整性分析基础知识之有损传输线、上升时间衰减和材料特性(一):为什么要关注损耗?

一个具有极快上升沿的信号输入到真实传输线中,在从传输线输出的时候上升时间会很长。例如,一个上升时间为50ps的信号,在经过一段36inch长,50Ohm传输线后,上升时间增加到1ns。上升时间的退化是由于传输线的损耗&#xf…

C#使用跨平台的PdfSharpCore开源库生成PDF文件

一、需求说明 在进行项目开发中,需要将C#程序的一些文本内容导出为PDF文件(能够根据文本自动分行分页),并且要求这个生成PDF文件的程序是可跨平台的;实现类似效果: 二、需求分析 ①将程序的文本内容导出为PDF文件; ②能够将文本内容自动分行分页【且可添加页眉、页脚、…

记录一次nginx日志偶现502报错排查

背景 之前的业务链路 负载均衡–>nginx–>cvm(业务后端node) 上云后链路 负载均衡–>nginx–>pod(业务后端node) 上云后nginx日志隔几个小时就出现一波502,查看nginx的日志有两个特征,就是re…

C# Linq 详解二

目录 概述 七、OrderBy 八、OrderByDescending 九、Skip 十、Take 十一、Any 十二、All 概述 语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。 数据查询历来都表示为简单的字符串,没有编译时类型检查或 IntelliSense 支持。 此外&a…

matlab中画有重影的机器人运动过程【给另一个机器人设置透明度】

1、前言如题 2、参考连接如下 How to plot two moving robot in the same figure and change one of them transparency? - MATLAB Answers - MATLAB Central (mathworks.cn)3、代码:【找到figure中对应对象并设置属性】 % Create two instances of a…

【OJ比赛日历】快周末了,不来一场比赛吗? #07.15-07.21 #7场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…)比赛。本账号会推送最新的比赛消息,欢迎关注! 以下信息仅供参考,以比赛官网为准 目录 2023-07-15(周六) #3场比赛2023-07-16…

【多线程初阶】Thread类常见方法以及线程的状态

多线程初阶系列目录 持续更新中 1.第一次认识线程 2.Thread类常见方法以及线程的状态 … 文章目录 多线程初阶系列目录前言1. Thread 类及常见方法1.1 常见构造方法1.2 常见属性1.3 重要方法1.3.1 启动一个线程 ---- start()1.3.2 中断一个线程 ---- interrupt()1.3.3 等待一…

有PMP有没有必要换cspm?未来的发展前景如何?

最近 CSPM 证书很热门,CSPM 相关问题大家都很关心,今天本橘座就给大家全面解答一下 CSPM到底是何方神圣? 文章主要是解答下面几个常见问题,其他问题可以留言或者私信咨询我哦~ 一、什么是 CSPM证书?跟PMP是什么关系&a…

启动、关闭nacos

下载 进入官网 http://nacos.io/zh-cn/ 页面打开后,点击【前往Github】 进入Github页面,往下拖动,找到 latest stable release 选择当时最新的版本下载即可,这里选择.zip的文件下载 安装 Nacos 是免安装的,我们下…

备战秋招008(20230713)

文章目录 前言一、今天学习了什么?二、关于问题的答案1.集合2.JUC02、底层原理03、内存泄漏 总结 前言 提示:这里为每天自己的学习内容心情总结; Learn By Doing,Now or Never,Writing is organized thinking. 目前…

python - leetcode - 64. 最小路径和【经典题解 - 矩阵数组动态规划】

一. 题目:64. 最小路径和 描述: 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例 1: 输入&#…

【SpringBoot3】--02.Web开发

文章目录 SpringBoot3-Web开发0.WebMvcAutoConfiguration原理1.生效条件2.效果3.WebMvcConfigurer接口4. 静态资源规则源码5. EnableWebMvcConfiguration 源码6. 为什么容器中放一个WebMvcConfigurer就能配置底层行为7. WebMvcConfigurationSupport 1.Web场景1.1自动配置1.2默认…

51单片机-串口通信(串口向电脑发送信息电脑通过串口控制LED)

文章目录 前言一、串行通信口的功能以及串行通信口的结构及原理1.1 串行通信口的功能1.2 51单片机串口的结构 二、串行通信口的控制寄存器2.1 串行控制寄存器SCON2.2 电源控制寄存器PCON2.3 配置寄存器配置SCON寄存器配置PCON寄存器配置中断 2.4 实验单片机向pc发送数据PC向单片…

文心一言 VS 讯飞星火 VS chatgpt (58)-- 算法导论6.4 2题

文心一言 VS 讯飞星火 VS chatgpt (58)-- 算法导论6.4 2题 二、试分析在使用下列循环不变量时,HEAPSORT 的正确性:在算法的第 2~5行 for 循环每次迭代开始时,子数组 A[1…i]是一个包含了数组A[1…n]中第i小元素的最大…

[疑难杂症2023-005]dcmtk-movescu访问dcm4chee模拟PACS Server报错问题解析

本文由Markdown语法编辑器编辑完成。 1. 背景 由于要在医院上线一个服务,用来定时从医院的PACS Server上面拉取dicom图像并进行分发。因此,需要首先在公司的内网环境上进行开发,测试和验证。 目前比较流行和开源的PACS Server模拟是基于dc…

python 面向对象编程(2)

文章目录 前言封装多态类属性和实例属性定义以及访问类属性修改类属性实例属性 类方法静态方法 前言 前面我们介绍了 python 类和对象以及继承、私有权限,那么今天我们将来介绍 python面向对象 剩下的两大特性封装、多态,以及如何访问、修改类属性、类方…