想象你是一名考古测绘员,手里捏着一张古城遗址的卫星航拍图。上级提出了三档要求:第一档,在图上圈出所有“可能是建筑”的位置——这就是目标检测,用矩形框框住目标;第二档,把图上所有“建筑”像素统一涂成红色——这是语义分割,只分类别,不辨你我;第三档最苛刻:不光要知道哪里是建筑,还要把每一栋建筑单独描出轮廓,A栋和B栋即使紧紧挨着,也要画出一道清晰的边界线。这第三档,就是实例分割。 Mask R-CNN正是为第三档任务而生的模型。它像一支装备精良的测绘小队:由Faster R-CNN这位“老师傅”带队找目标、定坐标,又新增了一位“轮廓画师”——掩码分支,负责逐像素勾勒形状。为了看清微小细节,小队不再使用会“粗心取整”的旧工具RoI Pooling,而是换上RoI Align这把“激光测距仪”,用双线性插值对特征图做亚像素级采样。今天,我们就跟着这支小队出一次野外测绘,把Mask R-CNN从结构到原理彻底看懂。

岗位关联

掌握 Mask R-CNN,就掌握了从“框级检测”迈向“像素级理解”的关键一步。无论是自动驾驶中的行人轮廓建模,还是医疗影像里的病灶勾画,它都是绕不开的标杆模型。

目录
  1. 可视化演示
  2. 实例分割概述
  3. 网络整体骨架
  4. RoIAlign机制
  5. 掩码分支设计
  6. 损失函数设计
  7. 训练推理应用
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

Mask R-CNN是在Faster R-CNN基础上增加掩码分支的实例分割模型,不仅能检测出图中每个目标的位... 切换模式查看不同维度。

本节配有交互动效(进入视口后自动加载,约 3KB)。

实例分割与目:核心原理 动态展示关键流程与数据流动 交互控件调节参数实时渲染 f(x) = transform(x) 核心概念的可视化呈现

实例分割概述

假设你面前有一张老街区的俯瞰照片,第一档任务是“数出有几栋房子、每栋大概在什么位置”——画几个矩形框就能交差,这叫目标检测。第二档任务要你把照片里所有“屋顶”像素涂成同一种颜色,连成片的屋顶不用分开,这叫语义分割。第三档任务最挑剔:不仅要标出所有屋顶,还要按栋区分——紧挨着的两栋楼,边界线必须画清楚,不能你中有我,我中有你。这第三档,就是实例分割。

实例分割的输出不是一张图,而是一组“实例记录”。每条记录包含三项:类别 c 表示这是什么,边界框 b 描述目标在图中占据的大致矩形区域,掩码 M 则是一张像素级二值图,逐点标明“这个像素属于该实例”。整张图的所有实例可以写成一个集合:

这就像考古队最终交出的“单体建筑测绘档案”:每栋建筑有名字(类别)、有范围(边界框)、有精确边线(掩码)。三者缺一不可,三者合起来才是完整的实例分割结果。

Instance Segmentation={(ci,bi,Mi)}i=1N\text{Instance Segmentation} = \{(c_i, \mathbf{b}_i, \mathbf{M}_i)\}_{i=1}^{N}
  1. 实例编号 i从 1 到 N,每个实例有唯一编号,就像给每座遗址编上“1号塔基、2号塔基”。
    i∈{1,2,…,N}i \in \{1, 2, \dots, N\}
  2. 类别标签 c_i表示第 i 个实例属于哪个语义类别,比如“建筑”“车辆”“行人”。
    ci∈{1,2,…,C}c_i \in \{1, 2, \dots, C\}
  3. 边界框 b_i用四元组 (x, y, w, h) 描述目标外接矩形的中心坐标与宽高。
    bi=(xi,yi,wi,hi)\mathbf{b}_i = (x_i, y_i, w_i, h_i)
  4. 掩码 M_i与目标区域对应的二值矩阵,数值为 1 表示该像素属于该实例,0 表示不属于。
    Mi∈{0,1}H×W\mathbf{M}_i \in \{0, 1\}^{H \times W}

网络整体骨架

测绘小队怎么搭建?高空航拍照片(输入图像)先进入“分析室”——主干网络 ResNet,负责提取基本特征;接着登上“多倍观测塔”——特征金字塔 FPN,把不同尺度的特征都看清楚;然后由“侦察组”RPN 扫一遍图,提出“这里有遗址”的候选区域;最后由两位专家分行报告:一位报位置和类别,一位画轮廓。

Mask R-CNN 沿用 Faster R-CNN 的两阶段检测思路。第一阶段,RPN 在特征图上扫描并提议候选区域 RoI;第二阶段是并行双分支头——检测头做分类和边界框回归,掩码头做像素级分割。因为两个分支共享 Backbone 加 FPN 的特征,模型能同时学到“边界敏感的框特征”和“形状敏感的掩码特征”,事半功倍。

整个特征提取过程可以表示为:

装备齐全的测绘小队有条不紊:分析室看清材质,观测塔看清远近,侦察组圈定疑区,两位专家分头出报告。这样一个框架,既保留了检测的高效,又给分割留出了专用通道。

F=Φ(I),F={F2,F3,F4,F5}\mathbf{F} = \Phi(\mathbf{I}), \quad \mathbf{F} = \{\mathbf{F}_2, \mathbf{F}_3, \mathbf{F}_4, \mathbf{F}_5\}
  1. 输入图像 I一张三维数组 H×W×3,代表高度、宽度、RGB 三通道颜色。
    I∈RH×W×3\mathbf{I} \in \mathbb{R}^{H \times W \times 3}
  2. 特征提取器 ΦResNet 主干网络与 FPN 的串联组合,像一支“望远镜加分析仪”。
    Φ(⋅)=FPN(ResNet(⋅))\Phi(\cdot) = \mathrm{FPN}(\mathrm{ResNet}(\cdot))
  3. 多尺度特征集合 FFPN 输出多张分辨率不同的特征图,分别对应不同尺度的目标。
    F={Fl}l=25\mathbf{F} = \{\mathbf{F}_l\}_{l=2}^{5}
  4. 特征图 F_l第 l 层特征图的空间分辨率是输入的 1/2^l,尺度越小越适合检测小目标。
    Fl∈RH/2l×W/2l×Cl\mathbf{F}_l \in \mathbb{R}^{H/2^l \times W/2^l \times C_l}

RoIAlign机制

旧工具 RoI Pooling 就像一把只标到厘米的卷尺。当候选框坐标是小数(比如 6.8、1.4),它会直接把小数砍成整数,再把特征区域强行分成几格。这样量出的“特征”和真实目标之间就产生了偏移。偏移几个像素,对普通检测可能无所谓,但对“逐像素”的掩码任务来说就是致命误差——城墙边界会整体错位。

RoI Align 的绝招是不取整、直接精确测量。对每个采样点,先计算它在原特征图上的小数坐标,再用它周围最近的 4 个整数像素做双线性插值,得到平滑的采样值。每个小格内会均匀采 4 个点(由采样率参数控制),最后取平均作为该格的输出。这样,特征和候选框始终严格对齐。

双线性插值的核心计算式为:

卷尺换成了激光测距仪后,测量结果不再“毛躁”,掩码的边界能紧贴城墙,而不是错开一厘米。这个看似微小的改动,正是 Mask R-CNN 相比旧方法在分割精度上大幅领先的关键一环。

f(P)≈f(Q11)(x2−x)(y2−y)+f(Q21)(x−x1)(y2−y)+f(Q12)(x2−x)(y−y1)+f(Q22)(x−x1)(y−y1)f(P) \approx f(Q_{11})(x_2 - x)(y_2 - y) + f(Q_{21})(x - x_1)(y_2 - y) + f(Q_{12})(x_2 - x)(y - y_1) + f(Q_{22})(x - x_1)(y - y_1)
  1. 目标点 P坐标为小数 (x, y),它是 RoI 内的一个采样位置。
    P=(x,y),x,y∉ZP = (x, y), \quad x, y \notin \mathbb{Z}
  2. 四个邻点 QP 周围最近的 4 个整数像素点,分别是左上、右上、左下、右下。
    Q11=(x1,y1),  Q21=(x2,y1),  Q12=(x1,y2),  Q22=(x2,y2)Q_{11} = (x_1, y_1), \; Q_{21} = (x_2, y_1), \; Q_{12} = (x_1, y_2), \; Q_{22} = (x_2, y_2)
  3. 距离加权因子距离越近的像素权重越大,就像“附近邻居的意见更重要”。
    w11=(x2−x)(y2−y),w21=(x−x1)(y2−y)w_{11} = (x_2 - x)(y_2 - y), \quad w_{21} = (x - x_1)(y_2 - y)
  4. 加权求和结果把四个邻点的像素值按权重叠加,得到 P 点的平滑估计值。
    f(P)=∑kwkf(Qk)f(P) = \sum_{k} w_k f(Q_k)

掩码分支设计

轮廓画师的工作台是什么样的?画师接到的不是整张航拍图,而是一块已经裁剪好的“局部特写”——由 RoI Align 从特征图中精确提取出来的区域。画师的任务是画出一张透明薄膜:在目标所在的位置涂色,其余地方留白。这张薄膜就是掩码。

掩码分支由多层卷积和一层反卷积组成,输入是已对齐的 14×14 特征,输出是 28×28×C 的张量。C 是类别数,每个类别对应一张独立的“该像素是否属于此物体”的候选掩码。训练时使用平均二值交叉熵损失,让每个像素独立判断归属;推理时只需取出该 RoI 预测类别对应的通道,经 Sigmoid 后按 0.5 阈值二值化,再上采样回原图大小即可。

掩码分支的损失函数为:

画师一笔一划,不放过任何一个像素,最终交出一张可以贴在原图上的透明薄膜。而 28×28 的低分辨率设计并非偷懒,它是在“够用的轮廓细节”与“可控的计算量”之间做出的精巧平衡——轮廓靠上采样恢复,细节靠 RoI Align 的对齐精度兜底。

Lmask=−1m2∑i=1m∑j=1m[yijlog⁡y^ij+(1−yij)log⁡(1−y^ij)]L_{\text{mask}} = -\frac{1}{m^2} \sum_{i=1}^{m} \sum_{j=1}^{m} \left[ y_{ij} \log \hat{y}_{ij} + (1 - y_{ij}) \log(1 - \hat{y}_{ij}) \right]
  1. 掩码边长 m输出掩码是 28×28 的方格纸,所以 m=28。
    m=28m = 28
  2. 真实标记 y_ij第 (i,j) 个像素的真实答案,1 表示涂色,0 表示留白。
    yij∈{0,1}y_{ij} \in \{0, 1\}
  3. 预测概率 ŷ_ij网络输出该像素属于目标的概率,范围在 0 到 1 之间。
    y^ij∈[0,1]\hat{y}_{ij} \in [0, 1]
  4. 平均交叉熵对所有像素的损失取平均,让每个像素都被“公平质检”,重点惩罚“该涂没涂、不该涂乱涂”。
    Lmask=1m2∑i,jBCE(yij,y^ij)L_{\text{mask}} = \frac{1}{m^2}\sum_{i,j} \mathrm{BCE}(y_{ij}, \hat{y}_{ij})

损失函数设计

训练 Mask R-CNN 就像老师给学生打总评:分类科考“认不认得对”,回归科考“圈得准不准”,掩码科考“画得像不像”。再加上 RPN 自己也要交两份作业(判断有没有目标、粗调候选框),一共五个科目,同卷考试、同步评分。

总损失把所有项加在一起,让整个网络端到端地朝着“检测既准、分割又精”的方向优化:

五个科目分数相加,等于网络的总成绩。这种多任务联合训练的好处是:掩码任务带来的形状信息能反向帮助分类更精准,分类任务带来的类别信息也能约束掩码不出格。彼此互为“陪练”,最终整体越练越强。

L=Lrpn-cls+Lrpn-box+Lcls+Lbox+LmaskL = L_{\text{rpn-cls}} + L_{\text{rpn-box}} + L_{\text{cls}} + L_{\text{box}} + L_{\text{mask}}
  1. RPN 分类损失 L_rpn-cls判断锚框内是否包含前景目标的二分类损失。
    Lrpn-cls=−log⁡P(前景)L_{\text{rpn-cls}} = -\log P(\text{前景})
  2. RPN 回归损失 L_rpn-box粗略修正锚框的坐标,让候选框先贴近目标,为后续精修做准备。
    Lrpn-box=smoothL1(t,t∗)L_{\text{rpn-box}} = \mathrm{smooth}_{L_1}(t, t^*)
  3. 检测分类损失 L_cls对候选 RoI 的最终类别做多分类交叉熵,决定“这是建筑还是车辆”。
    Lcls=−log⁡P(c=c∗)L_{\text{cls}} = -\log P(c = c^*)
  4. 检测回归损失 L_box对最终边界框再做一次精修,进一步收紧边框。
    Lbox=smoothL1(t,t∗)L_{\text{box}} = \mathrm{smooth}_{L_1}(t, t^*)
  5. 掩码损失 L_mask逐像素的平均二值交叉熵,约束掩码的质量。
    Lmask=−1m2∑i,j[yijlog⁡y^ij+(1−yij)log⁡(1−y^ij)]L_{\text{mask}} = -\frac{1}{m^2} \sum_{i,j} \left[ y_{ij} \log \hat{y}_{ij} + (1 - y_{ij}) \log(1 - \hat{y}_{ij}) \right]

训练推理应用

从训练营到实战,测绘小队要经历两个阶段。训练时,小队用几千张带标注的航拍图反复练习:RPN 先圈候选,检测头和掩码头同时打分,再按总损失反向传播修正动作。推理时,小队不再“练习”,而是直接出图。

推理流程是一条完整流水线:输入图像 → Backbone 加 FPN 提取多尺度特征 → RPN 生成候选 RoI → 按检测置信度筛选 Top-K 候选 → RoI Align 统一到 14×14 → 并行双分支 → 检测头输出类别和边界框、掩码头输出 28×28 掩码 → 上采样回原 RoI 大小 → NMS 去除重叠框 → 输出最终实例列表。评估分割质量最常用的指标是 Mask AP,它在不同 IoU 阈值下对每个实例的掩码精度求平均。而 IoU 本身的定义是:

一张高精度的“文物分布图”就这样出炉了。在自动驾驶中它是行人的轮廓,在医学影像里它是肿瘤的边界,在工业质检中它是划痕的范围——不同行业拿着同一把 IoU 标尺,验收各自关心的“形状准确性”。

IoU(P,G)=∣P∩G∣∣P∪G∣\text{IoU}(P, G) = \frac{|P \cap G|}{|P \cup G|}
  1. 预测掩码 P模型输出的二值区域,代表“模型认为目标在这里”。
    P⊂ΩP \subset \Omega
  2. 真实掩码 G人工标注的标准答案区域,代表“目标实际上在这里”。
    G⊂ΩG \subset \Omega
  3. 交集大小两个区域重叠的像素数量,重叠越多越接近。
    ∣P∩G∣|P \cap G|
  4. 并集大小两个区域合并后的像素数量,用来做归一化分母。
    ∣P∪G∣|P \cup G|
  5. 比值含义IoU 越接近 1,说明预测与标准答案越吻合;通常以 0.5 或 0.75 作为合格线。
    IoU∈[0,1]\text{IoU} \in [0, 1]

AI 应用场景

自动驾驶感知

阶段:感知与融合

解决的问题:普通检测框只能给出行人的外接矩形,无法判断行人手臂和腿部的确切边界,自动驾驶车辆在近距离避让时非常需要像素级轮廓信息;传统的人工标注轮廓成本高、速度慢。

具体案例:在自动驾驶测试车队中,车载摄像头采集街景后,Mask R-CNN 对车辆、行人、骑行者的掩码进行实时提取;即使目标被树木部分遮挡,模型仍能依据上下文推断出完整轮廓,帮助规划模块更安全地决策。

医学影像病灶勾画

阶段:辅助诊断

解决的问题:医生手动在 CT 或 MRI 片子上勾画肿瘤轮廓费时费力,且不同医生之间判读差异大;纯检测框只能提示“这里有病灶”,不能给出手术或放疗需要的精确范围。

具体案例:在肺结节筛查系统中,医生框选可疑区域后,Mask R-CNN 自动对每个结节生成像素级掩码,量化结节的直径、面积和边缘形态,帮助医生判断结节的良恶性倾向,大幅缩短阅片时间。

工业质检与缺陷分割

阶段:在线质量检测

解决的问题:流水线上的产品缺陷形状不规则,用矩形框标注会混入大量正常区域,导致面积统计失真;人工质检又跟不上产线节拍。

具体案例:在手机屏幕划痕检测中,相机拍摄屏幕后,Mask R-CNN 输出划痕的像素级轮廓,系统自动计算缺陷面积占比、判断是否超过出厂标准,并同步触发分拣机械臂。类似的方案也被用于钢材表面缺陷和电池极片瑕疵检测。

Python 演示

python51 行
import numpy as np def roi_align(feature_map, roi, out_size=4):    """简化版RoI Align: 用双线性插值采样, 不取整坐标"""    h, w = feature_map.shape[:2]    x1, y1, x2, y2 = roi    result = np.zeros((out_size, out_size), dtype=np.float32)    for i in range(out_size):        for j in range(out_size):            # 计算采样点在小数坐标系下的位置            px = x1 + (j + 0.5) / out_size * (x2 - x1)            py = y1 + (i + 0.5) / out_size * (y2 - y1)            # 找到左上角整数坐标并做边界保护            x0 = int(px)            y0 = int(py)            x0 = min(max(x0, 0), w - 2)            y0 = min(max(y0, 0), h - 2)            dx = px - x0            dy = py - y0            # 双线性插值: 四个邻点加权求和            v = (feature_map[y0, x0] * (1 - dx) * (1 - dy) +                 feature_map[y0, x0 + 1] * dx * (1 - dy) +                 feature_map[y0 + 1, x0] * (1 - dx) * dy +                 feature_map[y0 + 1, x0 + 1] * dx * dy)            result[i, j] = v    return result def predict_mask(feature, roi):    """简化版掩码头: 对每个RoI生成28x28掩码"""    aligned = roi_align(feature, roi, out_size=4)    flat = aligned.flatten()    mask = np.zeros((28, 28), dtype=np.float32)    for k in range(len(flat)):        mask[(k * 7) % 28, (k * 13) % 28] += flat[k]    mask = np.clip(mask, 0, 1)    return mask def main():    np.random.seed(0)    # 模拟一张8x8的卷积特征图    feature_map = np.random.rand(8, 8).astype(np.float32)    # 一个带有小数坐标的RoI, 展示RoI Align的价值    roi = [1.2, 1.4, 6.8, 6.2]    aligned = roi_align(feature_map, roi)    print("对齐后特征形状:", aligned.shape)    print(aligned)    mask = predict_mask(feature_map, roi)    print("预测掩码非零像素数:", int(np.sum(mask > 0))) if __name__ == "__main__":    main()
目的:用纯 NumPy 实现 RoI Align 的核心流程——小数坐标采样、双线性插值,以及一个简化的掩码预测示例,帮助你直观理解 Mask R-CNN 中最关键的机制。
  1. px = x1 + (j + 0.5) / out_size * (x2 - x1)把 RoI 均匀切成网格,取每个小格中心作为采样点,全程保留小数坐标,不做取整。
  2. x0 = min(max(x0, 0), w - 2)边界保护,防止采样点越界导致数组访问出错。
  3. dx = px - x0计算小数偏移量,它是后面加权求和的权重基础。
  4. v = (feature_map[y0, x0] * (1 - dx) * (1 - dy) + ...)双线性插值主体:四个邻点按距离加权求和,距离越近贡献越大。
  5. result[i, j] = v把插值结果写入输出特征,对齐后的特征图就是这么来的。
  6. roi = [1.2, 1.4, 6.8, 6.2]故意选用小数坐标,演示 RoI Align 处理非整数边界的能力,这正是旧方法 RoI Pooling 会取整丢精度的地方。
  7. mask[(k * 7) % 28, (k * 13) % 28] += flat[k]用一个简单散列映射模拟“卷积生成掩码”的过程,把对齐特征平铺后映射到 28×28 掩码网格上。

常见误区

误区实例分割就是把所有像素分类,这跟语义分割没什么区别,都是做像素级标注。

正解语义分割只要求把像素归类,比如所有“建筑”像素标为同一类;实例分割则要把一栋栋建筑区分开,即使它们同属一类,也要分成 A 栋、B 栋、C 栋。就像考古报告不仅要写“这里是城墙”,还要写清楚“这是第几号城墙,边界在哪”。语义分割输出的是类别图,实例分割输出的是多张独立的实例掩码。

为何常见:两者都输出像素级结果,而且可视化时都像“给图片涂色”,初学者容易忽略“同类别内是否区分个体”这一关键差异。

误区RoI Align 和 RoI Pooling 差不多,都是把特征区域统一到固定尺寸,只是名字更好听。

正解两者有本质差异。RoI Pooling 对小数坐标做取整,会丢失亚像素对齐信息;RoI Align 用双线性插值保留小数精度。就像用厘米刻度的卷尺和激光测距仪的区别,毫米级误差在逐像素分割任务中会被显著放大,导致掩码边界整体偏移。

为何常见:从宏观上看,两者都把特征图“变换到统一尺寸”,初学者不关注坐标取整这个隐藏细节,自然以为只是命名不同。

误区28×28 的掩码也太小了,应该直接输出原图大小的掩码,这样才够精细。

正解28×28 是刻意设计的平衡点。掩码分支只需要捕捉目标的整体轮廓,边界细节可以通过上采样恢复到原 RoI 大小;小分辨率显著降低计算量,也更容易训练收敛。Mask R-CNN 在 COCO 数据集上的实验证明,这个设计在精度与速度之间取得了很好的折中。

为何常见:直觉上觉得“输出越大越精细”,忽略了计算成本和端到端学习的实际约束。模型先学低分辨率轮廓,再靠上采样补细节,反而更稳。

误区分类、回归、掩码是三个独立任务,应该分别训练好再组合起来用。

正解Mask R-CNN 采用多任务联合训练,总损失是分类、回归、掩码损失之和(RPN 的损失也一起参与)。共享主干特征让三个任务互相促进:掩码的形状信息帮助分类更准,分类的语义约束也让掩码更合理。这就像同一支测绘队共享同一套设备,各专业组互相参考彼此的报告。

为何常见:初学者刚接触多任务学习时,沿用传统“分步完成”的思维,不理解共享特征和联合反向传播的协同增益。

面试题

Q1. Mask R-CNN 是在哪个检测框架基础上增加掩码分支的?

单选题 · easy

  • A.YOLO 系列框架
  • B.Faster R-CNN 框架← 正确答案
  • C.SSD 检测框架
  • D.EfficientDet 框架

答案:B。Mask R-CNN 直接沿用 Faster R-CNN 的两阶段结构,在其 RPN 加检测头的基础上,新增一个并行掩码头。YOLO 和 SSD 属于单阶段检测器,没有 RoI 级别的第二阶段操作,EfficientDet 是后来的分类检测框架,都不是直接基础。

Q2. RoI Align 相比 RoI Pooling 的核心改进是什么?

单选题 · mid

  • A.引入注意力机制
  • B.用双线性插值消除取整误差← 正确答案
  • C.增加卷积层数量
  • D.使用更大的特征图

答案:B。RoI Align 的核心是保留坐标小数精度,用双线性插值计算采样点,避免 RoI Pooling 的两次取整带来的像素偏移。注意力机制和卷积层数量都不是它的核心改进,使用更大特征图也不是其设计出发点。

Q3. Mask R-CNN 的检测头分支并行输出哪些结果?

多选题 · mid

  • A.目标类别← 正确答案
  • B.边界框位置← 正确答案
  • C.像素级掩码← 正确答案
  • D.图像风格迁移

答案:ABC。Mask R-CNN 的并行双分支分别是检测头(输出类别和边界框)和掩码头(输出像素级掩码)。风格迁移属于生成任务,与实例分割无关。三者合起来正好对应实例分割三元组:类别、框、掩码。

Q4. 掩码分支输出的掩码默认分辨率是多少?

单选题 · mid

  • A.原图分辨率
  • B.224×224
  • C.28×28← 正确答案
  • D.64×64

答案:C。Mask R-CNN 的掩码分支输出 28×28 的掩码,这是精度与计算量的折中;推理时再通过上采样恢复到原 RoI 大小。224×224 是常见的分类输入尺寸,原图分辨率会带来过高计算成本。

Q5. 关于 RoI Pooling 的取整误差,下列说法正确的是?

单选题 · hard

  • A.只在训练时存在
  • B.会造成特征与目标区域不对齐← 正确答案
  • C.能提升模型精度
  • D.对分割任务没有影响

答案:B。RoI Pooling 的取整在训练和推理时都会发生,它让采样网格与真实目标区域产生偏移。检测任务对像素偏移不敏感,但分割需要逐像素对齐,所以取整误差对掩码是致命的。它显然不会提升精度。

Q6. 下列哪些是实例分割的典型应用场景?

多选题 · mid

  • A.自动驾驶街道目标分割← 正确答案
  • B.医学图像肿瘤轮廓勾画← 正确答案
  • C.机器人抓取物体分割← 正确答案
  • D.图像人脸美化滤镜

答案:ABC。自动驾驶需要把行人车辆逐个分割,医学影像需要勾画病灶边界,机器人需要把抓取目标从背景中分离,这些都是实例分割的典型落地场景。人脸美化滤镜主要依赖关键点检测和风格迁移,不需要逐像素区分实例。

Q7. 实例分割和语义分割的主要区别是什么?

单选题 · easy

  • A.实例分割不能识别物体类别
  • B.语义分割把所有同类像素混在一起
  • C.实例分割必须区分同一类别的不同个体← 正确答案
  • D.两者没有任何区别

答案:C。语义分割输出类别图,所有“行人”像素归一类;实例分割则要把同类别中的不同个体分开,输出每个实例独立的掩码。实例分割仍然需要识别类别,排除 A;“混在一起”正是语义分割的特征而不是实例分割的,排除 B。

Q8. Mask R-CNN 训练时,掩码损失直接约束的是哪个分支?

单选题 · hard

  • A.RPN 建议头
  • B.分类预测头
  • C.边界框回归头
  • D.掩码预测头← 正确答案

答案:D。掩码损失 L_mask 直接作用于掩码分支的 28×28 输出,逐像素计算二值交叉熵。RPN 建议头、分类预测头和回归头分别由各自的损失约束。虽然总损失一起反向传播,但“直接约束”的是掩码分支。

Q9. 关于 Mask R-CNN 推理流程,正确的步骤包括?

多选题 · hard

  • A.主干和 FPN 提取多尺度特征← 正确答案
  • B.RPN 生成候选区域← 正确答案
  • C.掩码分支直接在全图预测
  • D.检测分支筛选后逐 RoI 生成掩码← 正确答案

答案:ABD。推理时先是 Backbone 加 FPN 提取特征,RPN 生成候选 RoI,检测分支筛选出高置信度目标后,再对每个 RoI 单独做 RoI Align 并生成掩码。掩码分支不是在全图上直接预测,而是基于候选 RoI 逐区域生成,排除 C。

Q10. 评估实例分割质量最常用的指标是?

单选题 · mid

  • A.F1 分数
  • B.掩码平均精度 Mask AP← 正确答案
  • C.像素准确率
  • D.边界框 IoU

答案:B。实例分割的黄金指标是 Mask AP,它遍历多个 IoU 阈值计算掩码预测的平均精度。像素准确率适合场景标注任务,边界框 IoU 只评估检测框不评估掩码,F1 分数一般用于分类任务而非分割任务。