想象你是一家快递分拣站的主管。传送带上源源不断地涌来包裹,你的职责是让分拣员一眼扫过传送带,同时报出每个包裹的位置、大小和种类:“3号格间,中等方盒,易碎品,置信度93%!”——这就是YOLO的干活方式。它不像传统方法那样先做一遍全局扫描、再挨个细查可疑区域,而是只看一遍整张图,就同时输出所有目标的位置和类别。它的名字“YOLO“正是”You Only Look Once”(你只看一次)的缩写。 传统两阶段检测像一位谨慎的巡警:先拿望远镜锁定几栋可疑楼栋,再上门逐一搜证,精度高但慢。YOLO则像眼疾手快的分拣员:全图一次过目,位置、大小、类别同时报出,快到可以实时处理视频流。本文将从网格划分、边界框预测、置信度计算、类别解码、损失函数到单双阶段对比,层层拆解这台“智能分拣站”的设计智慧,看完你就能明白:单阶段检测为何能又快又准。
对AI从业者而言,YOLO是目标检测领域的“地基级”算法,理解它的设计思想,你就能看懂如今工业界绝大多数实时视觉系统的核心逻辑,无论是自动驾驶、安防监控还是工业质检,都离不开这份“一眼看全图”的本领。
可视化演示
动态演示YOLO单阶段目标检测算法精的核心机制,通过开始/执行/监控/完成四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
YOLO单阶段目标检测算法精:YOLO YOLO网格划分与单次前向传播 边界框坐标预测方式 核心机制可视化 YOLO单阶段目标检测算法精整体架构与关键组件
网格划分机制
快递传送带被隔板分成一个个方格,每个方格里可能会有包裹。YOLO的做法一模一样:把输入图片均匀分成 S×S 个网格,每个网格就是一个“格间”。靠近传送带末端的摄像头把整条带子拍成一张照片,然后分拣员在脑海中默默把照片切成 7×7 的格子——YOLOv1正是这么干的,每一个格子就像分拣员的“责任区”。
有了责任区还要有明确的规矩:如果某个包裹的中心恰好落在某个格间里,这个格间就全权负责报告它。网格本身并不直接“看见”包裹的完整轮廓,它只需要判断“我的地盘里有没有东西、东西中心在哪”。这种“中心归属”原则,避免了多个网格抢着报同一个目标,也保证了每个格间的职责不重叠。
整个分拣站的工作结果最终汇总成一张大表:每个格间填写若干行信息,包括它预测的边界框参数、置信度和各类别概率。这张表的大小就是网络的输出张量:
网格机制就像给分拣员画好了责任田。没有这些整齐的格间,分拣员就只能“凭感觉”报目标,既无法训练也无法统一输出格式。正是这张 S×S 的棋盘,让“看一遍全图”成为可能。
- 网格数量 S×SS 是单方向的网格数,S×S 是总格间数。YOLOv1 取 S=7,共有 49 个格间。
- 每个网格的边界框数 B每个格间最多“口头申报” B 个候选包裹,YOLOv1 中 B=2,但最终每个网格只保留信息最全的那一类结果。
- 每个边界框的 5 个参数x、y 表示包裹中心相对本格间的偏移比例,w、h 表示包裹宽度、高度相对整张图的比例,第 5 个是置信度。
- 类别数 CC 是待检测的目标类别数量,比如“行人、汽车、自行车”三类时 C=3。
边界框预测
分拣员不能只说“3号格间有包裹”,他必须报出包裹在格间里的精确方位:中心偏左还是偏右、占格间的几成宽高。YOLO的边界框预测就是这个“精确播报”的过程。每个网格预测 B 个边界框,每个边界框由 (x, y, w, h) 四个坐标参数描述,它们全部经过归一化处理,让模型输出始终落在 0 到 1 之间,方便训练时计算误差。
技术细节上,x 和 y 不是直接输出绝对像素坐标,而是“相对本网格左上角的偏移量”。想象包裹中心在格间的正中间,模型只需输出 0.5、0.5,而不是去记整个图片上的大数字。这大大降低了学习难度,因为模型不用关心图片总共有多宽多高,只需要关心“自己格间内的相对位置”。w 和 h 则是边界框的宽高占整张图宽高的比例,因此也是一个 0 到 1 之间的数。
当预测值输出后,还需要“解码”回原图坐标:将网格的行列序号加上偏移量,再除以网格总数 S,就得到了相对整张图的归一化中心坐标。这样,无论图片是 320×320 还是 1080×720,解码过程都一样简洁:
边界框解码像把“格间坐标语言”翻译成“全图坐标语言”。分拣员报的永远是格间内的相对位置,而监控大屏需要的却是全图坐标——这套解码规则就是两者之间的翻译器。
- 网格索引 c_x、c_y目标中心所在的网格位置。例如第 3 行第 3 列的网格,就有 c_x=2、c_y=2(从 0 开始计数)。
- 格内偏移 t_x、t_y网络输出的偏移量,表示中心相对网格左上角的偏移比例,范围在 0 到 1 之间。
- 除以网格数 S把“网格坐标 + 格内偏移”换算成整图比例。例如第 3 格(c_x=2)加偏移 0.55,再除以 7,得到中心在图片 36% 处。
- 宽高比例 t_w、t_h边界框宽度、高度相对整图的比例,输出后直接作为解码结果,无需额外换算。
置信度计算
分拣员报出“3号格间有包裹”之前,心里要先打个鼓:这到底是一个真包裹,还是一个空纸箱或者传送带上的阴影?这个“心里打的鼓”就是 YOLO 的置信度。置信度回答两个问题:一、这个格间里到底有没有目标?二、如果真有目标,我预测的框和真实目标框得有多准?
第一个问题用“目标存在概率” Pr(Object) 表示,取值 0 或 1(训练时)。第二个问题用 IoU(交并比)衡量——IoU 计算预测框与真实框的交集面积除以并集面积,取值范围 0 到 1。两者相乘,才是 YOLO 中每个边界框的最终置信度。IoU 越大说明预测框与真实目标重叠越多,框的位置画得越准。
真正到推理时,模型并不知道真实框在哪,所以它输出的置信度是对“有没有目标、框得准不准”的整体估计。训练过程中,模型被反复纠正:该格的置信度应逼近 Pr(Object) × IoU。低置信度的框会被后续流程直接丢弃,就像分拣员看到空纸箱就不上报一样:
置信度是分拣员的“自我审核”。一个优秀的分拣员不会对每个模糊影子都大呼小叫,只有既确定有货、又能画出准确范围的包裹,才值得报上高置信度。这个分数直接决定了后续所有候选框的排序与筛选。
- 目标存在概率 Pr(Object)这是一个二值指示:网格负责的目标中心是否存在。在训练阶段,有目标为 1,没有为 0;在推理阶段,模型输出的是一个 0 到 1 之间的估计值。
- IoU 交并比预测框 A 与真实框 B 的交集面积与并集面积之比,衡量两个框的重叠程度。完全重合时 IoU=1,完全不重叠时 IoU=0。
- 两者相乘置信度将“有没有目标”和“框得准不准”两个维度合成一个分数。只满足其中一项时,置信度都不会高。
类别预测与解码
分拣员确认了格间里有真包裹之后,还要报出包裹的种类:是易碎品、文件袋还是大件家电?YOLO 的类别预测并不是独立进行的,它回答的是一个“条件问题”:既然这个格间里已经有目标了,那这个目标属于第 i 类的概率是多少?这就是条件类别概率 Pr(Class_i | Object)。
最终的类别评分,是把置信度和类别概率结合起来:综合得分 = 置信度 × 类别概率。这一步把“有没有目标、框得准不准、是哪一类”三件事拧成一个总评分。推理时,网络在每个格间输出 C 个类别概率,解码时取最大概率对应的类别作为该边界框的类别,再乘上置信度作为该框的最终得分。
当 49 个网格、每个网格 2 个候选框同时报出结果时,同一个包裹会被相邻好几个格间重复上报,就像走廊里的分拣员七嘴八舌都在喊同一个包裹。这时候需要 NMS(非极大值抑制)来“一锤定音”:按得分排序,保留得分最高的框,删掉所有与它重叠度超过阈值的同类候选框,再对剩余框重复此过程:
NMS 是分拣站的“最后一道仲裁”。它让最有把握的那个格间胜出,其余重复上报的嘈杂声音全部平息。经过这一步,原本杂乱的上百个候选框就浓缩成几个干净利落的最终检测结果。
- 条件类别概率Pr(Class_i | Object) 表示“在确定有目标的前提下,这个目标属于第 i 类”的概率,所有类别的概率之和为 1。
- 综合评分 Score_i置信度乘以条件类别概率,得到第 i 类的最终置信分。解码时取最大分数对应的类别作为边界框的类别标签。
- NMS 去重对所有候选框按 Score 降序排列,保留最高分框,删除与之 IoU 超过阈值(如 0.5)的同类别框,迭代直到候选框耗尽。
损失函数组成
分拣员不是天生就会干活,他要经过严格的培训考核。YOLO 的“培训考核”就是损失函数——它把分拣员犯的每一类错误量化成分数,分数越高说明越想越远,训练的目标就是把这个总分压到最低。YOLOv1 的损失函数由三大部分组成:坐标损失、置信度损失和分类损失。
坐标损失关注“框画得准不准”:包括中心坐标 (x,y) 的平方误差,以及宽度、高度的平方误差。这里有个精妙细节:对宽高先开根号再算误差。因为同样偏离 10 个像素,对小包裹来说是大错,对大包裹来说只是小偏差,开根号可以拉近大框和小框的误差尺度。置信度损失关注“有没有目标判断得对不对”,并且对有目标网格和无目标网格分别加权——无目标的格间占了大多数,如果权重一样,模型会偷懒把所有格间都报“没有”,所以无目标置信度损失的权重 λ_noobj 被压得很低(0.5),有目标部分的权重要高得多。分类损失则看类别概率预测得准不准。
总损失函数写作:
损失函数就是分拣员的“错题本”:位置报错记一笔,有没有货判断错记一笔,类别认错再记一笔,每一笔都带着不同权重。模型在一次次降低总损失的过程中,逐渐从一个手忙脚乱的新手成长为眼疾手快的老师傅。
- 坐标损失只有当网格 i 的第 j 个框负责某个真实目标(指示函数 1_obj 为 1)时,才计算中心坐标的平方误差,用较大的 λ_coord=5 加强惩罚。
- 宽高损失同样只惩罚有目标的框,但对宽高先开根号再求平方误差,防止大目标误差主导损失。
- 有目标置信度损失对有真实目标中心的网格,模型输出的置信度要逼近真实 IoU,误差是两者之差的平方。
- 无目标置信度损失对没有目标的网格,期望置信度输出为 0,但权重降到 λ_noobj=0.5,避免占据过大比重。
- 分类损失对包含目标的网格,计算每个类别的预测概率与真实类别的平方误差之和。
单阶段对比两阶段
快递分拣站有两种截然不同的工作流。传统两阶段方案像一位谨慎的“区域预检员”:先用扫描仪快速圈出几个可能藏包裹的可疑区域,再由后方的核查员逐一定位、分类。Faster R-CNN 就是这么做的——第一步区域提议网络(RPN)生成候选区域,第二步分类网络精细判断。每一步都很细致,所以精度高,但两趟流程下来速度就慢了,处理一张图需要几百毫秒,难以应对实时视频。
YOLO 的单阶段方案则完全不同:没有预检员和核查员的分工,一个分拣员看一眼全图,直接在网格上同时完成“在哪、是什么”的全部判断。整个过程只有一次前向传播,因此速度可以快一到两个数量级。早期 YOLOv1 在标准数据集上速度可达每秒 45 帧,而同期的两阶段方法只有每秒 5 到 10 帧。
不过天下没有免费的午餐。单阶段检测省去了精细的区域精修,对密集小目标和重叠目标的检测精度通常略低于两阶段方法,两者在标准基准上的精度差距大约在几个百分点以内。速度与精度的权衡可以用一个简洁的关系式表达:
分拣站老板最终的选择取决于业务场景:如果包裹必须毫秒级过站,单阶段分拣员就是唯一答案;如果偶尔漏件会造成严重后果,那就宁愿慢一点也要细致核查。YOLO 用“一眼看全图”的哲学,在实时性与准确性之间找到了工业界最实用的平衡点。
---
- 两阶段耗时 T_two区域提议与分类两步串行执行,每张图的推理时间通常在 200 毫秒以上。
- 单阶段耗时 T_single网格划分后一次前向完成所有预测,推理时间通常在 20 到 50 毫秒。
- 精度差距 ΔmAP在同等训练条件下,两阶段方法的平均精度(mAP)通常略高,但差距不大。
AI 应用场景
工业质检:流水线上的瑕疵猎手
阶段:目标检测推理与实时决策
解决的问题:传统质检依赖人工肉眼在高速流水线上寻找微小划痕、凹陷,工人盯久了容易疲劳漏检,且培训成本高。YOLO 的高帧率检测可以在产品经过摄像头的瞬间同时框出多处瑕疵,并给出置信度,让机械臂及时分拣次品。
具体案例:某电子元器件工厂在传送带上方架设高速相机,用 YOLO(8×8 网格微调版本)检测电容表面的裂纹和缺角。系统以每秒 60 帧的速度处理画面,一旦某个网格报出“裂纹,置信度 0.91”,PLC 立即触发气枪将次品吹离传送带,误检率控制在 0.3% 以内。
自动驾驶:毫秒级的行人预警
阶段:环境感知与目标检测
解决的问题:自动驾驶车辆以 72km/h 行驶时,每秒前进 20 米,两阶段检测 200 毫秒的延迟意味着 4 米的反应距离差距,而 YOLO 单阶段检测能将延迟压缩到 30 毫秒以内,让系统有充足的时间规划刹车路径。
具体案例:某自动驾驶公司使用 YOLOv8 对车前摄像头画面做实时行人、车辆、交通标志检测。市区复杂路口画面被划分为 80×80 网格,系统同时追踪 32 个目标,每个目标附带位置框和类别置信度,感知模块通过 NMS 后的结果直接驱动决策规划。
智慧零售:门店客流统计
阶段:视频流实时检测与统计
解决的问题:传统门店客流统计依赖红外对射计数器,只能数“进出人数”,无法区分顾客和购物车,更无法分析顾客在货架前的停留行为。YOLO 在门店摄像头视频流中实时检测人体位置,解决“谁在哪个货架前停留了多久”的问题。
具体案例:连锁超市在每排货架上方部署 AI 摄像头,YOLO 在每一帧画面中框出所有顾客的位置。后端根据检测框中心点跨越网格边界的轨迹计算停留时间,结合收银数据生成热销关联报告,帮助运营团队优化商品陈列。
Python 演示
import numpy as np class SimpleYOLO: """极简YOLO推理演示:模拟网格预测 -> 置信度过滤 -> NMS去重的完整流程""" def __init__(self, s=7, b=2, c=3): self.s = s # 网格数 S self.b = b # 每网格边界框数 B self.c = c # 类别数 C self.threshold = 0.3 # 置信度过滤阈值 self.nms_iou = 0.45 # NMS 的 IoU 阈值 def decode(self, tensor): """把网络输出的张量解码成候选框列表""" boxes = [] cell_size = 1.0 / self.s for i in range(self.s): for j in range(self.s): for k in range(self.b): base = k * (5 + self.c) x = (j + tensor[i, j, base]) * cell_size y = (i + tensor[i, j, base + 1]) * cell_size w = tensor[i, j, base + 2] h = tensor[i, j, base + 3] conf = tensor[i, j, base + 4] if conf < self.threshold: continue cls_scores = tensor[i, j, base + 5:base + 5 + self.c].copy() cls = int(np.argmax(cls_scores)) score = conf * cls_scores[cls] boxes.append([x, y, w, h, score, cls]) return boxes @staticmethod def iou(ba, bb): """计算两个框的交并比 IoU""" ax1 = ba[0] - ba[2] / 2 ay1 = ba[1] - ba[3] / 2 ax2 = ba[0] + ba[2] / 2 ay2 = ba[1] + ba[3] / 2 bx1 = bb[0] - bb[2] / 2 by1 = bb[1] - bb[3] / 2 bx2 = bb[0] + bb[2] / 2 by2 = bb[1] + bb[3] / 2 ix1 = max(ax1, bx1) iy1 = max(ay1, by1) ix2 = min(ax2, bx2) iy2 = min(ay2, by2) inter = max(0, ix2 - ix1) * max(0, iy2 - iy1) union = (ax2 - ax1) * (ay2 - ay1) + (bx2 - bx1) * (by2 - by1) - inter return inter / union if union > 0 else 0.0 def nms(self, boxes): """非极大值抑制:保留最高分框,删除同类重叠框""" boxes.sort(key=lambda bb: bb[4], reverse=True) keep = [] while boxes: best = boxes.pop(0) keep.append(best) boxes = [bb for bb in boxes if self.iou(best, bb) < self.nms_iou] return keep def predict(self, tensor): """完整推理:解码 -> 过滤 -> NMS""" boxes = self.decode(tensor) return self.nms(boxes) if __name__ == "__main__": np.random.seed(42) model = SimpleYOLO(s=7, b=2, c=3) fake = np.zeros((7, 7, 2 * 8)) # 网格(3,3)第2个框:中心偏移(0.55,0.35),宽0.27高0.25,置信度0.95,类别偏好第1类 fake[3, 3, 8] = 0.55 fake[3, 3, 9] = 0.35 fake[3, 3, 10] = 0.27 fake[3, 3, 11] = 0.25 fake[3, 3, 12] = 0.95 fake[3, 3, 13:16] = [0.10, 0.85, 0.05] # 网格(3,4)第2个框:位置接近,置信度0.55,会被NMS抑制 fake[3, 4, 8] = 0.60 fake[3, 4, 9] = 0.50 fake[3, 4, 10] = 0.30 fake[3, 4, 11] = 0.26 fake[3, 4, 12] = 0.55 fake[3, 4, 13:16] = [0.20, 0.60, 0.20] results = model.predict(fake) print("检测到", len(results), "个目标") for r in results: cx, cy, w, h, score, cls = r print("类别%d: 中心(%.2f,%.2f) 宽%.2f 高%.2f 置信度%.2f" % (cls, cx, cy, w, h, score))
base = k * (5 + self.c)计算第 k 个边界框在最后一个维度上的起始索引,每个框占 5 个参数加 C 个类别概率。x = (j + tensor[i, j, base]) * cell_size把网格列索引 j 与格内偏移相加,再乘以格宽,解码出归一化中心横坐标。if conf < self.threshold: continue置信度低于阈值 0.3 的框直接丢弃,相当于分拣员不报空纸箱。score = conf * cls_scores[cls]综合得分等于置信度乘以最大类别概率,与正文公式 Score = C × Pr(Class|Object) 完全对应。boxes.sort(key=lambda bb: bb[4], reverse=True)所有候选框按综合得分从高到低排序,为 NMS 做准备。boxes = [bb for bb in boxes if self.iou(best, bb) < self.nms_iou]NMS 核心:保留与当前最优框重叠度低于阈值的框,其余删除。
常见误区
误区“YOLO 的 7×7 网格太粗糙了,直接把网格改成 49×49,所有小目标都能检测出来!”
正解网格划分只是把图片切成责任区,真正决定检测能力的是网络深度、感受野大小和锚框设计。盲目增大网格会带来两个问题:一是输出张量 S×S×(B×5+C) 随 S 平方级膨胀,计算量剧增;二是每个网格的语义信息变少,反而更难判断“格间里有没有目标”。现代 YOLO 通过多尺度特征图和自适应锚框来捕捉小目标,而不是单纯靠加密网格。
为何常见:初学者看到“每个网格负责一个目标”这句话,容易把网格直接等同于检测分辨率,忽略了神经网络特征提取这一中间环节。
误区“模型输出 0.93,意思就是'这是一个行人的概率是 93%'。”
正解YOLO 输出里有两套数值:置信度 C 表示“格间里有目标、且框得准”的综合信念;类别概率 Pr(Class|Object) 是“在确定有目标的前提下是哪一类”的条件概率。0.93 是置信度,它还要乘上类别概率才能得到最终得分。一个框可能置信度很高但类别很模糊,此时两个分数相乘后反而靠后。
为何常见:神经网络的输出层同时包含多种数值,初看很像图像分类里的 softmax 概率,于是想当然地混为一谈。
误区“NMS 就是只要两个框重叠就删掉一个,所以挨在一起的两个人都检测不出来。”
正解NMS 并不会无差别删除重叠框,它有两个前提条件:一是框属于同一类别,二是 IoU 超过预设阈值。不同类别的两个目标即使完全重叠(例如人骑自行车),两个框都会被保留。即使同类别,只要重叠度小于阈值也都能留下。NMS 删除的是“同一目标被多次重复申报”的冗余框。
为何常见:只看 NMS 的算法流程图,容易忽略它“按类别分组处理、以 IoU 为门槛”这两个关键细节。
误区“YOLOv1 一共 49 个网格,所以一张图最多检测 49 个目标,每个网格只能框一个物体。”
正解每个网格预测 B 个边界框(V1 中 B=2),从数量上限看一个网格可以输出 2 个候选框。但 YOLOv1 确实规定每个网格只能给出一个类别标签,因此如果两个不同物体的中心落在同一网格,V1 就无法同时检测它们——这是它的真实局限。后续 YOLO 版本通过锚框机制和多标签预测缓解了这个问题。
为何常见:把“每个网格负责一个目标的中心”简化记忆成“每个网格只能检测一个目标”,忽略了 B 个候选框和类别归属机制的存在。
面试题
Q1. YOLO 属于哪一类目标检测算法?
- A.两阶段检测算法
- B.图像分类算法
- C.单阶段检测算法← 正确答案
- D.语义分割算法
答案:C。YOLO 的名字“只看一次”意味着它完成一次前向传播就同时输出所有目标的位置和类别,不需要候选区域生成环节,因此是单阶段检测算法。两阶段算法(如 Faster R-CNN)先提候选区再分类;图像分类和语义分割解决的都不是“框出目标”问题。
Q2. YOLOv1 将输入图片划分为多少个网格?
- A.5×5 网格
- B.13×13 网格
- C.7×7 网格← 正确答案
- D.32×32 网格
答案:C。YOLOv1 原文采用 S=7 的设计,将图片划分为 7×7=49 个网格。13×13 是 YOLOv2 的划分方式,5×5 和 32×32 不是 YOLO 的典型网格数。网格数 S 是超参数,V1 选 7 是精度与速度平衡的结果。
Q3. YOLO 输出张量形状 S×S×(B×5+C) 中的 B 代表什么?
- A.表示类别数量
- B.表示每网格边界框数← 正确答案
- C.表示训练批大小
- D.表示特征通道数
答案:B。B 是每个网格负责预测的边界框数量,YOLOv1 中 B=2,即每个格间最多申报两个候选包裹。类别数量由 C 表示;批大小和通道数是训练与网络结构中的概念,与输出张量的空间含义无关。
Q4. YOLO 置信度公式中 IoU 表示什么?
- A.预测框的面积
- B.物体类别概率
- C.网格单元的尺寸
- D.预测框与真实框的交并比← 正确答案
答案:D。IoU(交并比)是预测框与真实框的交集面积除以并集面积,衡量两个框的重叠程度。置信度 = Pr(Object) × IoU,其中 Pr(Object) 管“有没有目标”,IoU 管“框得准不准”,两者缺一不可。
Q5. YOLOv1 损失函数中无目标置信度损失的权重 λ_noobj 通常设为多少?
- A.5.0
- B.1.0
- C.0.5← 正确答案
- D.2.0
答案:C。YOLOv1 中 λ_noobj=0.5,而有目标部分的坐标损失权重 λ_coord=5。因为无目标的网格占大多数,如果权重过高,模型会倾向于把所有格间都预测为“无目标”,导致漏检严重。压低权重是为了平衡正负样本贡献。
Q6. NMS(非极大值抑制)在 YOLO 推理中的作用是什么?
- A.扩大检测框数量
- B.提高输入图像分辨率
- C.抑制同一目标的冗余重叠框← 正确答案
- D.减少训练所需的数据量
答案:C。同一个目标经常被相邻网格重复检测,NMS 按置信度排序后保留最高分框,删除与它 IoU 超过阈值且同类别的高重叠框,最终每个目标只保留一个最优检测框。它不改变图像分辨率,也不参与训练阶段。
Q7. 相比 Faster R-CNN,YOLO 单阶段检测的主要优势是什么?
- A.检测精度更高
- B.密集小目标效果更好
- C.不需要人工标注数据
- D.推理速度更快← 正确答案
答案:D。YOLO 省略了候选区域生成与二次分类环节,一次前向直接输出全部结果,推理速度通常比两阶段方法快 5 到 10 倍,更适合实时场景。精度上两阶段通常略占优势,小目标检测两阶段也常优于早期 YOLO,且任何监督算法都需要标注数据。
Q8. YOLOv1 的置信度损失包含哪些组成部分?
- A.有目标网格的置信度误差← 正确答案
- B.无目标网格的置信度误差← 正确答案
- C.候选区域生成误差
- D.边界框坐标对齐误差
答案:AB。置信度损失分成两项:有目标的网格,其置信度应逼近真实 IoU;无目标的网格,其置信度应逼近 0,并用 λ_noobj=0.5 降低权重。候选区域生成误差属于两阶段方法的概念,坐标对齐误差归入坐标损失而非置信度损失。
Q9. 以下关于 YOLO 单阶段检测的描述,正确的是哪些?
- A.一次前向输出所有目标← 正确答案
- B.候选区域由网格机制替代← 正确答案
- C.推理速度快适合实时场景← 正确答案
- D.两阶段方法精度必然更低
答案:ABC。YOLO 把目标检测建模成一次网格回归问题,网格机制天然替代了区域提议,一次前向即可输出位置与类别,速度优势明显。但“两阶段精度必然更低”说法绝对化——多数基准上两阶段 mAP 略高,只是差距不大且速度劣势明显。
Q10. 在 YOLOv1 中,哪些情况更容易导致检测失败?
- A.两个目标中心落在同一网格← 正确答案
- B.目标在图像中占比很小← 正确答案
- C.多个同类目标相互遮挡← 正确答案
- D.目标与背景颜色完全相同
答案:ABC。YOLOv1 每个网格只有一个类别标签,中心落在同格的两个目标只能报一个;小目标经多层下采样后信息所剩无几;同类目标遮挡时 NMS 容易合并或误删。目标与背景颜色完全相同对任何检测器都是挑战,但这并非 YOLOv1 特有的设计缺陷,故不选。