【保姆级教程】从YOLOv8目标检测coco128数据集和自己的数据集理解模型训练、验证与预测(pytorch+pychrm)

目录

一、不同YOLOv8版本模型的性能

1、检测版本:

(1)模型性能对比

(2)性能指标说明

(3)表格总结:

2、分类版本(cls):

(1)模型性能对比

(2)性能指标说明:

(3)表格总结:

二、常见公开数据集

1、常见公开深度学习数据集

2、COCO128数据集

三、环境配置

1、新建一个pytorch测试环境

(1)创建虚拟环境

(2)官网下载安装pytorch

(3)安装常用库:

2、pycharm配置pytorch

(1)选择python解释器

(2)新建一个python环境

四、YOLOv8 (ultralytics)的安装

1、下载YOLOv8 (ultralytics)

2、YOLOv8内文件夹/文件含义

(1)文件夹含义:

(2)文件含义:

3、使用pycharm打开

五、准备数据集和yaml文件

1、数据集

(1)公开数据集

(2)自己准备数据集

2、yaml配置文件

(1)yolov8含部分yaml文件

(2)自己新建yaml配置文件

六、训练和验证

1、训练和验证---示意代码

(1)公开数据集直接运行

(2)代码的具体含义

2、训练和验证---过程

(1)下载权重和公开数据集

(2)训练过程-参数说明

(3)验证过程-参数说明

 3、训练和验证---结果

(1)训练结果

【1】训练结果展示

【2】训练文件/文件夹说明

【3】示例分析

 (2)验证结果

【1】验证结果展示

【2】验证文件/文件夹说明

【3】示例分析

七、预测

1、预测准备

(1)下载预测图片

(2)新建一个py环境

2、预测示例代码 

(1)图片预测代码

(2)代码的具体含义  

3、预测结果

(1)预测结果展示

(2)预测参数说明

(3)预测输出参数说明

(4)扩展:视频预测示例代码


一、不同YOLOv8版本模型的性能

        YOLOv8是一个强大的目标检测和分割模型,支持多种任务,包括分类(cls)、检测(det)、姿态估计(pose)和分割(seg)。以下是这些任务的主要区别:

任务描述输出
分类 (cls)识别图像中的物体类别类别标签
检测 (det)定位并识别图像中的物体物体的位置和类别
姿态估计 (pose)识别物体的关键点和姿态关键点的位置和姿态信息
分割 (seg)识别图像中每个像素的类别像素级别的类别标签

下面简单看一下YOLOv8检测版本和分类版本模型性能:

1、检测版本(det)

        主要用于目标检测任务。这些模型不仅需要预测目标的类别,还需要预测目标的位置(边界框)。因此,检测版本的模型通常会有多个输出层,每个层负责不同尺度的目标检测。

(1)模型性能对比

检测模型尺寸 (像素)mAPval 50-95速度 CPU ONNX (ms)速度 A100 TensorRT (毫秒)params (M)FLOPs (B)
YOLOv8n64037.380.40.993.28.7
YOLOv8s64044.9128.41.2011.228.6
YOLOv8m64050.2234.71.8325.978.9
YOLOv8l64052.9375.22.3943.7165.2
YOLOv8x64053.9479.13.5368.2257.8

(2)性能指标说明

  • mAPval 50-95:平均精度均值(mean Average Precision),在交并比(IoU)阈值从50%到95%范围内的变化,是衡量目标检测模型性能的关键指标,数值越高表示模型性能越好。

  • 速度 CPU ONNX (ms):模型在CPU上运行时,使用ONNX(Open Neural Network Exchange)格式的推理速度,单位是毫秒(ms)。

  • 速度 A100 TensorRT (毫秒):模型在NVIDIA A100 GPU上运行时,使用TensorRT优化后的推理速度,单位是毫秒(ms)。TensorRT是一个深度学习推理引擎,可以优化模型以加快在NVIDIA GPU上的运行速度。

  • params (M):模型的参数总数,以百万(M)为单位。参数数量越多,通常表示模型结构越复杂,计算需求越高。

  • FLOPs (B):模型运行时所需的浮点运算次数(Floating Point Operations Per Second),通常用来衡量模型的计算复杂度。

(3)表格总结:

模型特点适用场景
YOLOv8n参数量和FLOPs少,轻量级,推理速度快,检测准确率相对低资源有限设备(嵌入式、移动端),对实时性要求极高且对准确率要求不苛刻的场景(如简单监控检测物体是否移动)
YOLOv8s模型规模增大,能学习更复杂特征,准确率提升,速度较YOLOv8n有所下降但仍较高需要速度和准确度较好平衡的应用(如普通安防监控检测人和车辆)
YOLOv8m模型更大,准确率显著提升(小目标和复杂场景检测能力增强),速度进一步下降,计算资源需求增加对准确度有更高要求且要考虑速度的场景(如工业检测产品微小缺陷)
YOLOv8l参数较多,准确率较好,能处理复杂检测任务(如重叠目标检测分类),速度慢,需较强计算能力对准确度要求高的应用(如高级安防监控识别目标行为身份)
YOLOv8x参数量和FLOPs最多,检测准确率最高(复杂场景、小目标检测出色),速度最慢,硬件要求高准确度至关重要的高端应用(如高端医学影像分析、高精度自动驾驶)

2、分类版本(cls):

        主要用于图像分类任务。这些模型通常有一个全局平均池化层和一个全连接层作为输出层,用于预测输入图像所属的类别。

(1)模型性能对比

分类模型尺寸 (像素)准确率Top1准确率Top5速度CPU ONNX (ms)速度A100 TensorRT (ms)参数 (M)FLOPs (B) at 640
YOLOv8n - cls22466.687.012.90.312.74.3
YOLOv8s - cls22472.391.123.40.356.413.5
YOLOv8m - cls22476.493.285.40.6217.042.7
YOLOv8l - cls22478.094.1163.00.8737.599.7
YOLOv8x - cls22478.494.3232.01.0157.4154.8

(2)性能指标说明:

  • 版本: 各个版本的YOLOv8模型,从最小的YOLOv8n-cls到最大的YOLOv8x-cls

  • top-1准确率 (%): 模型在ImageNet验证集上的top-1准确率,表示模型预测得分最高的类别恰好是正确类别的比例。

  • top-5准确率 (%): 模型在ImageNet验证集上的top-5准确率,表示模型预测得分最高的前五个类别中包含正确类别的比例。

  • CPU ONNX 处理速度 (ms): 在CPU上使用ONNX格式时的处理速度,单位为毫秒每张图片。

  • A100 TensorRT 处理速度 (ms): 在NVIDIA A100 GPU上使用TensorRT加速时的处理速度,单位为毫秒每张图片。

  • 参数量 (M): 模型中的参数总数,以百万为单位。

  • FLOPs (B) at 640: 执行一次前向传播所需的浮点运算次数,以十亿次为单位,基于640像素的输入计算。

(3)表格总结:

模型特点适用场景
YOLOv8n - cls最轻量,处理速度最快,准确率相对较低资源有限或对速度要求较高的场景
YOLOv8s - cls在保持较高速度的同时准确率有所提升需要在速度和准确度之间取得平衡的应用
YOLOv8m - cls准确率显著提升,仍需考虑处理速度对准确度有更高要求,但也要考虑速度的场景
YOLOv8l - cls更高的准确率,处理速度较慢对准确度要求较高的应用
YOLOv8x - cls提供最高的准确率,速度最慢,需要较强硬件支持准确度至关重要的高端应用

二、常见公开数据集

1、常见公开深度学习数据集

        本次介绍21个常见的公开深度学习数据集,涵盖了目标检测、图像分割、图像分类、人脸、自动驾驶、姿态估计、目标跟踪等方向。表格中包括了数据集的类型、功能简述。 

序号数据集名称类型功能
1ImageNet图像分类包含1400多万张标注图像,涵盖1000个类别,用于图像分类任务
2COCO目标检测、图像分割包含33万多张图像,覆盖80类物体,用于目标检测、分割和图像标注任务
3MNIST图像分类包含70000张手写数字图像,用于手写数字识别任务
4

CIFAR-10 /

CIFAR-100

图像分类包含60000张32x32像素的彩色图像,分为10类或100类
5Pascal VOC目标检测、图像分割提供20类对象的标注,用于目标检测和图像分割任务
6

LFW (Labeled Faces

in the Wild)

人脸识别包含13000多张人脸图像,用于人脸识别任务
7Cityscapes自动驾驶、图像分割包含50个城市街道场景的高质量图像,用于自动驾驶和图像分割任务
8KITTI自动驾驶包含德国街道和高速公路场景的多样化图像和激光雷达数据,用于自动驾驶任务
9Open Images目标检测、图像分割包含900多万张图像,用于目标检测和分割任务
10Medical Image Datasets医疗影像包括多种医疗影像数据,用于疾病诊断和医学影像分析任务
11

VQA (Visual

Question Answering)

图像理解包含26万余张图片和相应的问题,用于视觉问答任务
12MS COCO目标检测、图像分割包含33万多张图像,覆盖80类物体,用于目标检测和分割任务
13PASCAL 3D+姿态估计包含12类物体的3D姿态注解,用于物体姿态估计任务
14MPII Human Pose姿势估计包含4万多张人体图像,标注了关节位置,用于人体姿势估计任务
15YouTube-BB目标跟踪包含5000多个视频片段,标注了50多万个边界框,用于目标跟踪任务
16ImageNet VID目标跟踪扩展了ImageNet数据集,包含多个视频序列,用于视频目标检测和跟踪任务
17Caltech-101图像分类包含101个类别的图像,用于图像分类任务
18Caltech-256图像分类包含256个类别的图像,用于图像分类任务
19SUN RGB-D自动驾驶、图像分割包含10335张RGB-D图像,用于室内场景理解任务
20SIFT Flow光流估计包含2800张图像,用于密集对应估计任务
21ETH-80物体识别包含8类物体的图像,用于物体识别任务

2、COCO128数据集

        COCO128数据集是COCO数据集的一个子集,包含128张高质量的图像,广泛应用于目标检测、图像分割和实例识别等任务,COCO128数据集虽然规模不大,却具备COCO数据集的基本结构和注释格式。

三、环境配置

前提:Anaconda和pycharm已安装,如果不知道怎么安装请看我下面过往文章链接的安装步骤。(Anaconda和pycharm已安装,可直接略过)

【一站式详细教程】PyCharm安装与Anaconda下PyTorch环境配置-CSDN博客https://blog.csdn.net/qq_62844901/article/details/143945328?spm=1001.2014.3001.5502

1、新建一个pytorch测试环境

(1)创建虚拟环境

  • (base环境下)创建名字为yolov8new,python版本为3.8的虚拟环境

conda create -n yolov8new python=3.8

  • 激活pytorch的环境 

conda activate yolov8new

(2)官网下载安装pytorch

Previous PyTorch Versions | PyTorchhttps://pytorch.org/get-started/previous-versions/

  • 输入nvidia-smi查看自己电脑的CUDA版本(win+r,输入cmd点击“确定”或回车)

  • 如下图我的CUDA是11.7版本的,如果没有显示就选择CPU版本的。

  • 在pytorch网页安装对应的PyTorch版本,可选择conda方式或者pip方式下载:

  • 如下是CUDA11.7,conda方式的pytorch下载安装命令: 

conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.7 -c pytorch -c nvidia

  • 验证是否pytorch安装成功,验证命令如下,显示版本号即表示安装成功:

python import torch
 
# 查看torch版本
print(torch.__version__)

(3)安装常用库:

  • 输入安装所需的各种库命令:

# 安装matplotlib 
pip install matplotlib==3.7.3 -i https://pypi.doubanio.com/simple/
 
# 安装sklearn 
pip install scikit-learn==0.24.2 -i https://pypi.doubanio.com/simple/
 
# 安装pytz 
pip install pytz -i https://mirrors.aliyun.com/pypi/simple/
 
# 安装pandas 
pip install pandas==1.1.5 -i https://pypi.doubanio.com/simple/
 
# 安装opencv 
pip install opencv_python==4.4.0.40 -i https://pypi.doubanio.com/simple/
 
# 安装imageio 
pip install imageio -i https://pypi.org/simple/

#安装ultralytics (也是ultralytics的pip下载方式)
pip install ultralytics -i https://pypi.org/simple/

  • 进入python验证是否下载成功,验证命令如下:

import numpy as np 
import pandas as pd 
import sklearn 
from sklearn.linear_model import LogisticRegression 
from sklearn import metrics 
import cv2 
import matplotlib 
import ultralytics
 
#最后输入exit()退出

2、pycharm配置pytorch

(1)选择python解释器

  • 打开【设置】》【项目】》【Python解释器】》【添加解释器】》【添加本地解释器】。

  • 或者点击右下角的解释器进行更改:

  • 添加刚刚创建的python解释器。

(2)新建一个python环境

  • 右键项目》【新建】》【Python文件】》输入名称。

四、YOLOv8 (ultralytics)的安装

1、下载YOLOv8 (ultralytics)

GitHub网址:

GitHub - ultralytics/ultralytics: Ultralytics YOLO11 🚀https://github.com/ultralytics/ultralytics进入网址,点击Code,然后点击Download下载zip压缩包 。

解压,可看见下面文件夹和文件。

2、YOLOv8内文件夹/文件含义

(1)文件夹含义:

文件夹名称含义
models包含不同版本和配置的YOLOv8模型文件,如yolov8.yamlyolov8-cls.yaml等,每个文件定义了不同任务(检测、分类、姿态估计等)的模型结构和参数
trackers存放目标跟踪算法的代码,支持在视频或实时流中跟踪检测到的对象
utils包含各种实用工具函数,如图像预处理、数据增强、后处理、可视化等
data包含数据集相关的脚本和文件,如download_weights.shget_coco.sh等,用于下载数据集和预训练权重1
runs训练输出文件夹,包含训练过程中的各种信息,如模型权重、训练日志、评估结果等
ultralytics包含YOLOv8模型的核心代码,定义了模型架构、训练策略、优化方法等

(2)文件含义:

文件名称含义
README.md项目的主文档,包含项目介绍、安装指南、使用说明等8
README.zh-CN.md项目的中文说明文档,提供中文用户的项目介绍、安装指南、使用说明等
LICENSE项目的许可证文件,说明项目的开源协议
CITATION.cff提供引用该项目的相关信息,用于学术引用
CONTRIBUTING.md贡献指南,说明如何为项目做出贡献
mkdocs.ymlMkDocs配置文件,用于生成项目文档网站
pyproject.tomlPython项目配置文件,指定项目依赖和构建配置
gitignoreGit版本控制系统的忽略文件,指定哪些文件或文件夹不需要被Git跟踪

3、使用pycharm打开

  • 右键,点击【Open Folder as PyCharm Project】即可打开。

  • 再打开终端,出现ultralytics-main即表示安装成功。


五、准备数据集和yaml文件

1、数据集

(1)公开数据集

本次训练我们无需另外配置coco128数据集!!!

        coco128作为常用的公开数据集,我们在运行训练代码时,系统如果根据yaml指向的路径下没有找到coco128数据集,系统会自动在官网下载coco128数据集.

  • 如下是运行代码生成的coco128数据集:主要是images图片集和labels标签集要对应好。

  • 如下是coco128数据集内文件/文件夹的描述:

文件/文件夹描述
images包含128张高质量的图像,这些图像是从COCO数据集中选取的,用于目标检测、图像分割和实例识别等任务。
labels包含与images文件夹中图像对应的标签信息,这些标签通常是文本文件,描述了图像中目标的类别、位置和其他相关信息。
license包含数据集的版权和使用许可信息,通常是一个文本文件,描述了数据集的使用权限和限制。
README.txt包含数据集的说明文档,通常是一个文本文件,提供了数据集的基本信息、使用方法、数据格式等详细说明。
  • 如下是coco128的images(jpg)图片集和labels(txt)标签集的对应关系:

  • 如下是images(jpg)图片集:

  • 如下是labels(txt)标签集,以及标签内容:每一行标签通常代表一个目标实例。

  •  以49 0.642859 0.0792187 0.148063 0.148062为例,其中的数字含义如下:

数字含义
49目标的类别ID,这里的49可能代表某个具体的类别,例如“汽车”或者“人”等。
0.642859目标在图像中的中心点X坐标,这个值是归一化后的结果,范围在0到1之间,表示目标中心点在图像宽度方向上的位置。
0.0792187目标在图像中的中心点Y坐标,同样是归一化后的结果,表示目标中心点在图像高度方向上的位置。
0.148063目标在图像中的宽度,也是归一化后的数值,表示目标在图像宽度方向上占据的比例。
0.148062目标在图像中的高度,同样是归一化后的数值,表示目标在图像高度方向上占据的比例。

注意:当所需数据没有公开数据集或公开数据集数据量不足时,需要自己准备数据集!!!

(2)自己准备数据集

  • 主要步骤:数据收集-->数据清洗-->数据标注-->数据分割-->数据存储与管理

  • 以coco128为例,存放目录如下:

2、yaml配置文件

(1)yolov8含部分yaml文件

本次训练我们可以不用配置yaml文件!!!

        我们下载安装的yolov8 (ultralytics)文件夹本身就含有coco128数据集的yaml配置文件(...\ultralytics\cfg\datasets路径下),也可以根据需求对yaml文件内的路径和类别进行修改。

  • 如下是...\ultralytics\cfg\datasets路径下的yaml配置文件和打开的coco128.yaml:

 注意:一旦需要训练自己的数据集,就需要自己新建和配置yaml文件!!!

(2)自己新建yaml配置文件

        配置格式同coco128.yaml一致,只需更改路径和类别信息,同样需要放在...\ultralytics\cfg\datasets路径下。

我们以coco128.yaml为例,介绍yanl文件的配置过程:

  • 分析数据集的路径信息和类别信息:

配置项描述示例
数据集根目录数据集的顶级目录路径,包含训练集、验证集和测试集等子目录/home/user/dataset
训练集图像路径训练集图像所在的目录路径,位于数据集根目录下${数据集根目录}/train/images
验证集图像路径验证集图像所在的目录路径,位于数据集根目录下${数据集根目录}/val/images
测试集图像路径测试集图像所在的目录路径,位于数据集根目录下${数据集根目录}/test/images
类别编号为每个类别分配的唯一数字标识符,用于在模型训练和识别中区分不同类别


0: person

1: bicycle

2: car

类别名称数据集中各类别的名称
person
bicycle
car
  • 【新建】-->【文本文档】-->命名并打开文本文档

  •  编辑配置文件:
path: ../datasets/coco128
train: images/train2017
val: images/train2017
test: #未定义

# Classes
names:
  0: person
  1: bicycle
  2: car
  ......
  69: oven
  70: toaster
  71: sink
  72: refrigerator
  73: book
  74: clock
  75: vase
  76: scissors
  77: teddy bear
  78: hair drier
  79: toothbrush

  • 点击【文件】-->【保存】

  •  将txt后缀更改为yaml 

注意:如果看不见后缀,就打开【查看】,勾选【文件扩展名】。


六、训练和验证

1、训练和验证---示意代码

(1)公开数据集直接运行

        coco128是公开数据集,可直接运行训练示意代码,当系统在yaml文件指向的本地路径如果找不到coco128数据集,会自动链接官网进行下载coco128数据集。

注意:如果是训练自己的数据集,需要先准备数据集和yaml配置文件!!!

from ultralytics import YOLO
model = YOLO('yolov8n.yaml').load('yolov8n.pt')  # 从YAML构建并转移权重
if __name__ == '__main__':
    results = model.train(data='coco128.yaml', epochs=10, device='0')
    metrics = model.val()

(2)代码的具体含义

注意:如果是CPU环境,device='cpu'。 

2、训练和验证---过程

(1)下载权重和公开数据集

训练过程会下载yolov8n.pt权重文件和coco128数据集(公开数据集)

(2)训练过程-参数说明

参数描述默认值训练参数设置
model模型文件路径(例如yolov8n.pt等)None按任务选合适的预训练模型文件
data数据文件路径(如coco128.yaml)None挑匹配数据集的配置文件
batch一批次的图像数量16硬件资源多就增大,避免内存不足
epochs训练完整遍历数据集的次数100数据集小或模型简单可减少;反之增加,避免过拟合
imgsz输入图像大小640参考硬件性能和模型要求调整
optimizer优化器类型(如SGD、Adam)'auto'依模型和数据集特性选
pretrained是否用预训练模型True新任务一般默认
device运行设备(如cuda或cpu)None依据硬件资源选择
workers加载数据的线程数8按系统资源调整
save是否保存训练成果True一般默认即可
val训练中是否验证True一般默认
resume是否从断点恢复训练False中断后继续设为True
fraction训练用数据集比例1.0用部分数据训练时调整
cache是否缓存数据(有不同方式)False硬件和数据集合适就用
amp是否自动混合精度训练True硬件支持就选
lr0初始学习率0.01依模型和数据集调整
lrf最终学习率0.01按训练策略调整
momentum优化器相关动量参数0.937按优化器类型调整
weight_decay优化器权重衰减0.0005一般默认
warmup_epochs热身周期数3.0依模型特性调整
warmup_momentum热身初始动量0.8按训练策略调整
warmup_bias_lr热身初始偏置学习率0.1按训练策略调整
box目标检测盒子损失增益7.5依模型和数据调整
cls目标检测类别损失增益0.5按分类任务难度调整
dfl目标检测DFL损失增益1.5按具体应用调整
pose姿态检测损失增益(姿态任务)12.0仅姿态任务用
kobj姿态检测关键点损失增益(姿态任务)2.0仅姿态任务用
label_smoothing分类任务标签平滑比例0.0按训练策略调整
nbs参考批量大小64依硬件资源调整
dropout分类任务正则化(dropout)0.0分类任务中过拟合时调整
overlap_mask分割训练掩码是否重叠True仅分割任务用
mask_ratio分割训练掩码下采样比例4仅分割任务用
time训练时长(小时),优先于epochsNone按实际训练时长需求设
patience早停等待周期(无明显改进)50看模型训练情况调整
cos_lr是否用余弦学习率调度器False按训练策略决定
close_mosaic何时关闭马赛克增强10按训练需求调整
single_cls多类数据是否当单类训练False特殊场景调整
rect特殊的矩形训练模式False特殊场景使用
deterministic是否结果确定True想结果一致就设为True
seed随机种子(重现结果用)0要重现结果就确定值
verbose是否详细输出False开发调试设为True
exist_ok能否覆盖已有实验False重复实验时设为True
name实验名None自定义方便区分实验
project项目名None按需求自定义
save_period多久保存一次训练成果,<1不保存-1按需设置
plots训练/验证时是否保存图表False需可视化时设为True

(3)验证过程-参数说明

参数描述默认值验证参数设置
data数据文件的路径,例如coco128.yamlNone检查文件是否存在,路径是否正确
imgsz输入图像的大小,以整数表示640确保值符合模型输入要求,避免过大或过小影响性能
batch每批图像的数量(AutoBatch为 -1)16根据硬件资源调整,避免内存溢出或利用率过低
conf用于检测的对象置信度阈值0.001根据实际检测效果和数据特点进行调整和验证
iouNMS(非极大抑制)用的交并比(IoU)阈值0.6通过测试集验证是否能有效过滤重叠框
max_det每张图像的最大检测数量300依据检测任务需求和图像内容确定合适的值
half使用半精度(FP16)True验证硬件是否支持半精度计算,以及对精度的影响
device运行所用的设备,例如cuda device = 0/1/2/3或device = cpuNone检查设备是否可用,驱动是否安装正确
dnn使用OpenCV DNN进行ONNX推理False确认OpenCV版本是否支持DNN相关功能
plots在训练期间显示图表False检查显示设备或相关绘图库是否能正常工作
rect矩形验证,每批图像为了最小填充整齐排列False通过可视化或数据检查验证排列效果
split用于验证的数据集分割,例如 'val'、'test'或 'train'val确认分割后的数据集符合预期,数据分布合理
save_json将结果保存至JSON文件False验证文件保存的权限、路径是否可操作
save_hybrid保存混合版本的标签(标签 + 额外预测)False检查相关数据结构是否支持混合保存
  • 最终在.../runs/detect目录下生成两个文件夹:train(训练结果)和train2(验证结果)。 

 3、训练和验证---结果

(1)训练结果

【1】训练结果展示

【2】训练文件/文件夹说明
文件名称说明如何判断模型好坏
best.pt损失值最小的模型文件

损失值小,模型可能较好,

但还要看在新数据上的表现。

last.pt训练到最后的模型文件

最后损失稳定,评估指标不错,

(如精确度、召回率等)

模型较好;否则可能有问题。

args.yaml模型训练的配置参数

合理的参数是模型训练好的前提,

不合理可能导致模型不好。

confusion_matrix.png混淆矩阵,展示分类模型性能,每行代表预测类别,每列代表实际类别,对角线数值表示正确预测数量,颜色深浅反映数量多少

对角线数值越大,模型分类越准;

非对角线数值小,混淆少,模型越好。

confusion_matrix_

normalized.png

标准化混淆矩阵,显示每个类别的预测正确比例,有助于比较不同类别预测准确性(类别样本数量不平衡时)

比例越高(即越接近1),

模型对各分类预测越准,模型越好。

F1_curve.pngF1 - 置信度曲线,显示F1得分随置信度阈值的变化,F1得分是精确度和召回率的调和平均值,曲线峰值表示最佳平衡点

峰值越高,模型在不同置信度下精确度

和召回率平衡得越好。

labels.jpg标签分布图和边界框分布图,柱状图显示不同类别实例分布数量,散点图展示目标检测任务中边界框空间分布情况

标签分布均匀、边界框分布正常

有助于模型学习,模型可能更好。

labels_correlogram.jpg标签相关图,提供不同类别标签之间关系以及在图像中位置的相关性,助于理解识别时的关联或混淆

能正确反映类别关系

模型对类别理解好,性能可能好。

P_curve.png精确度 - 置信度曲线,展示模型预测精确度随置信度阈值的变化,精确度是正确正例与预测为正例总数的比值

曲线整体高且平稳

模型在不同阈值下精确度好。

PR_curve.png精确度 - 召回曲线,展示模型精确度与召回率之间的关系,理想情况应保持两者良好平衡

曲线越靠近右上角

模型综合性能越好。

R_curve.png召回 - 置信度曲线,显示模型召回率随置信度阈值的变化,召回率是正确预测正例与实际正例总数的比值

曲线整体高

模型找出正例的能力强。

results.png训练结果图表,展示模型训练过程中的性能变化,如损失函数变化和评估指标变化

损失下降且稳定

评估指标上升且稳定在高位

模型训练效果好。

results.csv训练结果数据,包含模型训练过程中的性能变化数据,如精确度、召回率和mAP等评估指标

指标数值越高

模型在对应任务性能越好。

 results.csv表格内几个关键的指标:

指标名称定义作用
metrics/precision(B)Precision(精确率):在所有被预测为正例的样本中,真正为正例的比例。在目标检测中,表示预测出的目标中真正是目标的比例。衡量模型预测的准确性,即模型预测出的结果中有多少是正确的。
metrics/recall(B)Recall(召回率):在所有真实为正例的样本中,被预测为正例的比例。在目标检测中,表示实际存在的目标中被模型检测出来的比例。衡量模型对正例的检测能力,即模型能够检测出多少实际存在的目标。
metrics/mAP50(B)mAP50(平均精度均值,IoU阈值为50%):在不同物体类别上,模型预测结果与真实结果的交并比(IoU)大于50%时的平均精度。衡量模型在不同类别上的检测精度,是目标检测中常用的评估指标之一。
metrics/mAP50 - 95(B)mAP50 - 95(平均精度均值,IoU阈值从50%到95%):在不同物体类别上,模型预测结果与真实结果的交并比(IoU)在50%到95%之间的平均精度。与mAP50相比,更全面地衡量模型在不同IoU阈值下的性能,能够更准确地反映模型的检测能力。
【3】示例分析

下面两个训练结果哪个训练模型的效果较好?

第一个训练模型的效果较好,从以下几点分析:

  • F1_curve.png峰值高

  • P_curve.png曲线整体高且平稳

  • PR_curve.png曲线越靠近右上角

  • R_curve.png曲线整体高

  • ......

 (2)验证结果

【1】验证结果展示

【2】验证文件/文件夹说明
文件/曲线名称含义如何判断模型好坏
confusion_matrix.png以矩阵形式展示模型预测与实际类别的对比情况,行代表实际类别,列代表预测类别,对角线为正确预测数对角线数值越大,非对角线数值越小,表明模型分类越准确,模型性能越好

confusion_matrix

_normalized.png

每个元素表示预测标签与真实标签之间的比例比例越高(即越接近1),表明模型对各分类预测越准确,模型性能越好
F1_curve.pngF1分数(精确率和召回率的调和平均值)与置信度之间的关系曲线

峰值越高,模型在不同置信度下精确度

和召回率平衡得越好。

P_curve.png精确率和置信度之间的关系曲线

曲线整体高且平稳

模型在不同阈值下精确度好。

PR_curve.png精确率 - 召回率之间的关系曲线

曲线越靠近右上角

模型综合性能越好。

R_curve.png召回率和置信度之间的关系曲线

曲线整体高

模型找出正例的能力强。

val_batch0_labels.jpg验证集第0批次的实际标签图像与对应预测结果对比,匹配度高则模型性能好
val_batch0_pred.jpg验证集第0批次的模型预测结果图像与val_batch0_labels.jpg对比,若预测的目标类别和位置与实际标签一致,则模型性能较好
val_batch1_labels.jpg验证集第1批次的实际标签图像与对应预测结果对比,匹配度高则模型性能好
val_batch1_pred.jpg验证集第1批次的模型预测结果图像与对应批次的标签图像对比,若预测结果准确(检测到的目标类别和位置与实际标签一致),则模型性能较好
val_batch2_labels.jpg验证集第2批次的实际标签图像与对应预测结果对比,匹配度高则模型性能好
val_batch2_pred.jpg验证集第2批次的模型预测结果图像与对应批次的标签图像对比,若预测结果准确(检测到的目标类别和位置与实际标签一致),则模型性能较好
【3】示例分析

下面两个验证结果哪个验证模型的效果较好?

第一个训练模型的效果较好,从以下几点分析:

  • F1_curve.png峰值高

  • P_curve.png曲线整体高且平稳

  • PR_curve.png曲线越靠近右上角

  • R_curve.png曲线整体高

  • ......


七、预测

1、预测准备

(1)下载预测图片

        先在网上找两张图片(要求含有coco128数据集类别),并下载图片img1和img2放在.../ultralytics-main/ultralytics-main目录下,下面是我在网上找的两张图片:

img1:

img2:

(2)新建一个py环境

        在.../ultralytics-main/ultralytics-main目录下新建一个python环境提供给预测代码使用。

2、预测示例代码 

(1)图片预测代码

# 图片预测
from ultralytics import YOLO
 
model = YOLO('C:/ultralytics-main/ultralytics-main/runs/detect/train/weights/best.pt')
metrics = model.predict(['img1.jpg', 'img2.jpg'], save=True)
for m in metrics:
    box = m.boxes
    xywh = box.xywh
    cls = box.cls
    print(box, xywh, cls)

上述代码已将模型路径更改为训练得到的best.pt文件路径。

(2)代码的具体含义  

3、预测结果

(1)预测结果展示

        在.../runs/detect/predit目录下生成2张预测后图片,含类别和置信度。(置信度是模型对其单次预测结果的确信程度,通常表现为概率值。模型对其预测的置信度高并不总能保证预测的准确性,因为模型可能会过度自信地做出错误的预测,特别是在面对分布偏移或未见过的数据时。)

(2)预测参数说明

名称描述默认值
source图像或视频的源目录'ultralytics/assets'
conf检测对象的置信度阈值0.25
iou用于NMS的交并比(IoU)阈值0.7
imgsz图像大小,可以是标量或(h, w)列表,例如(640, 480)640
half使用半精度(FP16)False
device运行设备,例如 cuda device = 0/1/2/3 或 device = cpuNone
show如果可能,显示结果False
save保存带有结果的图像False
save_txt将结果保存为.txt文件False
save_conf保存带有置信度分数的结果False
save_crop保存带有结果的裁剪图像False
show_labels隐藏标签True
show_conf隐藏置信度分数True
max_det每张图像的最大检测数量300
vid_stride视频帧速率跳跃False
stream_buffer缓冲所有流媒体帧(True)或返回最新帧(False)False
line_width边框线宽度。如果为None,则按图像大小缩放。None
visualize可视化模型特征False
augment应用图像增强到预测源False
agnostic_nms类别不敏感的NMSFalse
retina_masks使用高分辨率分割掩码False
classes按类别过滤结果,例如 classes = 0,或 classes = [0, 2, 3]None
boxes在分割预测中显示框True

(3)预测输出参数说明

输出参数说明
cls张量,存储检测对象的类别索引,索引值对应预定义类别列表,如tensor([0., 5., 0., 0., 0.], device = 'cuda:0')中,0和5分别表示对象所属类别索引
conf张量,存储检测对象的置信度分数,分数越高表明模型对检测结果越有信心
data张量,包含检测对象的边界框信息(如[x, y, width, height, confidence, class],其中[x, y]可能为中心点坐标,width和height为框的宽高,confidence为置信度,class为类别相关信息)
xywh边界框坐标与尺寸表示,格式为[中心点x坐标, 中心点y坐标, 宽度, 高度],便于计算框中心与大小,常用于交并比计算等
xywhn归一化的边界框坐标与尺寸(相对于图像尺寸),取值范围0 - 1,便于处理不同尺寸图像
xyxy边界框坐标表示,格式为[左上角x坐标, 左上角y坐标, 右下角x坐标, 右下角y坐标],直观表示框的对角顶点坐标,常用于可视化等操作
xyxyn归一化的xyxy格式边界框坐标,使坐标表示与图像尺寸无关,便于不同大小图像的统一处理
is_track布尔值,表示是否使用跟踪算法跟踪检测对象,在视频对象跟踪场景中起重要作用
orig_shape原始图像的形状(如[高度, 宽度, 通道数]),用于还原图像或按原始尺寸进行比例计算等操作
shape处理后的张量形状,反映图像经预处理(如缩放、裁剪等)后的形状,有助于理解数据在模型中的处理情况

(4)扩展:视频预测示例代码

考虑到有部分人想使用视频预测,这里补充视频预测示例代码以供学习和参考。

# 视频预测
from ultralytics import YOLO
 
model = YOLO('C:/ultralytics-main/ultralytics-main/runs/detect/train/weights/best.pt')
video_path = "sp.mp4"
metrics = model.predict(source=video_path, save=True)
for m in metrics:
    box = m.boxes
    xywh = box.xywh
    cls = box.cls
    print(box, xywh, cls)

总结:实现数据集的训练,需要pt模型文件,数据集【images文件夹(jpg)、label文件夹(txt)】,还有yaml配置文件(一般需要自己配置,指定数据集路径和类型)。

参考资料:

超详细YOLOv8目标检测全程概述:环境、训练、验证与预测详解_yolov8目标检测流程-CSDN博客https://blog.csdn.net/qq_42452134/article/details/135181244

深度学习初学者,如何下载常用公开数据集并使用呢?_深度学习数据集下载-CSDN博客https://blog.csdn.net/weixin_43847596/article/details/121300762

你想要了解如何使用YOLOv8训练COCO数据集,是吗?在这之前,请确保你已经具备以下准备工作: 1. 安装好YOLOv8的代码库所需依赖,可以参考GitHub上的源代码。 2. 下载并解压COCO数据集,包括图像标签文件。 接下来,你可以按照以下步骤进行YOLOv8训练: 1. 配置数据集路径:打开YOLOv8的配置文件,通常是`yolov8.cfg`或`yolov8-custom.cfg`。将其中的数据集路径修改为你的COCO数据集路径。 2. 配置类别数目:找到配置文件中的`classes`参数,并将其设置为你要检测的类别数量。在COCO数据集中,这个数目是80。 3. 配置预训练权重:如果你想使用预训练的权重进行初始化,可以将配置文件中的`weights`参数设置为对应的权重文件路径。如果没有预训练权重,可以跳过此步骤。 4. 设置训练参数:你可以根据需要调整学习率、批大小、迭代次数等参数。这些参数通常在配置文件中有明确的设置项。 5. 数据转换:将COCO标签文件转换为YOLO格式。可以使用一些工具或脚本来实现,比如`coco2yolo.py`。 6. 开始训练:运行训练脚本或命令,使用COCO数据集进行训练。具体的命令可能因你使用的代码库而有所不同,可以参考对应的文档或示例。 7. 监控训练过程:在训练过程中,你可以监控损失函数的变化、验证集的性能等指标,以评估模型训练效果。 8. 保存模型:一旦训练完成,你可以保存训练好的模型权重,以备后续使用。 请注意,YOLOv8训练过程可能需要一定的计算资源时间。同时,确保你具备足够的训练数据合适的标注质量,以获得更好的检测性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扶云云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值