YOLO目标检测实战入门:从零搭建环境到训练自定义模型

如果你刚接触目标检测,或者尝试过一些教程但总卡在环境配置、数据准备、训练报错这些环节,那么这篇文章就是为你准备的。很多教程默认你已经熟悉了深度学习的基础设施,但现实是,大部分开发者,尤其是学生和刚转行的工程师,往往在第一步就倒下了。你可能会遇到CUDA out of memoryNo module named 'ultralytics'、或者对着几百张图片不知道如何标注的困境。

这篇文章不会假设你已经是一个深度学习专家。相反,我们会从一个最实际的问题切入:如何用最少的时间、最少的配置,跑通一个属于自己的 YOLO 目标检测模型,并理解每一步在做什么?我们不会从 YOLOv1 的论文公式讲起,而是直接从当前最流行、生态最完善的 Ultralytics YOLO(特别是 YOLOv8/YOLO26)入手,因为对于绝大多数应用和初学者来说,这才是最高效的起点。

我们的核心判断是:学习 YOLO 的最佳路径不是按历史版本顺序,而是先掌握一个现代、活跃的框架(如 Ultralytics),跑通“安装-推理-训练-部署”的完整闭环,建立直观感受和信心,然后再去探究其背后的算法演进和原理细节。本文将严格遵循这条路径,提供一份可复现的保姆级指南。你将学到的不只是几行命令,而是包括环境避坑、数据准备、模型选择、训练调参和简单部署在内的完整工作流。读完本文,你应该能够独立完成一个自定义目标检测任务。

1. 这篇文章真正要解决的问题

很多关于 YOLO 的教程存在一个明显的断层:要么过于学术,大谈特谈损失函数和网络结构,但对如何运行第一行代码语焉不详;要么过于“傻瓜”,只给一个pip install ultralytics命令,一旦你的环境稍有不同(比如 Python 版本、CUDA 版本、操作系统),就会陷入无尽的报错深渊。

这篇文章要解决的核心问题是:为初学者和急于上手的开发者,提供一个从零开始、环境清晰、步骤完整、可一次性跑通的 YOLO 实战入门指南。我们聚焦于解决以下几个具体痛点:

  1. 环境配置的“玄学”问题:为什么别人的代码能跑,我的就报错?我们将提供一个纯净、可复现的环境搭建方案,并解释关键依赖(如 PyTorch、CUDA)的选择逻辑。
  2. “我该用哪个版本?”的困惑:YOLOv5, v8, v10, YOLO26… 版本眼花缭乱。本文将帮你理清 Ultralytics YOLO 的版本关系,并给出当前(2026年)的版本选择建议。
  3. 从“跑通Demo”到“训练自己的模型”的鸿沟:我们将用一个最简单的自定义数据集(例如,标注几种办公用品)为例,带你完整走完数据准备、格式转换、训练启动、效果验证的全过程。
  4. 训练过程中的“黑盒”感:训练时那些命令行输出到底是什么意思?损失降不下去怎么办?我们会解读关键训练日志和评估指标(如 mAP),让你知道模型在学什么,学得怎么样。
  5. “接下来我该怎么做?”的迷茫:模型训练好后,如何用它来检测新图片、视频,甚至部署到简单的 Web 服务?我们会给出下一步的明确方向。

本文的目标读者是:有一定 Python 基础,对深度学习和计算机视觉感兴趣,希望快速上手 YOLO 并应用于实际项目(如毕设、竞赛、产品原型)的开发者。我们将使用Ultralytics这个目前最主流的 YOLO 实现框架,因为它封装良好、文档齐全、社区活跃,极大降低了入门门槛。

2. 基础概念与核心原理:YOLO 到底在做什么?

在动手之前,我们需要建立最基础的概念共识。如果你已经了解,可以快速浏览。

目标检测(Object Detection)的任务是:给定一张图片,找出其中所有我们感兴趣的物体(目标),并用矩形框(Bounding Box)标出它们的位置,同时判断每个框内物体属于哪个类别(Class)。例如,在一张街景图中找出所有的“人”、“车”、“交通灯”。

YOLO(You Only Look Once)是一种目标检测算法,其核心思想是“一次看完”。与传统的两阶段检测器(先找候选区域,再分类)不同,YOLO 将输入图像划分成 S×S 的网格(Grid),每个网格负责预测中心点落在该网格内的目标。每个预测结果包含了边界框的位置(x, y, w, h)、置信度(Confidence)以及类别概率(Class Probabilities)。这种设计让 YOLO 速度极快,适合实时应用。

Ultralytics YOLO并非 YOLO 算法的官方实现,而是一个基于 PyTorch 的、功能极其丰富的开源项目。它实现了 YOLOv5, YOLOv8, YOLO26 等多个版本,并提供了统一的、易于使用的 API。你可以把它理解为一个“YOLO 全家桶”工具箱,涵盖了从训练、验证、预测到导出的全流程。我们选择它,正是因为其“开箱即用”的特性。

几个关键术语:

  • 边界框(Bounding Box):即检测框,用(中心点x, 中心点y, 宽度w, 高度h)表示,通常归一化到[0, 1]区间。
  • 置信度(Confidence):模型对当前框内包含目标且位置准确的把握程度。
  • 类别概率:模型判断框内物体属于各个类别的概率分布。
  • mAP(mean Average Precision):衡量检测模型精度的核心指标,值越高越好。简单理解,它综合了模型在不同置信度阈值下,对所有类别的检测准确率。
  • IoU(Intersection over Union):交并比,用于衡量预测框与真实框的重合程度。IoU 越高,定位越准。

对于初学者,你不需要深究 YOLO 网络每一层的细节。只需要记住:YOLO 是一个端到端的系统,你输入图片和标注,它输出带类别和置信度的框。Ultralytics 让调用这个系统变得像调用一个函数一样简单。

3. 环境准备与前置条件:打造一个稳定的实验环境

环境是最大的拦路虎。我们将创建一个独立的 Python 虚拟环境,并安装特定版本的 PyTorch 和 Ultralytics,以确保最高的成功率。

3.1 硬件与操作系统要求

  • 操作系统:Windows 10/11, Linux (Ubuntu 20.04/22.04 推荐), macOS。本文以Windows 11Ubuntu 22.04为例。
  • GPU(强烈推荐):NVIDIA GPU (GTX 1060 6G 或以上)。GPU 可以加速训练和推理数十倍。如果没有 GPU,也可使用 CPU,但速度会慢很多。
  • 内存:建议 16GB 或以上。
  • 磁盘空间:至少 10GB 可用空间,用于安装环境和数据集。

3.2 软件环境安装(分步详解)

第一步:安装 Python 和 Conda(管理环境)我们使用 Miniconda 来创建独立的 Python 环境,避免与系统其他 Python 项目冲突。

  1. 访问 Miniconda 官网 下载对应操作系统的安装包。
  2. 安装 Miniconda。在 Windows 上,安装时记得勾选 “Add Miniconda3 to my PATH environment variable”。在 Linux/macOS 上,使用 bash 脚本安装。
  3. 安装完成后,打开终端(Windows 用 Anaconda Prompt 或 PowerShell,Linux/macOS 用 Terminal)。

第二步:创建并激活虚拟环境

# 创建一个名为 `yolo_env` 的 Python 3.9 环境(3.9是一个兼容性很好的版本) conda create -n yolo_env python=3.9 -y # 激活环境 # Windows: conda activate yolo_env # Linux/macOS: # conda activate yolo_env (命令相同)

激活后,你的命令行提示符前应该会显示(yolo_env)

第三步:安装 PyTorch(核心深度学习框架)这是最关键也最容易出错的一步。请根据你的CUDA 版本选择安装命令。如果你不确定 CUDA 版本,在终端输入nvidia-smi查看。如果没装 CUDA 或没有 NVIDIA GPU,则安装 CPU 版本。

# 示例:CUDA 11.8 (常见于 RTX 30/40 系列显卡,驱动较新) # 访问 https://pytorch.org/get-started/locally/ 获取最新命令 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 示例:CUDA 12.1 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 # CPU 版本(无 GPU 或 Mac) pip install torch torchvision torchaudio

验证 PyTorch 和 CUDA

# 在 Python 交互环境中执行 import torch print(torch.__version__) # 输出 PyTorch 版本,如 2.3.0 print(torch.cuda.is_available()) # 输出 True 表示 GPU 可用,False 表示不可用 # 如果为 True,还可以查看 CUDA 版本和显卡信息 print(torch.cuda.get_device_name(0))

第四步:安装 Ultralytics YOLO在激活的yolo_env环境中,执行:

pip install ultralytics

这个命令会安装 Ultralytics 包及其所有依赖(如 opencv-python, matplotlib, pandas 等)。

第五步:验证安装

# 在终端中执行 yolo checks

这个命令会检查环境配置,包括 PyTorch、CUDA、Ultralytics 版本等。如果一切正常,你会看到类似Ultralytics YOLOv8.2.0 🚀 Python-3.9.18 torch-2.3.0 CUDA:0 (NVIDIA GeForce RTX 4090, 24210MiB)的输出。

至此,你的核心环境已经准备就绪。这个环境是后续所有操作的基础。

4. 核心流程拆解:从图片到检测结果的完整链路

现在,我们从一个最简单的任务开始:使用预训练模型对一张图片进行目标检测。这能让你在几分钟内看到 YOLO 的能力,建立正向反馈。

整个流程可以拆解为以下几步:

  1. 准备输入:找到一张包含常见物体(如人、狗、汽车)的图片。
  2. 加载模型:从 Ultralytics 服务器下载一个预训练好的模型权重文件(.pt)。
  3. 执行推理:让模型对图片进行分析。
  4. 解析结果:获取模型输出的检测框、类别和置信度。
  5. 可视化结果:将检测框和标签画在图片上,并保存或显示。

下面,我们用代码来实现这个流程。

5. 完整示例与代码实现:你的第一个 YOLO 检测程序

我们将创建一个 Python 脚本,完成上述所有步骤。请确保你在之前创建的yolo_env环境中操作。

5.1 示例代码:使用 YOLOv8n 进行图片检测

创建一个名为first_detection.py的文件,并输入以下内容:

# first_detection.py from ultralytics import YOLO import cv2 import matplotlib.pyplot as plt # 1. 加载一个预训练模型 # ‘yolo8n.pt’ 是 YOLOv8 的纳米(nano)版本,体积最小,速度最快,精度尚可,适合快速验证。 # 首次运行会自动从 Ultralytics 服务器下载模型文件。 model = YOLO('yolo8n.pt') # 你也可以尝试 'yolo8s.pt', 'yolo8m.pt' 等更大模型 # 2. 指定要检测的图片路径 # 这里我们使用 Ultralytics 自带的测试图片,你也可以替换成你自己的图片路径 image_path = 'https://ultralytics.com/images/bus.jpg' # 网络图片 # image_path = ‘./my_image.jpg’ # 本地图片 # 3. 执行推理 # `source` 指定输入源,可以是图片路径、URL、PIL图像、numpy数组等。 # `conf` 是置信度阈值,低于此值的检测结果将被过滤掉。0.25 是一个常用起始值。 # `save`=True 会将结果图片保存到 `runs/detect/predict` 目录下。 results = model(source=image_path, conf=0.25, save=True) # 4. 查看结果 # `results` 是一个列表,因为我们可以一次推理多张图片。这里我们只输入了一张。 for result in results: # 打印检测到的对象信息 print("检测到的对象:") for box in result.boxes: # 获取边界框坐标 (xyxy格式:左上角x,y, 右下角x,y) xyxy = box.xyxy[0].tolist() # 获取置信度 confidence = box.conf[0].item() # 获取类别ID和名称 class_id = int(box.cls[0].item()) class_name = result.names[class_id] print(f" 类别: {class_name}, 置信度: {confidence:.2f}, 位置: {xyxy}") # 5. 使用 OpenCV 显示结果图片(如果是在本地有GUI的环境) # 结果图片保存在 `result.save_dir` 指定的路径 result_img_path = result.save_dir / result.path.name print(f"\n结果图片已保存至: {result_img_path}") # 尝试用 OpenCV 读取并显示 try: result_img = cv2.imread(str(result_img_path)) # OpenCV 使用 BGR 格式,matplotlib 使用 RGB,需要转换 result_img_rgb = cv2.cvtColor(result_img, cv2.COLOR_BGR2RGB) plt.figure(figsize=(10, 6)) plt.imshow(result_img_rgb) plt.axis('off') # 不显示坐标轴 plt.title('YOLO Detection Result') plt.show() except Exception as e: print(f"无法显示图片,可能处于无GUI环境。错误信息: {e}") print("请直接查看保存的图片文件。") print("\n推理完成!")

5.2 代码详解与运行

  1. 模型选择YOLO('yolo8n.pt')加载的是 YOLOv8 的纳米模型。这是速度和精度的平衡点。yolo8s(小)、yolo8m(中)、yolo8l(大)、yolo8x(超大)模型更大更准,但也更慢。初次体验建议用ns
  2. 自动下载:第一次运行这行代码时,会自动下载yolo8n.pt模型文件(约 6MB),保存到本地缓存中,下次无需再下载。
  3. 推理参数conf=0.25是置信度阈值。你可以调高(如 0.5)来获得更少但更可靠的检测框,或调低(如 0.1)来检测更多可能的目标(但假阳性也会增多)。
  4. 结果保存save=True会让 Ultralytics 将带检测框的图片保存到runs/detect/predict目录下,并按运行次数自动创建子文件夹(如predict1,predict2)。

运行脚本: 在终端中,确保处于yolo_env环境,并切换到脚本所在目录,然后运行:

python first_detection.py

如果网络通畅,你会看到下载进度条,然后程序开始推理。最终,你会在终端看到打印的检测信息,并且图片会显示出来(如果环境支持 GUI),同时图片文件会保存在runs/detect/predict*/bus.jpg

恭喜!你已经完成了第一次 YOLO 目标检测。这个过程几乎不需要你理解任何底层细节,这就是现代框架的强大之处。

6. 运行结果与效果验证

运行上面的脚本后,你应该在终端看到类似以下的输出:

Ultralytics YOLOv8.2.0 🚀 Python-3.9.18 torch-2.3.0 CUDA:0 (NVIDIA GeForce RTX 4090, 24210MiB) YOLOv8n summary (fused): 168 layers, 3151904 parameters, 0 gradients, 8.7 GFLOPs image 1/1 /tmp/.../bus.jpg: 640x480 4 persons, 1 bus, 1 stop sign, 7.3ms Speed: 0.5ms preprocess, 7.3ms inference, 1.2ms postprocess per image at shape (1, 3, 640, 480) 检测到的对象: 类别: person, 置信度: 0.89, 位置: [100.5, 200.3, 150.7, 350.9] 类别: person, 置信度: 0.85, 位置: [300.1, 180.5, 380.9, 400.2] ... 结果图片已保存至: runs/detect/predict2/bus.jpg 推理完成!

如何验证成功?

  1. 查看终端输出YOLOv8n summary行显示模型加载成功。image 1/1 ...行显示了检测到的物体类别和数量,以及推理时间。这证明模型工作正常。
  2. 查看生成的图片:找到runs/detect/predict*/bus.jpg文件并打开。你应该能看到原图上画出了彩色的检测框,并标注了类别和置信度。
  3. 检查检测结果合理性:观察检测框是否准确地框住了物体(如人、公交车),以及置信度是否较高(通常 >0.5 可以认为是可靠的)。

如果运行失败,第一步排查什么?

  • 网络问题:首次运行需要下载模型。如果卡在下载,请检查网络连接,或尝试手动下载模型文件放到当前目录。
  • CUDA 不可用:如果torch.cuda.is_available()返回False,但你有 NVIDIA GPU,请检查 CUDA 和 PyTorch 版本是否匹配。可以尝试重新安装对应 CUDA 版本的 PyTorch。
  • 模块导入错误:确保在正确的 Conda 环境 (yolo_env) 中运行,并且已成功安装ultralytics
  • 图片路径错误:如果使用本地图片,确保路径正确,且图片文件存在。

7. 迈向实战:训练你自己的自定义检测模型

使用预训练模型检测已知类别(COCO 数据集包含的80类)很简单。但 YOLO 的真正威力在于能够学习识别任何你感兴趣的物体。接下来,我们学习如何准备数据并训练一个自定义模型。

7.1 准备自定义数据集

这是训练过程中最耗时但也最重要的一步。数据格式必须正确。Ultralytics YOLO 要求的数据集格式如下:

datasets/ └── my_custom_dataset/ ├── images/ │ ├── train/ │ │ ├── image1.jpg │ │ ├── image2.jpg │ │ └── ... │ └── val/ │ ├── image100.jpg │ └── ... └── labels/ ├── train/ │ ├── image1.txt │ ├── image2.txt │ └── ... └── val/ ├── image100.txt └── ...
  • images/train/images/val/分别存放训练集和验证集的图片。
  • labels/train/labels/val/存放对应的标注文件,每个.txt文件与图片同名。
  • 每个标注文件.txt的每一行代表一个目标,格式为:<class_id> <x_center> <y_center> <width> <height>
    • class_id是类别索引(从0开始)。
    • x_center, y_center, width, height是边界框中心点的 x, y 坐标以及框的宽和高,这些值都经过了归一化(即除以图片的宽度和高度),范围在 0 到 1 之间。

如何获得标注文件?对于小规模数据集,可以使用标注工具手动标注,推荐:

  • LabelImg:开源,支持 Pascal VOC 和 YOLO 格式。
  • Roboflow:在线平台,提供标注、版本管理和数据增强功能,对新手友好(有免费额度)。
  • CVAT:功能强大的开源在线标注工具。

假设我们想训练一个检测“键盘”和“鼠标”的模型。我们收集了 100 张包含键盘和鼠标的图片,用 LabelImg 标注后,将图片和对应的.txt文件按上述目录结构整理好。

7.2 创建数据集配置文件

我们需要一个 YAML 文件来告诉 YOLO 数据集在哪里,以及有哪些类别。 创建一个名为my_dataset.yaml的文件,内容如下:

# my_dataset.yaml # 数据集根目录路径(相对于此YAML文件,或绝对路径) path: ./datasets/my_custom_dataset # 训练集图片路径(相对于`path`) train: images/train # 验证集图片路径(相对于`path`) val: images/val # 测试集图片路径(可选) # test: images/test # 类别数量 nc: 2 # 类别名称列表,顺序必须与标注文件中的 class_id 对应 names: ['keyboard', 'mouse'] # 可选:下载地址/说明 # download: https://...

7.3 启动训练

准备好数据和配置文件后,训练只需几行代码。创建一个train_custom.py脚本:

# train_custom.py from ultralytics import YOLO # 1. 加载一个预训练模型作为起点(迁移学习) # 使用预训练权重可以大大加快收敛速度,提高最终精度。 model = YOLO('yolo8n.pt') # 同样,可以从 nano 模型开始 # 2. 开始训练 # `data`: 数据集配置文件的路径 # `epochs`: 训练轮数。对于小数据集,100-300 轮可能足够。 # `imgsz`: 输入图片的大小。YOLO 会统一缩放到此尺寸。640 是常用尺寸,平衡速度和精度。 # `batch`: 批次大小。根据你的 GPU 内存调整。如果内存不足,减小此值(如 -1 表示自动调整)。 # `name`: 给本次训练任务起个名字,结果会保存在 `runs/detect/{name}` 下。 # `device`: 指定训练设备。‘0’ 表示第一块 GPU,‘cpu’ 表示使用 CPU。 results = model.train( data='./my_dataset.yaml', epochs=100, imgsz=640, batch=16, name='my_keyboard_mouse_v1', device='0' # 或 ‘cpu’ ) print("训练完成!")

关键参数解释

  • epochs:整个数据集被遍历的次数。太少可能学不好,太多可能导致过拟合。可以从 100 开始尝试。
  • imgsz:模型输入的固定尺寸。更大的尺寸(如 1280)可能提升小物体检测精度,但会显著增加计算量和内存消耗。
  • batch:一次迭代中用于更新模型权重的样本数量。GPU 内存越大,可以设置的 batch 越大。如果出现CUDA out of memory错误,首先尝试减小batch
  • device:如果你的机器有多块 GPU,可以指定device=[0,1]来使用多卡训练。

运行训练脚本:

python train_custom.py

训练开始后,终端会显示一个进度条,并实时输出各项损失(box_loss, cls_loss, dfl_loss)和评估指标(mAP50, mAP50-95)。训练过程的所有信息(模型权重、日志、图表)都会保存在runs/detect/my_keyboard_mouse_v1/目录下。

7.4 使用训练好的模型进行推理

训练完成后,最好的模型权重会自动保存在runs/detect/my_keyboard_mouse_v1/weights/best.pt。我们可以用它来检测新的图片。

# inference_custom.py from ultralytics import YOLO # 加载我们刚刚训练好的最佳模型 model = YOLO('runs/detect/my_keyboard_mouse_v1/weights/best.pt') # 对新图片进行推理 results = model('path/to/your/new_image.jpg', save=True, conf=0.5) # 也可以对视频或摄像头进行实时检测 # results = model(source=0, show=True, conf=0.5) # source=0 表示使用默认摄像头

现在,你的模型就学会了识别“键盘”和“鼠标”!

8. 常见问题与排查思路

在实践过程中,你几乎一定会遇到一些问题。下表列出了最常见的问题及其解决方法:

问题现象可能原因排查方式解决方案
ModuleNotFoundError: No module named ‘ultralytics’未在正确的 Python 环境中安装 ultralytics,或安装失败。在终端输入 `pip listgrep ultralytics查看是否安装。确认当前终端激活的环境是yolo_env`。
CUDA out of memoryGPU 内存不足。通常是batch大小或imgsz设置过大。运行nvidia-smi查看 GPU 内存使用情况。1. 减小batch参数(如从 16 降到 8)。
2. 减小imgsz(如从 640 降到 320)。
3. 在model.train()中设置workers=0以减少数据加载线程。
torch.cuda.is_available()返回FalsePyTorch 未安装 GPU 版本,或 CUDA 版本不匹配,或驱动问题。检查 PyTorch 版本:print(torch.__version__)。检查 CUDA 版本:nvidia-smi顶部显示的是驱动支持的最高CUDA版本,nvcc --version显示的是安装的CUDA工具包版本。1. 根据你的 CUDA 版本,从 PyTorch 官网 获取正确的安装命令重装。
2. 更新 NVIDIA 显卡驱动。
训练时损失(loss)不下降或为 NaN学习率过高、数据标注有误、数据量太少、类别不平衡。1. 检查训练日志开头的数据集加载信息,确认图片和标签数量正确。
2. 可视化几张训练图片和标签,看标注框是否合理。
1. 尝试降低学习率(在model.train()中添加参数lr0=0.01调小)。
2. 仔细检查数据集,修正错误的标注。
3. 增加数据量或使用数据增强。
4. 对于 NaN,可以尝试梯度裁剪(clip_grad=10.0)。
模型检测不到目标或精度很低(mAP很低)数据量不足、数据质量差、类别定义模糊、训练轮数不够、模型容量太小。1. 在验证集上运行模型,查看预测结果。
2. 分析混淆矩阵(训练后会在runs目录生成)。
1. 收集更多、更多样化的数据。
2. 提高标注质量,确保边界框紧密贴合物体。
3. 增加训练轮数epochs
4. 换用更大的模型(如从yolo8n.pt换成yolo8s.pt)。
5. 使用数据增强(Ultralytics 默认已开启)。
推理速度很慢模型太大、imgsz太大、在 CPU 上运行。使用yolo checks确认是否在使用 GPU 推理。1. 换用更小的模型(如yolo8n.pt)。
2. 减小推理时的图片尺寸(imgsz=320)。
3. 确保使用 GPU(device=‘0’)。
4. 将模型导出为 TensorRT 或 ONNX 等优化格式进行部署。
标注文件格式错误.txt文件中的坐标未归一化,或格式不符合<cls> <x_center> <y_center> <width> <height>随机打开一个.txt文件检查。坐标值应在 0~1 之间。使用正确的标注工具(如 LabelImg 并选择 YOLO 格式)导出。手动检查并修正格式。

9. 最佳实践与工程建议

当你成功跑通第一个自定义模型后,以下建议可以帮助你走向更专业、更稳定的项目。

  1. 数据是王道

    • 质量高于数量:100张标注精准的图片,远胜于1000张标注粗糙的图片。确保边界框紧贴物体,类别标签正确。
    • 数据多样性:训练集应尽可能覆盖目标物体可能出现的各种场景、光照、角度、尺度和遮挡情况。
    • 划分训练集、验证集、测试集:通常按 70:20:10 或 80:10:10 的比例划分。验证集用于训练时调参,测试集用于最终评估,切勿用测试集参与任何训练或调参过程
  2. 从预训练模型开始(迁移学习)

    • 永远不要从零开始训练(随机初始化权重)。使用在 COCO 等大型数据集上预训练的模型(如yolo8n.pt)作为起点,可以极大提升收敛速度和最终精度。
  3. 超参数调优

    • Ultralytics YOLO 提供了合理的默认超参数。对于大多数项目,你只需要关注epochs,imgsz,batch,lr0(初始学习率)。
    • 可以使用model.tune()方法进行超参数搜索,但这需要大量计算资源。对于初学者,手动微调几个关键参数即可。
  4. 监控训练过程

    • 训练时,Ultralytics 会实时在终端输出指标,并生成丰富的可视化结果保存在runs/detect/exp*/目录下。
    • 重点关注results.csv(所有指标日志)、confusion_matrix.png(混淆矩阵)、results.png(损失和指标曲线)。这些图表能帮你判断模型是否过拟合、欠拟合。
  5. 模型选择与权衡

    • n(nano),s(small),m(medium),l(large),x(extra large) 模型在参数量、速度和精度上依次递增。
    • 移动端/边缘设备:优先选择n,s
    • 服务器端/追求精度:可以考虑m,l
    • 实际选择:先用sm做实验,根据精度和速度需求决定是否换用更大或更小模型。
  6. 模型导出与部署

    • 训练好的.pt模型可以直接用于 Python 推理。但对于生产环境,通常需要导出为更高效的格式。
    • ONNX:通用交换格式,支持多种推理引擎(如 OpenVINO, TensorRT)。
    • TensorRT:NVIDIA GPU 上的极致优化,速度最快。
    • CoreML:苹果设备(iOS/macOS)部署。
    • OpenVINO:英特尔 CPU/GPU 部署。
    • 使用model.export(format=‘onnx’)即可轻松导出。
  7. 版本控制与复现性

    • 记录每次实验的关键配置:数据集版本、模型结构、超参数、环境(PyTorch, CUDA 版本)。可以使用yolo cfg命令导出训练配置。
    • 考虑使用Docker来固化整个环境,确保在任何机器上都能复现结果。

通过遵循上述流程和最佳实践,你不仅能够快速上手 YOLO 目标检测,更能建立起一个稳健的计算机视觉项目开发基础。从环境搭建到自定义训练,再到问题排查和优化,这条路径覆盖了绝大多数初学者和中级开发者的核心需求。记住,动手实践和迭代优化是学习深度学习最快的方式。现在,你可以尝试用你自己的图片和数据,去训练一个识别特定物体的模型了。