当前位置:   article > 正文

DETR类模型COCO训练结果异常,评测AP=0解决方案记录_detr显存泄露

detr显存泄露

太长不看:

解决方法:调大Batch Size,所有卡加起来的bs不小于4。


以下为详细事发经过:

最近在Conditional DETR上改进,一开始在coco_minitrain上做消融试验,结果是正常的。然后在完整COCO上跑,发现前两个epoch的所有评测指标都接近0,如下图:

由于在coco_minitrain上是可以正常训练的,我最开始怀疑我的COCO数据集是不是有问题,但经过一番排除,发现并不是。

接着我想到了我在coco_minitrain上只实验过1enc+4dec与3enc+6dec的缩水版模型(为了快速验证,hidden_dim与num_query均也有相应调小),于是猜测是不是完整的6enc+6dec难收敛的问题,于是我将1enc+4dec与3enc+6dec在完整COCO上实验,发现能得到正常的结果。
这就比较难办了。此时,我观察到DETR原版的num_query是100,但conditional改为了300。于是我改成100后重新实验,但很遗憾,仍然没有解决问题。

最后,突然想到还有一个被我遗忘在角落的超参数:Batch Size

因为之前的1enc+4dec与3enc+6dec的缩水版模型的参数量相对较小,我将其bs分别调整为8与4,对于3080TI 12G,这刚好能卡到显存上限。6enc+6dec的原版模型bs默认为2(虽然DETR论文中是4对于32G地V100显卡),也能比较好地卡到12G的上限。
我重新整理了一下思路,目前我是单卡训练,bs为4和8时能正常训练,但2就不行。可原版代码默认bs就为2,似乎也不应该有什么问题。但此时我终于想到他们都是多卡训练,每张卡bs为2。由此看来,bs似乎就是那个罪魁祸首。

由于之前不知道AP全为0到底是由什么引起的,我在百度,Google,Github都只能搜索“DETR COCO VAL AP 0”这样的关键词。意识到可能是bs的问题后,我在谷歌搜索"DETR batch size",发现确实有(且仅有)一个issue完美的符合我的问题。

Performance with lower batch size · Issue #505 · facebookresearch/detr · GitHub

最后,我使用双卡3090,每张卡bs调整为4,结果就可以正常训练了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/337798
推荐阅读
相关标签
  

闽ICP备14008679号