凌晨四点的快递分拣站,老张是这里最快的分拣员。别人分拣包裹要两步走——先扫一眼货架,圈出几个“可能有货”的区域,再凑近逐一核对面单、确认品类、搬上对应传送带。老张不这么干:他站在分拣台前,目光扫过的瞬间,左手已经抄起包裹、右手按下品类键,一步到位。 两阶段检测就像那个“仔细的学徒”——先粗筛候选区域,再精判每个区域里是什么货。单阶段检测就是老张——看一眼,直接说出“这是啥、在哪儿”。这篇要讲的方法,正是让 AI 学会老张这手“扫一眼就知道包裹在哪、是什么”的本事。我们会聊到检测网络的整体框架(货架的构建方式)、锚框设计(预制的包裹模板),以及关键损失函数(教 AI 分错时怎么扣分)。

岗位关联

对 AI 从业者而言,理解单阶段检测是进入视觉落地的快速通道:它决定了自动驾驶、安防、零售巡检等实时场景中“看一眼就能干活”的方案选型是否可行。

目录
  1. 可视化演示
  2. 认识检测任务
  3. 单阶段与两阶段
  4. 检测网络框架
  5. 锚框设计与匹配
  6. 损失函数规则
  7. 实时与精度权衡
  8. 训练与部署落地
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

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

YOLO网格检测 S×S网格:每格预测B个框 直接回归类别+位置 输出:S×S×(B×5+C) 端到端单次前向传播完成检测

认识检测任务

快递分拣站里,老张之所以快,是因为他清楚自己每天干的事是什么:不是“这箱子里有没有东西”,而是“这东西是什么、在货架第几排第几格”。前者叫分类,后者叫检测。分类只回答“有什么”,检测还要回答“在哪儿”。AI 视觉里的检测任务,就是把这张图片当成货架全景图,既要认出每个包裹的品类,又要标出它在图中的位置——位置用一个矩形框表达,这个框叫边界框。一个边界框通常用四个数表示:框的中心坐标 (x, y),以及框的宽 w 和高 h。

有了“在哪儿”的框,怎么判断 AI 找得准不准?现实里你可以用卷尺量,AI 世界用IoU——预测框和真实框的重叠程度。想象两个框是两个圆饼,重叠面积越大,说明框得越准。IoU 就是重叠面积除以两个框的并集面积,取值范围 0 到 1,1 代表完美重合。

除了位置,AI 还要给出一个置信度评分——它像老张掂量包裹时心里的底气,“我有 90% 的把握这是易碎品”。推理时,我们会设定一个阈值(比如 0.5),低于这个置信度的预测直接丢弃,剩下保留的框才是最终结果。检测任务的第一步,就是让 AI 学会“有框”和“有底气”。

IoU=∣A∩B∣∣A∪B∣\text{IoU} = \frac{|A \cap B|}{|A \cup B|}
这两个框像两张保鲜膜:一张贴在包裹上,一张是你预测的位置,重叠越多说明贴合得越紧,IoU 就是重叠占比的分数。
  1. 重叠面积(分子)预测框和真实框交集的面积,重叠越多,这个值越大。
    ∣A∩B∣\displaystyle |A \cap B|
  2. 并集面积(分母)两个框总共覆盖的面积,即“我用掉的保鲜膜总面积”。
    ∣A∪B∣\displaystyle |A \cup B|
  3. 两者的比值重叠占比越高,IoU 越接近 1,代表定位越精准。
    ∣A∩B∣∣A∪B∣\displaystyle \frac{|A \cap B|}{|A \cup B|}

单阶段与两阶段

快递站里那位学徒,走的是两阶段路线:第一阶段快速扫描货架,圈出几个“疑似有包裹”的区域,这叫区域建议;第二阶段对每个区域仔细判别,确认品类、修正框的位置。这条路精度高,但每一单都要跑两趟,速度上不去。老张的路线省掉了“先圈区域”这一步,眼睛扫过货架的瞬间,直接就说出“这是啥、在哪儿”——这就是单阶段检测。

单阶段检测的代表是 YOLO 和 SSD。YOLO 的意思是 “You Only Look Once“——你只看一眼。它把整张图划分为网格,每个网格负责预测中心落在其中的物体。推理时,网络对图片只做一次前向计算,同时输出所有框的类别和坐标,一步到位。两阶段则像先写草稿再誊正稿,区域建议网络先给出一批候选框,第二阶段的分类网络再精修。这种”两步走”的代价是慢,但精度天花板更高。

那么单阶段付出了什么代价?核心问题是正负样本失衡——想象老张一眼扫过的货架上,真正有包裹的格子可能只有几个,其余几百个格子都是空的。AI 预测时,绝大多数位置都是背景,正样本(真包裹)稀稀少少。训练时模型很容易“学懒了”:干脆全预测成背景,因为这样错得最少。为了对抗这种失衡,后来的 YOLO 用了焦点损失等方法,让模型把注意力放在那些“像包裹但还没把握”的难例上。

单阶段检测的哲学是“用速度换精度”,但现代版本通过巧妙设计,已经把精度差距缩得很小——就像老张练得久了,一眼扫过的准确率已经不输仔细核对的学徒,而速度是学徒的十倍。

Lsingle=Lcls+λLbox\text{L}_{\text{single}} = \text{L}_{\text{cls}} + \lambda \text{L}_{\text{box}}
单阶段损失就是“认错类别”加上“框偏了”,没有区域建议这一项额外开销,因此每一步都更快。
  1. 分类损失衡量每个格子认错包裹类别的程度,错得越离谱,惩罚越大。
    Lcls\displaystyle \text{L}_{\text{cls}}
  2. 定位损失衡量预测框与真实框的偏差,框偏了多远就罚多少。
    Lbox\displaystyle \text{L}_{\text{box}}
  3. 权衡系数控制“认错类别”和“框偏了”哪个更重要,通常取经验值。
    λ\lambda

检测网络框架

如果把单阶段检测网络比作一支分拣小队,那么它有三个角色:骨干网络(Backbone)负责看,颈部网络(Neck)负责汇总线索,检测头(Head)负责拍板。老张能一眼定位包裹,靠的是他练了多年的“火眼金睛”——骨干网络就是这双眼睛,它把原始图片逐层抽象,提取出边缘、纹理、物体部件等特征。常用的骨干有 ResNet、DarkNet、MobileNet,好比不同视力水平的眼睛:视力越好,特征越丰富,但消耗的能量也越大。

颈部网络像一个信息汇总员。货架上的大包裹在远处看,小包裹在近处看,不同尺寸的包裹需要用不同“距离”的信息去识别。颈部(如 FPN 特征金字塔)把深层的大感受野特征与浅层的细节特征融合起来,确保大包裹和小包裹都能被看见。检测头则是最后拍板的那个主管:它负责两大输出——分类输出(这是什么品类)和回归输出(框的位置和大小)。

预测结果不是凭空来的,而是像填写一张“分拣单”。网络最终输出的张量,形状通常是 “网格数 × 锚框数 × (类别数 + 4 + 1)”。意思是在这个格子里,每个预置锚框对应一行记录:它属于某个类别的概率是多少,框的四个修正参数是多少,以及有没有物体的置信度是多少。

这三层配合,网络才能完成“看一眼就出结果”的整个流程。没有骨干,眼睛看不到东西;没有颈部,远近包裹看不见;没有头部,看到了也说不出话。

Headout=[p1,p2,…,pC,Δx,Δy,Δw,Δh,obj]\text{Head}_{\text{out}} = \left[ p_1, p_2, \dots, p_C, \Delta x, \Delta y, \Delta w, \Delta h, \text{obj} \right]
检测头输出就像一个分拣标签:类别概率列表、位置修正量、是否有货的底估计。
  1. 类别概率列表每个锚框属于 C 个类别的概率,老张说“八成是易碎品、两成是普通件”。
    p1,p2,…,pC\displaystyle p_1, p_2, \dots, p_C
  2. 位置修正量相对于预置锚框的位置微调,让框更贴近真实物体。
    Δx,Δy,Δw,Δh\displaystyle \Delta x, \Delta y, \Delta w, \Delta h
  3. 置信度指标该位置是否真的有物体,而不是空货架。
    obj\displaystyle \text{obj}

锚框设计与匹配

老张的货架上有固定的格子,每一格的大小形状都是提前设计好的——小格放大件,大格放异形件。AI 世界里,这个“预制格子”叫锚框。锚框是一组预设尺寸的矩形模板,散布在图片的每个位置。为什么要锚框?因为直接让 AI 凭空预测“物体的宽高是多少”太难了,如同让新人空手说出包裹的体积。给一组先验的参考框,AI 只需要学习“这个包裹比我预设的框架大一点还是小一点”,难度骤降。

锚框怎么和真实包裹对应?训练时需要做正负样本匹配:每个真实框去找与它 IoU 最高的锚框作为正样本,让这个锚框学习去预测它;IoU 低于某个阈值的锚框则当作负样本,学习预测“这里没有东西”。这个匹配过程就像给包裹分拣单——每个包裹挂到一个最合适的格子上,格子负责认领它。多尺度匹配则是为了应对“大包裹和小包裹同时出现”:浅层特征图用大锚框,深层特征图用小锚框,保证各种尺寸的货物都有格子可放。

锚框的尺寸不是拍脑袋定的,而是统计训练数据里真实框的分布得出的——像老张根据一个月快递单量的统计,提前备好最常用的几种纸箱规格。这种方法在 YOLOv2 引入,即 k 均值聚类选锚框。近年来还出现了免锚框方案,比如 CenterNet 直接预测物体的中心点和尺寸,不需要预置模板。免锚框像老张练到了更高境界,不再依赖固定格子,凭感觉直接锁定位置,参数更少、更灵活,但需要更复杂的正负样本分配策略来保证训练稳定。

锚框是单阶段检测的“地基”:地基建得好,后面的回归、分类才有意义;地基建歪了,预测就全偏了。

wa,ha⇒w=wa⋅eΔw,h=ha⋅eΔhw_a, h_a \quad \Rightarrow \quad w = w_a \cdot e^{\Delta w}, \quad h = h_a \cdot e^{\Delta h}
预测框的宽高是锚框宽高乘以一个学习到的缩放因子,相当于在“预制纸箱”基础上微调大小。
  1. 锚框基准尺寸预设的宽和高,如 (64, 64)、(128, 256) 等。
    wa,ha\displaystyle w_a, h_a
  2. 指数缩放因子网络学习到的修正量,为避免预测框变成负宽度,用指数变换保证数值永远为正。
    eΔw,eΔh\displaystyle e^{\Delta w}, e^{\Delta h}
  3. 最终预测尺寸真实输出的窗口宽高,由锚框尺寸乘缩放因子得到。
    w=wa⋅eΔw,h=ha⋅eΔh\displaystyle w = w_a \cdot e^{\Delta w}, \quad h = h_a \cdot e^{\Delta h}

损失函数规则

训练 AI 检测器,就像老张带徒弟:每次分拣完,师傅要按照一套规则打分,指出哪里分错了。这套打分规则在 AI 里叫损失函数。单阶段检测的损失函数一般由三部分组成,对应三个考核维度。

第一是分类损失,管“认错类别”——把易碎品分成了普通件,扣分。它用的通常是交叉熵损失:模型输出的概率分布和真实类别越像,损失越小。第二是定位损失,管“框偏了”——包裹明明在货架第三格,你圈到了第四格,扣分。定位损失常用 Smooth L1 或 IoU Loss,衡量预测框和真实框的几何偏差。想象考试时写错一个字的罚分,与写错整段话的罚分不同:Smooth L1 对小偏差温和,对大偏差也有限制,防止个别离群点扭曲整体训练。

第三是置信度损失,管“虚报/漏报”——空货架你说有包裹,或者真有包裹你说没有,都要扣分。这部分直接影响模型的“诚实度”。三者并非简单相加,而是加权求和,超参数 λ 控制哪个考核维度的权重更高。一个经典组合是三部分加权损失:

训练的过程,就是不断调整网络参数,让这三张考卷的总分越来越低。当师傅觉得罚分已经很小,模型就“出师”了。

Ltotal=λ1Lcls+λ2Lbox+λ3LconfL_{\text{total}} = \lambda_1 L_{\text{cls}} + \lambda_2 L_{\text{box}} + \lambda_3 L_{\text{conf}}
总损失就是三张考卷的加权总分:分类考卷、定位考卷、置信度考卷各有权重,师傅根据业务需要调整哪项更重要。
  1. 分类考卷得分模型认错类别的惩罚,类别概率分布与真实标签越吻合,损失越低。
    Lcls\displaystyle L_{\text{cls}}
  2. 定位考卷得分预测框与真实框之间的差异惩罚,框偏移越少,损失越低。
    Lbox\displaystyle L_{\text{box}}
  3. 置信度考卷得分判断“有没有物体”的惩罚,虚报与漏报都会增加。
    Lconf\displaystyle L_{\text{conf}}
  4. 加权求和λ 权重大小决定训练时优先优化哪一项,比如自动驾驶更看重定位准确。
    λ1,λ2,λ3\displaystyle \lambda_1, \lambda_2, \lambda_3

实时与精度权衡

老张为什么比学徒厉害?快只是表象,真正的价值是“在限定时间内完成任务”。放在 AI 检测领域,这个限定时间叫实时性,常用 FPS 衡量——每秒能处理多少帧画面。视频是每秒 25~30 帧的连续画面,只有 FPS 达到 30 左右,AI 才能做到“边看边反应”,不卡顿、不滞后。低于这个线,车子都撞上了模型还没认出路上的行人,这就是自动驾驶必须选择单阶段检测的原因。

精度则用 mAP 衡量——mean Average Precision,平均精度均值。简单理解:把 AI 的检测结果按置信度从高到低排序,逐条看它是不是真的命中,画出一条“查准率-查全率”曲线,曲线下的面积越大,精度越高。mAP@0.5 表示在 IoU 阈值为 0.5 时的平均精度。mAP 与 FPS 往往此消彼长:模型越大,特征越强,mAP 越高,但计算量越大,FPS 越低。单阶段检测玩的就是这个跷跷板。

怎么在跷跷板上找平衡?三个手段:换更轻的骨干网络,像老张换成近视镜片观察货架,牺牲一点视力换速度;模型剪枝蒸馏,把大模型中不重要的连接砍掉,或让大模型当老师、小模型当学生学它的知识;硬件加速,用 TensorRT、OpenVINO 等推理引擎把计算压到极致。这些手段本质上都是“算力换速度”——用更聪明的计算方法,让同样一把算力跑得更快。

回扣老张的故事:实时性决定了“活儿能不能在高峰期干完”,精度决定了“有没有分错包裹”。单阶段检测的使命,就是让老张在高峰期也能保持又快又准。

FPS≈1单帧推理时间≥30\text{FPS} \approx \frac{1}{\text{单帧推理时间}} \geq 30
实时性的底线是单帧推理时间不超过 33 毫秒,大约人眨一次眼的时间。
  1. 单帧推理时间从输入一张图片到输出全部检测框的耗时,以秒为单位。
    单帧推理时间\displaystyle \text{单帧推理时间}
  2. FPS 定义每秒处理帧数,是推理时间的倒数。
    FPS≈1单帧推理时间\displaystyle \text{FPS} \approx \frac{1}{\text{单帧推理时间}}
  3. 实时性门槛FPS 达到 30,对应每帧 33 毫秒,才算实时。
    FPS≥30\displaystyle \text{FPS} \geq 30

训练与部署落地

老张的本事不是天生的,是练出来的。单阶段检测网络也要经过大量“训练”,才能学会一眼定位。训练的第一步是数据准备与增强——给网络看大量标注好的图片,有条件的还要做增强:把图片旋转、翻转、缩放、调亮度,相当于让老张在雨天、灯光暗、货架乱等多种环境下都练过。数据增强像给师傅增加实习场景,让模型学会“不管环境怎么变,包裹还是包裹”。

训练策略上,多尺度训练是单阶段检测的标配:同一批图片按多种尺寸轮流输入网络,让模型适应不同距离下包裹大小不一的情况。这不同于两阶段检测的“固定尺度精修”,更像是老张在不同距离上都练过火眼金睛。端到端调优则意味着整个网络从输入到输出一起训练,不像两阶段需要分开训练区域建议网络和分类网络——一步到位的训练是单阶段速度优势的来源之一。

部署阶段,模型训练完只是“出师”,还得到真实场景“上岗”。落地优化有几个技巧:量化,把浮点数计算变成整数计算,速度暴涨但精度微损,如同老张把“目测精确到厘米”放宽到“目测精确到毫米”;TensorRT 加速,把训练好的模型转换成推理引擎专用格式,自动层融合、内存优化;批处理,一次同时处理多张图,充分利用 GPU 算力。当模型部署到手机或嵌入式设备时,还要考虑轻量化设计,MobileNet 等轻量骨干应运而生。

单阶段检测从训练到部署是一条完整的流水线:数据增强喂给网络,网络学会一步回归出框,部署时优化三个延迟环节。就像老张的成长路径:先练眼力,再练判断,最后在真实货架前稳定上岗。

Latency=预处理+网络推理+后处理\text{Latency} = \text{预处理} + \text{网络推理} + \text{后处理}
部署优化要减少总延迟,三个环节都得拧毛巾:预处理加速、推理加速、后处理加速。
  1. 预处理耗时把图片缩放、归一化到网络输入尺寸的时间,可用 GPU 上的缩放算子加速。
    预处理\displaystyle \text{预处理}
  2. 网络推理耗时骨干+颈部+头部的前向传播时间,是优化主战场。
    网络推理\displaystyle \text{网络推理}
  3. 后处理耗时NMS 非极大值抑制去重时间——多个框重叠在同一个物体上,只保留最可信的。
    后处理\displaystyle \text{后处理}

AI 应用场景

园区智能门禁

阶段:模型部署与推理

解决的问题:传统刷卡门禁无法识别口罩佩戴和陌生人闯入,需要实时检测人脸区域并判断是否佩戴口罩。如果检测速度跟不上,人走到闸机前还要等一秒,体验极差。

具体案例:某园区部署单阶段检测模型(如 YOLOv5s 轻量版)于边缘盒子,摄像头捕捉到行人后,模型在 30ms 内输出人脸框和口罩置信度,门禁秒级响应。配合 NMS 去重,多人同时经过也能快速标注每个人脸。

智能驾驶辅助

阶段:实时目标检测与决策

解决的问题:车载摄像头需要同时检测车辆、行人、骑行者,且必须在 33ms 内完成一轮检测。两阶段检测在这种场景下“响应不过来”,而单阶段检测能以相近的精度跑到 60FPS。

具体案例:某自动驾驶公司的感知模块使用单阶段检测器检测前向 50 米内的车辆和行人,置信度阈值设为 0.5,mAP@0.5 达到 85%。在雨天、逆光等困难场景下,通过数据增强过的模型仍保持 99% 的召回率。

智慧零售货架巡检

阶段:数据标注与模型微调

解决的问题:便利店货架上商品密集、尺寸悬殊,传统两阶段检测虽然精度高,但多路摄像头并发时算力撑不住。单阶段检测配合多尺度锚框设计,能同时覆盖大袋薯片和小瓶饮料。

具体案例:某零售巡检机器人搭载单阶段检测模型,以 50ms 一帧的速度扫描整排货架,输出每种商品的库存数量和位置,缺货时自动告警。模型先用公开数据集预训练,再用门店真实货架图片微调,一周内 mAP 从 65% 提升到 92%。

Python 演示

python52 行
import torchimport torchvisionfrom PIL import Imageimport numpy as np COCO_NAMES = [    "__background__", "person", "bicycle", "car", "motorcycle", "airplane",    "bus", "train", "truck", "boat", "traffic light", "fire hydrant",] def load_model():    model = torchvision.models.detection.ssd300_vgg16(        weights=torchvision.models.detection.SSD300_VGG16_Weights.COCO_V1    )    model.eval()    return model def detect(model, image_path, conf_thresh=0.5):    img = Image.open(image_path).convert("RGB")    transform = torchvision.models.detection.SSD300_VGG16_Weights.COCO_V1.transforms()    x = transform(img).unsqueeze(0)    with torch.no_grad():        preds = model(x)[0]    boxes = preds["boxes"]    labels = preds["labels"]    scores = preds["scores"]    kept = scores > conf_thresh    result = []    for box, lab, score in zip(boxes[kept], labels[kept], scores[kept]):        name = COCO_NAMES[lab] if lab < len(COCO_NAMES) else "unknown"        result.append((name, float(score), box.tolist()))    return result def show_result(result, image_path):    img = np.array(Image.open(image_path).convert("RGB"))    for name, score, box in result:        x1, y1, x2, y2 = [int(v) for v in box]        cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)        cv2.putText(img, f"{name} {score:.2f}", (x1, y1 - 6),                    cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1)    cv2.imshow("SSD Detection", img)    cv2.waitKey(0)    cv2.destroyAllWindows() if __name__ == "__main__":    model = load_model()    image_file = "street.jpg"    res = detect(model, image_file, 0.5)    print(f"共检测到 {len(res)} 个目标")    for name, score, box in res:        print(f"{name}: 置信度={score:.2f}, 框={box}")    show_result(res, image_file)
目的:加载预训练的 SSD 单阶段检测模型,对街景图片推理,输出每个目标的类别、置信度和边界框。
  1. torchvision.models.detection.ssd300_vgg16(...)使用官方预训练的 SSD 单阶段检测器,骨干是 VGG16。
  2. weights=...SSD300_VGG16_Weights.COCO_V1加载在 COCO 数据集上训练好的权重,覆盖 80 类常见物体。
  3. transform(x).unsqueeze(0)将图片预处理为网络输入格式,并增加一个批量维度。
  4. model(x)[0]一次前向传播得到所有预测框、类别索引和置信度。
  5. kept = scores > conf_thresh过滤低置信度预测,只保留 AI “有底气”的结果。
  6. cv2.rectangle(...)在原图上绘制检测到边界框,直观展示单阶段检测的输出。

常见误区

误区两阶段检测是“慢工出细活”,单阶段追求速度必然牺牲精度,所以选方案时只要精度要求高就一定要用两阶段。

正解现代单阶段检测通过焦点损失、多尺度特征融合、更优的正负样本分配,已经把精度差距缩小到 1-2 个 mAP 点以内,甚至在 YOLOv8 等版本中反超。精度差异更多取决于数据质量、训练技巧和模型容量,而非单阶段/两阶段这一条。好比老张练熟的“一眼准”,已经接近学徒“两步核”的准确率。

为何常见:早期 YOLOv1、SSD 确实比 Faster R-CNN 精度低不少,很多人停留在那个印象里,忽略了后续算法迭代。

误区想提升检测速度,就换一个小参数的模型,模型越小越快。

正解速度瓶颈不仅来自参数量,更来自计算量和内存访问模式。一个结构高效的大模型可能比一个结构冗余的小模型跑得更快,因为关键在算力利用率。单阶段检测之所以比两阶段快,核心是省掉了区域建议这一步串行计算,而不是模型一定更小。好比老张快是因为他省了“先圈区域再看面单”的流程,而不是因为他的眼睛更小。

为何常见:参数量(Params)是最直观的模型复杂度指标,很多人忽略推理引擎优化和计算图结构的影响。

误区既然锚框是预置模板,那就多设计几种尺寸和长宽比,覆盖所有可能的物体形状,效果一定更好。

正解锚框数量过多会大幅增加计算量,同时让正负样本严重失衡——大量锚框是背景,训练时模型被“空货架”淹没,反而学不好。更合理的是通过聚类统计出 5~9 种代表性尺寸,密集场景则考虑免锚框方案。好师傅不需要一百种纸箱,常用规格五六种就够用。

为何常见:直觉上“更多选择=更准”,忽略了计算成本与训练难度之间的复杂权衡。

面试题

Q1. 单阶段检测与两阶段检测最核心的区别是什么?

单选题 · mid

  • A.单阶段没有兴趣点提取
  • B.单阶段先选候选区再分类
  • C.单阶段一步直接输出结果← 正确答案
  • D.单阶段不使用卷积网络

答案:C。两阶段检测先由区域建议网络粗选候选区,再做分类精修;单阶段检测直接在一次前向传播中回归出类别和边界框,省去了独立的候选区域提取步骤。B 描述的是两阶段,A、D 均与事实不符。

Q2. 锚框在单阶段检测中是什么?

单选题 · mid

  • A.输入图片的固定尺寸
  • B.预置的候选框参考模板← 正确答案
  • C.网络输出的最终边界框
  • D.一种训练数据的增强方式

答案:B。锚框是预设在每个网格位置的一组参考矩形,网络学习的是相对于锚框的偏移量,而非直接输出绝对坐标。C 是“预测框”,D 是数据增强,A 与锚框无关。

Q3. 单阶段检测训练中“正负样本失衡”指的是什么?

单选题 · mid

  • A.正样本太多了导致过拟合
  • B.负样本太多淹没正样本信号← 正确答案
  • C.正样本负样本数量正好相等
  • D.样本数量不影响训练效果

答案:B。单阶段检测每帧产生大量候选锚框,但真正包含物体的正样本很少,绝大多数是背景负样本。若不处理,模型会偏向预测“没有物体”。焦点损失就是对正负样本失衡的经典对策。

Q4. 检测网络中的 Backbone 主要负责什么?

单选题 · easy

  • A.对候选框进行分类精修
  • B.提取图像的层级特征← 正确答案
  • C.输出最终的边界框坐标
  • D.对预测框做去重处理

答案:B。Backbone 从输入图片中逐层提取特征,随后 Neck 融合多层特征,Head 再基于特征做分类与回归。C 是 Head 的职责,D 是 NMS 的作用,A 是两阶段第二阶段的工作。

Q5. IoU = 1 表示什么?

单选题 · easy

  • A.预测框和真实框没有重叠
  • B.预测框比真实框大一倍
  • C.预测框和真实框完全重合← 正确答案
  • D.预测框真实框不相关

答案:C。IoU 是两个框交集面积与并集面积的比值,范围在 0 到 1。IoU=1 意味着交集等于并集,即两个框完全一样。IoU=0 才表示没有重叠。

Q6. 为什么 YOLO 比 Faster R-CNN 在实时场景中更有优势?

单选题 · hard

  • A.YOLO 使用了更深的骨干网络
  • B.YOLO 省掉了区域建议阶段← 正确答案
  • C.Faster R-CNN 必须用 GPU 跑
  • D.YOLO 不输出置信度分数

答案:B。Faster R-CNN 先由 RPN 生成候选区域,再逐个分类,两步串行导致推理延迟大。YOLO 将整图划分网格,一次前向传播直接输出全部预测,整体耗时接近单次卷积,因此更适合实时场景。

Q7. 单阶段检测的损失函数通常包含哪些组成部分?

多选题 · mid

  • A.分类损失,管认错类别← 正确答案
  • B.定位损失,管边界框偏← 正确答案
  • C.置信损失,管虚报漏报← 正确答案
  • D.对抗损失,管生成图像

答案:ABC。典型检测损失由分类、定位、置信度三部分加权求和,分别对应“认错类”、“框偏了”、“虚报漏报”。对抗损失属于生成对抗网络的概念,不用于标准单阶段检测训练。

Q8. 下列哪些策略可以提升单阶段检测的精度?

多选题 · hard

  • A.多尺度特征融合检测← 正确答案
  • B.焦点损失处理难例← 正确答案
  • C.推理时去掉 NMS 去重
  • D.数据增强增加场景多样性← 正确答案

答案:ABD。多尺度融合(如 FPN)让模型兼顾大小物体;焦点损失缓解正负样本失衡;数据增强提升泛化能力。去掉 NMS 会让同一物体输出多个重复框,检测结果混乱,无法提升精度。

Q9. mAP@0.5 中的 0.5 含义是什么?

单选题 · easy

  • A.置信度阈值设为 0.5
  • B.IoU 阈值设为 0.5← 正确答案
  • C.学习率设为 0.5
  • D.图片缩放比例为 0.5

答案:B。mAP@0.5 表示当预测框与真实框的 IoU 超过 0.5 时,该预测视为命中。置信度阈值是另设的过滤参数,学习率和缩放比例与 mAP 指标的定义无关。

Q10. 单阶段检测在哪些场景下效果容易变差?

单选题 · mid

  • A.大目标稀疏分布场景
  • B.小目标密集重叠场景← 正确答案
  • C.背景简单光照均匀场景
  • D.目标类别很少的场景

答案:B。单阶段检测直接对密集网格回归,小目标占像素少,特征在深层下采样后容易丢失,密集重叠时正负样本分配困难。稀疏大目标、简单背景恰恰是单阶段检测擅长的场景。