如何利用检查点从上次epoch继续训练DETR模型?
在Google Colab中实现DETR模型断点续训的解决方案
问题根源
你当前的代码缺少检查点自动保存机制,且续训时未正确指定检查点路径,导致无法从中断位置恢复训练。另外Colab本地文件会在会话结束后清空,必须将检查点存储到持久化位置(比如Google Drive)才能保留。
步骤1:配置检查点保存并挂载Google Drive
先挂载Google Drive确保检查点不会丢失,同时添加ModelCheckpoint回调实现自动保存:
from pytorch_lightning.callbacks import EarlyStopping, ModelCheckpoint from pytorch_lightning import Trainer from google.colab import drive # 挂载Google Drive,授权后Drive会被挂载到/content/drive路径 drive.mount('/content/drive') # 定义DETR模型、数据集等必要元素 MAX_EPOCHS = 200 # 修正早停回调的监控指标(注释说监控验证AP,但原参数写的是training_loss,要对应实际指标名) early_stopping_callback = EarlyStopping( monitor='val_ap', # 替换为你实际使用的验证AP/AP50等指标名 min_delta=0.00, patience=3, mode='max' ) # 配置检查点保存规则 checkpoint_callback = ModelCheckpoint( dirpath='/content/drive/MyDrive/detr_checkpoints/', # 检查点存到Drive的指定文件夹 filename='detr-epoch-{epoch:02d}-val_ap-{val_ap:.2f}', save_top_k=3, # 保存Top3最优模型 monitor='val_ap', mode='max', save_last=True, # 强制保存最后一个epoch的检查点,方便续训 every_n_epochs=1 # 每个epoch保存一次 ) trainer = Trainer( devices=1, accelerator="gpu", max_epochs=MAX_EPOCHS, gradient_clip_val=0.1, accumulate_grad_batches=8, log_every_n_steps=5, callbacks=[early_stopping_callback, checkpoint_callback] # 加入检查点回调 ) # 首次训练直接调用:trainer.fit(model) # 续训时指定检查点路径: trainer.fit(model, ckpt_path='/content/drive/MyDrive/detr_checkpoints/last.ckpt')
步骤2:正确执行续训
会话中断后重新打开笔记本:
- 重新挂载Google Drive
- 确保模型、数据集、回调的定义和首次训练时完全一致(结构、超参数不能变)
- 在
trainer.fit()中通过ckpt_path参数指定上次保存的last.ckpt或最优检查点路径,训练会自动从中断的epoch继续,直到完成200个epoch。
关键注意事项
- 模型结构必须和首次训练完全一致,否则加载检查点会报错
- 早停回调的
monitor参数要和实际监控的验证指标名匹配,避免逻辑错误 - Colab免费版会话最长约12小时,若200epoch训练时长超限时,需分批次续训,或考虑使用Colab Pro/Pro+获取更长会话时间
内容的提问来源于stack exchange,提问作者user22874419
相关产品推荐
相关产品推荐

