赞
踩
最近在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,结果就可以正常训练了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。