news 2026/4/23 13:25:42

【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/4/23 13:24:22

【Open-AutoGLM协同机制深度解析】:揭秘前后台高效交互核心技术

第一章:Open-AutoGLM协同机制概述Open-AutoGLM 是一种面向自动化生成语言模型任务的开放协作框架,旨在通过模块化设计与分布式协同机制提升大语言模型在实际应用中的适应性与效率。该机制融合了提示工程、模型微调、反馈闭环与多智能体协作,支…

作者头像 李华
网站建设 2026/4/18 3:22:34

Open-AutoGLM操作重试为何总是超时?精准定位并优化等待策略的6步法

第一章:Open-AutoGLM 操作等待重试机制概述 在分布式系统与自动化任务调度中,网络波动、服务瞬时不可用或资源竞争等问题可能导致操作失败。Open-AutoGLM 引入了操作等待重试机制,以提升任务执行的鲁棒性与成功率。该机制通过智能退避策略和条…

作者头像 李华
网站建设 2026/4/23 13:25:39

FaceFusion在刑侦模拟中的辅助作用研究

FaceFusion在刑侦模拟中的辅助作用研究 在城市监控摄像头数量突破亿级的今天,一个令人无奈的事实是:大量案件的关键线索——嫌疑人面部图像——往往模糊、侧拍甚至被遮挡。传统的模拟画像依赖画师经验与目击者回忆,主观性强、耗时长&#xff…

作者头像 李华
网站建设 2026/4/19 1:00:26

【数据库】【Redis】监控与告警体系构建

Redis 作为高性能内存数据库,其监控体系是保障业务连续性的生命线。完善的监控需覆盖性能、资源、连接、持久化、集群五大维度,配合主动告警自动恢复机制,实现从"看得见"到"管得住"的闭环 核心监控指标全景图 1. 性能指标…

作者头像 李华
网站建设 2026/4/23 9:45:33

【工业级文本输入优化指南】:基于Open-AutoGLM的3种高精度方案

第一章:Open-AutoGLM文本输入优化的核心挑战在构建和部署基于 Open-AutoGLM 的自然语言处理系统时,文本输入的优化成为影响模型性能与推理效率的关键环节。由于该模型依赖于高质量、结构化的输入提示,原始文本若未经处理,极易引入…

作者头像 李华