Mask RCNN 的损失函数是什么?

5

这篇文章明确提到,在Faster RCNN中,分类和回归损失与RPN网络是相同的。但有人能否解释一下Mask Loss函数?以及如何使用FCN来改进?

2个回答

10

FCN使用逐像素的softmax和多项式损失函数。这意味着,遮罩预测任务(对象的边界)和类别预测任务(被遮罩掉的对象是什么)是耦合的。
Mask-RCNN将这些任务解耦:现有的边界框预测(也称为定位任务)头部预测类别,就像faster-RCNN一样,而掩码分支为每个类别生成一个掩码,而不是在分类之间竞争(例如,如果您有21个类别,则掩码分支会预测21个掩码,而不是FCN的具有21个通道的单个掩码)。所使用的损失是逐像素sigmoid + 二进制损失。
总之,在Mask-RCNN中使用Sigmoid,而在FCN中使用Soft-max。
(请参见Mask RCNN论文的表2.b. - 消融部分).


1
我有点困惑。在Mask R-CNN中,有5个损失。RPN类和BBox以及Mask类、BBox和Mask损失。在Fast R-CNN中,RPN的第一个输出是K+1个类别的概率分布。第二个输出是边界框回归。在Mask R-CNN中,RPN只有两个类别,与Fast R-CNN相比:对象或非对象?而Mask-Head有三个损失,其中来自Mask_BBox的损失与RPN_BBox相同,来自Mask_Class的损失与RPN_class相同,但与RPN不同的是,它适用于所有K个类别吗? - Mob
你说,21个类别预测21个掩码,那么在一个类别内如何区分实例呢?我的意思是,如果一个掩码有一个类别的所有实例,如何将它们分开? - Nicholas Jela

6
Mask R-CNN的多任务损失函数结合了分类、定位和分割掩模的损失:L=Lcls+Lbox+Lmask,其中Lcls和Lbox与Faster R-CNN中相同。
掩模分支为每个RoI和每个类别生成一个m x m维度的掩模;总共有K个类别。因此,总输出大小为K⋅m^2。
由于模型试图为每个类别学习一个掩模,因此各类别之间没有竞争来生成掩模。
Lmask:
定义为平均二元交叉熵损失,仅在区域与地面真实类别k相关联时才包括第k个掩模。 Lmask Equation 其中yij是大小为m x m的区域的真实掩模中单元格(i,j)的标签;y^kij是学习用于地面真实类别k的掩模中相同单元格的预测值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接