【YOLO系列】YOLOv8训练、测试、推理

代码来源:GitHub - ultralytics/ultralytics: Ultralytics YOLO11 🚀 

参考笔记:YOLOv8 训练、验证、推理_yolov8推理代码-优快云博客

官方文档链接:Ultralytics YOLO11 模式 -Ultralytics YOLO 文档


目录

1.数据集准备

2.default.yaml

3.yolov8.yaml

4.训练

4.1 训练模型

4.2 训练结果解析

5.测试

5.1 准备工作

5.2 测试结果解析

6.推理


1.数据集准备

使用的数据集是 VOC2007 数据集,包含 9963 张图片,共 20 个类别,如下图:

数据集按 8:2 划分为训练集、测试集,训练集 7829 张图片,验证集 2134 张图片,每张图片对应一个标签 txt 文件,标签txt文件中每一行有 5 个值,分别是类别索引、中心x、中心y、宽、高(归一化之后的值)

接着创建与该数据集对应的 YAML 文件 VOC2007.yaml 存放于 ultralytics/cfg/datasets 目录下,其内容如下:

path: ../VOCdevkit #数据集根目录
train: images/train #训练集存放路径
val: images/val    #验证集存放路径
test: images/val    #测试集存放路径

# Classes 类别
names:
  0: person #人
  1: bird   #鸟
  2: cat    #猫
  3: cow    #奶牛
  4: dog    #狗
  5: horse  #马
  6: sheep  #羊
  7: aeroplane #飞机
  8: bicycle   #自行车
  9: boat      #船
  10: bus      #公共汽车
  11: car      #汽车
  12: motorbike #摩托车
  13: train     #火车
  14: bottle    #瓶子
  15: chair     #椅子
  16: diningtable #餐桌
  17: pottedplant #花盆
  18: sofa        #沙发
  19: tvmonitor   #电视

由于没有多余的数据,所以这里我将验证集也作为测试集 

2.default.yaml

  YOLOv8 的命令行参数和超参数设置全部存放于 ultralytics/cfg/default.yaml ,其内容如下:

# Ultralytics YOLO 🚀, AGPL-3.0 license
# Default training settings and hyperparameters for medium-augmentation COCO training

task: detect #YOLO任务,例如检测、分割、分类、姿态
mode: train # (str) YOLO模式,例如训练、验证、预测、导出、跟踪、基准测试(train, val, predict, export, track, benchmark)

# 1.Train settings(训练阶段命令参数设置) -------------------------------------------------------------------------------------------------------
model: #(str, 可选)模型文件存放路径,例如yolov8n.pt, yolov8n.yaml
data: #(str,可选)数据集对应的YAML文件存放路径
epochs: 100 #(int)训练轮数
time: # (float, optional) number of hours to train for, overrides epochs if supplied
patience: 100 #(int)早停机制
batch: 16 #(int)批量
imgsz: 640 #(int | list)将输入图像自适应缩放到imgsz尺寸大小
save: True #(bool)保存训练的模型和预测结果
save_period: -1 #(int)每x个epoch保存一次模型权重,保存路径是runs/detect/train/weights/epochx.pt,默认不开启,一般只保存last.pt和best.pt
cache: False #(bool)是否缓存数据集到RAM或磁盘
device: # (int | str | list, 可选) device to run on, i.e. cuda device=0 or device=0,1,2,3 or device=cpu
workers: 8 #(int)数据加载器的最大工作线程数
project: #(str,可选)训练结果存放的根目录,默认是runs/detect/
name: #(str,可选)训练结果存放的子目录,默认是runs/detect/trainx
exist_ok: False #(bool)是否用当前的训练结果目录覆盖以前的trainx训练结果目录,默认不开启
pretrained: True #(bool | str)是否使用预训练权重(bool)或加载权重模型(str)
optimizer: auto #(str)指定优化器,可选=[SGD, Adam, Adamax, AdamW, NAdam, RAdam, RMSProp, auto]
verbose: True #(bool)是否打印详细输出信息
seed: 0 #(int)随机种子
deterministic: True # (bool) whether to enable deterministic mode
single_cls: False #(bool)将多类别作为单类训练
rect: False #(bool)如果模型为'train'则矩形训练,模型为'val'则矩形验证
cos_lr: False #(bool)是否使用余弦函数更新学习率,默认是线性函数更新学习率
close_mosaic: 10 #(int)禁用最后x个epoch的mosaic数据增强
resume: False #(bool)断点续训
amp: True #(bool)自动混合精度(AMP)训练,可选项=[True,False]
fraction: 1.0 #(float) 训练数据集的分数(默认为1.0,训练集中的所有图像)
profile: False #(bool) 在寻训练期间为记录器分析ONNX和TensorRT速度
freeze: None #(int | list,可选)指定冻结不进行训练的层索引
multi_scale: False #(bool)多尺度训练
#Segmentation(分割任务)
overlap_mask: True #(bool)训练期间掩码是否重叠(仅限分割训练)
mask_ratio: 4 #(int)掩码下采样率 (仅限分割训练)
#Classification(分类任务)
dropout: 0.0 #(float)使用dropout正则化(仅限分类训练)

# 2.Val/Test settings(验证/测试阶段命令参数设置) ----------------------------------------------------------------------------------------------------
val: True #(bool)在训练期间进行验证/测试
split: val #(str)用于验证的数据集分割,例如:'val', 'test' or 'train'
save_json: False #(bool)是否将预测结果保存为json文件
save_hybrid: False # (bool) save hybrid version of labels (labels + additional predictions)
conf: #(float,可选)置信度阈值,用于nms中,小于该阈值的预测框会被去除(预测默认0.25,验证默认0.001)
iou: 0.7 #(float)IoU阈值,用于nms中,若两个框的IoU阈值大于该值,需要去除冗余的那个预测框
max_det: 300 #(int)每张图片nms处理之后最多的检测框数量,超出部分去除
half: False #(bool)使用半精度推理缩短推理时间
dnn: False #(bool)使用 OpenCV DNN 进行 ONNX 推理
plots: True #(bool)在训练/验证期间保存图表和图像

# 3.Predict settings(推理阶段命令参数设置) -----------------------------------------------------------------------------------------------------
source: #(str,可选)推理数据的存放路径
vid_stride: 1 #(int)视频帧率步幅
stream_buffer: False # (bool) buffer all streaming frames (True) or return the most recent frame (False)
visualize: False #(bool)是否保存热力图(没什么用)
augment: False #(bool)模型推理时是否启用数据增强
agnostic_nms: False #(bool)使用类别无关的NMS,通常不启用该功能(默认的NMS是作用在同个类别之间)
classes: #(int | list[int],可选)nms中是否是只保留某些特定的类,通常不启用该功能
retina_masks: False #(bool)使用高分率分割掩码
embed: # (list[int], 可选) 从给顶层返回特征向量/嵌入

# 4.Visualize settings(可视化设置) ---------------------------------------------------------------------------------------------------
show: False #(bool)是否在控制台可视化预测之后的图片或视频
save_frames: False # (bool) 保存预测的视频帧
save_txt: False #(bool)将预测的框坐标以txt文件格式保存,默认路径是runs/detect/predictn/labels
save_conf: False #(bool)将预测的框的置信度保存在txt文件中
save_crop: False #(bool)将预测到的目标从原图中扣出来,保存在runs/detect/predictn/crops下
show_labels: True #(bool)画出来的检测框是否显示类别
show_conf: True #(bool)画出来的检测框是否显示置信度
show_boxes: True #(bool)是否显示检测框
line_width: #(int,可选)画检测框时的线条宽度,默认为3

# 5.Export settings(导出设置) ------------------------------------------------------------------------------------------------------
format: torchscript # (str) format to export to, choices at https://docs.ultralytics.com/modes/export/#export-formats
keras: False # (bool) use Kera=s
optimize: False # (bool) TorchScript: optimize for mobile
int8: False # (bool) CoreML/TF INT8 quantization
dynamic: False # (bool) ONNX/TF/TensorRT: dynamic axes
simplify: True # (bool) ONNX: simplify model using `onnxslim`
opset: # (int, optional) ONNX: opset version
workspace: 4 # (int) TensorRT: workspace size (GB)
nms: False # (bool) CoreML: add NMS

# 6.Hyperparameters(训练的超参数设置) ------------------------------------------------------------------------------------------------------
####################6.1学习率、损失系数等#########################
lr0: 0.01 #初始学习率(通常,SGD=1E-2, Adam=1E-3)
lrf: 0.01 #最终的学习率=lr0*lrf,
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: 1.5 #dfl损失的系数
pose: 12.0 # (float) pose loss gain
kobj: 1.0 # (float) keypoint obj loss gain
label_smoothing: 0.0 #标签平滑的比例
nbs: 64 #名义批次,名义批次,比如实际批次为16,那么6
### 使用YOLOv8进行模型训练 对于YOLOv8的模型训练,官方提供了详细的指南和支持工具来简化这一流程。当前最新版本为8.2.0,在GitHub上有完整的项目资源可供获取[^2]。 为了启动YOLOv8训练过程,首先需要安装`ultralytics`库并准备数据集。假设已经完成了环境配置和数据预处理工作,则可以通过以下Python脚本开始训练: ```python from ultralytics import YOLO # 创建一个新的YOLOv8n实例(可以更换成其他型号如'yolov8s', 'yolov8m'等) model = YOLO('yolov8n.yaml') # 开始训练;这里的data参数应指向自定义的数据配置文件路径, # epochs表示迭代次数,imgsz设置输入图像尺寸大小 results = model.train(data='path/to/data.yaml', epochs=100, imgsz=640) ``` 这段代码会基于指定的数据集执行训练操作,并自动保存最佳权重到默认目录下。训练完成后,还可以通过可视化工具查看混淆矩阵等相关统计图表以评估性能表现[^1]。 ### 执行YOLOv8推理 完成模型训练之后,就可以利用该模型来进行目标检测任务了。具体来说,加载之前保存的最佳权重文件并对新图片实施预测非常简单: ```python from ultralytics import YOLO # 加载已有的YOLOv8模型权重 model = YOLO('runs/train/exp/weights/best.pt') source_image_path = 'test.jpg' # 对单张测试图片运行推理,并将结果保存下来 predictions = model.predict(source_image_path, save=True) ``` 上述命令将会读取给定的源图像(`test.jpg`)并通过调用`.predict()`方法应用先前训练得到的对象识别能力对其进行标注,最终输出带有边界框标记的结果图像至本地磁盘中[^3]。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值