Mask RCNN 的损失函数是啥?

Posted

技术标签:

【中文标题】Mask RCNN 的损失函数是啥?【英文标题】:What is the loss function of the Mask RCNN?Mask RCNN 的损失函数是什么? 【发布时间】:2018-02-26 14:38:17 【问题描述】:

论文已经明确提到分类和回归损失与 Faster RCNN 中的 RPN 网络相同。有人可以解释一下 Mask Loss 函数吗?使用FCN如何提高?

【问题讨论】:

【参考方案1】:

FCN 使用每像素 softmax 和多项损失。这意味着,掩码预测任务(对象的边界)和类预测任务(被掩码的对象是什么)是耦合的​​。 Mask-RCNN 将这些任务解耦:现有的边界框预测(AKA 定位任务)头部预测类别,就像 fast-RCNN 一样,并且掩模分支为每个类别生成一个掩模,没有相互竞争类(例如,如果您有 21 个类,则掩码分支预测 21 个掩码,而不是 FCN 的具有 21 个通道的单个掩码)。使用的损失是每像素 sigmoid + 二元损失。 归根结底,它是 Mask-RCNN 中的 Sigmoid 与 FCN 中的 Soft-max。 (See table 2.b. in Mask RCNN paper - Ablation section)。

【讨论】:

我有点困惑。在 Mask R-CNN 中有 5 个损失。 RPN Class and BBox and Mask Class, BBox and Mask Loss。在 Fast R-CNN 中,RPN 的第一个输出是 K+1 个类别的概率分布。第二个输出是边界框回归。在 Mask R-CNN 中,RPN 与 Fast R-CNN 相比只有两个类别,这是否正确:对象或非对象? Mask-Head 有 3 个损失,这里 Mask_BBox 的损失与 RPN_BBox 相同,Mask_Class 的损失与 RPN_class 相同,但与所有 K 个类别的 RPN 不同? 你说,21个类预测21个mask,那么在一个类里面怎么区分实例,我的意思是,如果一个mask有一个类所有的实例,怎么划分呢?【参考方案2】:

Mask R-CNN的多任务损失函数结合了分类损失、定位损失和分割mask:L=Lcls+Lbox+Lmask, 其中 Lcls 和 Lbox 与 Faster R-CNN 中的相同。

掩码分支为每个 RoI 和每个类生成一个维度为 m x m 的掩码;共K班。因此,总输出的大小为 K⋅m^2

因为模型试图为每个类学习一个掩码,所以类之间不存在生成掩码的竞争。

L掩码:

被定义为平均二元交叉熵损失,如果该区域与地面实况类 k 相关联,则仅包括第 k 个掩码。

在哪里 是大小为 m x m 的区域的真实掩码中的单元格 (i, j) 的标签; y^kij 是为 ground-truth 类 k 学习到的 mask 中相同单元格的预测值。

【讨论】:

以上是关于Mask RCNN 的损失函数是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Keras 中屏蔽损失函数(mae)?

简单来说,损失函数是啥?

XGBoost 中多类分类的损失函数是啥?

TensorFlow API 中的正则化损失是啥?它不与任何其他损失函数对齐

Keras 后端自定义损失函数

如何在 keras 中测试自定义损失函数?