一、关于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 训练参数详解

      参数

      默认值

      说明

      epochs

      100

      训练轮数,小数据集可减少

      batch

      16

      批次大小,根据GPU显存调整

      imgsz

      640

      训练图像尺寸

      lr0

      0.01

      初始学习率

      momentum

      0.937

      SGD动量

      weight_decay

      0.0005

      权重衰减

      warmup_epochs

      3

      预热轮数

      patience

      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模型的安装、使用和再训练方法:

                  1. 模型使用:通过几行代码即可加载预训练模型并进行目标检测推理

                  2. 自定义训练:准备YOLO格式数据集,使用model.train()进行训练

                  3. 再训练:加载已有权重(best.pt)继续训练,或使用预训练权重(yolo11n.pt)进行迁移学习

                  4. 模型优化:通过调整学习率、批次大小、数据增强等参数提升模型性能

                    YOLO11n作为YOLO11系列中最轻量的模型,在保持高精度的同时具备极快的推理速度,非常适合边缘设备和实时应用场景。通过自定义数据集训练,您可以将其应用于任何特定的目标检测任务中。

                    Logo

                    汇聚全球AI编程工具,助力开发者即刻编程。

                    更多推荐