前言:
前景回顾:
根据之前的朴素目标检测的步骤实现我们直到R-CNN是属于**(Two-Stage 目标检测)**
Two-Stage 目标检测:分两步走(先找目标候选框 → 再判断类别 + 修正位置)
第一阶段:生成大量的候选区域。
第二阶段:分类+回归
- 把每个候选框裁剪出来,送入 CNN 提取特征;
- 用分类器判断这个候选框里是 "猫""狗" 还是 "背景";
- 用回归器微调框的坐标,让框更精准地包围目标。
缺点:候选框数量多(几千个),每个框都要单独提取特征,计算量巨大,导致检测速度很慢。
优点:因为有候选框筛选的步骤,对目标的定位和分类精度更高。
学习新知识:
YOLO(One-Stage 目标检测 ):YOLO 的核心是 "直接预测,一步完成"
核心流程:一次CNN前向传播
- 划分网格 :把输入图像分成
S×S的网格(比如 7×7)。- 直接预测 :每个网格负责预测 B 个边界框 (框的坐标
x,y,w,h)、框的置信度 (这个框里有目标的概率)、C 个类别概率(这个目标是某类的概率)。- 筛选最优框 :用 非极大值抑制(NMS) 去掉重复、置信度低的框,得到最终的检测结果。
优点:不需要生成候选框,整个检测过程只需要一次 CNN 计算,速度极快(早期 YOLO 能达到 45 帧 / 秒,满足实时检测需求)。
缺点:早期版本因为是 "粗放式" 直接预测,对小目标、密集目标的检测精度不如 Two-Stage 模型。
| 对比维度 | Two-Stage(R-CNN 系列) | One-Stage(YOLO 系列) |
|---|---|---|
| 检测步骤 | 2 步:候选框生成 → 分类 + 回归 | 1 步:直接预测位置 + 类别 |
| 候选框来源 | 传统算法生成(几千个,冗余) | 网络直接预测(无冗余) |
| 速度 | 慢(无法实时) | 快(满足实时检测) |
| 精度特点 | 精度高,对小目标友好 | 早期精度略低,后续版本(v3/v5)大幅提升 |
| 核心思想 | 先筛选再细判,追求精度 | 一步预测,追求速度 |
YOLO系列的版本概述(V1-V3)
YOLOv1(2016)
核心思想:将目标检测视为回归问题,端到端训练
网络结构:基于 GoogLeNet,24 个卷积层 + 2 个全连接层,输入 448x448
核心设计:
- 把输入图像分成 S×S(7×7)网格,每个网格预测 B(2)个边界框,每个框包含 (x,y,w,h,confidence),还有 C(20,VOC 数据集)个类别概率
- 置信度 = Pr (Object)×IOU (pred,gt),有物体时 Pr (Object)=1,否则 0
损失函数:
MSE均方差(加权多任务 MSE 损失 )
优缺点:
- 优点:速度极快(45 FPS),端到端训练,泛化能力强(对陌生场景鲁棒);
- 缺点:小目标检测差(7×7 网格太粗)、密集目标检测差(一个网格只能预测 2 个框)、定位精度低于 Two-Stage。
OLOv1 损失函数的完整构成
YOLOv1 将检测视为回归问题,整体采用 ** 平方和误差 (SSE)** 优化,论文原文明确说明:"We optimize for sum-squared error in the output of our model"。损失函数分为 5 个部分,用 2 个平衡系数调整权重:
| 损失类型 | 计算方式 | 权重系数 | 特殊处理 |
|---|---|---|---|
| 中心点坐标损失 | MSE | λ_coord=5 | 仅计算包含目标的网格和负责预测的边界框 |
| 宽高损失 | 平方根 MSE | λ_coord=5 | 对 w 和 h 取平方根,缓解小目标对尺寸变化更敏感的问题 |
| 含目标置信度损失 | MSE | 1 | 置信度 = IOU× 类别概率,仅计算负责预测的边界框 |
| 不含目标置信度损失 | MSE | λ_noobj=0.5 | 降低背景框对训练的影响,避免模型偏向预测背景 |
| 类别损失 | MSE | 1 | 仅计算包含目标的网格,预测类别概率 |
YOLOv2(2017,YOLO9000)
v2 的核心是「修复 v1 的缺陷,保留速度优势」,核心改进如下(对比 v1):
| 改进点 | 解决的问题 | 具体做法 |
|---|---|---|
| Batch Normalization(BN) | 梯度消失、训练不稳定 | 所有卷积层加 BN,去掉 Dropout,精度提升 2% |
| 高分辨率预训练 | 适应检测的高分辨率输入 | 先在 224×224 预训练,再微调 448×448 |
| 锚框(Anchor Boxes) | 直接回归框易偏离、召回率低 | 借鉴 Faster R-CNN,预测「相对于锚框的偏移」,而非直接预测框 |
| 维度聚类 | 手工设计锚框不合理 | 用 K-means 聚类训练集的真实框(距离用 1-IOU),得到 5 个最优锚框 |
| 直接位置预测 | 锚框偏移易超出网格 | tx/ty 用 sigmoid 限制在 0~1,tw/th 用指数缩放,保证框在网格内 |
| 多尺度训练 | 模型鲁棒性差 | 每 10 批换输入尺寸(320/352/.../608),适配不同分辨率 |
| Darknet-19 骨干网 | 原网络速度 / 精度不足 | 19 个卷积层 + 5 个池化层,更快更轻 |
额外创新:YOLO9000
通过「联合训练」(分类数据集 + 检测数据集),实现 9000 + 类别的检测,首次解决「多类别检测」问题。
YOLOv3(2018)
v3 的核心是「提升小目标检测精度,保持速度优势」
多尺度检测,小目标大幅提升
- 骨干网升级:Darknet-53(53 个卷积层 + 残差连接),解决深层网络梯度消失,精度接近 ResNet-101,速度更快;
- 多尺度预测 (核心):借鉴 FPN(特征金字塔),在 3 个尺度(13×13、26×26、52×52)分别检测大、中、小目标:
- 13×13(大感受野):检测大物体;
- 52×52(小感受野):检测小物体;
- 类别预测优化:用 Logistic 回归替代 Softmax,支持「多标签分类」(如物体同时是 "猫" 和 "宠物");
- 锚框调整:聚类得到 9 个锚框,分配到 3 个尺度;
- 损失函数:用二值交叉熵(BCE)替代原损失,置信度和类别预测更稳定。
| 版本 | 骨干网 | 核心创新 | 解决的核心问题 | 典型性能(COCO) |
|---|---|---|---|---|
| v1 | GoogLeNet 改进 | 端到端回归 | 检测速度慢 | mAP@0.5≈63%,45FPS |
| v2 | Darknet-19 | 锚框、维度聚类、多尺度训练 | 召回率低、小目标差 | mAP@0.5≈76%,67FPS |
| v3 | Darknet-53 | 多尺度预测、残差连接 | 小目标检测差 | mAP@0.5≈83%,30FPS |
| v4 | CSPDarknet-53 | SPP+PAN、Mosaic、CIoU | 精度 / 速度平衡 | mAP@0.5≈87%,45FPS |
| v5 | CSPDarknet | 动态锚框、自适应缩放、PyTorch | 易用性差、部署难 | mAP@0.5≈88%,v5s 达 140FPS |
聚类算法K-means + YOLO实践
⭐面试:什么是yolo?
答案:You Only Look Once是典型的One-Stage 端到端目标检测算法,核心是一次性完成目标的位置回归与类别分类,检测速度极快,适合实时场景。
- 网格划分:将输入图像划分为 S×S 的均匀网格;
- 正样本判定:若目标真实框(GT 框)的中心点落在某个网格内,该网格就负责预测这个目标;
- 预测输出:每个网格会预测若干边界框的坐标、置信度,以及一套共享的类别概率;
- 结果筛选:最终通过置信度阈值过滤和非极大值抑制(NMS),得到最终的检测结果。
⭐K-means聚类算法
核心定义
- 本质:无监督学习算法,核心是将相似度高的数据点归为同一簇(类),相似度低的归为不同簇;
- 关键超参数:K(预设的聚类簇数量,需人工指定);
- 核心度量:标准 K-means 用欧氏距离 衡量数据点与聚类中心的相似度(YOLO 中做了针对性改造)。
YOLO 中改造为基于 IOU 的距离度量,公式为:d(box, centroid) = 1 - IOU(box, centroid)
2. 标准 K-means 计算流程(步骤拆解)
- 初始化:随机选择 K 个数据点作为初始聚类中心(avg_center1);
- 分配簇:遍历所有数据点,计算每个点到 K 个聚类中心的距离,将点归到距离最近的簇;
- 更新中心:所有数据点完成簇分配后,计算每个簇内所有数据点的均值,作为新的聚类中心(avg_center2);
- 迭代收敛:重复 "分配簇→更新中心",直到相邻两次聚类中心的差值<预设阈值(或达到最大迭代次数),聚类完成。
3.核心缺点⭐
- 计算量巨大:需多次迭代遍历所有数据点,数据量越大,计算成本越高;
- 补充隐性缺点(面试高频):
- 对初始聚类中心敏感:不同初始值可能得到不同聚类结果;
- 对离群值敏感:离群点会拉偏聚类中心;
- K 值无统一设定标准:需结合业务 / 数据试错。
K-means vs KNN 核心区别(精准对比)
| 维度 | K-means | KNN |
|---|---|---|
| 任务类型 | 聚类(无监督学习) | 分类 / 回归(有监督学习) |
| 核心目标 | 找数据的自然簇,确定聚类中心 | 对新样本做类别 / 数值预测 |
| 计算逻辑 | 迭代优化聚类中心,使簇内距离最小 | 找新样本最近的 K 个邻居,投票(分类)/ 均值(回归) |
| 距离作用 | 衡量数据点与聚类中心的相似度(用于分簇) | 衡量新样本与训练样本的相似度(用于选邻居) |
K-means 与 YOLO 的关联(锚框聚类)
YOLO 中 K-means 的核心作用是为锚框(Anchor Box) 聚类适配数据集的宽高(w/h),替代手工 / 随机设定锚框尺寸:
- 解决的问题:YOLOv1 无锚框,直接回归 w/h,不同数据集目标尺寸差异大,模型学习难度高;
- 核心优势:
- 锚框尺寸不再随机 / 手工设定,基于训练集真实框(GT 框)聚类得到;
- 聚类后的 w/h 能最大化贴合数据集的 GT 框分布,模型只需预测 "目标框相对锚框的偏移",大幅降低学习难度。
⭐YOLOv1核心原理
YOLO1算法的核心原理是构建y_pre和y_true两者做损失构建模型

1.y_pre的构建 核心逻辑:
网格划分、正样本选择、输出维度推导
**YOLOv1 核心逻辑:
- 输入与网格划分:
- 输入图像:448×448×3
- 划分网格:7×7(每个网格尺寸64×64)
- 正样本:GT框中心点落在该网格 → 该网格负责预测这个GT框;中心点落线上可任选一侧网格;
- 负样本:未包含任何GT框中心点的网格。**
**⭐2. 网络结构与输出维度:
- 骨干网:24个卷积层 + 2个全连接层(基于GoogLeNet改进,没有用 Inception 模块,而是简单的卷积 + 池化);
- 输出维度:7×7×30 = [(4+1)×2 + 20]
- (4+1)×2:每个网格预测2个框,每个框包含4个归一化坐标(x,y,w,h) + 1个置信度;
- 20:针对单个网格单元而言,它只预测1 套(20 个)类别概率(比如这个网格包含 "狗" 的概率、包含 "猫" 的概率等,共 20 类)** **:
- 每个网格最多预测2个框(置信度筛选后);**
**- 类别概率是网格级共享的,不是框级的;
- 理论最多预测7×7×2=98个目标,实际因网格粗,密集/小目标检测效果差达不到98。**
上述总结归纳中的20个类别概率的详解可以这么理解:
YOLOv1 中,20 个类别概率是网格级的(每个网格 1 套),网格负责确定类别。两个预测框 是猜的目标的位置+置信度(x,y,w,h,c)。这个网格给出的 "如果有目标,它属于哪类" 的判断 。《网格的该类概率 × 框的置信度》。
2.y_true 的构建核心逻辑
y_true 构建核心是归一化 + 网格内偏移
**YOLOv1 y_true构建核心步骤:
- 正样本选择:
- GT框中心点像素坐标 → 归一化坐标(÷448)→ 计算落在哪个网格(i,j),该网格为正样本;
- 坐标归一化:
- GT的cx/cy/w/h像素值 → 归一化到0~1(÷448);
- 计算网格内偏移(tx/ty):
- tx = gt_cx_norm×7 - j (j是网格列索引)
- ty = gt_cy_norm×7 - i (i是网格行索引)
- 确定负责框:
- 正样本网格的2个框中,选与GT IOU更大的作为"负责框";
- 填充y_true(7×7×30):
- 负责框位置:填充(tx, ty, tw, th, 1)(tw/th是归一化后的宽高);
- 非负责框位置:填充(0,0,0,0,0);
- 类别部分:GT对应类别位置填1,其余19类填0;
- 负样本网格:所有位置填0;
- 核心特性:
- 无锚框,直接回归归一化后的宽高;
- 一阶段网络,分类(类别)+回归(坐标)一体化。**
3.构建损失的 核心逻辑:
yolo1是以均方差为核心的损失函数:四部分加权求和。
重点记住
λ_coord=5和λ_noobj=0.5两个权重的设计目的(定位 + 样本平衡)
总损失 = λ_coord × 正样本坐标损失(MSE) + # λ_coord=5(放大坐标损失,解决定位不准) 正样本置信度损失(MSE) + # 权重=1 λ_noobj × 负样本置信度损失(MSE) +# λ_noobj=0.5(缩小负样本权重,解决样本不平衡) 正样本类别损失(MSE) # 权重=1

YOLOv1损失函数核心:
核心损失类型:以MSE(均方误差)为主,因MSE收敛速度快,适配实时检测需求;
损失加权划分(解决样本不平衡+定位精度):
总损失 = 5×正样本坐标损失 + 1×正样本置信度损失 + 0.5×负样本置信度损失 + 1×正样本类别损失;
- 损失计算流程:
解码:预测偏移值还原为图像归一化的预测框;
选负责框:正样本网格的2个框与GT算IOU,选IOU最大的框参与损失计算;
计算:仅负责框参与坐标/正样本置信度损失,负样本仅算置信度损失(权重0.5);
- 调参逻辑:
- 误检高:调大负样本置信度损失权重(λ_noobj);
- 漏检高:调大正样本坐标/置信度损失权重,调小负样本权重;
- 核心痛点:
- 原始IOU无法处理IOU=0的情况(无梯度),YOLOv4采用CIoU Loss完善(GIoU先解决了IOU=0的基础问题),小目标检测不得行;
- 检测优先级:先通过置信度判断"有无目标",再通过类别概率判断"目标类别"。
⭐YOLO1核心步骤总结:
YOLO1的核心步骤:
训练过程:需GT框,有损失计算
输入预处理 → 特征提取 → 预测规则 → 解码匹配 → 损失计算 → 反向传播更新参数
推理过程:无GT框,推理后处理
输入预处理 → 特征提取 → 预测规则 → 解码匹配 → 推理后处理 → 输出检测结果
步骤 训练过程 推理过程 关键差异点 输入预处理 + 特征提取 + 预测规则 ✅ 有 ✅ 有 完全相同,共享模型核心逻辑 解码匹配 ✅ 需匹配 GT 选负责框 ✅ 仅解码框坐标 训练需 GT,推理无 GT 损失计算 ✅ 独有 ❌ 没有 训练用来更新参数,推理不需要 推理后处理 ❌ 没有 ✅ 独有 推理用来筛选结果,训练不需要 YOLOv1 训练时,负样本网格的预测框也会参与置信度损失计算,目的是让模型学会 "区分有无目标";而推理时,这些负样本框会被置信度筛选和 NMS 直接过滤掉。
1.输入预处理
将任意尺寸输入图像缩放至 448×448×3 固定分辨率,对像素值做归一化处理(缩至 0~1 区间),消除图像尺度差异对模型训练和推理的干扰,保证输入格式统一。
2.网格划分与正负样本判定
- 网格划分:将预处理后的图像均匀划分为 7×7 网格(单网格尺寸 64×64,由 448÷7 计算得出);
- 正样本规则:若目标真实框(GT 框)的中心点落在某网格内,该网格即负责预测此目标;若中心点落于网格线上,可任选一侧网格作为正样本;
- 负样本规则:未包含任何 GT 框中心点的网格,仅参与 "无目标" 置信度损失计算,不参与坐标和类别损失计算。
3.特征提取与预测输出构建
- 骨干网络:采用 24 个卷积层 + 2 个全连接层 架构(基于 GoogLeNet 改进,非 Darknet 系列),通过卷积层提取图像语义特征,全连接层将特征映射为固定维度的预测张量;
- 输出维度:最终输出 7×7×30 预测张量,维度拆解公式为:
30 = (4个坐标值 + 1个置信度)×2个预测框 + 20个网格共享类别概率;- 预测值精准定义:
- 坐标值
(tx, ty, tw, th):tx/ty为框中心相对于所在网格左上角的偏移量(范围 0~1),tw/th为框宽高相对于整图的归一化值(范围 0~1);- 置信度:计算方式为
Pr(Object) × IOU(pred, gt),既表征框内是否存在目标,也反映预测框与 GT 框的位置贴合度;- 类别概率:对应 VOC 数据集的 20 个类别,为 网格级共享概率(非框级独立概率),表示该网格内目标属于某类别的概率。
4.预测框解码与负责框选择
预测框解码(版本不同则可变):将模型输出的偏移值
(tx, ty, tw, th)还原为图像像素坐标系下的真实框坐标,公式如下:
- x = (tx + 网格列索引j) × 网格尺寸s
- y = (ty + 网格行索引i) × 网格尺寸s
- w = tw × 输入图像宽度W
- h = th × 输入图像高度H
原始预测值(tx, ty, tw, th)的归一化逻辑:
tx/ty:预测的是「框中心相对于网格左上角的偏移量」,模型输出后通常会经过sigmoid函数限制在(0,1)之间,确保框中心落在当前网格内;
tw/th:原始论文中是「预测框宽高相对于整幅图像的归一化值」(图像尺寸448×448,故解码时×448),而非相对于锚框(YOLOv2开始才相对于锚框)。
**负责框选择:**正样本网格的 2 个预测框中,与 GT 框 IOU 值更高的那个框被选为 "负责框",仅负责框参与坐标损失和正样本置信度损失计算,另一个框作为 "非负责框",按负样本置信度损失计算(归为 "正样本网格的非负责框")
5.加权 MSE 损失函数构建(训练阶段特有)
总损失公式
总损失 = 5×正样本坐标损失(MSE) + 1×正样本置信度损失(MSE) + 0.5×负样本置信度损失(MSE) + 1×正样本类别损失(MSE)损失计算规则
- 坐标损失:仅正样本网格的负责框参与,权重设为 5(放大坐标损失,提升定位精度),采用 MSE 计算预测坐标与 GT 坐标的误差;
- 正样本置信度损失:仅负责框参与,权重设为 1,MSE 误差基于预测置信度与真实置信度(IOU (pred, gt))计算;
- 负样本置信度损失:负样本包含 "负样本网格的 2 个框 + 正样本网格的非负责框",权重设为 0.5(降低负样本对损失的主导作用),MSE 误差基于预测置信度与 0(无目标)计算;
- 类别损失:仅正样本网格参与,权重设为 1,MSE 误差基于预测类别概率与 GT 类别 one-hot 向量计算。
6.推理阶段后处理(推理阶段特有)
- 置信度筛选:过滤置信度低于设定阈值(常用 0.5)的预测框,初步剔除无意义预测;
- 类别置信度计算:每个预测框的类别置信度 = 对应网格的类别概率 × 框自身的置信度,确定框内目标的类别及置信度;
- 非极大值抑制(NMS):对同一类别下的预测框,剔除 IOU 大于阈值(常用 0.5)的冗余框,保留定位最精准的框,输出最终检测结果。
YOLOv2核心原理
YOLOv1的痛点:
1.定位精度不足:无锚框直接回归宽高,小目标、密集目标定位误差大;
2.分类精度有限:骨干网络特征提取能力不足(24 层卷积 + 全连接层),无多尺度特征融合,对不同尺寸目标适应性差;
3.输出维度固定:仅 7×7 网格,网格数量少,密集目标容易漏检;
4.训练难度高:直接回归目标框的坐标和尺寸,模型收敛慢,对不同数据集的适配性差。
YOLOv2(YOLO9000):核心更新 ------"提升定位精度 + 增强数据集适配性"

核心更新1:引入锚框(Anchor Box)------ 解决 "直接回归难度高" 的痛点
1.前置步骤:用K-means聚类生成锚框(基于训练集的所有 GT 框(仅提取宽高 w/h,归一化到 (0,1)),用 YOLO 专属的 "IOU 距离" 聚类,得到5 个预设锚框尺寸。
影响:将原本的YOLOv1的解码方式进行了优化
原本的yolo1解码方式
- x = (tx + 网格列索引j) × 网格尺寸s
- y = (ty + 网格行索引i) × 网格尺寸s
- w = tw × 输入图像宽度W
- h = th × 输入图像高度H
yolo2的解码方式
x = [σ(tx) + j ](先 sigmoid 激活,再加网格列索引 j )× 网格尺寸sy = [σ(ty) + i ](先 sigmoid 激活,再加网格行索引 i)× 网格尺寸s- w = [pw × e^tw] × 网格尺寸s
- h = [ph × e^th] × 网格尺寸s
⭐
1.针对x,y中新增
σ(tx),目的是将 tx 约束在 (0,1) 之间,确保中心点落在当前网格内,解决 YOLOv1 中心点可能超出网格的问题;2.pw 和 ph 本身是「归一化后的锚框宽高」 (通过 k-means 聚类从训练集得到,非人工设定);
e^tw:网络预测 tw 为偏移量,通过指数函数将 tw(可正可负)转换为「锚框宽度的缩放因子」(正数值);
核心差异总结(更清晰的对比)
| 对比维度 | YOLOv1 | YOLOv2 |
|---|---|---|
| 宽高预测依赖 | 无锚框,直接预测相对图像的比例 | 依赖锚框(k-means 聚类),预测锚框的缩放偏移 |
| 宽高计算方式 | 线性映射(tw×W) | 指数缩放(pw×e^tw) |
| 中心点约束 | 无激活函数,可能超出网格 | sigmoid 激活,强制落在当前网格内,位置更精准 |
| 框的多样性 | 仅 7×7 网格,每个网格预测 2 个框,多样性差 | 每个网格对应多个锚框(默认 5 个),框的多样性大幅提升,更易匹配不同尺寸 / 形状的目标 |
核心更新 2:采用 Darknet-19 骨干网络 ------ 解决 "特征提取能力不足" 的痛点
- 替换 YOLOv1 的 "24 层卷积 + 2 层全连接",采用19 层卷积 + 5 层池化 + 1 层全连接的 Darknet-19 架构;
- 核心优化:
- 大量使用 3×3 卷积(提取空间特征)+ 1×1 卷积(降维、整合通道特征,减少计算量);
- 采用 BN 层(Batch Normalization):每个卷积层后添加 BN 层,去除手动归一化,加速模型收敛,提升泛化能力(YOLOv1 无 BN 层);
- 移除全连接层(仅保留最后一层用于输出),减少参数冗余,避免过拟合;
- 优势:在保证计算量不显著增加的前提下,大幅提升特征提取能力,分类和检测精度均优于 YOLOv1 的骨干网络。
核心更新 3:引入 Passthrough 层(通道拼接)------ 解决 "小目标检测效果差" 的痛点这是 YOLOv2 的 "多尺度特征融合" 雏形(为 YOLOv3 的 FPN 铺垫):
核心逻辑:将 ** 高层特征(语义信息丰富,分辨率低)与低层特征(细节信息丰富,分辨率高)** 进行拼接,弥补高层特征丢失的小目标细节;
具体实现:将低层特征图(比如 26×26×128)进行 "隔点采样",转化为 13×13×512 的特征图,再与高层的 13×13×1024 特征图拼接,得到 13×13×1536 的特征图,用于后续预测;
优势:融合了细节信息和语义信息,小目标的检测召回率大幅提升,解决 YOLOv1 密集 / 小目标漏检的问题。
核心更新 4:多尺度训练(Multi-Scale Training) --- 解决 "对不同尺寸目标适应性差" 的痛点核心逻辑:训练过程中,每隔一定批次(比如 10 批),随机更换输入图像的尺寸(从 320×320 到 608×608,步长 32,因为 Darknet-19 的池化层会使特征图尺寸缩小 32 倍);
与 YOLOv1 的区别:YOLOv1 固定输入 448×448,YOLOv2 支持多尺度输入,模型能学习到不同尺寸目标的特征;
优势:模型对大 / 小目标的适应性更强,推理时可以根据需求选择输入尺寸(高精度选大尺寸,高速度选小尺寸),兼顾精度和速度。
核心总结:
锚框定机制,骨干强基础(darknet-19),Passthrough 补小目标(通道拼接),多尺度输入扩场景。
YOLOv3核心原理
核心定位:"多尺度检测 + 更优骨干 + 分类优化"
YOLOv3 继承了 YOLOv2 的锚框,但做了3 个关键升级:
对比维度 YOLOv2 YOLOv3 锚框数量 每个网格 5 个锚框 每个尺度的网格 3 个锚框,共 3 个尺度→ 总计 9 个锚框(通过 k-means 聚类训练集得到,覆盖更多尺寸 / 形状) 框的预测方式 单尺度(仅 13×13 特征图预测) 三尺度(13×13/26×26/52×52 特征图分别预测)→ 不同尺度对应不同尺寸目标(大目标用 13×13,小目标用 52×52) 分类损失 单标签分类(Softmax) 多标签分类(Sigmoid)→ 支持目标同时属于多个类别(如 "猫 + 动物")
骨干网络升级:Darknet-53(替代 YOLOv2 的 Darknet-19)
架构更新:
53 层卷积(无全连接层)+ 残差连接(Residual Connection)→ 解决深层网络梯度消失问题;
核心优化:

-
核心优化:
- 延续 "3×3+1×1 卷积 + BN 层",但加入残差块(每个残差块包含 2 次卷积,特征图尺寸不变);
- 全卷积架构,特征图下采样 3 次(从 416×416→13×13),为三尺度检测提供基础;
-
优势:比 Darknet-19 特征提取能力更强,且在同等精度下速度快于 ResNet 等骨干。
多尺度检测(FPN 架构:特征金字塔网络)

- 具体实现 :
- 高层特征(13×13):上采样后与中层特征(26×26)拼接,再预测;
- 中层特征(26×26):上采样后与低层特征(52×52)拼接,再预测;
- 每个特征图对应 3 个锚框,分别负责大 / 中 / 小目标;
- 优势:彻底解决小目标漏检问题,检测精度大幅超越 YOLOv2。
核心总结(对应 YOLOv2 的口诀)
YOLOv3 口诀 :九框分三尺度,Darknet-53 加残差,FPN 拼层补小目标,多标签分类更灵活
YOLO1 vs YOLO2 vs YOLO3 总结
**1. YOLOv1 特点:(**单网直出框,七格俩框忙,直回归宽高,小目标易忘)
解析:
- 单网直出框:首个端到端检测网络,直接输出目标框;
- 七格俩框忙:7×7 网格,每个网格仅预测 2 个框;
- 直回归宽高:宽高直接映射图像尺寸,无锚框;
- 小目标易忘:特征单一,小目标 / 密集目标漏检严重。
**2. YOLOv2 特点:(**锚框定机制,骨干强基础,Passthrough 补小目标,多尺度扩场景 )
解析:
- 锚框定机制:K-means 锚框 + 指数缩放回归;
- 骨干强基础:Darknet-19 提升特征提取;
- Passthrough 补小目标:低层 + 高层特征拼接;
- 多尺度扩场景:可变输入尺寸适配不同目标。
实践经验:(yolov2论文实践)
1612.08242
https://arxiv.org/pdf/1612.08242

YOLOv2 核心涨点收益
- 输出头预测机制优化(锚框 + 直接位置预测)+ 骨干网络 BN 归一化 → 训练稳定,定位精度提升
- 强特征提取(Darknet-19 + 高分辨率预训练)→ 高质量特征融合(Passthrough 层)→ 检测精度提升
- 适配网络的高分辨率输入 → 精度提升(需平衡速度)
- 多尺度训练 → 模型泛化能力增强,不同尺度目标检测效果提升
**3. YOLOv3 特点:(**九框三尺度,Darknet-53 加残差,FPN 拼层补小目标,多标签分类更灵活 )
解析:
- 九框三尺度:9 个锚框 + 13/26/52 三尺度检测;
- Darknet-53 加残差:骨干升级 + 残差连接防梯度消失;
- FPN 拼层补小目标:特征金字塔系统强化小目标;
- 多标签分类更灵活:Sigmoid 支持多类别标注。
