YOLOv10 自定义目标检测训练实战:预训练推理、数据集训练与结果验证

YOLOv10 自定义目标检测训练实战:预训练推理、数据集训练与结果验证


这篇教程根据我复现 YOLOv10 自定义目标检测训练流程时整理,重点演示源码安装、权重下载、预训练模型推理、自定义数据训练和模型预测可视化。

YOLOv10 的流程和 Ultralytics 生态接近,但安装方式、权重下载和 data.yaml 处理有自己的细节。本文适合作为 YOLOv10 自定义训练的快速模板。

本文会重点跑通以下流程:

  • 安装 YOLOv10 源码包与可视化依赖
  • 下载 COCO 预训练权重并运行单图推理
  • 从数据集后台获取 YOLO 格式数据集
  • 修正 data.yaml 并启动自定义训练
  • 查看训练曲线、混淆矩阵和自定义模型预测

如果你正在系统学习目标检测、实例分割、OCR、多目标跟踪或视觉大模型,建议收藏本文;配套 notebook、示例图片和运行环境说明后续会继续整理。如果环境配置卡住,可以在评论区说明具体报错。


⚙️ 环境准备

先检查 GPU 运行环境,并准备后续训练和推理依赖。建议优先使用 Colab GPU 或本地 NVIDIA GPU 环境。

!nvidia-smi
import os
HOME = os.getcwd()
print(HOME)

🧩 安装 YOLOv10

YOLOv10 需要从源码安装,同时安装可视化依赖。

!pip install -q git+https://github.com/THU-MIG/yolov10.git
!pip install -q supervision

⬇️ 下载预训练权重

先下载 COCO 预训练权重,后面用于基线推理和微调初始化。

!mkdir -p {HOME}/weights
!wget -P {HOME}/weights -q https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10n.pt
!wget -P {HOME}/weights -q https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10s.pt
!wget -P {HOME}/weights -q https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10m.pt
!wget -P {HOME}/weights -q https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10b.pt
!wget -P {HOME}/weights -q https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10x.pt
!wget -P {HOME}/weights -q https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10l.pt
!ls -lh {HOME}/weights

🖼️ 准备示例图片

示例图建议从数据集后台或本地资源中准备,路径保持和代码一致。

!mkdir -p {HOME}/data
# 请从数据集后台下载示例图片,保存为 {HOME}/data/dog.jpeg。
!ls -lh {HOME}/data

🔍 使用 COCO 预训练模型推理

先用命令行和 SDK 两种方式确认 YOLOv10 推理正常。

%cd {HOME}

!yolo task=detect mode=predict conf=0.25 save=True \
model={HOME}/weights/yolov10n.pt \
source={HOME}/data/dog.jpeg
%cd {HOME}

from IPython.display import Image

Image(filename='runs/detect/predict/dog.jpeg', height=600)

在这里插入图片描述

from ultralytics import YOLOv10

model = YOLOv10(f'{HOME}/weights/yolov10n.pt')
results = model(source=f'{HOME}/data/dog.jpeg', conf=0.25)
results[0].boxes.xyxy
results[0].boxes.conf
results[0].boxes.cls
import cv2
import supervision as sv
from ultralytics import YOLOv10

model = YOLOv10(f'{HOME}/weights/yolov10n.pt')
image = cv2.imread(f'{HOME}/data/dog.jpeg')
results = model(image)[0]
detections = sv.Detections.from_ultralytics(results)

bounding_box_annotator = sv.BoundingBoxAnnotator()
label_annotator = sv.LabelAnnotator()

annotated_image = bounding_box_annotator.annotate(
    scene=image, detections=detections)
annotated_image = label_annotator.annotate(
    scene=annotated_image, detections=detections)

sv.plot_image(annotated_image)

在这里插入图片描述

📦 从数据集后台获取 YOLO 数据集

导出 YOLO 格式数据后,检查 data.yaml 中 train、val、test 路径。

!mkdir -p {HOME}/datasets
%cd {HOME}/datasets

from types import SimpleNamespace

# 从数据集后台下载 YOLO 格式数据集后,修改 DATASET_DIR 指向解压目录。
DATASET_DIR = f"{HOME}/datasets/custom-dataset"  # 修改为数据集后台导出的数据集目录
dataset = SimpleNamespace(location=DATASET_DIR, version="1")
!sed -i '$d' {dataset.location}/data.yaml
!sed -i '$d' {dataset.location}/data.yaml
!sed -i '$d' {dataset.location}/data.yaml
!sed -i '$d' {dataset.location}/data.yaml
!echo -e "test: ../test/images\ntrain: ../train/images\nval: ../valid/images" >> {dataset.location}/data.yaml

🏋️ 自定义数据训练

使用预训练权重启动自定义数据训练,并保存训练曲线和权重。

%cd {HOME}

!yolo task=detect mode=train epochs=10 batch=32 plots=True \
model={HOME}/weights/yolov10n.pt \
data={dataset.location}/data.yaml
!ls {HOME}/runs/detect/train/
%cd {HOME}
Image(filename=f'{HOME}/runs/detect/train/confusion_matrix.png', width=600)

在这里插入图片描述

%cd {HOME}
Image(filename=f'{HOME}/runs/detect/train/results.png', width=600)

在这里插入图片描述

🧪 自定义模型推理

加载训练得到的 best.pt,在验证集图片上做可视化预测。

from ultralytics import YOLOv10

model = YOLOv10(f'{HOME}/runs/detect/train/weights/best.pt')

dataset = sv.DetectionDataset.from_yolo(
    images_directory_path=f"{dataset.location}/valid/images",
    annotations_directory_path=f"{dataset.location}/valid/labels",
    data_yaml_path=f"{dataset.location}/data.yaml"
)

bounding_box_annotator = sv.BoundingBoxAnnotator()
label_annotator = sv.LabelAnnotator()
import random

random_image = random.choice(list(dataset.images.keys()))
random_image = dataset.images[random_image]

results = model(source=random_image, conf=0.25)[0]
detections = sv.Detections.from_ultralytics(results)

annotated_image = bounding_box_annotator.annotate(
    scene=random_image, detections=detections)
annotated_image = label_annotator.annotate(
    scene=annotated_image, detections=detections)

sv.plot_image(annotated_image)

在这里插入图片描述

📤 部署说明

Notebook 原流程包含在线部署演示。这里保留本地模型路径,方便接入自己的部署流程。

# 可选:将训练得到的 best.pt 按自己的部署流程发布。
MODEL_DIR = f"{HOME}/runs/detect/train/"
MODEL_DIR

📌 小结

YOLOv10 自定义训练的关键是确认权重路径、data.yaml 路径和输出目录。先跑通预训练推理,再切换数据集训练,排错会更清晰。

这一类 notebook 建议按“先环境、再数据、再单样例、最后批量推理”的顺序复现。遇到报错时,优先检查 GPU、依赖版本、数据集目录和模型权重路径。

后续我会继续按源项目顺序整理同系列中的目标检测、实例分割、OCR、多目标跟踪和视觉大模型教程。

📚 同系列教程汇总

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值