5

我正在尝试在此处faster_rcnn使用 Detectron 的 Pytorch 实现来训练自定义数据集。我已根据 repo 中的指南对数据集和配置进行了更改。

训练过程成功进行,但loss_clsloss_bbox值从一开始就为0,即使训练完成,最终输出也不能用于评估或推断。我想知道这两个是什么意思,以及如何在培训期间改变这些价值观。我在这里使用的确切模型是e2e_faster_rcnn_R-50-FPN_1x

对此的任何帮助将不胜感激。我在 Anaconda、CUDA 9、cuDNN 7 上使用 Ubuntu 16.04 和 Python 3.6。

4

1 回答 1

10

两个损失是什么?

在训练多目标检测器时,您通常(至少)有两种类型的损失:

  1. loss_bbox:衡量预测边界框与地面实况对象“紧密”程度的损失(通常是回归损失L1smoothL1)。
  2. loss_cls:衡量每个预测边界框分类正确性的损失:每个框可能包含一个对象类或“背景”。这种损失通常称为交叉熵损失。

为什么损失总是零?

在训练检测器时,该模型会为每张图像预测相当多(~1K)个可能的框。其中大部分是空的(即属于“背景”类)。损失函数将每个预测框与图像的地面实况框注释相关联。

如果预测框与地面实况框有显着重叠,则loss_bbox进行loss_cls计算以查看模型预测地面实况框的能力。

另一方面,如果预测框与任何真实框没有重叠,则仅loss_cls计算“背景”类。
然而,如果只有非常部分的与地面实况重叠,则预测框被“丢弃”并且不计算损失。我怀疑,出于某种原因,您的培训课程就是这种情况。

我建议您检查确定预测的盒装和基本事实注释之间关联的参数。此外,查看“锚点”的参数:这些参数决定了预测框的比例和纵横比。

于 2019-03-04T06:25:33.537 回答