【问题标题】:low object confidence scores while training yolov2 for face-non face dataset为人脸非人脸数据集训练 yolov2 时对象置信度低
【发布时间】:2020-05-27 17:17:45
【问题描述】:

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

损失函数:我用于计算置信度得分的损失函数是两项的累积损失:no_object_loss 和 object_loss,两者都是具有对象 (object_loss) 且其余部分对 no_object_loss 有贡献的网格单元的 MSE 损失。

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

【问题讨论】:

  • 可以看到你的损失函数吗?另外,您是否尝试过一些不平衡数据集的东西?我想你可以通过class_weightsin keras。检查this thread
  • @SiddhantTandon 损失函数是四个项的组合损失,localization_loss、no_objecT_loss、object_loss 和 class_loss。所有的损失都是预测和地面实况的 MSE,如果是交叉熵版本,则除了类别损失外,还有一些预测的预处理。我使用 Tensorflow 1.15 作为后端,使用所有四个损失项的比例值来调节对损失函数的影响。它是 yolo 论文中描述的损失函数的复制。你可以查一下(stats.stackexchange.com/questions/287486/…

标签: python deep-learning computer-vision object-detection yolo


【解决方案1】:

我在这里发布答案,如果有人遇到同样的问题,他们可以按照相同的调试步骤, 所以首先我想出了综合分数低的原因,结果发现是对象分数非常低, 因此,我查看了每次损失后的激活分布以及对象损失的行为,似乎波动很大,这表明该特定术语的损失不符合预期的模式。 因此我递归回损失函数,幸运的是,错误在于损失函数的 IOU 计算。 问题基本上在于 iou 计算的范围,即两个框的交集没有界限,因此交集的范围可以从 -inf 到 +inf。因此 iou 出现了很多次,但直觉上 iou 只能从 0 到 1 和 。 解决方案是在 iou 计算的预处理期间将预测的定位从 0 截断为图像高度和图像宽度。此外,在计算 iou 即交集/联合时,我确保交集大于或等于 0(不小于这意味着根本没有交集)。 这样做有助于模型以正确和更好的方式学习,尽可能预测框。

【讨论】:

    猜你喜欢
    • 2014-06-04
    • 2015-01-06
    • 2018-06-30
    • 2011-02-05
    • 2017-08-29
    • 2019-10-30
    • 2020-12-24
    • 2021-10-30
    • 2020-11-30
    相关资源
    最近更新 更多