重读CV系列——&&4、Mask-RCNN学习

一、核心思想:从"检测"到"分割"的一步之遥

Faster R-CNN能告诉你"哪里有物体 "(边界框)和"是什么物体 "(类别)。但它的输出是矩形框,框内可能包含背景或其他物体,不够精细。

Mask R-CNN的核心思想是:在Faster R-CNN的基础上,增加一个并行的分割分支,对每个候选区域预测一个二值掩码(Binary Mask),实现像素级的实例分割。

一句话总结Mask R-CNN = Faster R-CNN + 分割分支 ,但需要解决两个关键问题:RoI Align (解决对齐误差)和独立掩码预测(每个类别独立预测,避免竞争)。

二、三大核心创新(面试绝对重点)

创新1:RoI Align(取代RoI Pooling)

这是Mask R-CNN最核心、最著名的改进,面试官必问。

对比维度 RoI Pooling(Faster R-CNN) RoI Align(Mask R-CNN)
量化操作 两次量化 :① 将候选框坐标映射到特征图时取整 ;② 池化时每个网格边界取整 没有量化:保留浮点数坐标。
采样方式 每个网格取最大值(Max Pooling)。 每个网格均匀取4个采样点 (或更多),用双线性插值计算每个点的值,然后取最大值或平均值。
对齐精度 有偏差,尤其对小目标和分割任务影响大。 像素级对齐,对分割任务至关重要。
计算开销 快(整数操作)。 稍慢(浮点运算+插值),但可接受。

为什么RoI Pooling对分割不好?

分割需要像素级的精确性 。RoI Pooling的两次量化会导致约几个像素的偏移 ,这在分类任务中可能影响不大(因为分类只需要全局特征),但在分割任务中,几个像素的偏移就会导致掩码边缘不准确,严重影响分割质量。

创新2:分割分支与分类分支解耦

在早期的分割方法中(如FCIS、InstanceFCN),分割和分类是耦合 的------先做分割,再根据分割结果判断类别。这会导致类别竞争问题:如果一个像素可能属于多个类别,模型需要在这之间做权衡。

Mask R-CNN的做法是:每个类别独立预测一个二值掩码

  • 具体来说,分割分支输出 K × m × m 的张量,其中 K 是类别数,m×m 是掩码的分辨率(如 28×28)。

  • 在推理时,先由分类分支确定RoI属于哪个类别 c,然后只取分割分支中第 c 个通道的 m×m 掩码,将其放大到原图大小作为最终分割结果。

这样做的优点每个类别的掩码预测互不干扰,不需要在类别间做Softmax竞争,因此能更好地处理重叠物体的分割。

创新3:多任务损失函数

Mask R-CNN的损失函数包含三个部分

text

复制代码
L = L_cls + L_box + L_mask
损失项 说明
L_cls 分类损失(交叉熵),与Faster R-CNN相同。
L_box 边界框回归损失(Smooth L1),与Faster R-CNN相同。
L_mask 分割损失(二值交叉熵) ,只对**正样本(包含物体)**的RoI计算,对每个像素独立地计算二值交叉熵损失。

关键点 :分割损失只对正样本计算 ,因为只有正样本才有真实的掩码标签。而且每个像素的损失是独立的,相当于对 m×m 个像素做二分类(前景/背景)。

三、面试实战追问(深度考核)

  • 问1:为什么Mask R-CNN要把分类和分割解耦?如果不解耦会怎样?

    • :如果像早期方法那样,先分割再分类(或共享一个Softmax),会导致类别竞争 ------不同类别的掩码会互相抑制。Mask R-CNN的做法是每个类别独立预测二值掩码 ,分类分支只负责告诉模型"该取哪个通道的掩码"。这样分割质量更高,尤其适合重叠物体的场景。例如,一个人骑着一匹马,人挡住了马的部分身体,解耦后人和马的分割可以同时存在,互不干扰。
  • 问2:RoI Align的双线性插值具体是怎么计算的?

    • (展示数学功底):对于特征图上的一个浮点数坐标 (x, y),双线性插值取它最近的4个整数像素点 (x1,y1), (x1,y2), (x2,y1), (x2,y2),根据距离权重进行加权平均:

      text

      复制代码
      f(x,y) = (1-dx)*(1-dy)*f(x1,y1) + dx*(1-dy)*f(x2,y1) 
             + (1-dx)*dy*f(x1,y2) + dx*dy*f(x2,y2)

      其中 dx = x - x1dy = y - y1。整个过程可微,因此梯度可以正常反向传播。

  • 问3:Mask R-CNN中,掩码分支为什么用卷积层而不是全连接层?

    • :全连接层会破坏空间结构 ,将特征展平为一维向量,丢失了像素间的相对位置信息。而卷积层保持空间结构,能更好地学习局部特征,生成精细的掩码。这是分割任务与分类任务在设计上的核心差异------分类需要全局抽象特征,分割需要局部精细特征。
  • 问4:分割掩码的损失函数为什么只在正样本上计算?

    • :因为只有正样本(包含物体的RoI)才有真实的掩码标注。背景样本(负样本)没有对应的物体掩码,无法计算分割损失。而且,如果对负样本也强制预测掩码,会让模型学习无意义的背景模式,反而干扰训练。
  • 问5:Mask R-CNN是否可以做关键点检测?

    • :可以。Mask R-CNN的框架是可扩展的,作者在论文中也展示了Keypoint R-CNN ------在分割分支的基础上增加一个关键点分支(输出 K×m×m 的热力图,K为关键点数量),用同样的RoI Align和独立预测逻辑。这展示了该框架的通用性:可以同时输出框、掩码、关键点等多种信息。
相关推荐
fīɡЙtīиɡ ℡2 小时前
深入学习JAVA并发编程(上)
java·开发语言·学习
PC2005-cloud2 小时前
KubeSphere学习笔记:部署nginx
笔记·学习·nginx
Bernice橘子2 小时前
职场英语学习计划Day033
学习
依然鸣3 小时前
PTA团体程序设计天梯赛L2真题讲解L2-045-048
数据结构·c++·经验分享·学习·算法·pat考试·pat
星火跨境XINGHUOS3 小时前
独立站搭建后去哪里学运营?全链路学习路径拆解
学习
统计学小王子4 小时前
《数学少年-从正负号到几何原本》(第三章:“进退加减,循规而行“)--3.3 奶茶店流水账
学习·初中数学科普·数学科普
别催小唐敲代码4 小时前
STM32 定时器学习笔记:TIM 架构、输入捕获与 PWM 一篇讲透
笔记·stm32·学习
0566465 小时前
RAG 向量检索:从“查字“到“查意“
数据库·人工智能·学习·oracle
却道天凉_好个秋5 小时前
音视频学习(一百零二):全彩夜视
学习·音视频·全彩夜视