news 2026/8/7 23:51:35

【YOLO】yoloV11之使用last.pt继续训练

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【YOLO】yoloV11之使用last.pt继续训练

在 YOLOv11 中使用last.pt(训练中断 / 完成后保存的模型权重)继续训练,核心是加载预训练权重并沿用原有训练配置,确保训练连续性(保留已学习的参数、优化器状态等)。以下是详细步骤、代码实现和关键注意事项:

一、核心原理

last.pt是 YOLOv11 训练过程中自动保存的检查点文件,包含:

  • 模型的权重参数(model.state_dict());
  • 优化器状态(optimizer.state_dict()),确保继续训练时优化器沿原有梯度方向更新;
  • 训练轮次(epoch)、学习率调度器状态(scheduler)等元信息,保证训练连续性。

继续训练的关键是:加载last.pt后,不重置优化器和训练轮次,仅修改训练参数(如总轮次、学习率)即可延续训练

二、前提条件

  1. 已安装 YOLOv11 依赖(推荐使用官方ultralytics库,YOLOv11 已集成其中):
    pip install ultralytics>=8.2.0 # 确保版本支持 YOLOv11
  2. 保留训练时的数据集配置文件(如data.yaml)、模型配置文件(如yolov11n.yaml,若未自定义则用官方默认配置);
  3. last.pt文件路径正确(默认保存在runs/detect/train/weights/last.pt,或自定义路径)。

三、两种继续训练方式(推荐方式 1)

方式 1:使用 Ultralytics CLI 命令(最简单,推荐)

YOLOv11 官方ultralytics库支持通过命令行直接加载last.pt继续训练,无需编写代码,适合快速上手。

基础命令格式
yolo detect train model=last.pt # 核心:指定 model 为 last.pt data=你的数据集配置.yaml # 必须与原训练的数据集一致 epochs=新的总轮次 # 如原训练了50轮,继续训练到100轮则设为100 batch=批量大小 # 沿用原批量或根据显存调整 lr0=学习率 # 可选,默认沿用原优化器学习率 project=保存路径 # 可选,默认沿用原 runs/detect/train name=exp # 可选,默认沿用原实验名称 resume=True # 关键:开启恢复训练模式(自动加载 optimizer/epoch 信息)
示例命令(实战)

假设原训练:用yolov11n.yaml训练了 50 轮,last.pt路径为runs/detect/train/weights/last.pt,现在要继续训练到 100 轮:

# 继续训练(沿用原数据集、优化器状态,总轮次设为100) yolo detect train model=runs/detect/train/weights/last.pt data=data.yaml # 与原训练的数据集一致,不可修改(否则权重不匹配) epochs=100 # 总轮次(原50轮,继续训练50轮) batch=16 # 若显存不足可减小(如8),若充足可增大(如32) lr0=0.001 # 可选:若原学习率过高,可适当降低(默认沿用原优化器学习率) resume=True # 必须设为 True,否则仅加载权重不恢复训练状态 device=0 # 指定GPU(0为第一张GPU,CPU设为cpu)
关键参数说明
  • resume=True:必须开启,否则仅加载模型权重(相当于 fine-tune),不恢复优化器和训练轮次;
  • epochs:新的总轮次(不是新增轮次),例如原训练了 50 轮,想再训练 30 轮,需设为80
  • data:必须与原训练的数据集完全一致(类别数、类别名称、数据路径),否则会因维度不匹配报错;
  • batch:可根据显存调整(若原批量 16 显存溢出,可改为 8),不影响训练连续性。

方式 2:使用 Python 代码(灵活定制,适合二次开发)

通过ultralytics.YOLO类加载last.pt,手动配置训练参数,支持更灵活的定制(如自定义回调函数、动态调整学习率)。

完整代码示例
from ultralytics import YOLO # 1. 加载 last.pt 模型(自动读取模型配置、优化器状态、训练轮次) model = YOLO("runs/detect/train/weights/last.pt") # 替换为你的 last.pt 路径 # 2. 配置继续训练的参数(关键:resume=True) train_args = { "data": "data.yaml", # 与原训练数据集一致 "epochs": 100, # 总轮次(原50轮→继续到100轮) "batch": 16, # 批量大小(根据显存调整) "lr0": 0.001, # 初始学习率(可选,默认沿用原优化器) "resume": True, # 恢复训练状态(优化器、epoch、scheduler) "device": 0, # GPU编号(CPU设为"cpu") "project": "runs/detect", # 保存项目路径(可沿用原路径) "name": "train", # 实验名称(可沿用原名,自动覆盖后续检查点) "save": True, # 保存检查点(默认True) "save_period": 10, # 每10轮保存一次检查点 "patience": 50, # 早停耐心值(50轮无提升则停止) } # 3. 开始继续训练 results = model.train(**train_args) # 训练完成后,新的 last.pt 和 best.pt 会保存在 runs/detect/train/weights/
灵活定制示例(如调整学习率、冻结部分层)
from ultralytics import YOLO model = YOLO("runs/detect/train/weights/last.pt") # 示例1:调整学习率(覆盖原优化器学习率) train_args = { "data": "data.yaml", "epochs": 100, "batch": 16, "lr0": 0.0005, # 降低学习率(原学习率可能过高,避免震荡) "lrf": 0.01, # 学习率衰减因子(默认0.01) "resume": True, } # 示例2:冻结主干网络,仅训练头部(适合微调,可选) # for param in model.model.model[0].parameters(): # 冻结主干网络 # param.requires_grad = False # 开始训练 model.train(**train_args)

四、关键注意事项(避坑指南)

1. 数据集必须一致

  • 继续训练时的data.yaml必须与原训练完全一致:类别数、类别名称、训练 / 验证集路径不能修改;
  • 若需修改数据集(如新增类别、调整数据路径),不能直接用last.pt继续训练,需重新训练或作为预训练权重 fine-tune(resume=False)。

2. 避免覆盖原有权重(可选)

  • 若想保留原last.pt,可修改projectname参数,将新训练结果保存到新路径:
    # CLI 方式:保存到新路径 runs/detect/train_resume yolo detect train model=last.pt data=data.yaml epochs=100 resume=True project=runs/detect name=train_resume

3. 学习率调整建议

  • 若原训练已接近收敛(val_loss趋于平稳),继续训练时建议将lr0降低为原学习率的 1/10 ~ 1/5(如原lr0=0.01,改为0.001),避免过拟合或震荡;
  • 若原训练中断时val_loss仍在下降,可沿用原学习率(不指定lr0参数,自动加载优化器状态)。

4. 显存不足的解决方案

  • 减小batch大小(如从 16 改为 8、4);
  • 启用半精度训练(amp=True,默认开启),节省显存;
  • 降低图像分辨率(imgsz=640改为imgsz=480,需在train_args中添加imgsz=480,但注意:原训练若用 640,继续训练也需保持一致,否则权重不匹配)。

5. 训练中断后的恢复

  • 若继续训练时再次中断,YOLOv11 会自动保存新的last.pt,下次训练时仍可加载该文件继续,无需额外操作;
  • last.pt损坏,可尝试用best.pt(训练过程中验证集效果最好的权重)继续训练,此时resume=False(仅加载权重,不恢复优化器状态):
    yolo detect train model=runs/detect/train/weights/best.pt data=data.yaml epochs=100 resume=False

五、常见问题排查

问题 1:加载last.pt报错 “dimension mismatch”

  • 原因:data.yaml与原训练数据集不一致(类别数、输入尺寸变化);
  • 解决方案:确保data.yaml与原训练完全一致,输入尺寸(imgsz)保持不变。

问题 2:继续训练后val_loss突然飙升

  • 原因:学习率过高,或数据集发生变化;
  • 解决方案:降低lr0(如原0.01改为0.001),检查数据集是否一致。

问题 3:“No optimizer found in last.pt”

  • 原因:last.pt仅保存了模型权重(如手动保存的model.save(),而非训练过程中自动保存的检查点);
  • 解决方案:用resume=False加载权重(相当于 fine-tune),重新初始化优化器:
    yolo detect train model=last.pt data=data.yaml epochs=100 resume=False

六、总结

YOLOv11 继续训练last.pt的核心是:

  1. 确保data.yamlimgsz与原训练一致;
  2. 训练时指定model=last.pt并开启resume=True
  3. 按需调整epochsbatchlr0等参数,避免过拟合或显存溢出。

通过 CLI 命令可快速实现,通过 Python 代码可灵活定制,适合不同场景的需求。训练完成后,新的last.pt(最新权重)和best.pt(验证集最优权重)会自动保存,可用于后续推理或再次继续训练。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/7 12:36:50

测试项目失败原因分析:从根因到破局之路

在软件交付的链条中,测试是质量的最后一道关口。然而,测试项目本身也常面临延期、漏测、价值未能充分体现等诸多挑战,最终导致项目整体受挫。本文将深入剖析测试项目失败的深层原因,并致力于为测试从业者找到一条可行的破局之路。…

作者头像 李华
网站建设 2026/8/7 22:53:31

如何让AI真正“知错能改”?:Open-AutoGLM给出终极答案

第一章:Open-AutoGLM 自主纠错机制原理Open-AutoGLM 是一种基于生成语言模型的自反馈修正框架,其核心在于通过内部一致性验证与外部知识对齐实现输出的动态优化。该机制允许模型在生成响应后主动评估其逻辑完整性、事实准确性以及语法合规性,…

作者头像 李华
网站建设 2026/8/7 22:53:31

Open-AutoGLM离线环境配置避坑指南:99%新手都会忽略的3个细节

第一章:Open-AutoGLM 离线运行技术支撑Open-AutoGLM 作为一款支持本地化部署的自动化语言模型框架,其离线运行能力依赖于多项核心技术的协同支持。为确保在无网络连接或高安全隔离环境下稳定运行,系统在模型压缩、推理引擎优化与本地资源调度…

作者头像 李华
网站建设 2026/8/7 12:05:41

【AI操作自动化突破】:Open-AutoGLM的指令—动作映射黑盒详解

第一章:Open-AutoGLM指令—动作映射的核心机制 Open-AutoGLM 是一种面向自动化任务执行的指令-动作映射框架,旨在将自然语言指令高效转化为可执行的操作序列。其核心在于建立语义理解与系统动作之间的精准映射关系,使得智能体能够理解用户意图…

作者头像 李华
网站建设 2026/8/7 12:23:44

Java对象为什么要进行序列化

序列化(Serialization)是将内存中的对象或数据结构转换为可存储或可传输的格式(如字节流、JSON、XML 等)的过程。它的核心目的,是为了让“活在内存里的对象”能够跨越时空、平台和进程的边界,实现持久保存或…

作者头像 李华
网站建设 2026/8/7 16:52:27

Flutter GPUImage 库在鸿蒙平台的 GPU 图像滤镜适配实战

Flutter GPUImage 库在鸿蒙平台的 GPU 图像滤镜适配实战 引言 在跨平台开发中,Flutter 凭借高效的渲染和活跃的生态,已经成为许多团队的首选。而另一边,OpenHarmony 作为新兴的全场景操作系统,正在逐步构建自己的应用生态。把成熟…

作者头像 李华