在使用 TensorFlow Object Detection API 训练 Mask RCNN 时,“损失”是啥?

Posted

技术标签:

【中文标题】在使用 TensorFlow Object Detection API 训练 Mask RCNN 时,“损失”是啥?【英文标题】:While training Mask RCNN using TensorFlow Object Detection API, what is the 'loss'?在使用 TensorFlow Object Detection API 训练 Mask RCNN 时,“损失”是什么? 【发布时间】:2019-06-17 21:15:29 【问题描述】:

我正在 TensorFlow 对象检测 中使用 Mask RCNN 训练 自定义对象检测。因此,我要预测对象实例掩码以及边界框。

预训练模型:mask_rcnn_inception_v2_coco

以下是我的训练快照。

INFO:tensorflow:global step 4181: loss = 0.0031 (3.290 sec/step)

INFO:tensorflow:global step 4181: loss = 0.0031 (3.290 sec/step)

INFO:tensorflow:global step 4182: loss = 0.0030 (2.745 sec/step)

INFO:tensorflow:global step 4182: loss = 0.0030 (2.745 sec/step)

在这种情况下,你能告诉我这里的损失是什么吗?

我的问题与训练损失及其变化无关。步骤。

我只是不清楚在训练 Mask RCNN 时这种损失是什么意思?在一个Mask RCNN中,最后一层有3个平行头,

用于检测类 用于预测边界框 用于预测实例掩码

在这种情况下,什么是损失?

【问题讨论】:

【参考方案1】:

Mask R-CNN 论文的损失函数结合了 3 个损失的加权和(3 个输出):分类、定位和分割掩模:

分类和边界框(定位)损失与 Faster R-CNN 中的相同。

添加的是每个像素的 sigmoid + 掩码的二进制损失。 掩码分支为每个类生成一个掩码,类之间没有竞争(因此,如果您有 10 个类,掩码分支预测 10 个掩码)。使用的损失是每像素 sigmoid + 二元损失。

如果您想更深入地研究掩码损失,论文指出“多项式与独立掩码:掩码 R-CNN 将掩码和类别预测解耦:作为现有框 分支预测类标签,我们为每个生成一个掩码 类之间没有竞争的类(通过每像素 sigmoid 和二元损失)。在表 2b 中,我们将其与 使用每像素 softmax 和多项损失(如 FCN [30] 中常用的)。”

您可以在paper 第 6 页,表号 2.b(“多项式与独立掩码”)中看到它。

【讨论】:

以上是关于在使用 TensorFlow Object Detection API 训练 Mask RCNN 时,“损失”是啥?的主要内容,如果未能解决你的问题,请参考以下文章

《R3Det:Refined Single-Stage Detector with Feature Refinement for Rotating Object》论文笔记

TensorFlow object detection API应用一

在使用 TensorFlow Object Detection API 训练 Mask RCNN 时,“损失”是啥?

TensorFlow object_detection 使用

ubuntu16.04 使用tensorflow object detection训练自己的模型

TensorFlow Object Detection API使用问题小记