YOLO11n模型使用与再训练完全指南
一、关于YOLO11n模型
1.1 什么是YOLO11n
YOLO11是由Ultralytics于2024年9月10日发布的新一代目标检测模型。YOLO11在YOLO系列以往版本的基础上,在架构和训练方法上进行了重大改进,具有更强的特征提取能力、更高的效率和更少的参数量。
YOLO11系列提供了多个变体以满足不同场景的需求:
|
模型变体 |
文件名 |
参数量 |
适用场景 |
|
Nano(纳米级) |
yolo11n.pt |
260万 |
边缘设备、实时应用 |
|
Small(小型) |
yolo11s.pt |
— |
平衡性能与速度 |
|
Medium(中型) |
yolo11m.pt |
— |
通用场景 |
|
Large(大型) |
yolo11l.pt |
— |
高精度需求 |
|
XLarge(超大型) |
yolo11x.pt |
约5600万 |
最高精度 |
关于“YOLO11nt”的说明:您提到的“YOLO11nt”并非Ultralytics官方标准命名。最接近的官方模型是 YOLO11n(nano版本),它是最小的目标检测模型,仅有260万个参数。此外还有针对特定任务的变体,如yolo11n-cls.pt(分类)和yolo11n-seg.pt(分割)。如果您手中有名为“YOLO11nt”的模型文件,它可能是社区对YOLO11n进行特定微调后的版本。本文将以官方的YOLO11n为基础进行讲解,所有方法同样适用于其他YOLO11变体。
1.2 YOLO11n的主要特点
-
增强的特征提取:采用改进的主干网络(Backbone)和颈部(Neck)架构
-
更少的参数,更高的精度:YOLO11m在COCO数据集上比YOLOv8m的mAP更高,参数量却减少了22%
-
跨环境适应性:可无缝部署在边缘设备、云平台和NVIDIA GPU系统上
-
支持多任务:目标检测、实例分割、图像分类、姿态估计、旋转目标检测(OBB)
二、环境配置
2.1 安装Ultralytics
使用YOLO11前,首先需要安装Ultralytics Python包:
# 使用pip安装 pip install ultralytics # 或使用conda安装 conda install -c conda-forge ultralytics # 如需特定版本 pip install ultralytics==8.3.204
2.2 验证安装
from ultralytics import YOLO # 检查版本 import ultralytics print(ultralytics.__version__)
2.3 硬件要求
-
GPU训练:建议使用NVIDIA GPU(4GB以上显存),YOLO11n对显存要求较低
-
CPU训练:也可在CPU上运行,但训练时间会显著增加
三、YOLO11n模型的基础使用(推理)
3.1 加载模型
from ultralytics import YOLO # 加载预训练模型(首次运行会自动下载) model = YOLO("yolo11n.pt") # 目标检测模型 # 加载其他变体 # model = YOLO("yolo11n-seg.pt") # 分割模型 # model = YOLO("yolo11n-cls.pt") # 分类模型 # model = YOLO("yolo11n-pose.pt") # 姿态估计模型
YOLO11n在COCO数据集上预训练,在T4 GPU上推理速度可达1.55ms,mAP50-95达到39.5%。
3.2 对图像进行推理
# 对单张图像进行检测 results = model("path/to/image.jpg") # 对多张图像进行检测 results = model(["image1.jpg", "image2.jpg"]) # 显示检测结果 for r in results: boxes = r.boxes # 边界框 probs = r.probs # 分类概率(分类任务) r.show() # 显示图像 r.save(filename="result.jpg") # 保存结果
3.3 对视频进行推理
# 对视频文件进行检测 results = model("path/to/video.mp4", save=True) # 实时摄像头检测 results = model(0, show=True) # 0表示默认摄像头
3.4 设置推理参数
results = model( "image.jpg", conf=0.25, # 置信度阈值 iou=0.45, # NMS的IoU阈值 imgsz=640, # 输入图像尺寸 device="cuda" # 使用GPU )
四、自定义数据集训练(再训练/微调)
4.1 数据集准备
YOLO11训练需要的数据集格式为YOLO格式,目录结构如下:
datasets/ ├── data.yaml # 数据集配置文件 ├── train/ │ ├── images/ # 训练图像 │ └── labels/ # 训练标注(YOLO格式) ├── valid/ │ ├── images/ # 验证图像 │ └── labels/ # 验证标注 └── test/ # (可选)测试集 ├── images/ └── labels/
data.yaml配置文件示例:
# 数据集路径 path: ../datasets # 数据集根目录 train: train/images # 训练图像路径(相对于path) val: valid/images # 验证图像路径(相对于path) test: test/images # 测试图像路径(可选) # 类别信息 nc: 2 # 类别数量 names: ['cat', 'dog'] # 类别名称列表
4.2 标注格式
YOLO格式的标注文件为txt格式,每行对应一个目标:
class_id x_center y_center width height
其中坐标值均为归一化后的相对值(0-1之间)。
4.3 开始训练
方法一:Python脚本训练
from ultralytics import YOLO # 加载预训练模型 model = YOLO("yolo11n.pt") # 开始训练 model.train( data="datasets/data.yaml", # 数据集配置文件 epochs=100, # 训练轮数 imgsz=640, # 输入图像尺寸 batch=16, # 批次大小 device=0, # GPU设备(0表示第一块GPU) workers=8, # 数据加载线程数 patience=50, # 早停耐心值 save=True, # 保存检查点 save_period=10, # 每10轮保存一次 cache=False, # 是否缓存图像 project="runs/train", # 项目保存路径 name="my_model", # 实验名称 exist_ok=True, # 允许覆盖已有结果 pretrained=True, # 使用预训练权重 optimizer="auto", # 优化器(auto/SGD/Adam/AdamW) seed=0, # 随机种子 deterministic=True, # 确定性训练 single_cls=False, # 是否单类别训练 rect=False, # 矩形训练 cos_lr=False, # 余弦学习率调度 label_smoothing=0.0, # 标签平滑 nbs=64, # 名义批次大小 overlap_mask=True, # 掩码重叠 mask_ratio=4, # 掩码下采样比例 dropout=0.0, # dropout比例 val=True, # 训练时验证 plots=True # 生成训练图表 ) # 训练完成后,最佳模型保存在: # runs/train/my_model/weights/best.pt
方法二:命令行训练
# 使用yolo命令训练 yolo train model=yolo11n.pt data=datasets/data.yaml epochs=100 imgsz=640 batch=16 # 或使用简化命令 yolo task=detect mode=train model=yolo11n.pt data=datasets/data.yaml epochs=100
4.4 训练参数详解
|
参数 |
默认值 |
说明 |
|
|
100 |
训练轮数,小数据集可减少 |
|
|
16 |
批次大小,根据GPU显存调整 |
|
|
640 |
训练图像尺寸 |
|
|
0.01 |
初始学习率 |
|
|
0.937 |
SGD动量 |
|
|
0.0005 |
权重衰减 |
|
|
3 |
预热轮数 |
|
|
100 |
早停耐心值,验证损失不降则停止 |
4.5 训练监控
训练过程中会在项目目录生成以下文件:
runs/train/my_model/ ├── weights/ │ ├── best.pt # 最佳模型权重 │ └── last.pt # 最后一轮权重 ├── results.csv # 训练指标记录 ├── results.png # 训练曲线图 ├── confusion_matrix.png # 混淆矩阵 ├── labels.jpg # 标签分布图 └── args.yaml # 训练参数记录
五、模型再训练(增量学习/继续训练)
5.1 基于已有模型继续训练
如果您已有训练好的模型权重(best.pt),想要在新数据上继续训练,可以这样做:
from ultralytics import YOLO # 加载已训练好的模型(而非预训练模型) model = YOLO("runs/train/my_model/weights/best.pt") # 继续训练(可以使用新数据或相同数据继续优化) model.train( data="datasets/new_data.yaml", # 可以换新数据集 epochs=50, # 额外训练轮数 resume=True, # 从断点恢复训练 # 或者不设置resume,从头开始微调 )
关键区别:
-
加载
yolo11n.pt= 使用COCO预训练权重(迁移学习) -
加载
best.pt= 使用自己训练好的权重(继续训练/增量学习)
5.2 迁移学习(微调)
迁移学习是使用预训练模型在新数据集上进行微调的过程。这种方法比从头训练更快,且需要更少的训练数据。
from ultralytics import YOLO # 加载COCO预训练模型 model = YOLO("yolo11n.pt") # 在新数据集上微调(自动进行迁移学习) model.train( data="your_dataset/data.yaml", epochs=50, # 通常比从头训练少 lr0=0.001, # 使用更小的学习率(避免破坏已学知识) batch=16, imgsz=640 )
5.3 冻结部分层进行微调
如果想保留模型的底层特征提取能力,可以冻结Backbone部分:
from ultralytics import YOLO model = YOLO("yolo11n.pt") # 冻结前10层 for i, layer in enumerate(model.model.model[:10]): for param in layer.parameters(): param.requires_grad = False # 然后正常训练 model.train(data="data.yaml", epochs=30)
5.4 增量学习(持续学习)
对于需要持续学习新类别或新数据的场景,可以采用增量学习策略:
# 第一阶段:在旧数据集上训练 model = YOLO("yolo11n.pt") model.train(data="old_data.yaml", epochs=100) # 保存模型 # 第二阶段:在新数据集上继续训练(包含旧类别+新类别) model = YOLO("runs/train/old_model/weights/best.pt") model.train( data="combined_data.yaml", # 包含新旧数据 epochs=50, lr0=0.001 # 使用更小学习率避免灾难性遗忘 )
六、模型验证与评估
6.1 验证模型性能
from ultralytics import YOLO # 加载训练好的模型 model = YOLO("runs/train/my_model/weights/best.pt") # 在验证集上评估 metrics = model.val(data="datasets/data.yaml") print(f"mAP50-95: {metrics.box.map}") print(f"mAP50: {metrics.box.map50}") print(f"mAP75: {metrics.box.map75}")
6.2 结果分析
验证后会在runs/val/目录生成:
-
混淆矩阵
-
F1曲线
-
PR曲线
-
各类别性能指标
七、模型导出与部署
7.1 导出为不同格式
from ultralytics import YOLO model = YOLO("runs/train/my_model/weights/best.pt") # 导出为ONNX model.export(format="onnx", imgsz=640) # 导出为TensorRT(NVIDIA GPU加速) model.export(format="engine", imgsz=640) # 导出为TorchScript model.export(format="torchscript") # 导出为TFLite(移动端) model.export(format="tflite")
7.2 使用导出的模型推理
# 使用导出的ONNX模型 model = YOLO("best.onnx") results = model("test.jpg")
八、常见问题与调优建议
8.1 训练不收敛
-
学习率过高:尝试降低
lr0(如从0.01降至0.001) -
数据集太小:增加数据增强或使用迁移学习
-
批次大小不合适:根据GPU显存调整
batch
8.2 过拟合
-
增加数据增强(
augment=True) -
增加
weight_decay(如0.001) -
使用
dropout参数 -
减少训练轮数或使用早停
8.3 显存不足
-
减小
batch大小 -
减小
imgsz(如从640降至416) -
使用
device="cpu"(训练会变慢) -
使用
cache=False避免缓存所有图像
8.4 类别不平衡
-
对少数类别进行过采样
-
使用类别权重调整
-
增加数据增强
九、完整示例:从零到部署
以下是一个完整的训练流程示例:
from ultralytics import YOLO import torch # 1. 检查GPU print(f"CUDA available: {torch.cuda.is_available()}") if torch.cuda.is_available(): print(f"GPU: {torch.cuda.get_device_name(0)}") # 2. 加载预训练模型 model = YOLO("yolo11n.pt") # 3. 训练模型 results = model.train( data="datasets/data.yaml", epochs=100, imgsz=640, batch=16, device=0, patience=50, plots=True, project="runs/train", name="custom_model" ) # 4. 验证模型 metrics = model.val() print(f"Best mAP50-95: {metrics.box.map:.4f}") # 5. 测试推理 test_results = model("test_image.jpg", conf=0.25) for r in test_results: r.save(filename="test_result.jpg") # 6. 导出模型 model.export(format="onnx") print("Model exported successfully!")
训练完成后,您将在runs/train/custom_model/weights/best.pt获得训练好的模型权重,可用于后续的推理或继续训练。
十、总结
本文详细介绍了YOLO11n模型的安装、使用和再训练方法:
-
模型使用:通过几行代码即可加载预训练模型并进行目标检测推理
-
自定义训练:准备YOLO格式数据集,使用
model.train()进行训练 -
再训练:加载已有权重(
best.pt)继续训练,或使用预训练权重(yolo11n.pt)进行迁移学习 -
模型优化:通过调整学习率、批次大小、数据增强等参数提升模型性能
YOLO11n作为YOLO11系列中最轻量的模型,在保持高精度的同时具备极快的推理速度,非常适合边缘设备和实时应用场景。通过自定义数据集训练,您可以将其应用于任何特定的目标检测任务中。
更多推荐

所有评论(0)