Python 针对人脸-非人脸数据集训练yolov2时对象置信度低

Python 针对人脸-非人脸数据集训练yolov2时对象置信度低,python,deep-learning,computer-vision,object-detection,yolo,Python,Deep Learning,Computer Vision,Object Detection,Yolo,目前,我正在研究一个目标检测问题,涉及检测图像中的人脸并在其周围创建框。 为了解决这个问题,我创建了一个yolov2模型,如本文所述,具有本文中提到的损失函数。在早期阶段,由于本地化损失,我面临着Nan损失的问题,因此训练不稳定。因此,通过对损失函数进行一些小的更改,找到了一种解决方法。目前我面临的问题是对象置信度非常低,因为我处理的是face-no_face数据集,推理过程中的类分数为1.0,但对于许多只包含一张脸的实例,对象置信度非常低,更不用说图像中的多张脸了。虽然在训练时累积损失在0.0

目前,我正在研究一个目标检测问题,涉及检测图像中的人脸并在其周围创建框。 为了解决这个问题,我创建了一个yolov2模型,如本文所述,具有本文中提到的损失函数。在早期阶段,由于本地化损失,我面临着Nan损失的问题,因此训练不稳定。因此,通过对损失函数进行一些小的更改,找到了一种解决方法。目前我面临的问题是对象置信度非常低,因为我处理的是face-no_face数据集,推理过程中的类分数为1.0,但对于许多只包含一张脸的实例,对象置信度非常低,更不用说图像中的多张脸了。虽然在训练时累积损失在0.06左右饱和,但在推理时,出现了信心分数非常低的全新画面

损失函数:我用于计算置信度得分的损失函数是两项的累积损失:无对象损失和对象损失,这两项都是网格单元的MSE损失,其中有对象(对象损失),其余部分导致无对象损失


注意:我的数据集包含4996个多面图像实例,只有4个无面图像实例。所以我想知道这是否是问题所在,因为我为什么会得到较低的对象置信度分数。

我在这里发布答案,以防有人遇到相同的问题,他们可以遵循相同的调试步骤, 所以首先我找出了综合分数低的原因,结果是目标分数非常低, 因此,我观察了每次损失后激活的分布,以及物体损失的行为,似乎波动很大,这表明这个特定术语的损失不符合期望的模式。 因此,我返回到损失函数,幸运的是,错误出现在损失函数的IOU计算中。 问题基本上在于iou计算的边界,即两个框的交集没有边界,因此交集的范围可以从-inf到+inf。因此iou的次数非常多,但直观上iou只能从0到1和。 解决方案是在iou计算的预处理过程中,将预测的局部化从0截断为图像高度和图像宽度。此外,在计算iou(即相交/并集)时,我确保相交大于或等于0(不小于0表示根本不存在相交)。
这样做有助于模型以一种更正确、更好的方式尽可能地预测方框。

是否可以查看损失函数?另外,您是否尝试了一些用于不平衡数据集的方法?我想你可以在keras中传递
等级权重。检查@siddhantandon损失函数是四项的组合损失,本地化损失、无对象损失、对象损失和类损失。所有的损失都是预测的均方误差和基本真值,并带有一些预测的预处理,但类损失除外,如果是交叉熵的一个版本。我使用Tensorflow 1.15作为后端,使用所有四个损失项的比例值来调节对损失函数的影响。它是yolo论文中描述的损失函数的复制。你可以查一下()