我正在尝试使用 faster_rcnn
在此处使用 Detectron 的 Pytorch 实现来训练自定义数据集。我已根据 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
:衡量每个预测边界框分类正确性的损失:每个框可能包含一个对象类,或“背景””。这种损失通常称为交叉熵损失。在训练检测器时,模型预测每张图像相当多(~1K)个可能的框。它们中的大多数是空的(即属于“背景”类)。损失函数将每个预测框与图像的地面实况框注解相关联。
如果预测框与 ground truth box 有很大重叠,则计算 loss_bbox
和 loss_cls
,以查看模型预测 ground truth box 的能力。
另一方面,如果预测框与任何 ground truth 框都没有重叠,那么“背景”类只计算 loss_cls
。然而,如果与 ground truth 只有非常部分的重叠,则预测框被“丢弃”并且不计算损失。我怀疑,出于某种原因,您的训练 session 就是这种情况。
我建议您检查确定预测的盒装和基本事实注解之间关联的参数。此外,查看“锚点”的参数:这些参数决定了预测框的比例和纵横比。