Skip to content

目标检测与 YOLO

目标检测(Object Detection)是计算机视觉的核心任务之一,属于深度学习 CNN 分支下的重要方向(全景位置见 深度学习概览)。本页介绍两阶段与单阶段两大流派,并完整梳理 YOLO 全系的演进。

图像分类回答”图里是什么”,目标检测要回答两个问题:“有什么” + “在哪里”——既要分类,还要用矩形框(bounding box)标出每个物体的位置。

两大流派的直觉:

  • 两阶段 = 先找嫌疑区域,再逐一鉴定:第一步先用某种方法找出可能包含物体的候选区域(“这几块地方可能有东西”),第二步对每个候选区域做分类和框精修。精度高,但跑两遍流程,速度慢。
  • 单阶段 = 一眼扫完全图,直接出结果:把图片划成网格,每个格子直接预测”我这里有没有物体、是什么类、框的坐标”。一步到位,速度极快——YOLO(You Only Look Once)的名字就是这个意思。

在深度学习检测器出现之前,目标检测经历了十余年的手工特征时代。深度学习检测器不是凭空出现的——它们站在传统方法的肩膀上。更多背景见传统计算机视觉与传统方法 vs 深度学习。

年份方法核心思路局限
2001Viola-Jones(Haar 级联)Haar-like 特征 + AdaBoost 级联分类器,实现首个实时人脸检测仅对正面人脸效果好,特征表达能力有限
2005HOG + SVM提取方向梯度直方图(HOG)特征,用 SVM 分类——行人检测经典方案特征固定不可学习,对遮挡和形变鲁棒性差
2008DPM(Deformable Parts Model)根部模型 + 多个部件模型,显式建模物体形变——传统检测巅峰人工设计部件,推理慢,精度仍远低于深度学习
2014R-CNN(Region-based CNN)用 Selective Search 生成候选区域 + CNN 提取特征——深度学习检测的开端每个候选区域独立过 CNN,极慢(47s/张)

关键转折:R-CNN(2014)将传统候选区域生成(Selective Search)与 CNN 特征提取结合,标志着检测器从”手工特征时代”迈入”深度学习时代”。此后 Fast R-CNN、Faster R-CNN 不断加速,最终催生了 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 的经典形式为例:

L=λcoord⋅Lbox⏟定位损失+Lobj⏟置信度损失+Lcls⏟分类损失\mathcal{L} = \lambda_{\text{coord}} \cdot \underbrace{\mathcal{L}_{\text{box}}}_{\text{定位损失}} + \underbrace{\mathcal{L}_{\text{obj}}}_{\text{置信度损失}} + \underbrace{\mathcal{L}_{\text{cls}}}_{\text{分类损失}}

其中 λcoord\lambda_{\text{coord}}(如 5)放大定位损失的权重,因为坐标回归比分类更难学。

定位损失 Lbox\mathcal{L}_{\text{box}}——“框得准不准”

早期 YOLO 用坐标的平方误差。但更好的做法是用基于 IoU 的损失,因为坐标误差不能直接反映”框与真值重叠程度”。IoU(Intersection over Union,交并比)定义为预测框 BB 与真实框 BgtB^{gt} 的交集面积除以并集面积:

IoU=∣B∩Bgt∣∣B∪Bgt∣∈[0,1]\text{IoU} = \frac{|B \cap B^{gt}|}{|B \cup B^{gt}|} \in [0, 1]

IoU=1 表示完全重合。但 IoU 有个缺陷:当两个框完全不相交时 IoU=0,梯度也为 0,网络无法学习。于是衍生出一系列改进:

损失公式核心解决的问题
GIoUIoU−∣C∖(B∪Bgt)∣∣C∣\text{IoU} - \frac{\lvert C \setminus (B \cup B^{gt})\rvert}{\lvert C\rvert}(CC 是包含两框的最小闭合框)不相交时仍有梯度
DIoU加入中心点距离与对角线长度的比值收敛更快,考虑中心点对齐
CIoUDIoU + 宽高比一致性惩罚项进一步惩罚长宽比不匹配

YOLOv4 之后默认采用 CIoU 损失。直觉:一个”好”的预测框不仅要重叠面积大(IoU),还应该中心对齐(DIoU)、形状相似(CIoU)。

置信度损失 Lobj\mathcal{L}_{\text{obj}}——“这里到底有没有物体”

每个格子预测一个 objectness 置信度 CiC_i,表示”我这里包含物体的概率 × 预测框与真值的 IoU”。当格子确实负责某物体时,希望 Ci→IoUC_i \to \text{IoU};否则希望 Ci→0C_i \to 0。用 BCE(二元交叉熵)计算。

分类损失 Lcls\mathcal{L}_{\text{cls}}——“是什么类”

对每个格子预测的类别概率用交叉熵损失(多分类)或 BCE(独立多标签)。YOLOv1 用 softmax,YOLOv3 起改用独立 sigmoid(因为一个物体可能同时属于多个类,如”女人”和”人”)。

类别不平衡问题与 Focal Loss

单阶段检测器有一个头疼的问题:图像中绝大多数格子都不包含物体(负样本远多于正样本),网络很容易”偷懒”——只要全预测”没物体”就能拿到很低的损失值。RetinaNet(Lin et al., ICCV 2017)提出的 Focal Loss 通过给已经分对的样本降权来解决:

FL(pt)=−(1−pt)γlog⁡(pt)\text{FL}(p_t) = -(1 - p_t)^\gamma \log(p_t)

其中 ptp_t 是模型对正确类别的预测概率,γ\gamma(通常取 2)是聚焦参数。当 ptp_t 已经很高(容易样本),(1−pt)γ→0(1-p_t)^\gamma \to 0,损失被大幅压缩;难样本则几乎不受影响。这一招让单阶段检测器的精度追平了两阶段检测器。

梯度下降如何优化? 损失函数 L\mathcal{L} 是所有网络权重 ww 的函数。训练时,反向传播(backpropagation)计算 ∂L/∂w\partial \mathcal{L}/\partial w(每个权重对损失的贡献),优化器(如 SGD/Adam)沿梯度反方向小幅更新权重:w←w−η⋅∂L/∂ww \leftarrow w - \eta \cdot \partial \mathcal{L}/\partial w,η\eta 是学习率。反复迭代数万次,损失逐渐下降,模型逐渐变准。

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)

学习率 η\eta 决定每步更新的”步长”——太大则震荡不收敛,太小则收敛慢。常见策略:

  • Warmup(预热):前几个 epoch 从极小学习率线性升到目标值,避免训练初期梯度混乱导致权重飞掉。
  • Cosine annealing(余弦退火):之后按余弦曲线从峰值缓慢降到接近 0,前期大步探索、后期小步精修。YOLO 系列默认采用。
  • 典型值:SGD 初始 lr≈0.01、momentum≈0.937、weight decay≈5e-4;AdamW 则 lr≈1e-3。

正则化与稳定训练

  • 权重衰减(Weight Decay):在损失中加上 λ∑w2\lambda \sum w^2,惩罚过大的权重,防止过拟合(L2 正则化)。
  • EMA(Exponential Moving Average,指数移动平均):维护一份权重的”滑动平均版本”用于推理,比直接用最终权重更稳定,YOLO 训练默认开启。
  • Label Smoothing(标签平滑):把 one-hot 标签的 1.0 软化为 0.9、0.0 软化为 ϵ/(K−1)\epsilon/(K-1),防止模型过度自信,轻微提升泛化。

正负样本匹配(Label Assignment)

Anchor-free 时代,需要决定”哪些预测点算正样本(负责某个真值框)“。YOLOv8 采用 TaskAlignedAssigner:对每个真值框,按”分类置信度 × 预测框与真值的 IoU”的幂次 sα⋅uβs^{\alpha} \cdot u^{\beta} 打分,取 top-k 作为正样本。这种”动态”匹配比 YOLOv1 的”按中心点固定分配”灵活得多。

动手实践:用 torchvision 做目标检测推理

Section titled “动手实践:用 torchvision 做目标检测推理”
import torch
from torchvision.models.detection import fasterrcnn_resnet50_fpn, FasterRCNN_ResNet50_FPN_Weights
from torchvision.transforms.functional import to_tensor
# 加载预训练 Faster R-CNN(COCO 91 类)
weights = FasterRCNN_ResNet50_FPN_Weights.DEFAULT
model = fasterrcnn_resnet50_fpn(weights=weights).eval()
labels = weights.meta["categories"] # 类别名称列表
# 准备输入(PIL 图片 → tensor,归一化到 [0,1])
from PIL import Image
img = 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%

除了 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) # 在自定义数据集上微调

上面是最简写法,实际调优时往往需要显式设置训练策略:

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 torch
import 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 识别菜品品类并结合称重数据,实现自助取餐自动计价,已在海底捞、五爷拌面等连锁门店落地。

注意 v4 之后各版本由不同团队提出,互不隶属,仅沿用 YOLO 名号与单阶段思想;编号大小不代表技术传承。

版本年份团队关键创新
YOLOv12015/2016Redmon, Divvala, Girshick, Farhadi(华盛顿大学)检测统一为单次回归问题
YOLOv2/90002016Redmon & FarhadiBN、anchor boxes、9000+ 类
YOLOv32018Redmon & FarhadiDarknet-53、多尺度(Redmon 此后退出 CV 研究)
YOLOv42020Bochkovskiy, 王建国, 廖弘源(中研院)CSP、SPP、Mosaic
YOLOv52020Glenn Jocher(Ultralytics)无正式论文,PyTorch 工程化(许可曾引争议)
YOLOv62022美团工业部署导向
YOLOv72022Wang, Bochkovskiy, Liao(中研院)E-ELAN、trainable bag-of-freebies
YOLOv82023UltralyticsAnchor-free、检测/分割/姿态/分类多任务
YOLOv92024Wang, Yeh, Liao(中研院)PGI + GELAN
YOLOv102024清华大学端到端 NMS-free
YOLO112024Ultralytics精度/效率再平衡
YOLOv122025-02Yunjie Tian 等Attention-centric(Area Attention)——已是 CNN-Transformer 混合架构
YOLOv132025iMoonLab超图增强视觉感知(学术编号最新)
YOLO262025-09Ultralytics(YOLO Vision 2025 发布)原生端到端无 NMS、主打 CPU/边缘部署(近期发展,工业界主流旗舰)
类库语言说明
Ultralytics YOLOPythonYOLOv5/v8/v11/v26 官方实现,一行命令完成训练/推理/导出,工业部署主流
MMDetectionPython商汤开源的检测工具箱,内置 Faster R-CNN、YOLO 等数十种检测器
Detectron2PythonMeta 开源的检测库,提供 Faster R-CNN、Mask R-CNN 等高质量实现
torchvisionPythonPyTorch 官方库,提供 Faster R-CNN/RetinaNet 预训练模型与推理接口
YOLOv8(ultralytics)PythonAnchor-free 多任务框架,支持检测/分割/姿态/分类,API 简洁
OpenCVC++/Python用于检测结果的可视化标注(画框、标签)和视频流推理
DarknetC / PythonYOLO 原作者 Redmon 开源的 C 语言深度学习框架,YOLOv1–v3 的原始实现,以推理速度极快著称
YOLOv5PythonUltralytics 基于 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、主打边缘部署)。实时检测事实标准,工业部署(安防、自动驾驶、质检)首选。