YOLOv8从菜鸟到精通(二):YOLOv8数据标注以及模型训练
数据标注
前期准备
先打开Anaconda Navigator,点击Environment,再点击new(new是我下载anaconda的文件夹名称),然后点击创建


点击绿色按钮,并点击Open Terminal

输入labelimg便可打开它,labelimg是图像标注工具,在上篇文章中有讲到如何下载

标注工具的使用
找个空目录新建一个文件夹,我这里名称叫做yolotest,也可以设置其他名称

在 yolotest 目录下新建labels和images文件夹

在images文件夹新建test,train,val三个文件夹

在labesl下面新建train,val两个文件夹

images文件夹下面的test,train,val三个文件夹,全部存放相同的要训练的图片,例如train下面是 1.png,2.png,将这个两个文件复制一份到val,再复制一份到test
labels下面的train,val两个文件夹存放的是用labelimg标注的标签数据文件,等会 labelimg 使用会用到这个文件夹
将准备好的图片放到 images/train 文件夹下面并且复制一份到 images/val 和 images/test两个文件夹
数据集获取:https://storage.googleapis.com/openimages/web/visualizer/index.html?type=detection&set=train&c=%2Fm%2F05676x
来到labelimg界面,点击 Open Dir 按钮,选择到你的 images/train 文件夹即可,例如 D:\YOLOv8\yolotest\images\train。点击 Change Save Dir 按钮,选择到你的 labels/train 文件夹即可,例如 D:\YOLOv8\yolotest\labels\train。最后点击Save 下面的格式按钮,调整到 YOLO 格式的模式即可。

接下来开始标注数据
我选的例子是苹果,首先在图片上右键菜单,选择 Create RectBox 选项,或者点击左侧的 Create RectBox

在苹果图片区域拉出选框,会弹出框,输入分类名称,这里填写的是apple,点击ok即可保存 ,这分类名称注意后面函数调用要用到。
此时在使用时可能会出现如下错误

解决方法
找到canvas.py,例如:D:\anaconda\envs\yolotest\Lib\site-packages\libs\canvas.py,打开它将526、530、531行的float改为int即可。
修改前后


修改完成后就可以正常工作啦!!!

我们继续接着上步,第一个图片标注完成后,点击左侧的 Save 按钮保存,然后点击 Next Image 切换标注下一张图片,操作和第一张图片类似

图标标注保存后,会在 labels/train 文件夹存储了标注的数据,classes.txt内容就是分类名称,其他的是和图片相同的名称的txt标注文件
最后,将 labels/train 文件夹数据复制到 labels/val 文件夹,等会验证模型的时候使用
至此,数据标注就完成啦!
模型训练
在 yolotest 文件下新建一个训练的配置文件,例如文件名称叫 apple.yaml,使用记事本打开,填写内容如下
path: D:/YOLOv8/yolotest
train: images/train
val: images/val
test: images/test
nc: 1
names: ["apple"]# 有多个类别的话,按照以下方法写
# names: ["111","222"]
- 参数解释
path: 代表训练的根目录,这里的 yolotest在D盘,就写 D:/YOLOv8/yolotest,其他盘的路径自己修改
train: 代表要训练的图片文件夹,相对于path路径
val: 代表要验证的图片文件夹,相对于path路径
test: 代表要测试的图片文件夹,相对于path路径
nc: 代表分类名称数量,这是1个,因为使用labelimg标注的是1个类别,如果是多个数据就跟和实际类别数量一样的即可
names: 是一个json数组,代表的是标注的分类名称,labelimg使用的是apple这一个分类名称,这里就这样写即可
切记如果有多个分类名称的话名称的顺序不要写错,会影响训练结果
开始训练
在控制台输入命令,在cmd窗口,输入d:回车,在输入 cd YOLOv8/yolotest,进入这个文件夹 yolotest,其他路径自行进入

输入以下训练命令,下面两个任选一个,截图参数看ultralytics官网
yolo detect train data=d:/YOLOv8/yolotest/apple.yaml model=d:/YOLOv8/yolotest/yolov8s.pt imgsz=640
yolo detect train data=d:/YOLOv8/yolotest/apple.yaml model=d:/YOLOv8/yolotest/yolov8s.pt epochs=100 imgsz=640
这个时候系统会下载yolov8s.pt的基础训练文件

环境配置成功,一切无误,开始训练

训练完毕,注意这里的 Results saved后面的路径是动态的,截图中是在 runs/detect/train文件夹下,就是D:/YOLOv8/yolotest文件夹下

最后,在训练完成的目录中可以找到 best.pt 的训练模型以及训练中被标记和选中目标的图片结果集

相关文章:
YOLOv8从菜鸟到精通(二):YOLOv8数据标注以及模型训练
数据标注 前期准备 先打开Anaconda Navigator,点击Environment,再点击new(new是我下载anaconda的文件夹名称),然后点击创建 点击绿色按钮,并点击Open Terminal 输入labelimg便可打开它,labelimg是图像标注工具,在上篇…...
Winforms开发基础之非主线程操作UI控件的误区
前言 想象一下,你正在开发一个桌面应用程序,用户点击按钮后需要执行一个耗时操作。为了避免界面卡顿,你决定使用后台线程来处理任务。然而,当你在后台线程中尝试更新UI控件时,程序突然崩溃了。这是为什么呢࿱…...
Flutter中Get.snackbar和Get.dialog关闭冲突问题记录
背景: 在使用GetX框架时,同时使用了Get.snackbar提示框和Get.dialog加载框,当这两个widget同时存在时,Get.dialog加载框调用Get.back()无法正常关闭。 冲突解释: 之所以会产生冲突,是因为Get.snackbar在关…...
springcloudalibaba集成fegin报错ClassNotFoundException解决方案
集成fegin遇到问题: java.lang.ClassNotFoundException: com.netflix.config.CachedDynamicIntProperty 解决方案: 在pom文件中添加依赖 <dependency><groupId>com.netflix.archaius</groupId><artifactId>archaius-core</artifactId><versi…...
【HTML+CSS+JS+VUE】web前端教程-31-css3新特性
圆角 div{width: 100px;height: 100px;background-color: saddlebrown;border-radius: 5px;}阴影 div{width: 200px;height: 100px;background-color: saddlebrown;margin: 0 auto;box-shadow: 10px 10px 20px rgba(0, 0, 0, 0.5);}...
力扣264. 丑数 II
给你一个整数 n ,请你找出并返回第 n 个 丑数 。丑数 就是质因子只包含 2、3 和 5 的正整数。 //用一个数组来保存第1到第n个丑数 //一个丑数必须是乘以较小的丑数的 2、3 或 5来得到。 //使用三路合并方法:L2、L3 和 L5三个指针遍历2、3、5倍的丑数序列…...
计算机网络之---TCP连接管理
TCP连接管理 TCP(传输控制协议)是面向连接的协议,在数据传输之前需要建立连接,在数据传输完成后需要断开连接。TCP连接的建立和断开都遵循特定的规则,分别称为三次握手(Three-Way Handshake)和四…...
《CPython Internals》阅读笔记:p118-p150
《CPython Internals》学习第 8 天,p118-p150 总结,总计 33 页。 一、技术总结 补充一些本人整理的关于 Context-Free Grammar(CFG) 的知识。 1.symbol(符号) A mathematical symbol is a figure or a combination of figures that is used to repre…...
C/C++ 数据结构与算法【排序】 常见7大排序详细解析【日常学习,考研必备】带图+详细代码
常见7种排序算法 冒泡排序(Bubble Sort)选择排序(Selection Sort)插入排序(Insertion Sort)希尔排序(Shell Sort)归并排序(Merge Sort)快速排序(…...
三只松鼠携手爱零食,社区零售新高峰拔地而起
合纵连横,这是当前零售行业发展的一个主旋律。从商超之王胖东来的全国调改,到社区零售正在进行的渠道变革,竞争的激烈和商业模式的升级令人目不暇接。 量贩零食赛道在过去一年就是如此,有杀伐,有并购,刀光…...
Java聊天小程序
拟设计一个基于 Java 技术的局域网在线聊天系统,实现客户端与服务器之间的实时通信。系统分为客户端和服务器端两类,客户端用于发送和接收消息,服务器端负责接收客户端请求并处理消息。客户端通过图形界面提供用户友好的操作界面,服务器端监听多个客户端的连接并管理消息通…...
Kibana操作ES基础
废话少说,开干!!!!!!!!!!!!截图更清晰,复制在下面 #库操作#创建索引【相当于数据库的库】 PUT /first_index#获…...
MYSQL8创建新用户报错:You have an error in your SQL syntax;check...
本文所用——MYSQL版本:8.0.25 baidu都是直接创建新用户并赋权,如下: GRANT ALL PRIVILEGES ON *.* TO 用户名% IDENTIFIED BY 密码 WITH GRANT OPTION;但是我用的MYSQL版本它就不行,会报错! 经查阅资料发现——MY…...
动漫周边商城系统|Java|SSM|VUE| 前后端分离
【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库…...
Vue 3 Diff 算法受 `v-for` 循环中的 `key` 属性影响
Vue 3 的 Diff 算法会受到 v-for 循环中的 key 属性的影响,key 的选择直接关系到 Diff 算法的效率和最终的 DOM 更新结果。 key 的作用 在 Vue 中,key 是一种标识,它用于唯一标记每个虚拟 DOM 节点。Diff 算法会根据 key 判断新旧节点是否是…...
江科大STM32入门——看门狗笔记整理
wx:嵌入式工程师成长日记 (一)简介 WDG(Watchdog)看门狗看门狗可以监控程序的运行状态,当程序因为设计漏洞(无法预料)、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及…...
【计算机网络】lab7 TCP协议
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀计算机网络_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 实验目的…...
计算机视觉:解锁未来智能世界的钥匙
计算机视觉:解锁未来智能世界的钥匙 在信息技术飞速发展的今天,计算机视觉作为人工智能领域的一个重要分支,正以前所未有的速度改变着我们的生活与工作方式。它使机器能够“看”并理解图像和视频中的信息,为自动驾驶、医疗影像分…...
Java的Stream流和Option类
1. Stream 流 背景 Stream是Java 8引入的一个用于处理集合(或其他数据源)中的元素的API。它提供了一种声明式的方式来处理数据,并可以链式调用。Stream支持惰性求值,也支持并行流处理。 1.1 创建 Stream 创建一个Stream可以通…...
深入理解ASP.NET Core 管道的工作原理
在 .NET Core 中,管道(Pipeline)是处理 HTTP 请求和响应的中间件组件的有序集合。每个中间件组件都可以对请求进行处理,并将其传递给下一个中间件组件,直到请求到达最终的处理程序。管道的概念类似于流水线,…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
