区域、像素与实例怎样让每一份轮廓属于一个明确对象?
P40 · Mask R-CNN:区域内部,也保留二维结构
一个 RoI 的类别、框与局部 mask 有不同输出形状和监督。mask 分支需要二维布局,并以当前实例为目标,框中另一个同类对象不该被顺便选中。P41–43 接着检验区域读出与目标坐标是否真的一致。
同源场景标出红杯RoI;整图计算共享特征F,再按RoI读取蓝色二维区域特征F_RoI,连接类别、框修正与实例mask三项分支。下方RGB裁剪独立标为对象参考,掩码标为教学目标示意。 查看对应图解状态查看完整图解 Mask R-CNN 沿用刚才的区域检测思路:先对整张图计算共享特征,再按这个 RoI 读取一份小的二维特征图。请看中间的 F_RoI,它来自共享特征,不是把下方的原始杯子照片重新送进分类网络。这个区域既要判断类别和修正位置,也要在局部坐标中预测当前实例的掩码。
这不是多写一个标签。掩码分支需要保留区域内部的二维布局,才能回答哪里是对象、哪里是背景。类别与局部掩码的预测方式也不同,不能把语义分割的所有像素类别竞争原样套过来。
图中同一杯子对应一份区域表示,三项输出都能追踪到它。现在有个容易被忽略的问题:区域的边界和特征图的采样位置未必落在整数网格上。如果区域提取时把坐标对齐关系弄歪,后面就可能在错误位置上努力预测轮廓。
同一 RoI 可以给出类别、四个框偏移和一个二维掩码。前两项可以汇总为短向量;mask 却需要保留“区域左上、右下分别是什么”的空间关系。把区域特征完全摊成不带布局的统计,会给逐像素对应增加负担。
画面中原图局部只帮助我们指认对象。真正进入区域任务头的是从共享特征 F 读取的区域特征;其空间格子保存相对位置,每格还可以有多个通道。后两页检验这一读取怎样保持连续坐标对应。
Mask R-CNN 的掩码分支在 RoI 内预测固定大小的二值图。原论文的默认实现对每个类别各预测一张 sigmoid mask,训练时只计算真值类别对应的掩码损失;区域分类分支负责决定类别。因此掩码像素回答的是“是否属于本实例”,不是让所有对象类别在每个 RoI 像素上再次竞争。
用杯子的例子理解:RoI 已对应杯一,框里即使还露出杯二的一部分,杯一的目标 mask 仍只标杯一。两个区域可以都被分类为杯子,分别交付各自的二值轮廓。这种分工让实例身份与像素预测接在一起。
本课程并没有在 LAB11 训练完整 Mask R-CNN;LAB11 是三类语义分割。Mask R-CNN 的训练证据来自原论文,坐标、局部目标和插值机制则可由 LAB03 的小算例独立检验。
学生:为什么前面刚说不必反复裁图,这里又是一张杯子的裁剪图?
教师:照片只让你看清对应的是哪只杯子。参与计算的是旁边的F_RoI特征格,它从已经算出的共享F中读取。区域身份相同,原始像素和区域特征是两种不同对象。
依据原始 Mask R-CNN:三个任务头读取从共享F提取的区域特征F_RoI,RGB照片只作对象对应参考。mask预测保持二维结构,原论文按类二值mask,训练只使用真值类别对应的mask loss。显示手工教学目标轮廓而非模型预测结果。