最近需要对yolov5网络框架进行改进,改进训练的过程当中发现了一个奇怪的问题。从tensorboard的图像过程中看出,bbox_loss,cls_loss在训练预测之后正常下降,当时obj_loss置信度损失值在上升。这可把我给困住了,各方面都没有问题,困扰好久。
总结分析出三个主要原因:
1.模型计算量过大,出现过拟合的现象,需要对网络框架进行削减,降低网络模型复杂度,或者采用更进一步的数据增强方式。
2.obj-loss的正负样本划分出现了极不平衡的问题。
3.学习率以及optimizer的选择出现问题,需要进行更换。
按照以上分析原因进行修改。
1.削减模型复杂度值之后,随着网络模型复杂度的降低,网络预测的准确率也随着降低,但是ovj_loss损失值依然存在有上升的现象。(所以个人总结认为网络模型虽然复杂度高,但是并未达到所说的过拟合现象。)
2.其次针对于学习率以及optimizer的问题,使用的超参数文件为yolov5当中hyper-scratch-low的超参文件,初始的学习率为0.01,使用的optimizer为SGD。所以选择更换optimizer为AdamW,以及相应降低学习,并且使用hyperscratch-mid的稍强一点的数据增强方式。发现更换为AdamW后,会随之出现梯度爆炸的情况,训练过程当中损失值变为Nan。
(经过以上分析调整后,个人改进网络训练过程中出现此现象与网络模型复杂度无关,夜雨Optimizer无关,极大原因便是学习率过大的问题。不知道分析是否正确,还请各位帮忙看看)
所以最近实验过程中,打算只针对学习率进行调整。
3.现在只剩下更换置信度损失这一个方法了。希望大家帮忙看看有没有其他的解决办法?