YOLOV11离线训练

4.6k 词

环境配置可参考YOLOv11超详细环境搭建以及模型训练(GPU版本)-CSDN博客

以下内容默认已经配置好YOLOV11所需的环境

1.介绍YOLO文件夹结构

介绍yolo文件夹1

首先看根目录

文件夹 作用
.git Git 版本管理数据,记录提交历史、分支等,一般不用手动改。
.github GitHub 相关配置,比如自动测试、发布流程、Issue 模板等。里面有 workflowsscriptsISSUE_TEMPLATE
.idea PyCharm / IntelliJ 的项目配置文件,和代码本身关系不大。
docker Docker 环境配置,用来构建可复现的运行环境,比如训练、推理、部署时用的容器。
docs 文档源码,官网文档通常从这里生成。里面有英文文档、页面模板、文档宏等。
examples 示例代码,展示 YOLO 如何接入不同平台或框架,比如 ONNXRuntime、OpenCV、Rust、C++、目标跟踪、分割等。
tests 测试代码,用来验证训练、预测、导出、模型加载等功能是否正常。
ultralytics 最核心的源码目录,YOLO 的模型、训练、推理、数据处理、配置、工具函数基本都在这里。

yolo文件夹2

ultralytics 里面比较重要的子文件夹:

文件夹 作用
assets 示例图片、资源文件,常用于测试预测效果。
cfg 配置文件,比如模型配置、默认训练参数、任务配置等。
data 数据集相关代码,比如数据加载、数据增强、数据集格式处理。
engine 训练、验证、预测、导出这些核心流程的基础引擎。
hub Ultralytics HUB 云端平台相关功能。
models 各类模型入口,比如 YOLO、RT-DETR、SAM 等。
nn 神经网络结构代码,包括层、模块、模型解析等,改网络结构常看这里。
optim 优化相关代码,比如优化器或调参相关工具。
solutions 官方封装好的应用方案,比如计数、区域检测、跟踪类应用。
trackers 目标跟踪相关算法,比如 ByteTrack、BoT-SORT 等。
utils 通用工具函数,日志、绘图、文件处理、检查环境等都可能在这里。

2.制作数据集

在YOLO文件夹根目录创建data文件夹,在data文件夹内创建train、val、test三个文件夹,分别放训练、验证、测试的图片

image-20260701184247737

图片需要标注,不同的任务的标注格式也不相同。下面以目标检测介绍。

推荐X-AnyLabelingCVHub520/X-AnyLabeling: Effortless data labeling with AI support from Segment Anything and other awesome models.

下载最新发布包后运行

labeling

该软件左侧栏为工具栏,打开文件夹后可对图片进行标注,标注完后点击上方的导出,目标检测就选HBB,导出后可以获得YOLO训练需要的标注文件。

将标注文件放入上方建好的data文件夹中的对应位置

3.创建数据集配置文件

在项目的ultralytics /cfg/datasets目录新建一个xxxx.yaml,内容如下:

1
2
3
4
5
6
7
8
9
10
11
path: D:/code/yolo/data/teach # 注意修改自己数据集的路径
train: train # train images
val: val # val images
test: test # test images

# Classes

names:
0: yida
1: keyboard

4.创建模型对象

在项目的ultralytics/cfg/models/11目录下新建一个yolov11-neu-det.yaml,代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLO11 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect

# Parameters
nc: 6 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolo11n.yaml' will call yolo11.yaml with scale 'n'
# [depth, width, max_channels]
n: [0.50, 0.25, 1024] # summary: 319 layers, 2624080 parameters, 2624064 gradients, 6.6 GFLOPs

# YOLO11n backbone
backbone:
# [from, repeats, module, args]
- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
- [-1, 2, C3k2, [256, False, 0.25]]
- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
- [-1, 2, C3k2, [512, False, 0.25]]
- [-1, 1, Conv, [512, 3, 2]] # 5-P4/16
- [-1, 2, C3k2, [512, True]]
- [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32
- [-1, 2, C3k2, [1024, True]]
- [-1, 1, SPPF, [1024, 5]] # 9
- [-1, 2, C2PSA, [1024]] # 10

# YOLO11n head
head:
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
- [[-1, 6], 1, Concat, [1]] # cat backbone P4
- [-1, 2, C3k2, [512, False]] # 13

- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
- [[-1, 4], 1, Concat, [1]] # cat backbone P3
- [-1, 2, C3k2, [256, False]] # 16 (P3/8-small)

- [-1, 1, Conv, [256, 3, 2]]
- [[-1, 13], 1, Concat, [1]] # cat head P4
- [-1, 2, C3k2, [512, False]] # 19 (P4/16-medium)

- [-1, 1, Conv, [512, 3, 2]]
- [[-1, 10], 1, Concat, [1]] # cat head P5
- [-1, 2, C3k2, [1024, True]] # 22 (P5/32-large)

- [[16, 19, 22], 1, Detect, [nc]] # Detect(P3, P4, P5)

5.创建train.py文件

在项目的根目录下创建train.py文件方便后续的训练,后面主需要运行train.py文件就可以再次进行训练了,不必每次都需要出入一次运行命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import warnings

warnings.filterwarnings('ignore')
from ultralytics import YOLO

if __name__ == '__main__':
model = YOLO('ultralytics/cfg/models/11/yolo11_teach.yaml') # 指定YOLO模型对象,并加载指定配置文件中的模型配置
model.load('yolo11n.pt') #加载预训练的权重文件'yolov11s.pt',加速训练并提升模型性能
model.train(data='ultralytics/cfg/datasets/teach.yaml', # 指定训练数据集的配置文件路径,这个.yaml文件包含了数据集的路径和类别信息
cache=False, # 是否缓存数据集以加快后续训练速度,False表示不缓存
imgsz=640, # 指定训练时使用的图像尺寸,640表示将输入图像调整为640x640像素
epochs=100, # 设置训练的总轮数为200轮
batch=2, # 设置每个训练批次的大小为16,即每次更新模型时使用16张图片
close_mosaic=10, # 设置在训练结束前多少轮关闭 Mosaic 数据增强,10 表示在训练的最后 10 轮中关闭 Mosaic
workers=2, # 设置用于数据加载的线程数为8,更多线程可以加快数据加载速度
patience=50, # 在训练时,如果经过50轮性能没有提升,则停止训练(早停机制)
device='0', # 指定使用的设备,'0'表示使用第一块GPU进行训练
optimizer='SGD', # 设置优化器为SGD(随机梯度下降),用于模型参数更新
)

配置好后运行train.py开始训练

训练时

训练完

.pt转onnx

简单版本

1
2
3
4
5
6
7
8

from ultralytics import YOLO

# 加载一个模型,路径为 YOLO 模型的 .pt 文件
#model = YOLO("runs/detect/train/weights/best.pt")
model = YOLO("yolo11n.pt")
# 导出模型,格式为 ONNX
model.export(format="onnx")

复杂版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
from ultralytics import YOLO

# 加载一个模型,路径为 YOLO 模型的 .pt 文件
model = YOLO(r"runs/detect/train3/weights/best.pt")

# 导出模型,设置多种参数
model.export(
format="onnx", # 导出格式为 ONNX
imgsz=(640, 640), # 设置输入图像的尺寸
keras=False, # 不导出为 Keras 格式
optimize=False, # 不进行优化 False, 移动设备优化的参数,用于在导出为TorchScript 格式时进行模型优化
half=False, # 不启用 FP16 量化
int8=False, # 不启用 INT8 量化
dynamic=False, # 不启用动态输入尺寸
simplify=True, # 简化 ONNX 模型
opset=None, # 使用最新的 opset 版本
workspace=4.0, # 为 TensorRT 优化设置最大工作区大小(GiB)
nms=False, # 不添加 NMS(非极大值抑制)
batch=1, # 指定批处理大小
device="cpu" # 指定导出设备为CPU或GPU,对应参数为"cpu" , "0"
)

QA

1.什么是CUDA

image-20260701233439876

2.什么是CUDNN

NVIDIA® CUDA® 深度神经网络库(cuDNN)是一款 GPU 加速的深度神经网络基础算子库。cuDNN 为标准操作(如前向和反向卷积、注意力、矩阵乘法(matmul)、池化和归一化)提供高度优化的实现。

留言