YOLOv8 目标检测

FreeGuideOnline 最新 2026-07-10

bash pip install ultralytics


如果希望利用 GPU 加速(强烈推荐),请确保已安装 CUDA 和对应的 PyTorch 版本。你可以通过以下命令快速检查环境:

```python
import torch
print(torch.cuda.is_available())  # 应输出 True

验证安装

安装完成后,在终端运行以下命令,如果能正常输出模型信息,即表示安装成功:

yolo predict model=yolov8n.pt source='https://ultralytics.com/images/bus.jpg'

该命令会自动下载最小规模的 yolov8n 模型,并对示例图片进行目标检测,结果保存在 runs/detect/predict 目录中。

快速上手:直接用预训练模型推理

无需任何训练,你就能立即使用 YOLOv8 对图像或视频进行检测。这里介绍两种方式:命令行和 Python 脚本。

命令行推理

处理单张图片:

yolo detect predict model=yolov8n.pt source='path/to/your/image.jpg'

处理视频文件:

yolo detect predict model=yolov8n.pt source='path/to/video.mp4'

使用摄像头实时检测:

yolo detect predict model=yolov8n.pt source=0

参数说明:

  • model:指定预训练模型,可选 yolov8n.pt, yolov8s.pt, yolov8m.pt, yolov8l.pt, yolov8x.pt,首次使用会自动下载。
  • source:输入源,可以是图片、视频、目录、YouTube 链接或摄像头索引。

Python API 推理

from ultralytics import YOLO

# 加载预训练模型
model = YOLO("yolov8n.pt")

# 对单张图片进行推理
results = model("bus.jpg")

# 显示结果
results[0].show()  # 弹出窗口显示检测结果

# 保存结果到文件
results[0].save("output.jpg")

results 是一个列表,包含每张输入图片的检测结果,可以通过 boxes 属性获取边界框、类别、置信度等信息。

准备自定义数据集

在实际项目中,我们通常需要训练自己的数据。YOLOv8 支持多种标注格式,最常用的是 YOLO 格式:每张图片对应一个同名的 .txt 文件,每行代表一个目标,格式为 class_id x_center y_center width height(归一化坐标)。

目录结构

数据集应按以下结构组织:

datasets/
└── my_data/
    ├── images/
    │   ├── train/
    │   │   ├── img1.jpg
    │   │   └── ...
    │   └── val/
    │       ├── img101.jpg
    │       └── ...
    └── labels/
        ├── train/
        │   ├── img1.txt
        │   └── ...
        └── val/
            ├── img101.txt
            └── ...

创建数据配置文件

新建一个 my_data.yaml 文件,内容如下:

path: ../datasets/my_data  # 数据集根目录
train: images/train         # 训练集图片相对路径
val: images/val             # 验证集图片相对路径

# 类别名称
names:
  0: person
  1: bicycle
  2: car
  ...

请根据你的实际类别数量修改 names 列表,从 0 开始编号。

标注工具推荐

  • LabelImg:简单易用的矩形框标注工具,支持导出 YOLO 格式。
  • CVAT:功能强大的在线标注平台,适合团队协作。
  • Roboflow:提供标注、预处理和管理数据集的全流程服务,可直接导出 YOLOv8 格式。

训练自定义模型

准备好数据集后,训练只需一条命令或几行 Python 代码。

命令行训练

yolo detect train data=my_data.yaml model=yolov8n.pt epochs=100 imgsz=640

常用参数:

  • data:数据配置文件的路径。
  • model:预训练模型权重(推荐从预训练开始迁移学习)或模型配置文件。
  • epochs:训练的轮数。
  • imgsz:输入图片的尺寸,默认为 640。
  • batch:批量大小,根据 GPU 显存调整(默认 16)。
  • device:指定训练设备,例如 0 表示第一块 GPU,cpu 表示使用 CPU。
  • project / name:分别指定结果保存的目录和实验名称。

训练过程会自动保存最佳模型、最后模型以及各种日志曲线在 runs/detect/train 目录下。

Python 训练脚本

from ultralytics import YOLO

# 加载预训练模型
model = YOLO("yolov8n.pt")

# 开始训练
results = model.train(
    data="my_data.yaml",
    epochs=100,
    imgsz=640,
    batch=16,
    device=0
)

训练完成后,模型权重保存在 runs/detect/train/weights/ 下,best.pt 是验证集上表现最好的权重,last.pt 是最后一轮权重。

训练日志与可视化

Ultralytics 会自动生成 TensorBoard 日志和大量曲线,你可以启动 TensorBoard 查看:

tensorboard --logdir runs/detect/train

主要关注 mAP50, mAP50-95, box_loss, cls_loss 等指标,确认模型是否收敛。

评估与验证模型

对训练好的模型进行评估,能够了解其在测试集或验证集上的具体性能。

命令行评估

yolo detect val model=path/to/best.pt data=my_data.yaml

这将输出精确率、召回率、mAP 等详细指标,并在 runs/detect/val 中生成混淆矩阵、PR 曲线等图表。

Python 评估脚本

from ultralytics import YOLO

model = YOLO("runs/detect/train/weights/best.pt")
metrics = model.val(data="my_data.yaml")
print(metrics.box.map)     # mAP50-95
print(metrics.box.map50)   # mAP50

模型推理与部署

训练好的模型可以用于检测新图像、视频或摄像头流,使用方法与预训练模型完全一致。

model = YOLO("runs/detect/train/weights/best.pt")
results = model("test_image.jpg", save=True, conf=0.25)
  • save=True 将检测结果图片保存到 runs/detect/predict
  • conf 调整置信度阈值,过滤掉低置信度框。

如果要批量处理文件夹中所有图片:

yolo detect predict model=best.pt source='path/to/image_folder/'

导出模型格式

YOLOv8 支持将模型导出为多种推理格式,以便部署到不同平台。

yolo export model=best.pt format=onnx  # 导出 ONNX 格式

支持的格式包括 TorchScript, ONNX, OpenVINO, TensorRT, CoreML, TFLite 等。只需修改 format 参数即可。

导出后可以集成到自己的应用程序中,使用 ONNX Runtime 或 OpenCV DNN 等后端进行高效推理。

进阶技巧与调优

调整检测参数

在推理时,可以通过以下参数优化结果:

  • iou:NMS 的 IoU 阈值,默认 0.7,增大可获得更多重叠框,减小则抑制更强。
  • max_det:每张图最多检测目标数。
  • classes:仅检测指定类别,例如 classes=[0,2] 只检测人和汽车。

超参数进化

YOLOv8 提供了自动超参数优化功能,能够在验证集上搜索更优的学习率、数据增强等参数组合。

yolo detect tune data=my_data.yaml model=yolov8n.pt epochs=30 iterations=300

数据增强

YOLOv8 默认启用了丰富的在线数据增强,包括 Mosaic、MixUp、HSV 抖动等,这些可以在配置文件或代码中调整,以适应小样本或特定场景。

解决小目标和遮挡问题

  • 使用更高输入分辨率(如 imgsz=1280)。
  • 尝试较大的模型容量(如 yolov8l.pt 或 yolov8x.pt)。
  • 加入更多包含小目标的训练样本,或开启 copy-paste 增强。

常见问题与故障排除

Q: 训练时出现 “CUDA out of memory” 错误怎么办?

A: 减小 batch 大小,或降低 imgsz (如 320),还可以在 train 参数中设置 amp=False 关闭混合精度(牺牲速度节省显存)。

Q: 标注文件格式不正确导致训练失败?

A: 检查标签文件是否采用归一化坐标,且每一行只有 5 个数值。可以利用 YOLOv8 的数据集检查功能:

from ultralytics.data.utils import check_det_dataset
check_det_dataset("my_data.yaml")