想象你是一位寻宝猎人,手中握着一张巨大的藏宝图。你要做的,是在这张纷乱复杂的图片里,快速找到目标物体——比如一辆车、一只猫,并准确画出它们的位置。起初,你只能笨拙地用一个放大镜在图上从左到右、从上到下地扫过每一个角落(滑动窗口),效率低下还容易漏掉关键线索。后来,一位老猎人教你用“直觉筛选”先圈定可疑区域,再逐一细看(区域提议),一下子轻松了不少。再后来,你训练了一只会闻宝物的猎犬,让它自己嗅出哪里藏着目标(RPN网络),你只需负责按图索骥。最后,你不仅找出了宝物,还能沿着宝物的轮廓精准地描边,把它从背景中完整地“抠”出来(实例分割)。这就是R-CNN家族的四代演进:从R-CNN、Fast R-CNN、Faster R-CNN到Mask R-CNN,每一代都在解决上一代的核心瓶颈,把“找到目标”这件事做得越来越快、越来越准、越来越细。

岗位关联

对AI从业者而言,掌握R-CNN家族演进,等于掌握了目标检测领域最经典的两阶段范式主线,理解RoI、RPN、锚点等高频面试概念,能帮你快速上手检测类和实例分割类项目的选型与调试。

目录
  1. 可视化演示
  2. 目标检测基础
  3. R-CNN开创
  4. Fast R-CNN提速
  5. Faster R-CNN革命
  6. Mask R-CNN像素级
  7. 家族对比总结
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示从R-CNN到Mask R-CNN的检测算法演进,以及RoI Pooling与RoI Align的精度差异。

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

R-CNN检测家族演进 R-CNN:SS选区→CNN特征→SVM分类,多阶段 Fast:共享特征图,RoI Pooling端到端 Faster:RPN替代SS,真正端到端训练 Mask R-CNN = Faster R-CNN + mask分支 + RoI Align 从多阶段到端到端,精度与速度持续提升

目标检测基础

在寻宝猎人动手之前,先要明白“寻宝”这件事到底在考什么。目标检测的任务是:给定一张任意尺寸的图片,找出图中所有目标物体的位置和类别。位置通常用一个矩形框(bounding box)来表示,类别则是“猫”“狗”“车”这样的标签。这比单纯做图像分类困难得多——分类只需要回答“这张图里有没有猫”,检测却要回答“猫在哪儿、猫有多大、图上还有没有别的猫”。

最朴素的思路是滑动窗口:像拿一个固定大小的放大镜在藏宝图上逐行扫描,每个位置都截取一小块交给分类器判断。放大镜的尺寸和步长都无法事先确定,为了覆盖所有可能的目标大小,你需要几十万次扫描,计算量巨大,准确率却不尽如人意——这就像把整个森林一寸寸翻遍,累死也找不到宝藏。

于是聪明的猎人想到,能不能先用一种快速筛选的方式,圈出少数“可能藏着宝物的可疑区域”,再对这些区域做精细判断?这就是区域提议(Region Proposal)的思路。它把“生成候选框”和“对候选框分类”分成两个阶段,形成了经典的两阶段检测范式。R-CNN家族正是沿着这个范式不断进化的:先粗筛出候选区域,再对候选区域做精细分类与回归。

在目标检测中,衡量两个框重合程度的指标是交并比(IoU),它是后续非极大值抑制、训练样本分配中最常用的尺子。

有了 IoU 这把尺子,猎人就能判断自己画出的框和真实宝物坑位有多接近。接下来 R-CNN 的登场,就是把这套寻宝流程真正落地。

IoU(A,B)=∣A∩B∣∣A∪B∣IoU(A,B) = \frac{|A \cap B|}{|A \cup B|}
交并比就是两个框重叠面积占合并面积的比例。IoU 越高,说明预测框与真实框越接近。
  1. 交叠面积两个框重叠部分的面积,记作 $|A \cap B|$
  2. 并集面积两个框总共覆盖的面积,等于两者面积之和减去重叠面积 $|A \cup B| = |A| + |B| - |A \cap B|$
  3. 比值重叠面积除以并集面积,得到 0 到 1 之间的相似度分数 $\frac{|A \cap B|}{|A \cup B|}$

R-CNN开创

R-CNN(Region-based CNN)是这场寻宝革命的开创者。它的思路很直白:先用“选择性搜索”(Selective Search)在藏宝图上圈出大约 2000 个可疑区域——这些区域像猎人根据颜色、纹理、边缘等线索快速圈出的“有蹊跷的地方”。然后,对每一个可疑区域,裁剪出来并缩放到固定尺寸,依次送进卷积神经网络提取特征。

这里有一个看似笨拙却关键的操作:裁剪缩放。因为 CNN 全连接层要求输入固定大小(如 224×224),每个候选区域的尺寸各不相同,必须统一。于是 R-CNN 的推理流程是:2000 个候选框逐一裁图、逐一缩放、逐一过 CNN,再逐一用 SVM 分类器判断每个框属于哪个类别,最后用回归器修正框的位置。整个过程就像猎人把 2000 块挖出来的泥土挨个送到实验室化验,耗时极长——单张图片推理需要几十秒。

R-CNN 中 SVM 分类器的作用可以用一个线性打分模型来描述:它把 CNN 提取的特征向量映射为类别得分,得分最高的类别就是最终判定。

R-CNN 的贡献是开创性地把 CNN 引入目标检测,让检测精度远超传统方法。但它的问题也很明显:2000 个区域各自独立过网络,大量的卷积计算被重复浪费。就像猎人每次化验一块泥土都要重新跑一趟实验室,既慢又累。这个“重复劳动”的痛点,直接催生了 Fast R-CNN 的登场。

s(x)=wTϕ(x)+bs(x) = \mathbf{w}^{\mathrm{T}} \phi(x) + b
这是 SVM 的决策函数:对特征向量做加权求和再加偏置,输出该特征属于某个类别的置信度分数。
  1. 特征向量$\phi(x)$ 表示 CNN 从候选区域提取的深度特征,相当于把一块泥土的“成分化验单”
  2. 权重向量$\mathbf{w}^{\mathrm{T}}$ 是 SVM 学到的权重,代表每个特征维度对最终决策的重要程度
  3. 偏置项$b$ 是偏移量,相当于分类决策的“及格线”调整
  4. 得分$s(x)$ 综合所有特征后输出的类别分数,得分最高者胜出

Fast R-CNN提速

Fast R-CNN 的突破性想法是:整张图片只做一次卷积,得到一张共享的特征图,然后从这张特征图上直接提取对应候选区域的特征。这相当于猎人不再把每一块泥土都送回实验室,而是先在现场对整个区域做一次高光谱扫描,然后把 2000 块泥土的位置信息记录在统一地图上,按需裁剪分析。省去了大量重复的 CNN 前向计算。

但问题来了:候选区域在特征图上的尺寸各不相同,而后续的全连接层又要求特征尺寸固定。Fast R-CNN 引入了 RoI池化(RoI Pooling)来解决这个问题。它将任意大小的候选区域特征图划分为固定数量的子窗口(如 7×7),在每个子窗口内做最大池化,最终输出固定大小的特征向量。

Fast R-CNN 的另一大改进是把分类器和回归器统一进同一个网络,用多任务损失同时训练。损失函数由两大部分组成:

Fast R-CNN 的效果立竿见影:训练时间从 R-CNN 的 84 小时缩短到 9.5 小时,推理速度提升超过 10 倍,精度还有所提升。不过它仍然依赖选择性搜索来生成候选框,而选择性搜索是独立于网络的传统算法,无法与 CNN 联合优化。猎人虽然不用反复跑实验室了,但“圈定可疑区域”这一步还是靠人工经验,还得靠已经不在现场的老猎人手工画圈,这显然还不够。

L(p,u,tu,v)=Lcls(p,u)+λ[u≥1]Lloc(tu,v)L(p,u,t^u,v) = L_{\mathrm{cls}}(p,u) + \lambda [u \ge 1] L_{\mathrm{loc}}(t^u,v)
多任务损失 = 分类损失 + 定位损失。分类部分判断候选框属于哪一类,定位部分修正候选框的位置,二者联合训练让网络一并学会“看准”和“框准”。
  1. 分类损失$L_{\mathrm{cls}}(p,u)$ 衡量预测类别分布 $p$ 与真实类别 $u$ 的差异
  2. 定位损失$L_{\mathrm{loc}}(t^u,v)$ 衡量预测框偏移 $t^u$ 与真实框偏移 $v$ 的差距
  3. 背景开关$[u \ge 1]$ 是一个指示函数,当候选框属于背景($u=0$)时置零,不计算定位损失;只有真实包含目标时才修正框
  4. 加权求和$\lambda$ 控制分类和定位损失的相对权重,平衡两个任务的训练

Faster R-CNN革命

Faster R-CNN 的变革性思路,是直接把“圈定可疑区域”这件事也交给神经网络来做。它设计了一个轻量级的 区域提议网络(RPN,Region Proposal Network),像训练一只猎犬,让它自己嗅出藏宝图上哪些位置可能有宝物。RPN 在共享特征图上滑动一个小窗口,每个位置预测若干个候选框,并给出“这里是否是目标”的置信度。

RPN 的核心机制是锚点(anchor)。锚点是一组预先定义好的、不同尺寸和长宽比的参考框,比如正方形、扁长形、竖长形,分别对应行人、汽车、横幅等不同形态的目标。在每个滑动位置上,RPN 都基于锚点预测对应的候选框,输出候选框相对锚点的偏移量,以及该框含有目标的概率。锚点机制让 RPN 能够覆盖多尺度、多形状的目标,而不必像滑动窗口那样暴力穷举。

RPN 的引入让整个检测流程真正做到了端到端训练:所有模块(特征提取、区域提议、分类回归)共享卷积特征,可以联合优化。RPN 的损失函数如下:

Faster R-CNN 的诞生标志着两阶段检测器走向成熟:RPN 的速度远快于选择性搜索,且能在大规模数据上与检测网络联合优化。推理速度从 Fast R-CNN 的 0.2 秒大幅下降,精度也跃升到新高度。猎人和猎犬配合默契:猎犬负责嗅探方位,猎人负责精准验货。不过,猎人在验货时偶尔会“手抖”——这正是 RoI 池化的量化误差问题,也是下一个版本要解决的核心目标。

L({pi},{ti})=1Ncls∑iLcls(pi,pi∗)+λ1Nreg∑ipi∗Lreg(ti,ti∗)L(\{p_i\},\{t_i\}) = \frac{1}{N_{\mathrm{cls}}}\sum_i L_{\mathrm{cls}}(p_i,p_i^*) + \lambda \frac{1}{N_{\mathrm{reg}}}\sum_i p_i^* L_{\mathrm{reg}}(t_i,t_i^*)
RPN 损失同样由分类和回归两部分组成。对每个锚点,判断它是否包含目标,并对包含目标的锚点修正其位置偏移。
  1. 锚点索引$i$ 遍历特征图上生成的每一个锚点
  2. 二分类损失$L_{\mathrm{cls}}(p_i,p_i^*)$ 判断锚点 $i$ 内是否有目标,$p_i^*$ 是真实标签(1 有目标 / 0 无目标)
  3. 回归损失$L_{\mathrm{reg}}(t_i,t_i^*)$ 修正锚点位置到真实框的偏移,只有正样本才参与
  4. 归一化$\frac{1}{N_{\mathrm{cls}}}$ 和 $\frac{1}{N_{\mathrm{reg}}}$ 对批量大小做归一化,保证损失尺度稳定
  5. 平衡系数$\lambda$ 调节分类与回归损失的相对重要程度

Mask R-CNN像素级

Mask R-CNN 在 Faster R-CNN 的基础上增加了一个并行分支:掩码分支,用于对每个目标做像素级的分割。如果把 Faster R-CNN 比作猎人+猎犬的组合,Mask R-CNN 就像是给猎人配备了一支精细的画笔——不仅指出“宝物在哪个框里”,还沿着宝物的边缘一笔一笔描出完整轮廓,把目标从背景中精确地“抠”出来,这就是实例分割。

Mask R-CNN 最关键的改进是 RoI Align。它发现 Faster R-CNN 中的 RoI 池化存在严重的“量化误差”问题:候选区域映射到特征图时,坐标需要取整,池化时划分网格也需要取整,两次取整导致边界信息损失。想象猎人画框时手一抖,框的边角偏离了实际宝物几毫米,虽然大致位置对,但像素级描边时就对不齐了。RoI Align 的做法是不取整,而是用双线性插值对浮点坐标位置采样特征值,保证空间对齐精度。

Mask R-CNN 的总损失在检测损失(分类+定位)之上,又叠加了掩码损失:

RoI Align 带来的精度提升是显著的:目标检测的框回归更准了,分割的掩码边界也更精细了。Mask R-CNN 在 COCO 数据集上同时刷新了检测和分割的纪录。至此,猎人的装备已经非常齐全:猎犬嗅探(RPN)、精准验货(检测头)、精细描边(掩码头),从粗到细、从框到像素,构成了完整的实力梯队。那么,这一家四代放在一起比较,各自的性能差距到底有多大?

L=Lcls+Lbox+LmaskL = L_{\mathrm{cls}} + L_{\mathrm{box}} + L_{\mathrm{mask}}
总损失 = 分类损失 + 边界框损失 + 掩码损失。掩码损失衡量预测出的像素级掩码与真实目标轮廓的差异。
  1. 分类损失$L_{\mathrm{cls}}$ 判断检测框内的目标类别
  2. 边界框损失$L_{\mathrm{box}}$ 修正检测框的位置和大小
  3. 掩码损失$L_{\mathrm{mask}}$ 对每个像素做二分类,判断该像素是否属于目标,输出目标的形状轮廓
  4. 总损失$L$ 三项加权求和,让网络同时学会“是什么”“在哪框”和“长什么样”

家族对比总结

回顾 R-CNN 家族的四代演进,就像观察一位寻宝猎人的成长:从最初用手电筒一寸寸扫地图(滑动窗口),到学会用经验圈可疑区域(R-CNN + 选择性搜索),再到把地图共享、按需裁剪(Fast R-CNN),继而训练猎犬自主嗅探(Faster R-CNN),最后装备画笔滴水不漏地描边(Mask R-CNN)。每一代都精准解决了上一代的痛点。

从速度上看,R-CNN 单张图片需要几十秒,Fast R-CNN 只需 0.2 秒左右,Faster R-CNN 进一步降到 0.05 秒级别,逐步接近实时。从精度上看,在 PASCAL VOC 数据集上,R-CNN 的 mAP 约 58.5,Fast R-CNN 提升到 70.0,Faster R-CNN 达到 73.2,Mask R-CNN 则把检测与分割统一,在 COCO 上取得了更大的突破。候选框的数量也从 2000 个逐步减少到 300 个,少而精,效率和质量同步提升。

这条演进脉络也回答了目标检测领域一个根本问题:如何在大规模视觉搜索中,用尽量少的计算量获得尽量高的定位精度。R-CNN 家族从“先提议后分类”的两阶段范式出发,逐步把提议、特征提取、分类回归、像素分割全部融合进统一的深度学习框架中。理解这条脉络,你就掌握了目标检测的底层骨架,也步入了更深的检测前沿。

58.5→70.0→73.2→79.058.5 \rightarrow 70.0 \rightarrow 73.2 \rightarrow 79.0
这是一条简洁的精度跃迁线:四代模型在检测基准上的 mAP 分数依次攀升,代表“框得越来越准”。
  1. R-CNN58.5,开创者把检测精度拉高到新台阶,但速度极慢
  2. Fast R-CNN70.0,共享卷积+多任务训练,精度大幅上涨
  3. Faster R-CNN73.2,端到端训练,精度再上台阶
  4. Mask R-CNN79.0,像素级对齐,精度最终冲上新高

AI 应用场景

自动驾驶中的车辆行人检测

阶段:目标检测与实例分割

解决的问题:传统视觉方法在复杂路况下难以同时兼顾速度与精度,对光照变化、遮挡、多尺度目标都很敏感。基于 Faster R-CNN 或 Mask R-CNN 的检测系统可以在车载芯片上高效完成车辆、行人、骑行者等多类目标的实时检测,并用分割掩码帮助车辆理解目标的精确轮廓,从而支持更安全的避障决策。

具体案例:某自动驾驶公司用 Faster R-CNN 作为感知核心,在行车视频中实时框出前方 100 米内的车辆与行人;而在停车场等低速场景下切换到 Mask R-CNN,对相邻车辆的精确掩码做可视化和测距,帮助自动泊车系统判断可停空间。

医疗影像中的病灶检测

阶段:医学图像分析

解决的问题:放射科医生在 CT / X 光片中手动寻找病灶,耗时且容易漏诊。R-CNN 家族的两阶段检测方式非常契合“先粗筛可疑区域、再精细判断”的临床思维,可以对影像中的结节、肿瘤等病灶做检测并给出定位框,辅助医生快速聚焦注意力。

具体案例:医院在肺癌早筛项目中采用 Mask R-CNN 对肺部 CT 影像做肺结节检测和分割,算法先通过 RPN 圈出可疑区域,再用掩码分支标出结节的精确边界,为医生提供可量化的病灶体积信息,将阅片效率提升 3 倍以上。

Python 演示

python58 行
import timeimport numpy as np class Detector:    """模拟R-CNN家族成员, 记录候选框数量与推理耗时"""     def __init__(self, name, proposal_count, share_conv=False,                 use_rpn=False, mask_branch=False):        self.name = name        self.proposal_num = proposal_count        self.share_conv = share_conv        self.use_rpn = use_rpn        self.mask_branch = mask_branch     def infer(self, image):        start = time.time()        time.sleep(self.proposal_num * 0.0002)        cost = (time.time() - start) * 1000        return cost def iou(box_a, box_b):    x1 = max(box_a[0], box_b[0])    y1 = max(box_a[1], box_b[1])    x2 = min(box_a[2], box_b[2])    y2 = min(box_a[3], box_b[3])    inter = max(0, x2 - x1) * max(0, y2 - y1)    area_a = (box_a[2] - box_a[0]) * (box_a[3] - box_a[1])    area_b = (box_b[2] - box_b[0]) * (box_b[3] - box_b[1])    union = area_a + area_b - inter    return inter / union if union > 0 else 0.0 def nms(boxes, scores, threshold=0.5):    keep = []    order = scores.argsort()[::-1]    while order.size > 0:        i = order[0]        keep.append(i)        rest = order[1:]        pairs = [iou(boxes[i], boxes[j]) for j in rest]        order = rest[np.array(pairs) < threshold]    return keep if __name__ == "__main__":    image = np.zeros((64, 64, 3), dtype=np.uint8)    family = [        Detector("R-CNN", 2000),        Detector("Fast R-CNN", 2000, share_conv=True),        Detector("Faster R-CNN", 300, use_rpn=True),        Detector("Mask R-CNN", 300, use_rpn=True, mask_branch=True)    ]    for det in family:        cost_ms = det.infer(image)        print(det.name, "proposals =", det.proposal_num,              "cost = %.1f ms" % cost_ms)     boxes = np.array([[5, 5, 20, 20], [7, 7, 22, 22], [40, 40, 60, 60]])    scores = np.array([0.9, 0.8, 0.7])    print("NMS keep:", nms(boxes, scores))
目的:用简化模拟演示 R-CNN 家族的推理耗时差异,并实现 IoU 计算与 NMS 后处理。
  1. proposal_count=2000R-CNN 和 Fast R-CNN 都依赖约 2000 个候选区域,Faster R-CNN 通过 RPN 把候选数量降到 300,这也是速度跃升的关键
  2. time.sleep(self.proposal_num * 0.0002)模拟候选框数量对推理时间的线性影响,候选框越少耗时越低
  3. share_conv=TrueFast R-CNN 开启整图共享卷积,此处的标志位在更完整的实现中会控制计算复用
  4. pairs = [iou(boxes[i], boxes[j]) for j in rest]逐个计算当前最高分框与其余框的交并比
  5. order = rest[np.array(pairs) < threshold]保留与最高分框重叠度低于阈值的框,抑制冗余重复检测

常见误区

误区我以为 Fast R-CNN 比 R-CNN 快,是因为它不再需要生成候选区域,直接从整张图输出检测结果。

正解实际上 Fast R-CNN 仍然依赖选择性搜索等外部区域提议算法生成约 2000 个候选框。它的提速来自于“整图只做一次卷积”——候选框在共享特征图上做 RoI 池化,而不是像 R-CNN 那样每个候选框单独过一遍 CNN。直到 Faster R-CNN 用 RPN 替换掉选择性搜索,候选区域才真正实现“网络化生成”。

为何常见:名字里的 "Fast" 容易让人误以为它彻底抛弃了旧框架,但它的核心改进集中在计算复用和训练方式上,而非提议来源。

误区我以为 RoI 池化和 RoI Align 是完全等价的操作,只是实现的库函数不同。

正解两者有本质差异。RoI 池化在做候选区域映射和网格划分时都进行了取整操作,两次量化误差会让边界特征偏移最多约 1 个像素;RoI Align 则保留浮点坐标,用双线性插值从周围四个采样点计算中心点的特征值,真正消除了量化误差。对检测框的回归影响不大,但对需要逐像素精确对齐的实例分割任务,这一改进至关重要。

为何常见:两个概念名字相似,且都用于把不同尺寸的区域特征变成固定尺寸,没有实际跑过分割任务的人很难直观感受到那“半个像素”的差距。

误区我以为 Mask R-CNN 就是把 Faster R-CNN 的检测头旁边并联一个分割头,其他部分完全不动。

正解如果只是简单加一个分割头,量化误差会令掩码输出十分粗糙。Mask R-CNN 能取得好效果,前提是把 RoI 池化替换为 RoI Align,同时引入了掩码分支独立预测的“逐像素 sigmoid + 二值交叉熵”设计。只有空间对齐和分支解耦同时到位,实例分割才能摆脱检测框的栅格化误差。

为何常见:人的直觉是“加法改动”最容易理解,但 Mask R-CNN 的精度提升来源于对底层采样机制和损失设计的同步改造。

误区我以为 RPN 只需要判断每个滑动窗口位置有没有目标就行,跟一般的图像二分类网络没什么区别。

正解RPN 的核心在于锚点机制——它在每个位置预定义了多组不同长宽比和尺度的锚框,同时输出两个分支:分类分支判断每个锚框内是否有目标,回归分支输出锚框到真实候选框的偏移量。锚点设计让 RPN 天然拥有多尺度感知能力,这是它能在速度和召回率上同时超越选择性搜索的关键。

为何常见:很多初学者只关注 RPN 的“区域提议”功能,忽略了它本质上是一个基于锚点的密集预测网络。

误区我以为既然 R-CNN 家族这么经典,那么所有两阶段检测器都一定比单阶段检测器准确。

正解两阶段检测器(如 Faster R-CNN)的精度通常较高,因为“先粗筛后精修”可以减少类别不平衡问题;但单阶段检测器(如 YOLO、SSD)通过直接在特征图上密集预测,在推理速度和简单场景下往往更有优势。近年的研究表明,通过改进训练策略和特征融合,单阶段检测器在精度上也能追平甚至反超两阶段检测器。

为何常见:R-CNN 家族在公开榜单上的高 mAP 容易让人忽略了这些指标背后特定数据集和测试条件的制约。

面试题

Q1. R-CNN 中生成候选区域使用的主要方法是什么?

单选题 · easy

  • A.滑动窗口穷举所有位置
  • B.选择性搜索合并相似区域← 正确答案
  • C.RPN 网络自主生成
  • D.随机生成大量矩形框

答案:B。R-CNN 使用选择性搜索(Selective Search)基于颜色、纹理、尺寸等线索合并区域生成约 2000 个候选框。滑动窗口是 R-CNN 之前的目标检测思路;RPN 是 Faster R-CNN 的改进;随机生成不是有效方法。

Q2. RoI 池化的核心作用是什么?

单选题 · easy

  • A.生成候选区域提议
  • B.将任意大小区域特征变换为固定尺寸← 正确答案
  • C.对图片做数据增强
  • D.直接输出目标类别概率

答案:B。RoI 池化把候选区域在特征图上对应区域划分为固定数量的子窗口(如 7×7),并在每个子窗口内做最大池化,从而适配全连接层的固定输入要求。它不负责生成候选框,也不直接输出类别概率。

Q3. Faster R-CNN 相对于 Fast R-CNN 的核心改进是什么?

单选题 · easy

  • A.用 RPN 替换选择性搜索← 正确答案
  • B.用 SVM 替换神经网络分类器
  • C.增加候选框数量到 2000 个
  • D.引入滑动窗口做区域提议

答案:A。Faster R-CNN 的里程碑式改进是用区域提议网络(RPN)替代了选择性搜索,让候选区域的生成也变成可学习、可联合优化的环节,从而实现端到端训练。SVM 是 R-CNN 时代的分类器,Fast R-CNN 已改为网络分类。

Q4. RoI Align 与 RoI 池化最主要区别是什么?

单选题 · mid

  • A.使用双线性插值消除量化误差← 正确答案
  • B.采用更深的特征提取网络
  • C.每个子窗口做平均池化
  • D.输出特征图尺寸可以变化

答案:A。RoI Align 不进行取整,而是保留浮点坐标,通过双线性插值从邻近像素采样得到特征值,避免了 RoI 池化中两次量化造成的空间偏移。它使掩码分割的像素级对齐成为可能。

Q5. Mask R-CNN 在 Faster R-CNN 基础上新增了什么分支?

单选题 · mid

  • A.掩码分割分支← 正确答案
  • B.人脸关键点分支
  • C.文本识别分支
  • D.图像超分辨分支

答案:A。Mask R-CNN 在 Faster R-CNN 的分类分支和回归分支之外,并行新增了一个掩码分支,对每个 RoI 输出逐像素的类别掩码,完成实例分割任务。

Q6. 在两阶段检测框架中,第一阶段通常负责什么?

单选题 · mid

  • A.直接输出最终检测框
  • B.生成候选区域提议← 正确答案
  • C.对像素做语义分割
  • D.输出目标运动轨迹

答案:B。两阶段检测的第一阶段是区域提议阶段,用 RPN 或选择性搜索生成可能含有目标的候选区域;第二阶段对候选区域做分类和回归,输出最终检测结果。第一阶段直接输出最终检测框属于单阶段检测器的做法。

Q7. 关于 R-CNN 的 SVM 分类器,下列说法正确的是?

单选题 · hard

  • A.与 CNN 特征提取端到端联合训练
  • B.先由 CNN 提特征,再单独训练 SVM 分类← 正确答案
  • C.SVM 负责生成候选区域
  • D.SVM 直接对原始图像像素分类

答案:B。R-CNN 采用分阶段训练策略:先在大规模数据集上预训练 CNN,再在检测数据集上微调 CNN 提取特征,最后用提取到的特征单独训练 SVM 分类器与回归器。SVM 不参与候选区域生成,也不处理原始像素。

Q8. 以下哪些属于 R-CNN 家族演进中的关键改进?

多选题 · mid

  • A.整图共享卷积特征← 正确答案
  • B.区域提议网络化← 正确答案
  • C.双线性插值实现像素对齐← 正确答案
  • D.使用 BPTT 做反向传播

答案:ABC。整图共享卷积是 Fast R-CNN 的核心,RPN 网络化是 Faster R-CNN 的标志,RoI Align 的双线性插值是 Mask R-CNN 的精度保障。BPTT 是一般神经网络通用的反向传播算法,并非 R-CNN 家族特有的演进改进,且它不是演进的关键点。

Q9. Fast R-CNN 相对 R-CNN 的优势体现在哪些方面?

多选题 · hard

  • A.整图只做一次卷积提取特征← 正确答案
  • B.RoI 池化适配不同尺寸候选框← 正确答案
  • C.不再需要选择性搜索
  • D.分类和回归统一为多任务网络← 正确答案

答案:ABD。Fast R-CNN 让整张图只过一遍 CNN 得到共享特征图,再用 RoI 池化把不同尺寸的候选区域特征固定成统一尺寸,并统一训练分类和回归网络。但它的候选区域依然来自选择性搜索,直到 Faster R-CNN 才取消了这一外部依赖。

Q10. 关于 Mask R-CNN 的设计,以下哪些描述正确?

多选题 · extreme

  • A.可同时完成检测与实例分割← 正确答案
  • B.使用 RoI Align 提高定位精度← 正确答案
  • C.掩码分支与检测分支共享 RPN 特征← 正确答案
  • D.完全抛弃锚点机制

答案:ABC。Mask R-CNN 在 Faster R-CNN 基础上增加掩码分支,从而同时输出检测框和实例掩码;通过 RoI Align 消除了量化误差;掩码分支与分类回归分支共享 RPN 提供的 RoI 特征。它没有抛弃锚点,RPN 仍是生成候选框的基础。