我尝试使用 Tensorflow 工具在mask-RCNN模型中实现损失功能。我使用了平均S形交叉熵损失函数:
loss_mask = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits( labels=y_true, logits=y_pred))
用于对象分类任务的 mask分支。他们为每个RoI(对象图)使用了S型像素密集分类。 输出日志的形状是 [batch_size num_roi,m,m,k] ,其中 m m 是遮罩(RoI地图)分辨率, k 是类数。
我对标签的形状感到困惑,并在损失功能中登录。以下段落来自Mask-Rcnn paper,这让我感到困惑。
对于每个RoI,mask分支都有一个K(m * m)维输出,它对K个分辨率为m×m的二进制掩码进行编码,每个 K班。为此,我们应用每个像素的Sigmoid,并定义Loss_mask 作为平均二进制交叉熵损失。对于与 真实级别k,Loss_mask仅在第k个掩码上定义 (其他屏蔽输出不会造成损耗)。我们对 Loss_mask允许网络为每个类生成掩码,而无需 班级之间的竞争;我们依靠专门的分类 分支以预测用于选择输出蒙版的类标签
我不明白他们的意思
对于与真实级别k相关的RoI,仅Loss_mask 在第k个遮罩上定义(其他遮罩输出对 损失)。
在登录和标签中应该做些什么,然后再将它们引入损失功能,以使实施正确?
换句话说,损失功能中的登录和标签是否是整个图像的蒙版具有 k 频道( [batch_size,img_height,img_width,k] )。我应该将同一张图像的 RoI登录信息合并到单个蒙版中吗?