目前我正在研究一个对象检测问题,该问题涉及检测图像中的人脸并在它们周围创建框。 为了解决这个问题,我创建了一个 yolov2 模型,如论文中所述,其损失函数如论文中提到。在早期阶段,我面临着本地化损失导致 Nan 损失的问题,因此培训不稳定。因此,通过在损失函数中进行一些小的更改来找到解决方法。目前我面临的问题是对象置信度分数非常低,因为我正在处理面部no_face数据集,推理过程中的类分数为 1.0,但对于许多只包含一个人脸的实例,对象置信度分数非常低,更不用说图像中的多个人脸了。虽然在训练时累积损失在0.06左右饱和,但是在推理时,有一幅全新的景象,置信度分数非常低。
损失函数:我用于计算置信度分数的损失函数是两个项的累积损失:no_object_loss和object_loss,两者都是网格单元的MSE损失,网格单元具有对象(object_loss(和其余对no_object_loss的贡献。
注意:我的数据集包含 4996 个多人脸图像实例,只有 4 个无人脸实例。 所以我想知道这是否是问题所在,因为我为什么我的对象置信度分数很低。
我在这里发布答案,以防万一有人遇到同样的问题,他们可以按照相同的调试步骤进行操作, 所以首先我弄清楚了组合分数低的原因是什么,结果发现是对象分数非常少, 所以我查看了每次损失后激活的分布以及对象丢失的行为,似乎波动很大,这表明这个特定项的损失不符合所需的模式。 因此,我递归回到损失函数,幸运的是错误在于损失函数的IOU计算。 问题基本上在于 iou 计算的边界,即两个盒子的交集可以是什么没有界限,所以交集的范围可以从 -inf 到 +inf。因此,欠条的次数很多次很大,但直觉上欠条只能从0到1和。 解决方案是在预处理IOU计算期间将预测的定位从0截断为图像高度和图像宽度。此外,在计算交集/并集的 IOU 时,我确保交集大于或等于 0(不小于这意味着根本没有交集(。 这样做有助于模型以更正确和更好的方式学习,以尽可能预测盒子。