YOLO目标检测实战:从环境配置到自定义模型训练完整指南

最近在尝试将YOLO模型应用到实际项目中时,很多开发者,尤其是刚接触计算机视觉的同学,常常会卡在第一步:环境配置。要么是CUDA版本不兼容,要么是依赖冲突,要么是数据集格式不对,网上资料虽然多,但往往零散不成体系,东拼西凑反而更容易出错。

本文旨在提供一个从零开始的、保姆级的YOLO系列实战教程。我们不只讲理论,更聚焦于“怎么做”。我会带你从最基础的Python环境搭建开始,一步步完成YOLO模型的安装、推理、训练,并最终在一个自定义数据集上完成一个完整的项目实战。无论你是想快速上手YOLO进行目标检测,还是希望为自己的项目(如车辆检测、行人识别、安全帽检测等)训练一个定制化模型,这篇文章都能为你提供一条清晰的路径。文中所有代码、命令和配置文件均可直接复制使用,并附带了常见问题的排查思路。

1. YOLO核心概念与演进脉络

在开始动手之前,我们需要对YOLO(You Only Look Once)有一个清晰的认识。它不仅仅是一个算法,更是一个在实时目标检测领域持续引领风潮的系列模型。

1.1 什么是YOLO?

YOLO是一种单阶段(one-stage)目标检测算法。与传统的两阶段检测器(如R-CNN系列)先提取候选区域再分类不同,YOLO将目标检测任务视为一个回归问题。它将输入图像划分为S×S的网格,每个网格负责预测中心落在该网格内的物体。每个预测框包含边界框坐标(x, y, w, h)、置信度(confidence)以及属于各个类别的概率。

核心优势

  • 速度快:因其单阶段特性,YOLO能够实现极高的推理速度,满足实时性要求(如视频流分析)。
  • 全局推理:对整张图像进行推理,上下文信息利用更充分,背景误检率相对较低。
  • 端到端训练:整个网络可以端到端地进行训练,简化了流程。

1.2 YOLO系列发展简史(v1-v13及以后)

理解YOLO的演进有助于我们选择适合的版本。这里我们梳理一个清晰的时间线和技术要点:

  • YOLOv1 (2016): 开山之作,提出了将检测视为回归问题的核心思想。但网格划分较粗,对小物体和密集物体检测效果一般。
  • YOLOv2 (YOLO9000, 2017): 引入批量归一化(Batch Normalization)、高分辨率分类器、Anchor Boxes、多尺度训练等,显著提升速度和精度。
  • YOLOv3 (2018): 里程碑式版本。采用Darknet-53骨干网络、多尺度预测(3种不同尺度的特征图)、更科学的Anchor Boxes聚类方法,在速度和精度上取得了很好的平衡,至今仍被广泛使用。
  • YOLOv4 (2020): 由Alexey Bochkovskiy等人发布,集成了当时多种先进的训练技巧,如Mosaic数据增强、CmBN、SAT自对抗训练等,被称为“工程集大成者”。
  • YOLOv5 (2020): 由Ultralytics公司发布并维护。注意:它并非YOLOv4的官方续作,但因其易用性(基于PyTorch,文档清晰,API友好)而迅速流行。它引入了自动锚框计算、灵活的模型架构(s, m, l, x)等。
  • YOLOv6 (2022): 由美团视觉智能部发布。专注于工业应用,在骨干网络、neck和head设计上进行了重新思考,追求更优的精度-速度权衡。
  • YOLOv7 (2022): 原作者团队(Chien-Yao Wang等)发布。提出了可训练的“bag-of-freebies”和“bag-of-specials”策略,在相同速度下精度达到新高度。
  • YOLOv8 (2023): 由Ultralytics发布,是YOLOv5的正式继承者。它提供了一个统一的框架,支持目标检测、实例分割、姿态估计、图像分类和OBB(定向边界框)五大任务。API更加简洁,是当前入门和部署的热门选择。
  • YOLOv9 / YOLOv10 / YOLOv11...: 社区和不同团队持续迭代的版本,各有侧重,如轻量化、大模型、端到端设计等。
  • YOLO by Ultralytics (YOLO26): Ultralytics团队持续维护的YOLO生态的最新版本,强调下一代实时视觉AI,提供了更先进的架构和工具链。

对于初学者和大多数应用场景,我强烈推荐从Ultralytics YOLOv8或最新的YOLO(由Ultralytics维护) 开始入门。原因如下:

  1. 生态完善:拥有最活跃的社区、最详细的文档和最多的教程资源。
  2. 易于使用:几行代码即可完成推理和训练,极大降低了入门门槛。
  3. 功能全面:支持检测、分割、分类、姿态估计等多种任务。
  4. 部署友好:支持导出为ONNX、TensorRT、OpenVINO等多种格式,方便部署到不同平台。

本文后续的实战也将主要围绕 Ultralytics YOLO 生态展开。

2. 环境准备与安装指南

一个干净、兼容的环境是成功的第一步。我们将使用 Conda 来管理 Python 环境,这是管理深度学习项目依赖的最佳实践,可以有效避免版本冲突。

2.1 基础环境搭建(Python & CUDA)

步骤1:安装 Miniconda/Anaconda如果你还没有安装 Conda,请先访问 Miniconda官网 或 Anaconda官网 下载并安装对应你操作系统的版本。安装完成后,打开终端(Windows 为 Anaconda Prompt 或 PowerShell)。

步骤2:创建并激活专属的 YOLO 环境我们创建一个名为yolo_env的 Python 3.9 环境(3.8-3.11 通常都兼容)。

# 创建环境 conda create -n yolo_env python=3.9 -y # 激活环境 conda activate yolo_env

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

步骤3:安装 PyTorch 与 CUDAUltralytics YOLO 基于 PyTorch。为了发挥 GPU 加速的优势,我们需要安装支持 CUDA 的 PyTorch。首先,请确认你的 NVIDIA 显卡驱动已安装,并且 CUDA 版本。可以通过nvidia-smi命令查看驱动版本和最高支持的 CUDA 版本。

访问 PyTorch 官网 ,根据你的 CUDA 版本选择安装命令。例如,如果你的 CUDA 版本是 11.8,可以运行:

# 使用 pip 安装 PyTorch (CUDA 11.8) pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

如果没有 GPU 或只想用 CPU,可以安装 CPU 版本:

pip install torch torchvision torchaudio

安装完成后,可以在 Python 中验证:

import torch print(torch.__version__) # 打印 PyTorch 版本 print(torch.cuda.is_available()) # 检查 CUDA 是否可用,返回 True 则成功

2.2 安装 Ultralytics YOLO

安装 Ultralytics 包非常简单,它包含了 YOLOv8 及后续版本的核心库。

pip install ultralytics

这个命令会自动安装 ultralytics 及其所有依赖(如 opencv-python, pillow, matplotlib, seaborn 等)。

为了验证安装,可以运行一个快速测试:

yolo checks

这个命令会检查环境配置,包括 CUDA、PyTorch 等。

2.3 可选:安装常用工具包

为了方便数据操作和可视化,我们还可以安装一些额外的包:

pip install numpy pandas opencv-python matplotlib seaborn jupyter notebook # 用于标注数据(可选) # pip install labelImg

至此,核心的 YOLO 开发环境已经准备就绪。

3. 快速上手:使用预训练模型进行推理

安装好环境后,最快体验 YOLO 能力的方式就是使用官方预训练模型对图片或视频进行推理。Ultralytics 的 API 设计得非常简洁。

3.1 图片推理

创建一个 Python 脚本,例如inference_image.py

# inference_image.py from ultralytics import YOLO import cv2 # 1. 加载一个预训练模型 # 模型会自动从 Ultralytics 的服务器下载 # 'yolo11n.pt' 是一个轻量级的检测模型 (nano版本),还有 s, m, l, x 等更大更精确的版本 model = YOLO('yolo11n.pt') # 你也可以尝试 'yolo11s.pt', 'yolo11m.pt' 等 # 2. 对单张图片进行推理 # `source` 可以是指向图片的路径,也可以是图片URL,或者是PIL/numpy数组 results = model('https://ultralytics.com/images/bus.jpg') # 使用网络图片示例 # 或者使用本地图片: results = model('path/to/your/image.jpg') # 3. 处理结果 for result in results: # 在图片上绘制检测框和标签 annotated_frame = result.plot() # 返回一个带标注的 numpy 数组 (BGR格式) # 显示图片 cv2.imshow('YOLO Inference', annotated_frame) cv2.waitKey(0) # 等待按键 cv2.destroyAllWindows() # 保存标注后的图片 cv2.imwrite('bus_detected.jpg', annotated_frame) print(f"结果已保存到 bus_detected.jpg") # 打印检测到的对象信息(可选) boxes = result.boxes # 边界框对象 if boxes is not None: print(f"检测到 {len(boxes)} 个对象:") for box in boxes: # 获取坐标、置信度、类别ID xyxy = box.xyxy[0].tolist() # 左上右下坐标 [x1, y1, x2, y2] conf = box.conf[0].item() # 置信度 cls = int(box.cls[0].item()) # 类别ID cls_name = result.names[cls] # 类别名称 print(f" - {cls_name}: 置信度 {conf:.2f}, 坐标 {xyxy}")

运行这个脚本,你会看到一张带有检测框的图片被显示并保存。yolo11n.pt模型可以检测 COCO 数据集中的 80 个常见类别,如人、车、狗等。

3.2 视频推理与实时摄像头检测

YOLO 的实时能力在视频流中更能体现。修改脚本进行视频推理:

# inference_video.py from ultralytics import YOLO import cv2 model = YOLO('yolo11n.pt') # 加载模型 # 方式1:处理视频文件 # results = model('path/to/your/video.mp4', save=True) # save=True 会保存结果视频 # print(f"处理完成,结果保存在 runs/detect/predict/") # 方式2:实时摄像头检测 cap = cv2.VideoCapture(0) # 0 代表默认摄像头 while cap.isOpened(): success, frame = cap.read() if not success: print("无法读取摄像头帧。") break # 在帧上运行 YOLO 推理 results = model(frame, verbose=False) # verbose=False 关闭详细日志 # 可视化结果 annotated_frame = results[0].plot() # 显示带标注的帧 cv2.imshow('YOLO Real-Time Detection', annotated_frame) # 按 'q' 退出 if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()

3.3 命令行接口(CLI)快速推理

除了 Python API,Ultralytics 还提供了强大的命令行工具,对于快速测试和批处理非常方便。

# 对单张图片进行推理并保存结果 yolo predict model=yolo11n.pt source='path/to/image.jpg' # 对视频进行推理 yolo predict model=yolo11n.pt source='path/to/video.mp4' # 使用摄像头进行实时推理 yolo predict model=yolo11n.pt source=0 show=True # 对目录下所有图片进行批处理 yolo predict model=yolo11n.pt source='path/to/images/folder/' # 指定置信度阈值和保存路径 yolo predict model=yolo11n.pt source='bus.jpg' conf=0.5 save=True project='my_results' name='exp1'

CLI 的参数非常丰富,可以通过yolo predict --help查看所有选项。

4. 深入实战:训练自定义目标检测模型

使用预训练模型很有趣,但真正的价值在于让模型识别我们关心的特定物体。接下来,我们将在一个自定义数据集上训练一个属于自己的 YOLO 模型。这里我们以构建一个简单的“安全帽检测”模型为例。

4.1 准备自定义数据集

数据集是模型训练的基石。YOLO 要求的数据集格式如下:

dataset/ ├── images/ │ ├── train/ │ │ ├── image1.jpg │ │ ├── image2.jpg │ │ └── ... │ └── val/ │ ├── image100.jpg │ ├── image101.jpg │ └── ... └── labels/ ├── train/ │ ├── image1.txt │ ├── image2.txt │ └── ... └── val/ ├── image100.txt ├── image101.txt └── ...

关键点

  • images/train/images/val/分别存放训练集和验证集的图片。
  • labels/train/labels/val/存放对应的标注文件,每个.txt文件与图片同名。
  • 标注文件格式:每一行代表一个物体,格式为class_id x_center y_center width height
    • class_id: 类别索引(从0开始)。
    • x_center, y_center, width, height: 边界框的中心点坐标和宽高,均已归一化到 [0, 1](即除以图片的宽和高)。

示例image1.txt内容

0 0.5 0.5 0.3 0.4 1 0.2 0.7 0.1 0.1

这表示图片中有两个物体,类别0和类别1。

如何获取数据集?

  1. 公开数据集:Roboflow, Kaggle, COCO 子集等网站提供了大量带标注的数据集,很多已支持 YOLO 格式。
  2. 自行标注:使用工具如labelImg,CVAT,Roboflow等对图片进行标注,并导出为 YOLO 格式。

为了本教程的完整性,我准备了一个微型示例数据集(包含“人”和“狗”两类,各约10张图片),你可以通过以下链接下载并解压,或者用你自己的数据集替换。(假设我们有一个示例数据集压缩包my_dataset.zip,解压后结构符合上述格式)

4.2 创建数据集配置文件(dataset.yaml)

YOLO 训练需要一个 YAML 文件来定义数据集的路径和类别信息。在数据集根目录(dataset/)的同级创建一个helmet_dataset.yaml文件(名字可自定):

# helmet_dataset.yaml path: /absolute/path/to/your/dataset # 数据集的根目录绝对路径 train: images/train # 训练集图片的相对路径(相对于 path) val: images/val # 验证集图片的相对路径 # 类别名称列表 names: 0: person 1: dog # 如果是安全帽检测,可能是: # 0: helmet # 1: head (未戴安全帽) # 2: person # 可选:下载地址/说明 # download: https://your-dataset-url.com/dataset.zip

重要:请务必将path修改为你本地数据集的实际绝对路径。

4.3 开始训练模型

有了数据集和配置文件,训练只需几行代码。创建一个train.py脚本:

# train.py from ultralytics import YOLO # 1. 加载一个预训练模型作为起点(迁移学习) # 使用预训练权重可以加速收敛并提升最终性能。'yolo11n.pt' 是基础模型。 model = YOLO('yolo11n.pt') # 2. 开始训练 results = model.train( data='helmet_dataset.yaml', # 数据集配置文件路径 epochs=50, # 训练轮数,根据数据集大小调整,小数据集可适当减少 imgsz=640, # 输入图片大小,通常是 640 的倍数 batch=16, # 批次大小,根据GPU内存调整 name='helmet_detection_v1', # 实验名称,结果会保存在 runs/detect/name 下 device='0', # 使用 GPU 0,如果是 CPU 则设为 'cpu' 或 None workers=4, # 数据加载的线程数 pretrained=True, # 使用预训练权重(默认就是 True) optimizer='auto', # 优化器,'SGD', 'Adam', 'AdamW', 'RMSProp' 或 'auto' lr0=0.01, # 初始学习率 lrf=0.01, # 最终学习率因子 (lr0 * lrf) momentum=0.937, # SGD 动量 weight_decay=0.0005, # 权重衰减 warmup_epochs=3.0, # 学习率预热轮数 box=7.5, # 边界框损失权重 cls=0.5, # 分类损失权重 dfl=1.5, # DFL 损失权重 save_period=10, # 每 N 轮保存一次检查点 resume=False, # 是否从上次保存的检查点恢复训练 amp=True, # 是否使用自动混合精度训练(节省显存,加速训练) ) print("训练完成!")

运行python train.py,训练就开始了。控制台会输出每一轮(epoch)的损失和评估指标。

训练过程监控: Ultralytics 在训练时会自动启动一个本地 Web 服务用于可视化。训练开始后,你会看到类似这样的输出:

TensorBoard: Start with 'tensorboard --logdir runs/detect', view at http://localhost:6006/

在浏览器中打开http://localhost:6006,你可以实时查看损失曲线、精度指标、验证图片的推理结果等,非常直观。

4.4 评估训练好的模型

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

我们可以使用验证集来评估模型的性能:

# evaluate.py from ultralytics import YOLO # 加载训练好的最佳模型 model = YOLO('runs/detect/helmet_detection_v1/weights/best.pt') # 在验证集上评估模型 metrics = model.val() # 默认会使用训练时 data 参数指定的验证集 # 你也可以指定新的数据 # metrics = model.val(data='new_dataset.yaml') print(metrics.box.map) # mAP50-95 print(metrics.box.map50) # mAP50 print(metrics.box.map75) # mAP75 print(metrics.box.maps) # 每个类别的 mAP50-95 列表

mAP(mean Average Precision) 是目标检测的核心评估指标,值越高代表模型性能越好。

4.5 使用自定义模型进行推理

现在,你可以像使用预训练模型一样,使用你自己训练的模型进行推理了:

# predict_custom.py from ultralytics import YOLO import cv2 # 加载自定义模型 model = YOLO('runs/detect/helmet_detection_v1/weights/best.pt') # 对新图片进行推理 results = model('new_image.jpg', conf=0.25) # conf 为置信度阈值 # 可视化并保存 for r in results: im_array = r.plot() # 绘制检测框 cv2.imwrite('predicted_new_image.jpg', im_array) print(f"预测结果已保存。检测到 {len(r.boxes)} 个对象。")

5. 模型导出与部署

训练好的模型通常需要部署到不同的平台(如服务器、移动端、边缘设备)。Ultralytics 提供了极其便捷的模型导出功能。

5.1 导出为不同格式

# export.py from ultralytics import YOLO model = YOLO('runs/detect/helmet_detection_v1/weights/best.pt') # 导出为 ONNX 格式(广泛支持的中间格式) success = model.export(format='onnx') # 导出为 best.onnx # 导出为 TensorRT 格式(NVIDIA GPU 高性能推理) # success = model.export(format='engine', imgsz=640, batch=1, device=0) # 导出为 OpenVINO 格式(Intel CPU/GPU 优化) # success = model.export(format='openvino') # 导出为 CoreML 格式(Apple 设备) # success = model.export(format='coreml') # 导出为 NCNN 格式(移动端高效推理) # success = model.export(format='ncnn')

导出的文件会保存在与输入模型相同的目录。ONNX 模型可以被 OpenCV DNN、ONNX Runtime 等多种推理引擎加载。

5.2 使用导出的 ONNX 模型进行推理(示例)

# inference_onnx.py import cv2 import numpy as np import onnxruntime as ort # 1. 加载 ONNX 模型和类别名称 onnx_model_path = 'runs/detect/helmet_detection_v1/weights/best.onnx' session = ort.InferenceSession(onnx_model_path) input_name = session.get_inputs()[0].name output_name = session.get_outputs()[0].name # 2. 预处理图片 img = cv2.imread('test_image.jpg') img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img_resized = cv2.resize(img_rgb, (640, 640)) img_normalized = img_resized.astype(np.float32) / 255.0 # 归一化 img_input = np.transpose(img_normalized, (2, 0, 1)) # HWC to CHW img_input = np.expand_dims(img_input, axis=0) # 添加 batch 维度 # 3. 推理 outputs = session.run([output_name], {input_name: img_input}) # outputs 的结构取决于 YOLO 版本,需要后处理(非极大值抑制等) print("ONNX 推理完成,输出 shape:", outputs[0].shape) # 注意:这里省略了复杂的后处理(解码边界框、NMS等)。 # 在实际部署中,建议使用 Ultralytics 提供的导出模型自带的预处理/后处理逻辑, # 或者使用专门的推理引擎(如 TensorRT, OpenVINO)的配套代码。

6. 常见问题与排查指南(FAQ)

在实际操作中,你可能会遇到一些问题。这里汇总了一些高频问题及其解决方案。

问题现象可能原因解决方案
ModuleNotFoundError: No module named 'ultralytics'Ultralytics 包未安装或不在当前 Python 环境。1. 确认已激活正确的 Conda 环境 (conda activate yolo_env)。
2. 重新安装:pip install ultralytics
CUDA out of memoryGPU 显存不足。1. 减小batch-size(训练时)或同时处理的图片数量(推理时)。
2. 使用更小的模型(如yolo11n而不是yolo11x)。
3. 尝试amp=True(混合精度训练)。
4. 清理不必要的 GPU 缓存。
训练时 Loss 为NaN学习率过高、数据有问题(如标注坐标超出 [0,1])、梯度爆炸。1. 降低学习率lr0(例如从 0.01 降到 0.001)。
2. 检查数据集标注格式是否正确,特别是归一化坐标。
3. 添加梯度裁剪 (gradient_clip_val=10)。
RuntimeError: Expected all tensors to be on the same device模型和数据不在同一个设备(CPU/GPU)。确保模型加载时指定了设备,且输入数据也转移到对应设备。使用model.to('cuda')data.to('cuda')
模型检测不到任何物体置信度阈值 (conf) 设置过高、模型未训练好、数据与训练数据差异过大。1. 降低推理时的conf参数(如model.predict(..., conf=0.1))。
2. 检查训练集和验证集的 mAP 是否正常。如果训练集 mAP 高但验证集低,可能是过拟合。
3. 确保推理图片与训练图片在场景、光照、尺度上没有巨大差异。
标注文件读取错误标注文件路径错误、格式错误、编码问题。1. 检查dataset.yaml中的path是否为绝对路径,且路径正确。
2. 打开一个.txt标注文件,检查格式是否为class_id x_center y_center width height,且数值在 [0,1] 之间。
3. 确保图片和标注文件一一对应,且文件名(不含后缀)一致。
训练速度非常慢使用了 CPU 训练、数据加载是瓶颈、硬盘速度慢。1. 确认device参数设置为 GPU(如device='0')。
2. 增加workers参数(但不要超过 CPU 核心数)。
3. 将数据集放到 SSD 上。
ImportError: libGL.so.1: cannot open shared object fileOpenCV 在 Linux 下缺少动态链接库。安装缺失的库:sudo apt-get update && sudo apt-get install libgl1-mesa-glx

7. 工程实践与进阶建议

掌握了基础流程后,要打造一个鲁棒、可用的目标检测系统,还需要关注以下工程实践。

7.1 数据集的构建与管理

  • 质量高于数量:1000张标注精准的图片远胜于10000张标注粗糙的图片。确保边界框紧密贴合物体,类别标签正确。
  • 数据多样性:尽可能覆盖目标物体在不同光照、角度、尺度、遮挡、背景下的情况。
  • 划分训练集、验证集、测试集:通常按 70:20:10 或 80:10:10 的比例划分。验证集用于调参,测试集用于最终评估,切勿用测试集参与任何训练或调参过程
  • 使用数据增强:YOLO 内置了强大的数据增强(Mosaic, MixUp, 随机翻转、色彩抖动等)。在model.train()中可以通过augment=True开启。对于小数据集,增强至关重要。

7.2 模型选择与超参数调优

  • 模型尺寸n(nano),s(small),m(medium),l(large),x(extra large)。尺寸越大,精度通常越高,但速度越慢,所需资源越多。根据你的硬件和应用场景权衡选择。
  • 学习率调度coslinear调度器是常见选择。lrf参数控制学习率衰减的最终比例。
  • 早停(Early Stopping):如果验证集指标在连续多个 epoch 内不再提升,可以提前停止训练,防止过拟合。Ultralytics 内置了早停逻辑(patience参数)。
  • 超参数调优:对于关键项目,可以使用 Ultralytics 内置的调优工具进行自动化超参数搜索。
    from ultralytics import YOLO model = YOLO('yolo11n.pt') model.tune(data='dataset.yaml', epochs=30, iterations=100, optimizer='AdamW')

7.3 模型评估与监控

  • 核心指标:重点关注mAP50-95 (mAP@.5:.95),它综合了不同 IoU 阈值下的精度,是 COCO 挑战赛的主要指标。mAP50对精度要求较低,mAP75要求更高。
  • 混淆矩阵:查看模型在哪些类别上容易混淆,有助于发现数据标注或类别定义的问题。
  • PR 曲线:精确率-召回率曲线,可以帮助你为不同任务选择合适的置信度阈值(高精度需求选高阈值,高召回需求选低阈值)。

7.4 部署优化

  • 模型量化:将模型权重从 FP32 转换为 INT8,可以大幅减少模型体积和提升推理速度,精度损失通常很小。TensorRT 和 OpenVINO 都支持量化。
  • 推理引擎选择
    • 服务器端 (NVIDIA GPU)TensorRT是性能最优的选择。
    • 服务器端 (Intel CPU/GPU)OpenVINO提供了很好的优化。
    • 移动端/嵌入式NCNN,MNN,TFLite是轻量级推理框架的常见选择。
    • 跨平台ONNX Runtime支持 CPU/GPU 且跨平台,是很好的折中方案。
  • 批处理(Batching):在服务器推理时,一次性处理多张图片(一个 batch)可以更充分地利用 GPU 并行计算能力,显著提高吞吐量。

7.5 持续学习与迭代

  • 主动学习:将模型在真实场景中难以判断的样本(低置信度、高不确定性)筛选出来,进行人工标注并加入训练集,可以高效地提升模型在困难场景下的性能。
  • 模型版本管理:使用工具(如 DVC, MLflow, WandB)记录每次实验的超参数、数据集版本、代码版本和模型性能,确保实验的可复现性。
  • 关注社区:Ultralytics 的 GitHub 仓库和 Discord 社区非常活跃,是获取最新信息、提问和寻找解决方案的好地方。

从环境搭建到自定义模型训练,再到模型导出和工程化思考,我们完成了一个完整的目标检测项目闭环。YOLO 的强大之处在于其将高性能的检测能力封装成了极其易用的接口,让开发者能够快速将想法落地。记住,在计算机视觉项目中,数据质量和工程细节往往比模型本身更重要。希望这篇教程能成为你探索 YOLO 和更广阔计算机视觉世界的一块坚实垫脚石。动手去尝试,修改参数,用自己的数据训练模型,你会在解决实际问题的过程中获得最宝贵的经验。如果在实践中遇到新的问题,欢迎在社区交流探讨。