如何解决 YOLO v1 中的梯度爆炸

How to solve gradient-exploding in YOLO v1

现在我正在尝试使用 this 代码训练对象检测 - YOLOv1。一开始我使用的是 momentumweight_decay,但是几个 epoch 后的训练损失变成了 NaN。据我所知,这是因为梯度爆炸,所以我搜索了一些方法来摆脱这个 NaN 然后我忽略了 momentumweight decay。结果我没有得到任何 NaN,但是我的模型无法像我预期的那样收敛。当我计算 mAP 时它只有 0.29。 我使用 VOC 2007 和 2012 数据进行训练并作为测试集 VOC 2007 测试。

所以我的问题如下:

如有任何建议,我们将不胜感激。

检查你的代码后,我看到在第一个 epoch 之后,你将学习率设置为 0.01 直到第 75 个 epoch。在我看来,较大的学习率是导致你的参数成为 vanishing/exploding。通常,学习率在 0.001 附近缩放 2,1,0.1

Follow the config in this repo (the most famous repo implement YOLOv1 according to paperwithcode), 你可以看到他们的配置设置。您可以在问题中遵循他们的超参数 momentum=0.9decay=0.0005

注意:请注意Tensorflow中的batch norm momentum = 1 - Pytorch中的momentum。

最后,你训练前后的参数个数应该是一样的,所以如果你的模型在训练过程后heavier/lighter,说明你的训练代码有问题