什么是 loss_cls 和 loss_bbox 以及为什么它们在训练中总是零
What is loss_cls and loss_bbox and why are they always zero in training
我正在尝试使用 Detectron here 的 Pytorch 实现来训练使用 faster_rcnn
的自定义数据集。我已经根据 repo 中的指南对数据集和配置进行了更改。
训练过程成功,但是loss_cls
和loss_bbox
的值从一开始就为0,即使训练完成,最终的输出也不能用于评价或一个推论。
我想知道这两个是什么意思,以及如何在培训期间改变这些价值观。我在这里使用的确切模型是 e2e_faster_rcnn_R-50-FPN_1x
如有任何帮助,我们将不胜感激。我在 Anaconda、CUDA 9、cuDNN 7 上使用 Ubuntu 16.04 和 Python 3.6。
两次损失是多少?
训练多目标检测器时,通常(至少)有两种损失:
loss_bbox
:衡量预测边界框与地面实况对象“紧密”程度的损失(通常是回归损失,L1
、smoothL1
等)。
loss_cls
:衡量每个预测边界框classification正确性的损失:每个框可能包含一个对象class,或“背景”。这种损失通常称为交叉熵损失。
为什么损失总是零?
训练检测器时,模型会为每张图像预测相当多 (~1K) 个可能的框。其中大部分是空的(即属于“背景”class)。损失函数将每个预测框与图像的地面真值框注释相关联。
如果预测框与真实框有明显重叠,则计算 loss_bbox
和 loss_cls
以查看模型预测真实框的能力。
另一方面,如果预测的框与任何地面真值框没有重叠,则仅为“背景”计算 loss_cls
class。
但是,如果与地面真实情况只有非常部分的重叠,则预测框将被“丢弃”并且不会计算损失。我怀疑,出于某种原因,您的培训课程就是这种情况。
我建议您检查确定预测盒装注释和地面实况注释之间关联的参数。此外,查看“锚点”的参数:这些参数决定了预测框的比例和纵横比。
我正在尝试使用 Detectron here 的 Pytorch 实现来训练使用 faster_rcnn
的自定义数据集。我已经根据 repo 中的指南对数据集和配置进行了更改。
训练过程成功,但是loss_cls
和loss_bbox
的值从一开始就为0,即使训练完成,最终的输出也不能用于评价或一个推论。
我想知道这两个是什么意思,以及如何在培训期间改变这些价值观。我在这里使用的确切模型是 e2e_faster_rcnn_R-50-FPN_1x
如有任何帮助,我们将不胜感激。我在 Anaconda、CUDA 9、cuDNN 7 上使用 Ubuntu 16.04 和 Python 3.6。
两次损失是多少?
训练多目标检测器时,通常(至少)有两种损失:
loss_bbox
:衡量预测边界框与地面实况对象“紧密”程度的损失(通常是回归损失,L1
、smoothL1
等)。loss_cls
:衡量每个预测边界框classification正确性的损失:每个框可能包含一个对象class,或“背景”。这种损失通常称为交叉熵损失。
为什么损失总是零?
训练检测器时,模型会为每张图像预测相当多 (~1K) 个可能的框。其中大部分是空的(即属于“背景”class)。损失函数将每个预测框与图像的地面真值框注释相关联。
如果预测框与真实框有明显重叠,则计算 loss_bbox
和 loss_cls
以查看模型预测真实框的能力。
另一方面,如果预测的框与任何地面真值框没有重叠,则仅为“背景”计算 loss_cls
class。
但是,如果与地面真实情况只有非常部分的重叠,则预测框将被“丢弃”并且不会计算损失。我怀疑,出于某种原因,您的培训课程就是这种情况。
我建议您检查确定预测盒装注释和地面实况注释之间关联的参数。此外,查看“锚点”的参数:这些参数决定了预测框的比例和纵横比。