news 2026/5/26 7:31:27

【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/5/26 4:41:05

FaceFusion支持多GPU并行处理:大幅提升批处理效率

FaceFusion支持多GPU并行处理:大幅提升批处理效率 在影视后期、短视频创作和AI内容生成(AIGC)日益普及的今天,人脸替换技术正从“小众实验”走向“工业化生产”。一个曾经需要数小时甚至数天才能完成的1080p视频换脸任务&#xff…

作者头像 李华
网站建设 2026/5/25 5:20:56

具身智能的兴起与测试变革

具身智能是指智能体通过身体(如机器人或虚拟化身)与环境交互,实现学习、决策和行动的人工智能系统。它广泛应用于自动驾驶、服务机器人、智能制造和医疗辅助等领域。对软件测试从业者而言,这标志着测试对象从虚拟系统转向物理实体…

作者头像 李华
网站建设 2026/5/25 14:35:49

FaceFusion图形界面版发布:小白用户也能轻松操作

FaceFusion图形界面版发布:小白用户也能轻松操作 在短视频和数字内容创作爆发的今天,一个普通人想用AI技术把自己的脸“换”进电影镜头里,还需要懂代码、会配环境、能调参数吗?答案正在被改写。 最近开源社区中备受关注的 FaceFus…

作者头像 李华
网站建设 2026/5/26 4:41:52

Open-AutoGLM高效推理实战(内存压缩技术全公开)

第一章:Open-AutoGLM内存优化背景与挑战在大规模语言模型(LLM)快速发展的背景下,Open-AutoGLM作为一款开源的自动文本生成模型,面临日益严峻的内存使用挑战。随着模型参数量的增长,推理和训练过程中的显存占…

作者头像 李华
网站建设 2026/5/25 17:08:28

Open-AutoGLM性能优化秘诀:5步实现任意分辨率无缝适配

第一章:Open-AutoGLM 多分辨率适配方案在处理视觉语言模型任务时,输入图像的分辨率差异会显著影响模型推理的精度与效率。Open-AutoGLM 引入了一套灵活的多分辨率适配方案,旨在动态调整图像输入以匹配模型的处理能力,同时保留关键…

作者头像 李华