Technology

Ultralytics YOLO 学习笔记:目标检测框架使用与开发指南

4 分钟阅读34 次浏览

Ultralytics YOLO 学习笔记:从训练到部署

Ultralytics YOLO 是当前最流行的端到端计算机视觉框架之一,支持检测、分割、分类、姿态估计、跟踪等任务。
本文基于 ultralytics 8.3.87 整理,代码位于 E:\2512workspace\jiandu\模型\ultralytics-main++

1. 框架概述

Ultralytics YOLO 由 Ultralytics 团队开发,可一行命令完成训练、预测和验证。主要特点:

  • 多任务支持:目标检测 (detect)、实例分割 (segment)、图像分类 (classify)、姿态估计 (pose)、旋转框检测 (obb)、多目标跟踪 (track)、开放词汇检测 (YOLOWorld)
  • 丰富的预训练模型:内置 YOLOv3/v5/v8/v9/v10、YOLO11、RT-DETR、SAM 等权重
  • 一键导出部署:支持 ONNX、TensorRT、OpenVINO、TFLite 等十几种格式

⚠️ 当前副本已添加自定义模块(MLLA、AKconv、AFPN4Head、DCBv3Head、DWConvHead 等)及自定义数据集配置(Deepjiandu.yamlmycoco8.yaml),修改代码时请注意保留这些文件。

2. 代码结构

核心包位于 ultralytics/,主要目录如下:

路径作用
ultralytics/nn/模型定义modules/ 实现各层(Conv、C2f、Detect、自定义模块),tasks.py 将 YAML 解析成网络
ultralytics/models/yolo/各任务的训练器/验证器/预测器(detect/segment/pose/obb/classify)
ultralytics/engine/通用引擎:训练、预测、验证、导出(trainer.py/predictor.py/validator.py/exporter.py)
ultralytics/data/数据加载与增强(dataset.py/augment.py)
ultralytics/cfg/配置default.yaml(所有超参默认值)、models/(模型结构 yaml)、datasets/(数据集 yaml)
ultralytics/utils/工具函数
ultralytics/trackers/目标跟踪(ByteTrack、BoT-SORT)
tests/ docs/ examples/测试、文档、部署示例

3. 模型结构

YOLO 模型通过 YAML 文本描述 + 代码解析 定义,直观可读:

  • 配置文件示例:ultralytics/cfg/models/v8/yolov8.yaml
    • nc:类别数
    • scales:n/s/m/l/x 各规格的缩放系数(depth 深度、width 宽度),同一份 yaml 即可生成 5 个不同大小的模型
    • backbone / head:逐层列出结构,每行格式为 [来自哪层, 重复次数, 模块名, 参数]

底层模块实现在:

  • conv.py:Conv、DWConv
  • block.py:C2f、Bottleneck
  • head.py:Detect、Segment、Pose 检测头
  • 自定义模块(如 DCBv3Head、AKconv)位于 ultralytics/nn/modules/

ultralytics/nn/tasks.py 中的 DetectionModel 等类负责解析 YAML 并组装网络。

4. 数据集准备

YOLO 数据集格式如下(自行标注时必须遵循):

你的数据集/
  images/
    train/  *.jpg
    val/    *.jpg
  labels/
    train/  *.txt   # 每行: 类别id 中心x 中心y 宽 高(归一化至0~1)
    val/    *.txt

再编写数据集 YAML 文件(参考 ultralytics/cfg/datasets/mycoco8.yaml):

path: ../datasets/mycoco1    # 数据集根目录
train: images/train2017      # 训练集相对路径
val: images/train2017        # 验证集相对路径
names:                       # 类别名(下标从 0 开始)
  0: person
  1: bicycle

标注工具可选 LabelImg、Roboflow、CVAT,导出为 YOLO 格式即可。

5. 训练

# 命令行(推荐)
yolo train data=你的数据.yaml model=yolov8n.pt epochs=100 imgsz=640 batch=16

# Python API
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
model.train(data="你的数据.yaml", epochs=100, imgsz=640)
  • model 参数:
    • 使用 .pt 预训练权重 → 微调(推荐,效果好、收敛快)
    • 使用 .yaml 模型定义 → 从头训练(需要大显存和大数据量)

常用超参数:

  • epochs:训练轮数
  • batch:批大小
  • imgsz:输入尺寸
  • device:显卡编号(如 device=0
  • lr0:初始学习率
  • optimizer:优化器(SGD/Adam/AdamW)
  • cos_lr:是否启用余弦退火学习率
  • workers:数据加载线程数

训练结果(权重 best.pt、曲线图等)自动保存至 runs/detect/train/

6. 测试与推理

# 预测(支持图片、视频、摄像头、文件夹)
yolo predict model=best.pt source='test.jpg'
yolo predict model=best.pt source='video.mp4' show=True
yolo predict model=best.pt source=0        # 摄像头

# 验证精度(计算 mAP 等指标)
yolo val model=runs/detect/train/weights/best.pt data=你的数据.yaml

Python API 读取结果:

results = model.predict("test.jpg")
for r in results:
    print(r.boxes)       # 检测框
    print(r.boxes.conf)  # 置信度
    print(r.boxes.cls)   # 类别

7. 修改指南

7.1 简单修改:调整模型结构

  1. 复制一份 YAML 配置文件(如 yolov8.yaml
  2. 修改 nc 为你的类别数
  3. 增删 backbone/head 中的层(修改模块名、重复次数、通道数)
  4. 使用 YOLO("my_model.yaml") 从头训练

7.2 进阶修改:添加自定义模块

  1. ultralytics/nn/modules/ 中编写新层代码
  2. ultralytics/nn/tasks.pyimport 并注册
  3. 在 YAML 中直接引用模块名(本仓库已有的 DCBv3Head、AKconv 等即为示范)

7.3 调整训练默认参数

  • 命令行传参或直接编辑 ultralytics/cfg/default.yaml

常见坑点:

  • 类别数不对 → 同时修改 YAML 的 nc 和数据集 YAML 的 names,两者必须一致
  • 小模型跑不动 → 换 n/s 规格或减小 imgsz

8. 环境依赖

基础安装:

pip install ultralytics

核心依赖:torch>=1.8, numpy, opencv-python, Pillow, PyYAML, scipy, tqdm, matplotlib, pandas, seaborn

本项目额外依赖(自定义模块需要,见 requirements_full.txt):

pip install torch-dct einops mmcv

缺失时手动安装即可。

评论

加载评论中...