GPU:推荐使用 NVIDIA GPU(如 RTX 30 系列),显存至少 8GB。
CPU:如果没有 GPU,可以使用 CPU,但训练和推理速度会较慢。
YOLOv8 依赖于 ultralytics
库,可以通过以下命令安装:
bash
pip install ultralytics
Python 3.8 或更高版本
PyTorch 1.8 或更高版本
OpenCV(用于图像处理)
安装 PyTorch 和 OpenCV:
bash
pip install torch torchvision torchaudio pip install opencv-python
YOLOv8 的网络架构基于 CSPDarknet 骨干网络,结合了 PANet(Path Aggregation Network)和 SPP(Spatial Pyramid Pooling)模块,具有以下特点:
CSPDarknet:高效的骨干网络,提取图像特征。
PANet:增强特征金字塔,提升多尺度目标检测能力。
SPP:增加感受野,提升模型对目标的全局理解能力。
YOLOv8 提供了多种预训练模型(如 yolov8n.pt
、yolov8s.pt
等),我们可以直接加载并使用。
from ultralytics import YOLO # 加载预训练模型(YOLOv8n 是最小的模型) model = YOLO("yolov8n.pt") # 打印模型结构 print(model)
使用加载的模型对图像或视频进行目标检测。
# 对单张图片进行推理 results = model(" # 可视化结果 results[0].show() # 保存结果 results[0].save("output.jpg")
YOLOv8 支持训练自定义数据集。首先需要准备数据集,格式为 YOLO 格式(每张图片对应一个 .txt
文件,包含目标类别和边界框信息)。
# 加载自定义数据集配置文件(data.yaml)model = YOLO("yolov8n.pt") # 加载模型model.train(data="data.yaml", epochs=100, imgsz=640) # 训练模型
训练完成后,可以使用验证集评估模型性能。
# 验证模型 metrics = model.val() print(metrics.box.map) # 打印 mAP(平均精度)
YOLOv8 支持将模型导出为多种格式(如 ONNX、TensorRT 等),以便在不同平台上部署。
# 导出模型为 ONNX 格式 model.export(format="onnx")
CSP(Cross Stage Partial):通过部分连接减少计算量,同时保持特征提取能力。
Darknet:基于卷积神经网络的特征提取器。
FPN(Feature Pyramid Network):提取多尺度特征。
PANet:在 FPN 基础上增加自底向上的路径,增强特征融合。
Spatial Pyramid Pooling:通过不同尺度的池化操作,增加感受野,提升模型对目标的全局理解能力。
YOLOv8 官方文档:https://docs.ultralytics.com/
PyTorch 官方文档:https://pytorch.org/docs/stable/index.html
OpenCV 官方文档:https://docs.opencv.org/
YOLOv8 是一个高效、灵活的目标检测模型,适用于多种任务(如目标检测、实例分割、姿态估计等)。通过 ultralytics
库,我们可以轻松实现模型的加载、推理、训练和部署。
OVR,也称为 One-vs-All (OVA),是一种将多类分类问题转化为多个二分类问题的方法。
对于有 个类别的分类问题,OVR 会训练 个二分类器。每个分类器负责区分一个类别和其余所有类别。
训练阶段:
对于每个类别 (),训练一个二分类器 。
分类器 的目标是将类别 的样本标记为正类,其余类别的样本标记为负类。
预测阶段:
对于一个新的样本,使用所有 个分类器进行预测。
每个分类器 会输出一个置信度分数(如概率或决策函数值)。
最终,选择置信度分数最高的类别作为预测结果。
简单直观,易于实现。
只需要训练 个分类器,计算量相对较小。
如果类别数量 很大,可能会导致类别不平衡问题,因为每个分类器的负类样本数量远多于正类样本。
分类器之间的决策边界可能不够精确。
OVO 是另一种将多类分类问题转化为多个二分类问题的方法。
对于有 个类别的分类问题,OVO 会训练 个二分类器。每个分类器负责区分一对类别。
训练阶段:
对于每一对类别 (),训练一个二分类器 。
分类器 的目标是将类别 的样本标记为正类,类别 的样本标记为负类。
预测阶段:
对于一个新的样本,使用所有 个分类器进行预测。
每个分类器 会投票给其中一个类别。
最终,选择得票最多的类别作为预测结果。
每个分类器只关注两个类别,避免了类别不平衡问题。
决策边界通常更加精确。
需要训练的分类器数量较多,计算量较大,尤其是当类别数量 很大时。
预测阶段的计算复杂度较高,因为需要运行大量的分类器。
特性 | OVR (One-vs-Rest) | OVO (One-vs-One) |
---|---|---|
分类器数量 | ||
训练复杂度 | 较低 | 较高 |
预测复杂度 | 较低 | 较高 |
类别不平衡问题 | 可能存在 | 较少存在 |
决策边界精确度 | 一般 | 较高 |
选择 OVR:当类别数量 较大时,OVR 的计算量较小,适合处理大规模数据集。
选择 OVO:当类别数量 较小时,OVO 可以提供更精确的决策边界,适合处理小规模数据集。