01
60 秒回答模板
FCOS 可以理解为把目标检测改造成一个密集逐点预测问题。输入图像先经过 CNN backbone,再经过 FPN 得到 P3 到 P7 等多尺度特征层。对每个特征层上的空间位置,FCOS 不预设 anchor,也不做 proposal,而是把这个位置映射回原图坐标,判断它是否负责某个真实框;如果负责,就预测类别、到真实框左上右下四条边的距离 l、t、r、b,以及一个 centerness 分数。正负样本分配的核心是:位置落在目标框内部,或改进版本里落在目标中心区域,才可能是正样本;同时该目标的尺度要落在当前 FPN 层的回归范围内,例如小目标给低层,大目标给高层。若一个位置同时匹配多个框,通常选面积最小的框,FPN 的尺度划分和中心采样会显著降低这种歧义。训练时类别分支常用 focal loss 处理前景背景不均衡,回归分支用 IoU 或 GIoU 类损失,centerness 用二分类损失,只对正样本监督。推理时每个位置还原候选框,把分类分数乘以 centerness 排序过滤,再做 NMS。工程上 FCOS 的优势是去掉 anchor 尺寸、比例、IoU 阈值这些敏感超参,头部输出更少;风险是密集位置质量参差、拥挤场景歧义和尺度分配不当,所以要看 AP、AR、小中大目标 AP、centerness 校准、正样本覆盖率和低质量框比例。
考点 位置即样本
难度 真实面经题
回答目标 说明 FCOS 如何用多尺度位置样本完成 anchor-free 检测,并把正负分配、质量校准、损失和推理闭环讲清楚。
02
深入解析
01 从 anchor 到位置样本
FCOS 的第一层理解是训练样本不再是预设 anchor,而是特征图上的空间位置。每个位置映射回原图后,如果处在某个真实框负责区域内,就可以成为前景样本;否则是背景样本。这样省掉 anchor 形状、数量和 IoU 匹配阈值,但也要求正负样本分配本身足够稳定。
02 主干和 FPN 多尺度特征
典型流程是 backbone 提取 C3、C4、C5 等语义特征,再通过 FPN 得到 P3 到 P7 的多尺度特征层。不同层负责不同尺度目标,低层分辨率高适合小目标,高层感受野大适合大目标。这个设计既提升召回,也减少同一位置同时落入多个目标时的匹配歧义。
03 检测头输出三个任务
FCOS 的 head 通常分成分类、框回归和 centerness 三类输出。分类分支预测每类概率,回归分支预测当前位置到框四边的距离 l、t、r、b,centerness 分支估计位置是否接近目标中心。它不是直接预测中心点或宽高,而是用边距还原完整 2D box。
04 正样本分配的基本规则
原始 FCOS 中,落在真实框内部的位置可成为该框正样本;后续常用中心采样,只把靠近框中心的一小片区域作为正样本,以减少边缘位置产生低质量框。还要检查回归距离的最大值是否落在当前 FPN 层的尺度区间内,不满足的样本在该层视为背景。
05 重叠目标和歧义处理
如果一个位置同时处于多个目标的正样本区域,FCOS 通常把它分配给面积更小的目标,因为小目标更容易被大目标覆盖。多尺度 FPN 会把不同大小目标分到不同层,中心采样又缩小候选区域,因此真正产生冲突的位置比例会下降,但拥挤场景仍要重点评估。
06 损失函数和质量校准
训练时分类使用 focal loss 缓解 dense detection 中大量背景带来的不均衡,回归只在正样本上计算 IoU、GIoU 或类似 box loss,centerness 也只对正样本监督。推理时通常把分类分数乘以 centerness,让远离中心、定位质量差的框在排序和 NMS 前就被压低。
07 工程取舍和验证指标
FCOS 的工程收益是实现简单、输出维度少、少调 anchor 相关超参,迁移到新数据集更省心。代价是样本分配、尺度范围、中心采样半径、NMS 和质量分数校准会影响召回与误检。验证时应分解看 AP、AP50、AP75、小中大目标 AP、AR、正样本覆盖率和拥挤场景误检。
03
易错点
- 只说 FCOS 不用 anchor,没有解释特征图位置如何映射到原图并成为训练样本。
- 把 FCOS 说成预测目标中心点的方法,混淆了基于中心点热力图的 anchor-free 检测器。
- 忽略 FPN 尺度范围,以为每个位置只要落在框内就一定是所有层的正样本。
- 没有说明重叠目标的消歧规则,例如面积更小目标优先和中心采样减少冲突。
- 把 centerness 当成类别概率,没说明它主要用于定位质量校准和推理分数重标定。
- 只讲训练 loss,不讲推理阶段候选框还原、分数过滤、乘 centerness 和 NMS。
- 回答中没有工程验证指标,只用“AP 提升”概括,无法体现定位质量、召回和拥挤场景风险。
04
面试官追问
FCOS 和 RetinaNet 的核心差异是什么?
RetinaNet 的训练样本是 anchor,需要设计多种尺度和长宽比,并用 anchor 与真实框的 IoU 阈值决定正负;FCOS 的训练样本是特征图位置,直接根据位置是否落在目标区域和尺度范围内分配标签。两者都可以用 FPN 和 focal loss,但 FCOS 去掉了 anchor 相关超参和大量 anchor 输出。
为什么 FCOS 还需要 FPN?
没有 FPN 时,单一特征层 stride 过大会影响小目标召回,也会让不同尺度目标在同一层产生更多重叠分配冲突。FPN 让不同层负责不同尺度范围,小目标用高分辨率层,大目标用低分辨率层,从而同时改善召回、定位稳定性和歧义比例。
centerness 和中心采样是不是一回事?
不是。中心采样是训练分配策略,决定哪些位置可以成为正样本;centerness 是一个额外预测分数,表示该正样本位置相对目标中心的质量。中心采样减少低质量正样本,centerness 在推理排序时压低边缘位置产生的低质量框,二者可以配合使用。
重叠目标很多时 FCOS 会出什么问题?
拥挤场景里,一个位置可能同时落入多个框,若错误分配给小框或中心区域重叠过多,可能导致大目标召回下降或产生重复框。工程上要看 ambiguity ratio、拥挤子集 AP/AR、NMS 前候选质量,并结合中心采样、尺度范围、质量分数或更强的后处理策略调优。
如何排查 FCOS 训练效果不好?
先检查坐标映射、stride、l/t/r/b 目标和尺度范围是否正确,再统计每层正样本数量和覆盖的目标尺度。随后看分类 loss、回归 loss、centerness loss 是否平衡,观察各层召回、低质量高分框比例、NMS 前后候选数量,并用小批量可视化验证样本分配。