news 2026/6/10 2:46: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/6/10 12:25:00

金融科技测试的特殊要求:精准、安全与合规的平衡之道

随着金融与科技的深度融合,金融科技已经重塑了现代金融服务的生态。对于软件测试从业者而言,金融科技领域的测试工作远不再是简单的功能验证,而是演进为一项需要统筹业务精准性、数据安全性、法规符合性与系统稳定性的复杂工程。一、金融科技…

作者头像 李华
网站建设 2026/6/10 12:23:24

FaceFusion与ROS系统对接设想:机器人面部交互升级

FaceFusion与ROS系统对接设想:机器人面部交互升级 在服务机器人日益走进医院大厅、商场前台和家庭客厅的今天,一个看似微小却直接影响用户体验的问题逐渐浮现:为什么这些能自主导航、语音对话的“智能伙伴”,脸上的表情还是那么僵…

作者头像 李华
网站建设 2026/6/10 12:40:34

FaceFusion在脱口秀节目后期制作中的脑洞用法

FaceFusion在脱口秀节目后期制作中的脑洞用法 你有没有想过,一档脱口秀里全场观众突然都长着同一个主持人的脸?或者某位嘉宾在讲完“当年我还是个实习生”的故事后,画面一转,屏幕上真的出现了他10年前的童年模样?这些听…

作者头像 李华
网站建设 2026/6/10 12:43:05

你不知道的Open-AutoGLM秘密:(自主纠错背后的认知推理引擎)

第一章:Open-AutoGLM 自主纠错机制原理Open-AutoGLM 是一种基于生成语言模型的自反馈优化框架,其核心在于引入了自主纠错机制(Self-Correction Mechanism),使模型能够在推理过程中识别并修正自身输出中的逻辑错误或语义…

作者头像 李华
网站建设 2026/6/9 22:38:56

FaceFusion时间序列一致性优化:让视频帧间过渡更平滑

FaceFusion时间序列一致性优化:让视频帧间过渡更平滑 在一段AI换脸后的短视频中,你是否曾注意到这样的画面:人物面部整体自然,但播放时却隐隐“抽搐”?肤色忽明忽暗、嘴角跳跃式变化、眼神闪烁不定——这些细微的不协…

作者头像 李华