Ultralytics YOLO 学习笔记:目标检测框架使用与开发指南
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.yaml、mycoco8.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.yamlnc:类别数scales:n/s/m/l/x 各规格的缩放系数(depth 深度、width 宽度),同一份 yaml 即可生成 5 个不同大小的模型backbone/head:逐层列出结构,每行格式为[来自哪层, 重复次数, 模块名, 参数]
底层模块实现在:
conv.py:Conv、DWConvblock.py:C2f、Bottleneckhead.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 简单修改:调整模型结构
- 复制一份 YAML 配置文件(如
yolov8.yaml) - 修改
nc为你的类别数 - 增删 backbone/head 中的层(修改模块名、重复次数、通道数)
- 使用
YOLO("my_model.yaml")从头训练
7.2 进阶修改:添加自定义模块
- 在
ultralytics/nn/modules/中编写新层代码 - 在
ultralytics/nn/tasks.py中import并注册 - 在 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
缺失时手动安装即可。
评论
加载评论中...