Matterport Mask-R-CNN的确切损失是什么?

Mob*_*Mob 2 instance loss image-segmentation keras faster-rcnn

我使用Mask-R-CNN来训练我的数据。当我使用TensorBoard查看结果时,我损失了 mrcnn_bbox_lossmrcnn_class_lossmrcnn_mask_lossrpn_bbox_lossrpn_class_loss以及所有相同的6个损失用于验证:val_loss, val_mrcnn_bbox_loss等。

我想确切地知道每项损失。

我也想知道前6次损失是火车损失还是什么?如果不是火车失窃,我怎么看火车失窃?

我的猜测是:

损失:这是所有5个摘要(但我不知道TensorBoard如何总结它)。

mrcnn_bbox_loss:边框的大小是否正确?

mrcnn_class_loss:该类正确吗?像素正确分配给类别了吗?

mrcnn_mask_loss:实例的形状是否正确?像素正确分配给实例了吗?

rpn_bbox_lossbbox的大小正确吗?

rpn_class_lossbbox的类别正确吗?

但是我很确定这是不对的...

如果我只有1个班级,是否会失去一些无关紧要的东西?例如仅背景和另外1个课程?

我的数据只有背景和另外1个类别,这是我在TensorBoard上获得的结果:

结果1:结果2:结果3:结果:4

我的预测是可以的,但是我不知道为什么最终由于验证而造成的一些损失会不断上升……我认为必须首先下降,然后过度拟合。我使用的预测是TensorBoard上出现次数最多的绿线。我不确定我的网络是否过拟合,因此我想知道为什么验证中的某些损失看起来像它们的样子...

这是我的预测: 我的训练集示例: 这是我的测试集示例的基本事实: 这是来自Testset示例的预测:

Siz*_*gia 5

根据代码注释和Python软件包索引中的文档,这些损失定义为:

  • rpn_class_loss = RPN锚分类器损失
  • rpn_bbox_loss = RPN边界框损耗图
  • mrcnn_class_loss =掩码R-CNN的分类器头损失
  • mrcnn_bbox_loss =蒙版R-CNN边界框优化的损失
  • mrcnn_mask_loss =遮罩头的遮罩二进制交叉熵损失

这些损耗度量中的每一个都是针对每个感兴趣区域分别计算的所有损耗值的总和。日志中给出的常规损耗度量是由Mask R-CNN的作者定义的其他五种损耗的总和(您可以通过将它们加总来进行检查)。

关于如何根据原始论文计算这些损失,可以将它们描述如下(请注意,为了更直观的解释,定义非常粗糙):

  • 分类损失值基本上取决于真实分类的置信度得分,因此分类损失反映了模型在预测分类标签时的信心,换句话说,反映了模型与预测正确分类的接近程度。在mrcnn_class_loss的情况下,所有对象类都被覆盖,而在rpn_class_loss的情况下,唯一要做的分类是将锚定框标记为前景或背景(这就是从概念上讲,这种损失倾向于具有较低值的原因。只有“两类”比可以预见的多。
  • 所述边界框损失值反映真实盒参数之间的距离,也就是说,第(x,y)处的盒位置的坐标,其宽度和其高度- 和预测那些。从本质上讲,它是回归损失,并且对较大的绝对差进行惩罚(对于较小的差以近似指数的方式进行惩罚,对于较大的差以线性方式进行惩罚- 有关更多信息,请参见平滑L1损失函数)。因此,在rpn_bbox_loss的情况下,它最终显示了模型在定位图像内对象方面的性能。以及模型在精确预测图像中与不同对象相对应的区域方面的性能如何 如果是mrcnn_bbox_loss,则存在。
  • 所述掩模损失,类似于分类损失,惩罚错每像素的二进制分类(前景/背景,在相对于真实的类标记)。对于每个感兴趣区域,它的计算方式都不同:掩码R-CNN为每个RoI编码每个类别的二进制掩码,而特定RoI的掩码损耗仅基于与其真实类别相对应的掩码来计算,即防止蒙版损失受到类别预测的影响。

就像您已经说过的那样,这些损失量度确实是训练损失,而带有val_前缀的损失量是验证损失。验证损失的波动可能由于多种原因而发生,仅凭图表很难一见钟情。它们可能是由于学习率太高(试图找到最小值而导致随机梯度下降过冲),或验证集太小(由于输出中的微小变化会产生不可靠的损失值而导致的损失值不可靠)引起的重大损失值变化)。