xiuqhou / Salience-DETR

[CVPR 2024] Official implementation of the paper "Salience DETR: Enhancing Detection Transformer with Hierarchical Salience Filtering Refinement"
https://arxiv.org/abs/2403.16131
Apache License 2.0
105 stars 7 forks source link

如何进行断点续训 #7

Open Xiaofei-Kevin-Yang opened 3 months ago

Xiaofei-Kevin-Yang commented 3 months ago

您好,非常感谢您开源这项工作,目前我在训练silence detr with focalnet as the backbone, 发现两个问题:1 cuda out of memory. 我采用3090来训练,并且batch_size=2。2 如何进行断点续训, 我尝试在 train_config文件中设置“resume_from_checkpoint = /hy-tmp/2024-05-09-22_34_34/best_ap.pth”提示语法错误。谢谢您的帮助。

xiuqhou commented 3 months ago

您好,FocalNet-large模型本身比较大,3090显卡的24G显存不足以支撑基于FocalNet-large的Salience-DETR在batch_size=2的条件下进行模型训练,您可以尝试:

  1. 使用fp16或者bf16混合精度训练以降低显存,只需在训练命令后增加--mixed-precision
accelerate launch main.py --mixed-precision bf16  # bf16混合精度训练,需显卡及PyTorch支持
# 或
accelerate launch main.py --mixed-precision fp16  # fp16混合精度训练
  1. 将batch_size设置为1(建议也将学习率等比缩放为5e-5,以保持性能的稳定)。

  2. 使用其他小backbone的Salience-DETR,例如salience_detr_resnet50_800_1333.pysalience_detr_swin_l_800_1333.pysalience_detr_convnext_l_800_1333.py

  3. 若有条件可以更换大显存的显卡,从硬件层面解决out of memory问题。

xiuqhou commented 3 months ago

从您的回答中,断点续训提示语法错误可能是因为路径没有用引号包起来:

resume_from_checkpoint = "/hy-tmp/2024-05-09-22_34_34/best_ap.pth"

这里传递的路径可以是训练时产生的<文件夹>或<模型权重>,他们有所区别,请看例子:

因此如果您想从上一次中断的训练中恢复训练,请使用resume_from_checkpoint = "/hy-tmp/2024-05-09-22_34_34/"

感谢您对本项目的关注,如果有问题欢迎继续提问~