想象你是一位寻宝猎人,手中有一张神秘藏宝图。老派目标检测的做法是:先在地图上铺满大小不一的透明纸框(锚框),然后逐一翻开每个纸框检查里面有没有宝物。纸框铺得太少,大宝物盖不住;铺得太多,大部分力气白白浪费。Anchor-free 方法则彻底扔掉纸框:探测器直接扫过地图,哪里有宝物就直奔哪里,再顺手量出宝物的尺寸。这个思路催生了两个优秀代表——CenterNet 像“中心定位仪”,先钉住宝物中心再撑开外框;FCOS 像“全图测距尺”,让每个像素都报告自己到边界的距离。这篇文章就用“寻宝”这条故事线,带你完整掌握 Anchor-free 检测的两大经典算法。

岗位关联

掌握 CenterNet 与 FCOS,你将理解现代检测器如何摆脱锚框调参、简化后处理并加速落地,这是计算机视觉工程师在选型与部署中的核心能力。

目录
  1. 可视化演示
  2. 初识Anchor-free:放下格子,直接找宝
  3. CenterNet:先钉中心点,再撑开框
  4. FCOS:逐像素报告距离
  5. 架构对比分析:结构、标签与设计哲学
  6. 后处理变轻:卸下锚框与NMS重担
  7. 性能与选型:数据说话,按需取用
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

对比CenterNet中心点热力图检测与FCOS逐像素预测机制,切换模式观察两种Anchor-free检测范式的核心差异。

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

CenterNet中心点检测 网络输出中心点热力图,标注每个目标中心位置 同时预测中心偏移量和目标尺寸 BBox=(cx+ox, cy+oy, w, h) 通过解码中心点加尺寸恢复完整边界框,无需NMS后处理

初识Anchor-free:放下格子,直接找宝

想象你是一位寻宝猎人,手里拿着一张老地图。老派的做法是:先在地图上铺满形状固定的透明纸框,有大有小、有横有竖,然后挨个翻开纸框找宝物。如果宝物刚好藏在某个框里就算找到;如果宝物比所有框都大,或偏偏落在两个框的交界处,就很容易漏掉。为了不漏宝,你只能多铺几层框,代价是大量白费功夫。在目标检测里,这些纸框就是“锚框”(Anchor)。模型先预设成千上万个不同大小和比例的框,再逐一判断每个框里有没有目标、需要怎么微调。锚框越多,计算量越大,而框的尺寸比例往往要靠人工经验或聚类得到,换一个数据集就要重新调。

Anchor-free 方法彻底扔掉了纸框:地图上哪里有宝,探测器就直奔哪里,然后顺手量出宝物的尺寸。这样既不用提前设计框的形状,也不会因为框太小而漏掉大目标。具体而言,Anchor-free 主要分成两条技术路线。一条像“定点扎针”——先找到目标中心点,再回归宽高,代表是 CenterNet;另一条像“全景勘测”——让特征图上的每个位置都预测自己到目标四条边的距离,代表是 FCOS。两条路线都跳过了“锚框匹配”这一步,因此训练时不需要计算锚框与真实框的匹配关系,代码更简洁,超参数也更少。

传统方法在训练时要反复计算锚框与真实框的“重叠程度”来选择正样本,这个重叠程度通常用交并比(IoU)衡量。Anchor-free 省掉了这层匹配,也就省掉了大量超参数调试。

IoU=∣A∩B∣∣A∪B∣=SoverlapSanchor+Sgt−Soverlap\displaystyle \text{IoU} = \frac{|A \cap B|}{|A \cup B|} = \frac{S_{overlap}}{S_{anchor} + S_{gt} - S_{overlap}}

1. 重叠区域:锚框 A 与真实框 B 相交部分的面积,数值越大说明两者越贴合。

A∩B\displaystyle A \cap B

2. 并集区域:两框覆盖的总地盘面积,等于各自面积相加再扣掉重叠部分。

∣A∪B∣=∣A∣+∣B∣−∣A∩B∣\displaystyle |A \cup B| = |A| + |B| - |A \cap B|

3. 比值含义:IoU 越接近 1,说明“纸框”和宝物轮廓越吻合;传统检测器正是靠它决定哪些锚框算正样本。Anchor-free 直接预测中心或距离,不再需要这套复杂匹配。

SoverlapSanchor+Sgt−Soverlap\displaystyle \frac{S_{overlap}}{S_{anchor} + S_{gt} - S_{overlap}}

回到寻宝的比喻:Anchor-free 不是帮你把纸框调得更准,而是直接告诉你“宝在哪里、有多大”。这正是它能在速度和部署上胜出的根本原因——把搜索问题变成了直接回答。

CenterNet:先钉中心点,再撑开框

想象你拿着激光笔走进藏宝山洞。老派猎人要在洞壁贴满透明格子胶带,一格一格找宝物。CenterNet 的猎人则举起激光笔扫过整面墙,哪里有宝物,墙面上就会亮起一簇光斑,光斑最亮的地方就是宝物中心。这簇光斑在深度学习中叫“中心点热力图”(heatmap):网络为每个类别输出一张特征图,图上每个位置的值代表“这里有多大概率是某类目标的中心”,值越高峰越亮。

CenterNet 把目标检测完全转化成关键点检测任务。网络主干(如堆叠沙漏 Hourglass 或 ResNet)编码图像后,分出三个输出头:热力图头负责找中心峰,尺寸头负责在中心峰处回归目标的宽和高,偏移头负责修正因下采样导致的中心坐标取整误差。预测时,只需要在热力图上取数值最高的 K 个峰,再读出对应位置的宽高和偏移,就能直接拼出检测框。由于峰天然稀疏,CenterNet 在一般场景下可以完全省略 NMS,这是它极具吸引力的工程优势。

CenterNet 的训练损失由三部分相加而成,其中热力损失是核心,它让网络学会“哪里该亮、哪里该暗”。

L=Lheat+λsizeLsize+λoffLoff\displaystyle L = L_{heat} + \lambda_{size} L_{size} + \lambda_{off} L_{off}

1. 热力损失:这是改进版的焦点损失(Focal Loss)。当某个位置确认为中心点时,鼓励预测值接近 1;当它不是中心但落在高斯软标签范围内时,惩罚按距离衰减,让模型把注意力集中在真正重要的峰上。

Lheat=−1N∑xyc{(1−P^xyc)αlog⁡P^xyc,Pxyc=1(1−Pxyc)β(P^xyc)αlog⁡(1−P^xyc),otherwise\displaystyle L_{heat} = -\frac{1}{N} \sum_{xyc} \begin{cases} (1-\hat{P}_{xyc})^{\alpha} \log \hat{P}_{xyc}, & P_{xyc} = 1 \\[4pt] (1-P_{xyc})^{\beta} (\hat{P}_{xyc})^{\alpha} \log(1-\hat{P}_{xyc}), & \text{otherwise} \end{cases}

2. 尺寸损失:中心峰位置还要回归出目标的宽高,用 L1 误差衡量预测宽高与真实宽高的差距。

Lsize=1N∑k=1N∣S^pk−sk∣\displaystyle L_{size} = \frac{1}{N} \sum_{k=1}^{N} \left| \hat{S}_{p_k} - s_k \right|

3. 偏移损失:下采样会引入亚像素精度损失,这个分量用来修正中心点坐标的偏移,让“钉子”钉得更准。

Loff=1N∑p∣O^p~−(pR−p~)∣\displaystyle L_{off} = \frac{1}{N} \sum_{p} \left| \hat{O}_{\tilde{p}} - \left(\frac{p}{R} - \tilde{p}\right) \right|

4. 权重系数:论文中通常取 \(\lambda_{size}=0.1\)、\(\lambda_{off}=1\),保证热力损失主导训练方向。

L=Lheat+0.1Lsize+Loff\displaystyle L = L_{heat} + 0.1 L_{size} + L_{off}

CenterNet 就像把“找宝箱”简化成“钉钉子”——中心点找准了,框自然就出来了;热力峰天然稀疏,也不需要 NMS 清场,整个后处理流程因此变得轻快。这也是它以“极简”著称的核心原因。

FCOS:逐像素报告距离

换个场景,你不再是猎人,而是拿着测距仪的测绘员。你不需要知道宝物在哪一格,只需要在图上每一个点停下来,用测距仪量出:这个点到目标左边多远、上边多远、右边多远、下边多远。每一个点都回答“四边距离”,所有落在目标内部的点连起来,就拼出了宝物的轮廓。FCOS 正是这样做的:在特征图每个位置,直接预测该位置到目标左、上、右、下四条边的距离,同时预测该位置的分类得分。这种“逐像素预测”的形式,让 FCOS 看起来更像一个语义分割网络,而不是传统检测器。

FCOS 有两个重要补充。一是“中心度”(centerness)分支:离目标中心越远的像素,预测的框质量往往越差,中心度给这些像素打低分,在最终解码时被过滤掉。二是多尺度预测(FPN 特征金字塔):不同尺度的特征层分别负责不同大小的目标,让每个像素只在合适的尺度上做预测,显著减少重叠目标带来的歧义。训练时,FCOS 将所有位于目标框内的像素都视为正样本,用分类损失、回归损失和中心度损失联合优化。

FCOS 的回归目标可以写成如下形式:

(l∗,t∗,r∗,b∗)=(x−x0,  y−y0,  x1−x,  y1−y)\displaystyle (l^{*}, t^{*}, r^{*}, b^{*}) = (x - x_0, \; y - y_0, \; x_1 - x, \; y_1 - y)

1. 左右距离:像素点横坐标到目标左边界和右边界的距离,对应“左右量尺”。

l∗=x−x0,r∗=x1−x\displaystyle l^{*} = x - x_0, \qquad r^{*} = x_1 - x

2. 上下距离:像素点纵坐标到目标上边界和下边界的距离,对应“上下量尺”。

t∗=y−y0,b∗=y1−y\displaystyle t^{*} = y - y_0, \qquad b^{*} = y_1 - y

中心度通过左右比和上下比来定义:

centerness∗=min⁡(l∗,r∗)max⁡(l∗,r∗)×min⁡(t∗,b∗)max⁡(t∗,b∗)\displaystyle \text{centerness}^{*} = \sqrt{\frac{\min(l^{*}, r^{*})}{\max(l^{*}, r^{*})} \times \frac{\min(t^{*}, b^{*})}{\max(t^{*}, b^{*})}}

1. 左右比值:左右距离的比值落在 (0,1] 区间,越靠近中心越接近 1,越靠近边缘越接近 0。

min⁡(l∗,r∗)max⁡(l∗,r∗)\displaystyle \frac{\min(l^{*}, r^{*})}{\max(l^{*}, r^{*})}

2. 上下比值:上下距离同样取比值,衡量垂直方向上的居中程度。

min⁡(t∗,b∗)max⁡(t∗,b∗)\displaystyle \frac{\min(t^{*}, b^{*})}{\max(t^{*}, b^{*})}

3. 相乘开方:两个方向的居中程度综合起来就是“中心度”,只有接近 1 的像素才被保留为高质量检测框。

min⁡(l∗,r∗)max⁡(l∗,r∗)×min⁡(t∗,b∗)max⁡(t∗,b∗)\displaystyle \sqrt{\frac{\min(l^{*}, r^{*})}{\max(l^{*}, r^{*})} \times \frac{\min(t^{*}, b^{*})}{\max(t^{*}, b^{*})}}

FCOS 的哲学是“每个像素都是侦察兵”,让每个点都主动上报自己的位置感,最后用中心度筛选可信的点,拼出宝物形状。因此它在密集小目标和多尺度场景下表现尤为出色。

架构对比分析:结构、标签与设计哲学

同样是寻宝,CenterNet 猎人带的是中心定位仪,FCOS 测绘员带的是全图测距尺,两者探测装备和策略截然不同。结构上,CenterNet 基于关键点估计:主干网络输出热力图、宽高、偏移三个头,每个目标只对应一个中心峰。FCOS 则更接近语义分割的“全卷积逐像素”结构,输出分类、回归距离、中心度三个分支,每个目标内部的像素全部参与预测。这种结构差异直接决定了标签分配策略:CenterNet 的正样本是“目标中心点”,一个目标只喂一个点;FCOS 的正样本是“目标框内所有像素”,一个目标可能贡献几十上百个训练点。

设计哲学的不同带来了各自的优劣。CenterNet 的正样本极少,训练和解码都非常轻量,后处理几乎为零,部署路径最短;但它的思路是“先有峰再有框”,如果中心峰被遮挡或两个目标中心重叠过近,就可能漏检或合并。FCOS 的正样本极多,召回能力更强,配合 FPN 和中心度在精度上很有竞争力;但训练时要处理海量像素点,后处理仍需一定量的 NMS,工程链路相对更重。两者正样本数量的巨大差异,可以直观地用公式对比:

NposCenterNet=Nobj,NposFCOS=∑i=1M⌊his⌋×⌊wis⌋\displaystyle N_{pos}^{CenterNet} = N_{obj}, \qquad N_{pos}^{FCOS} = \sum_{i=1}^{M} \left\lfloor \frac{h_i}{s} \right\rfloor \times \left\lfloor \frac{w_i}{s} \right\rfloor

1. CenterNet 正样本数:等于目标实例总数,因为每个目标只取一个中心点作为正样本。

NposCenterNet=Nobj\displaystyle N_{pos}^{CenterNet} = N_{obj}

2. FCOS 正样本数:对每个目标,将其在特征图上的高、宽相乘,得到它覆盖的像素数量;\(s\) 是下采样步长,高宽需要先除以步长再取整。

⌊his⌋×⌊wis⌋\displaystyle \left\lfloor \frac{h_i}{s} \right\rfloor \times \left\lfloor \frac{w_i}{s} \right\rfloor

3. 量级差异:CenterNet 正样本量级是“几十个目标”,FCOS 正样本量级是“上万个像素”,训练与后处理的开销因此拉开差距。

∑i=1M⌊his⌋×⌊wis⌋\displaystyle \sum_{i=1}^{M} \left\lfloor \frac{h_i}{s} \right\rfloor \times \left\lfloor \frac{w_i}{s} \right\rfloor

所以没有绝对的优劣:想要极简部署流程,CenterNet 是首选;想要密集场景下的高精度,FCOS 更能打。选谁,取决于你的“藏宝洞”长什么样。

后处理变轻:卸下锚框与NMS重担

寻宝结束后,老派猎人要带着几万张纸框去登记台账:哪个框里的宝物跟哪个框重叠了、哪些记录要删掉……这些繁重的收尾工作就是后处理。Anchor-free 猎人回到家只需翻几页笔记,因为一开始就没贴纸框。传统检测器在推理时要先生成大量锚框(常见几万到十几万个),逐个回归后再用 NMS 去重;CenterNet 直接用峰值提取得到最终框,常规场景完全省略 NMS;FCOS 虽然仍会用到 NMS,但候选框经过了中心度过滤,数量远少于锚框方法的候选量。

从流程上看,三者差异非常清晰。传统流程是:图像 → 主干网络 → 锚框生成 → 分类/回归 → 海量候选 → NMS 去重 → 结果。CenterNet 流程是:图像 → 主干网络 → 热力图峰值 → 读取宽高偏移 → 结果。FCOS 流程是:图像 → 主干网络 → 分类/距离/中心度 → 中心度过滤 → 轻量 NMS → 结果。每一步的简化,都直接转化为延迟的降低和部署的便利。在自动驾驶、移动端等实时场景中,这种“卸重”意味着可以把省下的算力分配给更好的主干网络。

从计算复杂度上看,NMS 的数量级变化非常直观:

O(NMStraditional)=O(n2),O(decodeCenterNet)=O(n)\displaystyle O(\text{NMS}_{traditional}) = O(n^2), \qquad O(\text{decode}_{CenterNet}) = O(n)

1. 传统 NMS 复杂度:对 \(n\) 个候选框两两计算 IoU,候选上万时是平方级开销,这也是检测器推理时的主要瓶颈之一。

O(n2)\displaystyle O(n^2)

2. CenterNet 解码复杂度:只需对热力图做一次线性扫描取出 Top-K 峰,复杂度与像素数成正比,几乎零额外成本。

O(n)\displaystyle O(n)

3. 端到端延迟:总延迟约等于主干网络耗时加上解码耗时,解码部分大幅缩短后,整体延迟显著下降。

Ttotal=Tbackbone+Tdecode\displaystyle T_{total} = T_{backbone} + T_{decode}

后处理越轻,模型越好部署。这正是 Anchor-free 在移动端和实时系统里大受欢迎的原因——省下的每一毫秒,都能转化为更好的用户体验或更高的系统吞吐。

性能与选型:数据说话,按需取用

回到营地,两位猎人交上各自的战利品清单。在 COCO 数据集上,CenterNet 使用 Hourglass-104 主干可达到约 42% 的 AP,其优势在于流程极简、部署极快;FCOS 使用 ResNeXt-64x4d-101 + FPN 可达到约 44.7% 的 AP,精度上更胜一筹,但也更依赖强主干和多尺度设计。需要强调的是,这些数字反映的是“特定主干 + 特定配置”下的表现,换了轻量主干后排名可能反转。真正决定选型的,是业务场景本身。

选型可以按以下思路来权衡。精度敏感型任务(安防小目标、工业缺陷检测)优先选 FCOS + 强主干 + FPN,多尺度策略对大小不一的缺陷更友好。延迟敏感型任务(自动驾驶感知、移动端检测)优先选 CenterNet + 轻量主干,极简后处理能在有限算力下跑出更高帧率。此外还要考虑研发效率:CenterNet 无需 NMS、无需锚框聚类,代码路径最短;FCOS 的超参数略多,但精度上限更高。部署时则要对照芯片算力实测延迟,用“精度-延迟”综合打分来做最终决策。

一个实用的选型思路是给精度和延迟分别设定权重,用综合分数代替直觉判断:

Score=w1×AP−w2×Latency\displaystyle \text{Score} = w_{1} \times \text{AP} - w_{2} \times \text{Latency}

1. 精度项:AP 是 COCO 风格的平均精度,衡量检测能力的核心指标。

AP\displaystyle \text{AP}

2. 延迟项:端到端单帧推理耗时,包含预处理、主干、解码与后处理全部时间。

Latency\displaystyle \text{Latency}

3. 权重调节:\(w_1\) 和 \(w_2\) 根据业务需求设定——需要高精度就调大 \(w_1\),需要实时性就调大 \(w_2\),最终得分最高者胜出。

w1,w2\displaystyle w_{1}, w_{2}

最终,选哪个不是“哪个更好”的问题,而是“探险地需要什么”的问题。Anchor-free 的两种路线把精度与速度的权衡选择权,交还到了工程师手中。

AI 应用场景

自动驾驶实时感知

阶段:模型推理与后处理

解决的问题:车载芯片算力有限,传统 Anchor-based 检测器在推理时需要生成上万锚框并做 NMS,后处理延迟高,难以满足毫秒级感知要求。

具体案例:某 L2+ 辅助驾驶方案采用 CenterNet 的 3D 变体,直接从中心热力图回归目标的中心、尺寸和朝向,省去锚框与 NMS 流程,在 Orin 系列芯片上实现了 30 FPS 以上的实时 2D/3D 检测,同时将感知链路延迟降低了约 30%。

智慧零售密集小目标检测

阶段:特征提取与目标分类

解决的问题:货架俯拍图中商品数量庞大、尺寸相近且彼此紧贴,固定比例的锚框难以覆盖多尺度差异,容易漏检。

具体案例:某智慧零售项目使用 FCOS + FPN 对货架上的数百个 SKU 做逐像素检测,利用中心度分支过滤边缘低质量框,整体 mAP 相比原 Anchor-based 方案提升约 4 个百分点,且新品类只需补充标注即可快速迭代。

工业质检快速迭代部署

阶段:数据标注与算法迭代

解决的问题:新产线的缺陷形态未知,传统方法需要为新缺陷重新聚类锚框、调整比例超参,迭代周期长。

具体案例:某电子元件产线改用 Anchor-free 检测框架后,新缺陷上线只需标注目标框即可训练,省去锚框聚类步骤,算法上线周期从三周缩短到一周,误检率同步下降约 15%。

Python 演示

python56 行
import numpy as np  def build_heatmap(shape, centers, sigma=6):    """为每个目标中心生成一个高斯峰,模拟CenterNet的预测热力图"""    H, W = shape    heatmap = np.zeros((H, W), dtype=np.float32)    yy, xx = np.mgrid[0:H, 0:W]    for cx, cy in centers:        heatmap += np.exp(-((xx - cx) ** 2 + (yy - cy) ** 2) / (2 * sigma ** 2))    return heatmap  def build_size_map(shape, centers, sizes):    """在目标中心位置填入预测的目标宽高"""    H, W = shape    size_map = np.zeros((H, W, 2), dtype=np.float32)    for center, size in zip(centers, sizes):        cx, cy = center        size_map[cy, cx, 0] = size[0]        size_map[cy, cx, 1] = size[1]    return size_map  def decode_centernet(heatmap, size_map, topk=3, min_score=0.3):    """CenterNet式解码:取TopK峰值,读出宽高,还原出检测框"""    flat_idx = np.argsort(heatmap.ravel())[::-1][:topk]    ys, xs = np.unravel_index(flat_idx, heatmap.shape)    boxes = []    for y, x in zip(ys, xs):        if heatmap[y, x] < min_score:            continue        w, h = size_map[y, x]        boxes.append((x - w / 2, y - h / 2, x + w / 2, y + h / 2))    return boxes  def main():    shape = (64, 64)    centers = [(20, 30), (45, 15), (50, 50)]    sizes = [(12, 8), (16, 10), (10, 14)]     heatmap = build_heatmap(shape, centers, sigma=6)    size_map = build_size_map(shape, centers, sizes)     rng = np.random.default_rng(0)    heatmap = heatmap + 0.05 * rng.standard_normal(shape)     boxes = decode_centernet(heatmap, size_map, topk=3)    print("检测到的目标框(x1, y1, x2, y2):")    for box in boxes:        print(" ", box)  if __name__ == "__main__":    main()
目的:用 NumPy 从零模拟 CenterNet 的推理解码流程——生成高斯热力图,取 Top-K 峰值,读出宽高后还原出检测框,直观展示“无锚框、无 NMS”的解码思想。
  1. heatmap += np.exp(-((xx - cx) ** 2 + ...))在每个目标中心周围生成一个高斯峰,模拟网络预测的热力图输出
  2. np.argsort(heatmap.ravel())[::-1][:topk]把二维热力图展平后按分值排序,取前 K 个峰值索引
  3. np.unravel_index(flat_idx, heatmap.shape)将一维索引还原为二维坐标,得到峰的 (x, y) 位置
  4. if heatmap[y, x] < min_score: continue过滤低于阈值的弱峰,相当于用分数做简单筛选
  5. w, h = size_map[y, x]从尺寸图中读出该中心点的目标宽高,这是“先钉中心再撑框”的关键
  6. boxes.append((x - w / 2, ...))由中心坐标与宽高拼出左上角和右下角,还原完整检测框

常见误区

误区听名字以为 Anchor-free 完全没有先验,模型从零开始自由发挥,所有框都是网络纯“脑补”出来的。

正解Anchor-free 去掉的是“预先铺格子”(预设锚框),而不是一切先验。CenterNet 的下采样步长、高斯核大小,FCOS 的多尺度范围与中心度阈值,都是设计者注入的结构先验。可以理解为:不再铺纸框,但“激光笔的探测范围”仍需精心设定。

为何常见:“免锚框”这一宣传点过于响亮,容易让人把“不用 Anchor 匹配”误听成“毫无先验”。

误区既然论文说 CenterNet 无 NMS,那任何情况下都不能加 NMS,加了就是不纯正的 CenterNet。

正解CenterNet 的解码以峰值提取为主,常规场景确实不需要 NMS;但在目标极端重叠、不同类别中心靠得过近时,微量的局部抑制仍可能带来收益。“无 NMS”是默认配置下的工程结论,不是数学上的绝对禁令。

为何常见:把论文里的“默认简化”当成了“理论必然”,忽略了真实世界中形形色色的边界情况。

误区看到中心度也输出一个 0 到 1 的分数,以为它和分类概率是一回事。

正解中心度描述的是“当前像素离目标中心有多近”,是一个纯几何指标,用来压低边界附近低质量框的权重;分类分支负责判断“这里是什么类别”。推理时常把两者相乘作为最终得分,但它们的物理含义完全不同。

为何常见:两者都经过 sigmoid、输出范围都是 0~1,直觉上很容易混为一谈。

误区看到 FCOS 的 COCO AP 比 CenterNet 高几个点,就认定 FCOS 全面碾压,选型时只看榜单数字。

正解COCO 高 AP 不代表所有场景都好。CenterNet 在车辆、行人类“中心可辨”的目标上表现出色,且无 NMS 的部署优势是榜单上看不到的;FCOS 的优势在密集小目标与多尺度场景。正确做法是把精度、延迟、场景和目标尺度一起放进选型评分表。

为何常见:把公开数据集排名当作唯一标准,忽略了实际部署中至关重要的延迟和流程复杂度。

面试题

Q1. Anchor-free 检测与传统 Anchor-based 方法的核心区别是什么?

单选题 · easy

  • A.不再需要预先定义边界框即可预测← 正确答案
  • B.完全不再使用卷积神经网络
  • C.只适用于人脸检测任务
  • D.只输出分类结果不输出位置

答案:A。Anchor-free 的核心是抛开预设锚框,直接从特征图上预测目标中心或到边界的距离。它仍然使用卷积神经网络,也不局限于人脸,更不是只分类不定位。B、C、D 都属于对“免锚框”概念的过度发散。

Q2. CenterNet 的核心检测思想是?

单选题 · easy

  • A.在图像上枚举所有可能的框
  • B.定位目标中心点并回归宽高← 正确答案
  • C.对每个像素直接预测四个距离
  • D.用循环神经网络生成检测框

答案:B。CenterNet 把检测转化为关键点估计:先在热力图上找到目标中心峰,再在该位置回归宽和高。A 是滑动窗口思路,C 是 FCOS 的思路,D 与 CenterNet 无关。

Q3. CenterNet 热力图上的“峰”对应目标的什么位置?

单选题 · easy

  • A.目标的左上角
  • B.目标的右下角
  • C.目标中心位置← 正确答案
  • D.目标的类别数量

答案:C。CenterNet 将每个目标的中心点作为关键点,在热力图上形成峰值。峰的位置即目标中心,而不是角点或类别数量,因此选 C。

Q4. FCOS 中每个正样本像素预测哪四个量?

单选题 · mid

  • A.到目标左、上、右、下四条边的距离← 正确答案
  • B.目标中心点的坐标及宽高
  • C.两个角点的坐标位置
  • D.目标旋转角度和长宽比

答案:A。FCOS 的回归目标是 (l*, t*, r*, b*),即当前像素到目标左、上、右、下四条边的距离。B 是 CenterNet 的思路,C 是角点法,D 是带旋转框检测的思路,均不符合 FCOS。

Q5. FCOS 的 centerness(中心度)分支主要作用是什么?

单选题 · mid

  • A.判断目标的类别类型
  • B.抑制远离中心的低质量预测框← 正确答案
  • C.替代特征金字塔的作用
  • D.计算锚框与真值的 IoU

答案:B。中心度反映当前点离目标中心的远近,离中心越远分数越低,从而在解码时压低边界附近低质量框的权重。它不负责分类,也无法替代特征金字塔,更与锚框 IoU 无关。

Q6. CenterNet 通常如何简化后处理流程?

单选题 · mid

  • A.预先铺大量锚框做补充
  • B.靠峰值提取直接解码免 NMS← 正确答案
  • C.用全连接网络区分类别
  • D.用滑动窗口扫描整幅图

答案:B。CenterNet 的热力峰天然稀疏,推理时只需对峰值做 Top-K 提取,再读出宽高偏移即可得到结果,常规流程下不需要 NMS。A、D 是过时或相反的做法,C 与目标检测的卷积结构无关。

Q7. 在 COCO 风格指标中,AP 主要衡量模型的什么能力?

单选题 · hard

  • A.模型的总参数量大小
  • B.各 IoU 阈值下精度的平均值← 正确答案
  • C.单张图片的推理耗时
  • D.模型推理占用的显存大小

答案:B。COCO AP 是在多个 IoU 阈值(0.5 到 0.95 步长 0.05)下计算的平均精度,综合反映定位与分类能力。参数量、耗时、显存属于资源指标,不是 AP 衡量的对象。

Q8. 下列哪些属于 FCOS 的组件或策略?

多选题 · mid

  • A.逐像素回归四条边距离← 正确答案
  • B.中心度分支抑制低质量框← 正确答案
  • C.FPN 多尺度预测策略← 正确答案
  • D.锚框聚类自动生成

答案:ABC。FCOS 的核心组件是逐像素距离回归、中心度分支和多尺度特征金字塔。FCOS 不使用锚框,也就不需要锚框聚类,D 是 Anchor-based 方法的操作。

Q9. 关于 CenterNet 与 FCOS 的对比,下列说法正确的是?

多选题 · hard

  • A.CenterNet 正样本等同目标数← 正确答案
  • B.FCOS 正样本为框内全部像素← 正确答案
  • C.CenterNet 后处理通常更简单← 正确答案
  • D.FCOS 必须要用 Transformer 骨干

答案:ABC。CenterNet 一个目标只取一个中心点作正样本,FCOS 把框内所有像素视为正样本,因此 FCOS 正样本量远大于 CenterNet。CenterNet 因峰值提取省略 NMS,后处理更简单。D 错误,FCOS 最初基于 CNN 实现,并不强制要求 Transformer。

Q10. 部署 Anchor-free 检测模型时,选型需要考虑哪些因素?

多选题 · hard

  • A.目标尺度分布特征← 正确答案
  • B.推理延迟是否达标← 正确答案
  • C.后处理是否足够简洁← 正确答案
  • D.锚框聚类库维护成本

答案:ABC。选型应综合目标尺度分布、实时性要求和后处理复杂度。Anchor-free 方法本身不依赖锚框,因此“锚框聚类库的维护成本”不是它的选型因素,D 错误。