目标检测与 YOLO
目标检测(Object Detection)是计算机视觉的核心任务之一,属于深度学习 CNN 分支下的重要方向(全景位置见 深度学习概览)。本页介绍两阶段与单阶段两大流派,并完整梳理 YOLO 全系的演进。
图像分类回答”图里是什么”,目标检测要回答两个问题:“有什么” + “在哪里”——既要分类,还要用矩形框(bounding box)标出每个物体的位置。
两大流派的直觉:
- 两阶段 = 先找嫌疑区域,再逐一鉴定:第一步先用某种方法找出可能包含物体的候选区域(“这几块地方可能有东西”),第二步对每个候选区域做分类和框精修。精度高,但跑两遍流程,速度慢。
- 单阶段 = 一眼扫完全图,直接出结果:把图片划成网格,每个格子直接预测”我这里有没有物体、是什么类、框的坐标”。一步到位,速度极快——YOLO(You Only Look Once)的名字就是这个意思。
传统目标检测:Viola-Jones 到 DPM
Section titled “传统目标检测:Viola-Jones 到 DPM”在深度学习检测器出现之前,目标检测经历了十余年的手工特征时代。深度学习检测器不是凭空出现的——它们站在传统方法的肩膀上。更多背景见传统计算机视觉与传统方法 vs 深度学习。
| 年份 | 方法 | 核心思路 | 局限 |
|---|---|---|---|
| 2001 | Viola-Jones(Haar 级联) | Haar-like 特征 + AdaBoost 级联分类器,实现首个实时人脸检测 | 仅对正面人脸效果好,特征表达能力有限 |
| 2005 | HOG + SVM | 提取方向梯度直方图(HOG)特征,用 SVM 分类——行人检测经典方案 | 特征固定不可学习,对遮挡和形变鲁棒性差 |
| 2008 | DPM(Deformable Parts Model) | 根部模型 + 多个部件模型,显式建模物体形变——传统检测巅峰 | 人工设计部件,推理慢,精度仍远低于深度学习 |
| 2014 | R-CNN(Region-based CNN) | 用 Selective Search 生成候选区域 + CNN 提取特征——深度学习检测的开端 | 每个候选区域独立过 CNN,极慢(47s/张) |
关键转折:R-CNN(2014)将传统候选区域生成(Selective Search)与 CNN 特征提取结合,标志着检测器从”手工特征时代”迈入”深度学习时代”。此后 Fast R-CNN、Faster R-CNN 不断加速,最终催生了 YOLO 等单阶段检测器。
两阶段 vs 单阶段对比
Section titled “两阶段 vs 单阶段对比”YOLO 网格检测
Section titled “YOLO 网格检测”YOLO 把图片划成 S×S 网格,每个格子负责检测中心落在自己范围内的物体:
YOLO 的精确分类位置:AI → 机器学习 → 深度学习 → CNN → 计算机视觉 → 目标检测 → 单阶段检测器。
网络架构详解:Backbone-Neck-Head 三段式
Section titled “网络架构详解:Backbone-Neck-Head 三段式”现代 YOLO(v3 之后)都遵循 Backbone-Neck-Head 三段式架构——这个设计如此成功,后来几乎成了所有目标检测器的标准模板。可以把它类比成一个”识别流水线”:
1. Backbone(骨干网络)——“特征提取器”
Backbone 就是一个 CNN 分类网络去掉最后的全连接层,只保留卷积部分。它负责从原图逐层提取从低级(边缘、纹理)到高级(物体部件、整体形状)的特征。随着网络加深,特征图(feature map)的空间分辨率不断减半(每次 stride=2 的卷积或池化),而通道数不断翻倍——就像图像越来越小但越来越”厚”(每个像素编码了更大范围的语义信息)。
- YOLOv3 的 Darknet-53:53 层卷积网络,大量使用残差连接(ResNet 思想,详见 ResNet),在 ImageNet 上 top-1 精度与 ResNet-101 相当但速度快 1.5 倍。它输出 3 个不同分辨率的特征图(stride 8/16/32),分别对应大/中/小物体。
- YOLOv8/v11:采用改良的 CSPDarknet(CSP 即 Cross Stage Partial,将特征图分两半走不同路径再拼接,在保持精度的同时减少约 20% 的计算量)。
- 参数量对比(YOLOv8 系列):nano≈3.2M、small≈11.2M、medium≈25.9M、large≈43.7M、extra-large≈68.2M 参数。
什么是特征图? 可以理解为”经过卷积处理后的图像”。原始图像有 3 个通道(RGB),经过第一层卷积后变成比如 64 个通道——每个通道捕捉一种特定的模式(有的是水平边缘,有的是某种颜色梯度)。网络越深,特征图的每个位置对应原图上更大的感受野(receptive field,即该神经元”看到”的原图区域大小)。
2. Neck(颈部)——“多尺度特征融合器”
不同大小的物体适合在不同分辨率上检测:大物体在低分辨率(大感受野)特征图上更容易识别整体,小物体在高分辨率特征图上保留更多细节。Neck 的任务是把 Backbone 各层的特征混合起来,让检测头同时拥有”宏观”和”微观”信息。
- FPN(Feature Pyramid Network,特征金字塔网络):自顶向下,把深层语义信息上采样后与浅层细节相加——信息”从粗到细”。
- PANet(Path Aggregation Network):在 FPN 基础上再加一条自底向上的路径,让浅层定位信息也能快速传到深层——信息”从细到粗”。YOLOv4/v5/v8 采用 FPN+PAN 双向融合。
- 类比:FPN 像是”高层领导把战略意图传达给一线”,PANet 补上了”一线把基层情报上报给高层”,形成信息闭环。
3. Head(检测头)——“决策输出层”
Head 接收 Neck 融合后的多尺度特征,在每个尺度的每个网格位置输出一组预测值。以 YOLOv3 为例,在 stride=8 的特征图上(80×80 网格)每个格子输出 3 组预测 ×(5 + 类别数)个数值;三个尺度合计产生上万个候选框,再经 NMS 去重得到最终结果。
- Anchor-based 头(YOLOv2~v5):每个格子预设 K 个不同尺寸/宽高比的 anchor box(锚框,即”参考框”),模型预测相对于 anchor 的偏移量(tx, ty, tw, th),而不是直接预测绝对坐标。这样做是因为直接回归绝对坐标优化困难,而回归”相对参考框的微调”更稳定。
- Anchor-free 头(YOLOv8/v11+):去掉预设锚框,直接预测物体中心点到格子边界的距离(类似 FCOS),减少了一个需要人工调参的超参,也不需要先验统计数据集的框尺寸分布。
数学原理:损失函数与定位回归
Section titled “数学原理:损失函数与定位回归”YOLO 的训练目标是让网络输出”既分对类、又框得准”的结果。这通过一个多部分加权求和的损失函数(loss function,衡量预测与真实值差距的标量)来实现。以 YOLOv1/v3 的经典形式为例:
其中 (如 5)放大定位损失的权重,因为坐标回归比分类更难学。
定位损失 ——“框得准不准”
早期 YOLO 用坐标的平方误差。但更好的做法是用基于 IoU 的损失,因为坐标误差不能直接反映”框与真值重叠程度”。IoU(Intersection over Union,交并比)定义为预测框 与真实框 的交集面积除以并集面积:
IoU=1 表示完全重合。但 IoU 有个缺陷:当两个框完全不相交时 IoU=0,梯度也为 0,网络无法学习。于是衍生出一系列改进:
| 损失 | 公式核心 | 解决的问题 |
|---|---|---|
| GIoU | ( 是包含两框的最小闭合框) | 不相交时仍有梯度 |
| DIoU | 加入中心点距离与对角线长度的比值 | 收敛更快,考虑中心点对齐 |
| CIoU | DIoU + 宽高比一致性惩罚项 | 进一步惩罚长宽比不匹配 |
YOLOv4 之后默认采用 CIoU 损失。直觉:一个”好”的预测框不仅要重叠面积大(IoU),还应该中心对齐(DIoU)、形状相似(CIoU)。
置信度损失 ——“这里到底有没有物体”
每个格子预测一个 objectness 置信度 ,表示”我这里包含物体的概率 × 预测框与真值的 IoU”。当格子确实负责某物体时,希望 ;否则希望 。用 BCE(二元交叉熵)计算。
分类损失 ——“是什么类”
对每个格子预测的类别概率用交叉熵损失(多分类)或 BCE(独立多标签)。YOLOv1 用 softmax,YOLOv3 起改用独立 sigmoid(因为一个物体可能同时属于多个类,如”女人”和”人”)。
类别不平衡问题与 Focal Loss
单阶段检测器有一个头疼的问题:图像中绝大多数格子都不包含物体(负样本远多于正样本),网络很容易”偷懒”——只要全预测”没物体”就能拿到很低的损失值。RetinaNet(Lin et al., ICCV 2017)提出的 Focal Loss 通过给已经分对的样本降权来解决:
其中 是模型对正确类别的预测概率,(通常取 2)是聚焦参数。当 已经很高(容易样本),,损失被大幅压缩;难样本则几乎不受影响。这一招让单阶段检测器的精度追平了两阶段检测器。
梯度下降如何优化? 损失函数 是所有网络权重 的函数。训练时,反向传播(backpropagation)计算 (每个权重对损失的贡献),优化器(如 SGD/Adam)沿梯度反方向小幅更新权重:, 是学习率。反复迭代数万次,损失逐渐下降,模型逐渐变准。
训练技巧与工程经验
Section titled “训练技巧与工程经验”YOLO 系列的精度提升很大程度来自”训练 trick”(训练技巧,即不改变模型结构、只改变训练流程的小改进,业界戏称 bag of freebies——“免费的午餐”):
数据增强(Data Augmentation)——凭空扩充训练数据
训练数据越多越多样,模型泛化越好。数据增强通过对原图做随机变换,让模型见到”更多样的物体姿态”,相当于低成本扩充数据集:
- Mosaic(马赛克增强):YOLOv4 的招牌——随机选 4 张训练图拼成 1 张 2×2 大图再送入训练。好处:一次 batch 见到 4 倍物体、天然包含小物体(被拼到大图里就变小了)、迫使模型学会在不同上下文中识别物体。YOLOv9 最后 10 个 epoch 会关闭 Mosaic(关闭马赛克,Mosaic Close in last epoch),让模型在”干净”数据上精修。
- MixUp:两张图按透明度叠加,标签也按比例混合。
- HSV 色空间扰动、随机翻转、随机缩放裁剪:模拟光照、角度变化。
学习率调度(Learning Rate Scheduling)
学习率 决定每步更新的”步长”——太大则震荡不收敛,太小则收敛慢。常见策略:
- Warmup(预热):前几个 epoch 从极小学习率线性升到目标值,避免训练初期梯度混乱导致权重飞掉。
- Cosine annealing(余弦退火):之后按余弦曲线从峰值缓慢降到接近 0,前期大步探索、后期小步精修。YOLO 系列默认采用。
- 典型值:SGD 初始 lr≈0.01、momentum≈0.937、weight decay≈5e-4;AdamW 则 lr≈1e-3。
正则化与稳定训练
- 权重衰减(Weight Decay):在损失中加上 ,惩罚过大的权重,防止过拟合(L2 正则化)。
- EMA(Exponential Moving Average,指数移动平均):维护一份权重的”滑动平均版本”用于推理,比直接用最终权重更稳定,YOLO 训练默认开启。
- Label Smoothing(标签平滑):把 one-hot 标签的 1.0 软化为 0.9、0.0 软化为 ,防止模型过度自信,轻微提升泛化。
正负样本匹配(Label Assignment)
Anchor-free 时代,需要决定”哪些预测点算正样本(负责某个真值框)“。YOLOv8 采用 TaskAlignedAssigner:对每个真值框,按”分类置信度 × 预测框与真值的 IoU”的幂次 打分,取 top-k 作为正样本。这种”动态”匹配比 YOLOv1 的”按中心点固定分配”灵活得多。
动手实践:用 torchvision 做目标检测推理
Section titled “动手实践:用 torchvision 做目标检测推理”import torchfrom torchvision.models.detection import fasterrcnn_resnet50_fpn, FasterRCNN_ResNet50_FPN_Weightsfrom torchvision.transforms.functional import to_tensor
# 加载预训练 Faster R-CNN(COCO 91 类)weights = FasterRCNN_ResNet50_FPN_Weights.DEFAULTmodel = fasterrcnn_resnet50_fpn(weights=weights).eval()labels = weights.meta["categories"] # 类别名称列表
# 准备输入(PIL 图片 → tensor,归一化到 [0,1])from PIL import Imageimg = to_tensor(Image.open("test.jpg").convert("RGB")).unsqueeze(0) # 加 batch 维
# 推理with torch.no_grad(): preds = model(img)[0]
# 只看置信度 > 0.5 的检测结果for label, score in zip(preds["labels"], preds["scores"]): if score > 0.5: print(f"{labels[label]}: {score:.1%}")# 输出示例: dog: 99.7%, person: 92.3%用 Ultralytics YOLOv8 做推理与训练
Section titled “用 Ultralytics YOLOv8 做推理与训练”除了 torchvision 的 Faster R-CNN,实际目标检测项目中最常用的是 Ultralytics YOLO 系列:
# 使用 Ultralytics YOLOv8 进行推理(pip install ultralytics)from ultralytics import YOLO
# 加载预训练 YOLOv8n 模型(nano 版,速度最快)model = YOLO("yolov8n.pt") # 首次运行会自动下载权重
# 对图片做目标检测results = model("https://ultralytics.com/images/bus.jpg")
# 打印每个检测到的物体:类别、置信度、边界框坐标for box in results[0].boxes: cls_id = int(box.cls[0]) # 类别 ID conf = float(box.conf[0]) # 置信度 xyxy = box.xyxy[0].tolist() # 边界框 [x1, y1, x2, y2] name = model.names[cls_id] # 类别名(如 'person') print(f"{name:10s} 置信度 {conf:.0%} 框 {xyxy}")# 输出示例:# person 置信度 89% 框 [22.0, 49.0, 234.0, 594.0]# person 置信度 88% 框 [221.0, 38.0, 344.0, 599.0]# bus 置信率 87% 框 [0.0, 222.0, 806.0, 655.0]如果想用自己的数据训练:
from ultralytics import YOLO
model = YOLO("yolov8n.pt") # 加载预训练权重model.train(data="my_data.yaml", epochs=100) # 在自定义数据集上微调带完整训练超参数的示例
Section titled “带完整训练超参数的示例”上面是最简写法,实际调优时往往需要显式设置训练策略:
from ultralytics import YOLO
model = YOLO("yolov8s.pt") # 用 small 版本,精度/速度平衡
model.train( data="my_data.yaml", epochs=200, imgsz=640, # 输入分辨率,越大越准但越慢 batch=32, optimizer="AdamW", # 优化器:SGD 或 AdamW lr0=0.001, # 初始学习率(AdamW 常用 1e-3) lrf=0.01, # 最终学习率 = lr0 * lrf(余弦退火终点) cos_lr=True, # 启用余弦退火调度 warmup_epochs=3, # 前 3 个 epoch 做学习率预热 weight_decay=0.0005, # L2 正则化系数 momentum=0.937, # SGD 动量(用 AdamW 时被忽略) mosaic=1.0, # Mosaic 增强概率 mixup=0.1, # MixUp 增强概率 hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, # HSV 色空间扰动幅度 degrees=10, # 随机旋转 ±10° translate=0.1, scale=0.5, # 随机平移/缩放 fliplr=0.5, # 水平翻转概率 label_smoothing=0.1, # 标签平滑 patience=30, # 30 个 epoch 无提升则早停)PyTorch 损失函数示意(教学片段)
Section titled “PyTorch 损失函数示意(教学片段)”下面用极简 PyTorch 代码展示 CIoU 损失的核心计算,帮助理解检测器”框得准不准”是如何被量化优化的:
import torchimport torch.nn.functional as F
def ciou_loss(pred_boxes, target_boxes, eps=1e-7): """ pred_boxes / target_boxes: (N, 4),格式为 (x1, y1, x2, y2) """ # —— 1. 计算交集与并集,得到 IoU —— x1 = torch.max(pred_boxes[:, 0], target_boxes[:, 0]) y1 = torch.max(pred_boxes[:, 1], target_boxes[:, 1]) x2 = torch.min(pred_boxes[:, 2], target_boxes[:, 2]) y2 = torch.min(pred_boxes[:, 3], target_boxes[:, 3]) inter = (x2 - x1).clamp(0) * (y2 - y1).clamp(0) area_p = (pred_boxes[:, 2]-pred_boxes[:, 0]) * (pred_boxes[:, 3]-pred_boxes[:, 1]) area_t = (target_boxes[:, 2]-target_boxes[:, 0]) * (target_boxes[:, 3]-target_boxes[:, 1]) union = area_p + area_t - inter + eps iou = inter / union
# —— 2. 计算中心点欧氏距离与最小闭合框对角线 —— pred_cx = (pred_boxes[:, 0] + pred_boxes[:, 2]) / 2 pred_cy = (pred_boxes[:, 1] + pred_boxes[:, 3]) / 2 tgt_cx = (target_boxes[:, 0] + target_boxes[:, 2]) / 2 tgt_cy = (target_boxes[:, 1] + target_boxes[:, 3]) / 2 rho2 = (pred_cx - tgt_cx) ** 2 + (pred_cy - tgt_cy) ** 2 # 中心点距离平方
# 最小闭合框的对角线平方 cx1 = torch.min(pred_boxes[:, 0], target_boxes[:, 0]) cy1 = torch.min(pred_boxes[:, 1], target_boxes[:, 1]) cx2 = torch.max(pred_boxes[:, 2], target_boxes[:, 2]) cy2 = torch.max(pred_boxes[:, 3], target_boxes[:, 3]) c2 = (cx2 - cx1) ** 2 + (cy2 - cy1) ** 2 + eps
# —— 3. CIoU = IoU - 距离项 - 宽高比项(此处省略 v 的详细推导)—— ciou = iou - rho2 / c2 # 简化版,完整 CIoU 还含宽高比一致性 v*α return (1 - ciou).mean() # 损失越小越好
# 示例:预测框与真实框越接近,损失越小pred = torch.tensor([[10., 10., 50., 50.]])truth = torch.tensor([[12., 14., 48., 52.]])print(f"CIoU loss = {ciou_loss(pred, truth):.4f}")- 精度 vs 速度的取舍:追求最高精度 → Faster R-CNN 系列;追求实时性(视频、边缘设备)→ YOLO 系列。但注意,RetinaNet(Focal Loss, 2017)及 YOLOv7 之后已基本抹平精度差距。
- NMS(非极大值抑制):同物体会被检测多次(多个重叠框),NMS 保留得分最高的框、删除与它重叠过多的框。YOLOv10/YOLO26 已实现端到端无 NMS。
- 数据标注成本高:检测数据集需要人工画框标注(COCO、Pascal VOC),比分类标注贵得多。实际项目中数据往往是瓶颈。
- Anchor-free 是趋势:早期 YOLO 用预设的 anchor boxes,v6 之后逐步转向 anchor-free,减少需调的超参。
- 模型大小选择:YOLOv8 系列从 nano(n)到 extra-large(x),速度和精度递增。边缘部署选 n/s,服务器选 m/l,精度优先选 x。
- 数据标注格式:YOLO 格式是每张图一个
.txt文件,每行class x_center y_center width height(归一化到 0~1)。用 LabelImg 或 Roboflow 标注。 - NMS 的
iou_threshold:调低(如 0.3)→ 更激进去重,可能漏检重叠物体;调高(如 0.7)→ 保留更多框,可能出现重复检测。 - 置信度阈值:
model(img, conf=0.5)设最低置信度。低阈值召回率高但误检多,高阈值精度高但可能漏检。 - 版本选择:学术编号(YOLOv13)vs 工业旗舰(Ultralytics YOLO26)不完全对应,选型时看实际 benchmark 而非版本号大小。
- 安防监控:海康威视摄像头用目标检测做入侵报警、人流密度统计和异常行为识别,YOLO 的实时推理能力使其成为视频流分析的首选。
- 自动驾驶:特斯拉 FSD、Waymo 用检测模型实时定位前方车辆、行人和骑行者并预测运动轨迹,直接服务于碰撞预警与路径规划。
- 工业质检:产线上用 YOLO 定位零件缺陷的位置和类型(裂纹、气泡、异物),比人工巡检快几十倍且漏检率更低。
- 智慧零售:Amazon Go 无人超市用检测模型识别顾客拿取的商品自动完成结算;品牌方用它做货架陈列审计,核查铺货达标率。
- 农业:大疆农业无人机用目标检测识别作物病虫害区域、统计果实数量,支撑精准施药与产量预估。
- 无人机巡检:搭载在巡检无人机上自动识别电力线路绝缘子破损、输油管道泄漏、太阳能板热斑等目标,大幅降低人工巡线成本。
- 体育赛事追踪:广播画面中实时追踪球员和球的位置,用于赛事数据统计(如跑动距离、传球热区)和自动高光剪辑。
- 餐厅自助称重计价:智慧餐厅通过 YOLO 识别菜品品类并结合称重数据,实现自助取餐自动计价,已在海底捞、五爷拌面等连锁门店落地。
YOLO 全系演进
Section titled “YOLO 全系演进”注意 v4 之后各版本由不同团队提出,互不隶属,仅沿用 YOLO 名号与单阶段思想;编号大小不代表技术传承。
| 版本 | 年份 | 团队 | 关键创新 |
|---|---|---|---|
| YOLOv1 | 2015/2016 | Redmon, Divvala, Girshick, Farhadi(华盛顿大学) | 检测统一为单次回归问题 |
| YOLOv2/9000 | 2016 | Redmon & Farhadi | BN、anchor boxes、9000+ 类 |
| YOLOv3 | 2018 | Redmon & Farhadi | Darknet-53、多尺度(Redmon 此后退出 CV 研究) |
| YOLOv4 | 2020 | Bochkovskiy, 王建国, 廖弘源(中研院) | CSP、SPP、Mosaic |
| YOLOv5 | 2020 | Glenn Jocher(Ultralytics) | 无正式论文,PyTorch 工程化(许可曾引争议) |
| YOLOv6 | 2022 | 美团 | 工业部署导向 |
| YOLOv7 | 2022 | Wang, Bochkovskiy, Liao(中研院) | E-ELAN、trainable bag-of-freebies |
| YOLOv8 | 2023 | Ultralytics | Anchor-free、检测/分割/姿态/分类多任务 |
| YOLOv9 | 2024 | Wang, Yeh, Liao(中研院) | PGI + GELAN |
| YOLOv10 | 2024 | 清华大学 | 端到端 NMS-free |
| YOLO11 | 2024 | Ultralytics | 精度/效率再平衡 |
| YOLOv12 | 2025-02 | Yunjie Tian 等 | Attention-centric(Area Attention)——已是 CNN-Transformer 混合架构 |
| YOLOv13 | 2025 | iMoonLab | 超图增强视觉感知(学术编号最新) |
| YOLO26 | 2025-09 | Ultralytics(YOLO Vision 2025 发布) | 原生端到端无 NMS、主打 CPU/边缘部署(近期发展,工业界主流旗舰) |
典型类库与工具
Section titled “典型类库与工具”| 类库 | 语言 | 说明 |
|---|---|---|
| Ultralytics YOLO | Python | YOLOv5/v8/v11/v26 官方实现,一行命令完成训练/推理/导出,工业部署主流 |
| MMDetection | Python | 商汤开源的检测工具箱,内置 Faster R-CNN、YOLO 等数十种检测器 |
| Detectron2 | Python | Meta 开源的检测库,提供 Faster R-CNN、Mask R-CNN 等高质量实现 |
| torchvision | Python | PyTorch 官方库,提供 Faster R-CNN/RetinaNet 预训练模型与推理接口 |
| YOLOv8(ultralytics) | Python | Anchor-free 多任务框架,支持检测/分割/姿态/分类,API 简洁 |
| OpenCV | C++/Python | 用于检测结果的可视化标注(画框、标签)和视频流推理 |
| Darknet | C / Python | YOLO 原作者 Redmon 开源的 C 语言深度学习框架,YOLOv1–v3 的原始实现,以推理速度极快著称 |
| YOLOv5 | Python | Ultralytics 基于 PyTorch 重写的版本,生态成熟、社区资源丰富,目前工业界使用最广泛的 YOLO 版本之一 |
| Roboflow | 在线平台 | 提供数据标注、增强、版本管理和模型训练一体化的在线工具,YOLO 自定义数据集训练的常见入口 |
| 术语 | 英文 | 解释 |
|---|---|---|
| 边界框 | Bounding Box | 用矩形框标出物体位置的坐标表示,通常为 (x, y, w, h) |
| 锚框 | Anchor | 预设的一组不同尺度与宽高比的参考框,检测器在其基础上微调 |
| 交并比 | IoU (Intersection over Union) | 预测框与真实框的交集面积除以并集面积,衡量定位精度 |
| 非极大值抑制 | NMS (Non-Maximum Suppression) | 保留得分最高的框、删除与它重叠过多的重复框的去重操作 |
| 平均精度均值 | mAP (mean Average Precision) | 综合所有类别在不同 IoU 阈值下的检测精度的标准评价指标 |
| 两阶段检测器 | Two-stage Detector | 先生成候选区域再分类精修的检测器(如 Faster R-CNN),精度高但较慢 |
| 单阶段检测器 | One-stage Detector | 直接在全图上一步预测类别与框的检测器(如 YOLO),速度快 |
| 网格划分 | Grid Division | 将图像划分为 S×S 网格,每个网格负责检测中心落在该格子内的物体,是 YOLO 的基本设计 |
- 早期”两阶段准、单阶段快”的刻板印象已过时——RetinaNet(Focal Loss, 2017)及 YOLOv7 之后版本基本抹平精度差距,单/两阶段的划分更多反映推理流程差异。
- 两阶段谱系:R-CNN(Girshick et al., CVPR 2014,Selective Search + CNN + SVM)→ Fast R-CNN(2015,RoI Pooling)→ Faster R-CNN(Ren/He/Girshick/Sun, NeurIPS 2015,引入 RPN 区域建议网络)。
- 单阶段并行:SSD(Liu et al., ECCV 2016,多尺度特征图)。
- YOLO 谱系早期发展:YOLOv1(Redmon et al., 2016)开创单阶段检测;YOLOv2/v3(Redmon 一脉,2017/2018)引入 anchor box、多尺度检测(Redmon 此后退出 CV 研究)。v12(2025)引入注意力机制,成为 CNN-Transformer 混合架构。最新发展:学术侧 YOLOv13(2025);工业侧 Ultralytics YOLO26(2025-09,原生无 NMS、主打边缘部署)。实时检测事实标准,工业部署(安防、自动驾驶、质检)首选。