查看全课大纲(第 65 / 93 节)
- 1.计算机视觉概述
- 2.计算机视觉应用场景
- 3.困难与挑战
- 4.开源库介绍
- 5.图像显示与存储
- 6.CLAHE
- 7.腐蚀膨胀与开闭运算
- 8.滤波与边缘填充
- 9.各种滤波
- 10.图像金字塔
- 11.傅里叶变换
- 12.短时傅里叶变换与小波变换
- 13.颜色特征与颜色直方图
- 14.几何特征_边缘
- 15.几何特征-角点与斑点
- 16.局部特征-SIFT特征描述子
- 17.局部特征-SURF特征描述子
- 18.局部特征-ORB特征描述子
- 19.其他特征描述子
- 20.传统图像分割技术
- 21.GraphCut
- 22.GrabCut
- 23.人脸检测的传统方法
- 24.行人检测的传统方法HOG+SVM
- 25.行人检测DPM
- 26.人工神经网络的架构
- 27.目标函数与梯度下降
- 28.误差反向传播
- 29.可手算的神经网络
- 30.改进目标函数与克服梯度消散
- 31.神经网络之传统神经网络与深度网络的差异
- 32.各种梯度下降算法
- 33.如何选择合适的梯度下降算法
- 34.避免过适应
- 35.CNN的架构
- 36.CNN的误差反向传播_卷积层
- 37.CNN的误差反向传播_池化层
- 38.分类所用的数据集
- 39.Alexnet详解
- 40.VGG详解
- 41.GoogLeNet_v1
- 42.BatchNormalization
- 43.GoogLeNet_v3v4
- 44.ResNet
- 45.ResNeXt
- 46.CNN设计准则
- 47.图像检索与推土机距离
- 48.基于颜色相似性
- 49.基于形状相似性
- 50.基于纹理相似性
- 51.基于局部特征相似性
- 52.DL的二值哈希编码
- 53.高维空间中检索KDTree
- 54.高维空间中检索LSH
- 55.目标识别任务综述
- 56.RCNN
- 57.SPP-Net
- 58.Fast R-CNN
- 59.Faster R-CNN
- 60.R-CNN系列模型回顾
- 61.R-FCN的设计思路
- 62.R-FCN的实现
- 63.YOLOv1
- 64.YOLOv2_9000
- 65.YOLOv3
- 66.图像分割应用场景与数据集
- 67.上采样的实现方式
- 68.FCN网络架构的由来
- 69.FCN构建细节
- 70.DeepLabv1
- 71.CRF
- 72.DeepLabv2
- 73.DeepLabv3
- 74.特定的医学影像分割任务
- 75.U-Net
- 76.3D U-Net
- 77.V-Net
- 78.DenseNet
- 79.病理切片分析任务及数据集
- 80.病理切片分析
- 81.图说任务及其传统处理方法
- 82.深度语言模型与RNN
- 83.LSTM及其变种
- 84.NIC模型
- 85.SAT模型
- 86.图说的性能指标
- 87.判别模型与生成模型
- 88.KL散度与JS散度
- 89.VAE
- 90.GAN的基本原理
- 91.DCGAN与CGAN
- 92.Wasserstein GAN
- 93.SRGAN
YOLOv3
小象实战讲义 · 基于深度学习的计算机视觉
在掌握了 YOLOv1 和 YOLOv2 的核心思想后,我们来看 2018 年发布的 YOLOv3。本节将深入剖析YOLOv3在损失函数、锚框(anchor)策略、主干网络和多尺度预测等方面的关键改进。这些改进,特别是其多尺度预测策略,使其在小目标检测上表现卓越,同时保持了YOLO系列一贯的高速优势。学完本节,你将能清晰阐述YOLOv3的核心架构及其相较于前代的进步。
💡 核心导读
- 损失函数革新:从Softmax Loss转向Logistic Loss(二元交叉熵),以支持多标签分类任务。
- 锚框策略升级:引入多尺度检测器,每个尺度预测3个锚框,形成“3×3”策略,显著提升了对不同大小目标的适应性。
- 主干网络深化:采用基于残差(ResNet)机制的Darknet-53,网络深度大幅增加,特征提取能力更强。
- 多尺度特征融合:通过特征金字塔网络(FPN)思想,融合不同尺度的特征图进行预测,极大改善了小目标检测性能。
- 速度与精度平衡:在检测精度达到当时先进水平的同时,推理速度依然遥遥领先于其他算法。
核心改进点解析
YOLOv3在YOLOv2的基础上进行了多项实质性改进,我们可以从以下几个关键方面来理解它的进化。
损失函数与分类策略的改变
在YOLOv2中,分类任务使用Softmax函数,它假设每个目标只属于一个类别。然而,现实世界中一个物体可能同时属于多个类别(例如,“人”可能同时是“成年人”和“女性”)。为了处理这种多标签分类(multi-label classification) 问题,YOLOv3 摒弃了 Softmax,转而使用 Logistic 函数(或称 Sigmoid 函数) 为每个类别独立地预测一个概率;每个边界框的置信度(objectness)同样用 Sigmoid 单独预测,而不是在多类上做 Softmax。
相应地,损失函数也从Softmax对应的分类损失,改为对每个类别使用二元交叉熵损失(Binary Cross-Entropy Loss)。对某个锚框,其分类损失为所有类别的二元交叉熵之和:
其中, 是类别 的真实标签(0或1), 是模型预测的该类别的概率。这种改变使得模型能够更灵活地处理复杂的现实世界标注。
锚框(Anchor Box)与多尺度检测
锚框策略是YOLOv3最显著的改进之一。
- YOLOv2:在最终的 特征图上,每个网格单元(grid cell)预测 5 个锚框。这5个锚框的尺寸和宽高比是通过对训练集标注框进行k-means聚类得到的先验知识(priors)。
- YOLOv3:采用了三个不同尺度的特征图进行预测,分别为 、、(对应默认的 输入;若输入为 ,则对应 、、,两者只是输入分辨率不同)。每个尺度的特征图上,每个网格单元只预测 3 个锚框。所谓“3×3”,不是指 3×3 的网格划分,而是 3 个尺度 × 每个尺度 3 个锚框先验 = 9 个先验框。
为什么这种改变更有效?YOLOv2的5个锚框需要覆盖从大到小的所有目标,这对于极端尺寸的目标(尤其是小目标)可能匹配不佳。YOLOv3将9个聚类得到的锚框先验,按照尺寸大小分配给三个尺度:大尺寸锚框分配给低分辨率()的特征图,用于检测大物体;中、小尺寸锚框分别分配给中、高分辨率(, )的特征图,专门用于检测中、小物体。这种“分而治之”的策略,让每个检测器更专注于特定尺度范围的目标,从而提高了先验框与真实框的平均交并比(IoU),也提升了检测精度,尤其利好小目标检测。讲师举了一个生动的例子:在领导人合影中,YOLOv3甚至能检测出每个人佩戴的领带。
# 演示YOLOv2与YOLOv3预测框数量的对比计算
# YOLOv2: 13x13网格,每个网格5个锚框
yolov2_grid = 13
yolov2_anchors_per_cell = 5
yolov2_total_boxes = yolov2_grid * yolov2_grid * yolov2_anchors_per_cell
# YOLOv3: 三个尺度 (13x13, 26x26, 52x52),每个尺度每个网格3个锚框
yolov3_scales = [13, 26, 52]
yolov3_anchors_per_cell = 3 # 每个尺度上,每个网格的锚框数
yolov3_total_boxes = sum([yolov3_anchors_per_cell * size * size for size in yolov3_scales])
print(f"YOLOv2 总预测框数量: {yolov2_total_boxes}")
print(f"YOLOv3 总预测框数量: {yolov3_total_boxes}")
print(f"YOLOv3 比 YOLOv2 多 {yolov3_total_boxes - yolov2_total_boxes} 个预测框")YOLOv2 总预测框数量: 845
YOLOv3 总预测框数量: 10647
YOLOv3 比 YOLOv2 多 9802 个预测框从计算结果可以看出,得益于多尺度预测,YOLOv3生成了数量远超YOLOv2的预测框,这为其高召回率,尤其是小目标召回率,奠定了基础。
主干网络:Darknet-53
为了支撑更复杂的多尺度预测任务并提取更丰富的特征,YOLOv3将主干网络从YOLOv2的Darknet-19升级为Darknet-53。
顾名思义,Darknet-53 共 53 层:52 个卷积层 + 1 个用于 ImageNet 分类的全连接层。它的核心是大量使用了残差连接(Residual Connection),其结构单元与 ResNet 类似。正是残差结构缓解了深层网络中的梯度消失/爆炸问题,使得网络能够稳定地训练到 50 多层,从而获得更强的特征表示能力。
一个容易被忽略的细节是:如果严格去数论文中给出的 Darknet-53 结构图,卷积层实际上是 52 个。第 53 层是 ImageNet 分类用的全连接层(检测任务中会被去掉),所以准确的拆法是“52 个卷积层 + 1 个全连接层 = 53 层”;论文习惯上称其为“53 层卷积网络”。这不影响我们对它作为深度残差网络的理解。
在 ImageNet 分类任务上的对比显示,Darknet-53 的层数只有 ResNet-152 的约三分之一(53 对 152),Top-1 准确率却与之接近,浮点运算量(FLOPs)更少,速度更快。这种效率与性能的平衡,使其非常适合作为实时目标检测的主干网络。
网络结构示意图(简化版Darknet-53卷积组):
输入 (416x416x3)
|
|-- 卷积层 (3x3, 32) + 批归一化 + LeakyReLU
|
|-- 残差块组1 (包含1个残差块,输出通道64, 特征图尺寸208x208)
| |-- 卷积(1x1, 32)
| |-- 卷积(3x3, 64)
| `-- 残差连接
|
|-- 残差块组2 (包含2个残差块,输出通道128,特征图尺寸104x104)
|-- 残差块组3 (包含8个残差块,输出通道256,特征图尺寸52x52) -> 52x52 检测头(小目标)
|-- 残差块组4 (包含8个残差块,输出通道512,特征图尺寸26x26) -> 26x26 检测头(中目标)
|-- 残差块组5 (包含4个残差块,输出通道1024,特征图尺寸13x13) -> 13x13 检测头(大目标)
|
`-- 全局平均池化 + 全连接层 (用于ImageNet分类,检测任务中不用)多尺度预测与特征金字塔网络(FPN)
YOLOv3性能提升的关键在于其多尺度预测架构,它借鉴了特征金字塔网络(Feature Pyramid Network, FPN)的思想:同样是“自上而下 + 横向连接”,但 FPN 的横向融合用逐元素相加,YOLOv3 改用通道拼接(concatenation)。
其工作流程如下:
- 骨干特征提取:输入图像经过Darknet-53,得到不同深度的特征图。越深的层,特征图尺寸越小(下采样次数多),语义信息越强,但空间细节丢失越多。
- 第一个检测头(大目标):在Darknet-53的最后一层(特征图尺寸最小,如)后接一系列卷积层,然后直接在此特征图上进行第一次预测。这个尺度感受野大,适合检测大物体。
- 特征融合与第二个检测头(中目标):将第一个检测头前面的某层特征(例如倒数第三个卷积层的输出)先经 卷积降维到 256 通道,再进行上采样(upsampling,YOLOv3 实现中为 2 倍最近邻插值),使其尺寸扩大一倍(如从 到 )。然后将上采样后的特征与Darknet-53中较早层(对应)的特征图进行连接(concatenation),得到 。融合后的特征图同时包含了深层的语义信息和浅层的细节信息,经过进一步卷积后,进行第二次预测。这个尺度适合检测中物体。
- 特征融合与第三个检测头(小目标):重复上述过程。将第二个检测头前面的特征先经 卷积降维到 128 通道,再上采样到 ,与Darknet-53中更早层(对应)的特征连接,得到 ;再经卷积后进行第三次预测。这个尺度特征图分辨率最高,保留了最多的空间细节,专门用于检测小物体。
这种“自上而下(top-down)”的路径和横向连接(lateral connection),构建了一个特征金字塔,使得每个预测尺度都融合了高语义和高分辨率的信息,从而实现了高效的多尺度目标检测。这种“多尺度、由粗到细”的思路,与传统的图像金字塔、SIFT 尺度空间一脉相承。
YOLOv3多尺度预测数据流示意图:
Darknet-53骨干网络
|
v
[深层特征] 尺寸小,语义强 (例如: 13x13x1024)
|-----------------> 检测头1 (预测大目标)
|
v (1x1卷积降维到256通道 -> 上采样x2)
[上采样特征] (例如: 26x26x256)
|
+ (连接)
|
[中层特征] 来自骨干网络 (例如: 26x26x512)
|
v
[融合特征] (例如: 26x26x768)
|-----------------> 检测头2 (预测中目标)
|
v (1x1卷积降维到128通道 -> 上采样x2)
[上采样特征] (例如: 52x52x128)
|
+ (连接)
|
[浅层特征] 来自骨干网络 (例如: 52x52x256)
|
v
[融合特征] (例如: 52x52x384)
|-----------------> 检测头3 (预测小目标)性能评价与总结
在发布时,YOLOv3在COCO等标准数据集上的表现非常亮眼:
- 精度:其平均精度(mAP)达到了当时一流水平,虽然并非最高,但稳居前列。
- 速度:这是YOLOv3最突出的优势。在同等精度级别的模型中,其推理速度(如用Titan X测量)远超竞争对手(如RetinaNet、SSD等),通常能快数倍,真正体现了“You Only Look Once”的实时性精髓。
综合来看,YOLOv3 通过引入残差主干网络、多尺度特征金字塔检测以及针对多标签分类的损失函数,在保持 YOLO 系列超高速特性的同时,显著提升了检测精度,特别是明显改善了小目标检测,成为当时工业界和学术界都非常青睐的实用检测模型。
📝 动手练一练
- 概念辨析:YOLOv3将分类损失从Softmax Loss改为Binary Cross-Entropy Loss,主要是为了解决什么问题?这种改变在模型输出层和损失计算上分别带来了什么变化?
👉 点击查看参考答案
主要为了解决多标签分类(Multi-label Classification) 问题。在真实场景中,一个目标可能同时属于多个类别(例如,一个“女人”同时也是“行人”),Softmax的“互斥”假设不再适用。
输出层变化:输出层不再使用一个Softmax函数输出所有类别的概率分布(和为1),而是对每个类别独立使用一个Sigmoid函数,输出该类别存在的概率(0到1之间),各类别概率相互独立。
损失计算变化:损失函数从针对单个类别的交叉熵,变为对每个类别分别计算二元交叉熵并求和。公式为:,其中 遍历所有类别。
- 机制理解:简述YOLOv3中“3×3”锚框策略的具体含义。为什么这种策略相比YOLOv2的5个锚框策略,能更好地检测小目标?
👉 点击查看参考答案
“3×3”指的是:3个检测尺度 × 每个尺度3个锚框先验。
- 3个检测尺度:网络在 、、 三种不同分辨率的特征图上进行预测。
- 每个尺度3个锚框:在每个尺度的每个网格单元(grid cell)上,预测3个不同尺寸/长宽比的边界框。这9个锚框尺寸是通过聚类得到的,并按大小分配给不同的尺度。
对小目标检测更有利的原因: YOLOv2只在 的特征图上预测,对于图像中的小物体,到这个尺度时其特征可能已经非常微弱甚至消失。YOLOv3增加了 和 两个更高分辨率的检测层,专门负责中小物体。高分辨率特征图保留了更多空间细节,使得小目标的特征更加明显。同时,分配给这些尺度的锚框尺寸也是专门为中小物体聚类得到的,匹配度更高,从而显著提升了小目标的召回率和检测精度。
- 主干回顾:YOLOv3 的 backbone 基于什么机制、叫什么名字?为什么它能把网络堆到 50 多层?
👉 点击查看参考答案
YOLOv3 的 backbone 叫 Darknet-53,核心是残差连接(ResNet 机制):每个残差块由 1×1 卷积和 3×3 卷积组成,并带一条 shortcut。残差连接让梯度可以跨层直接回传,缓解了深层网络的梯度消失/爆炸,因此才能稳定训练到 50 多层。Darknet-53 共 53 层(52 个卷积层 + 1 个 ImageNet 分类全连接层),在 ImageNet 上 Top-1 接近 ResNet-152,但层数约只有其三分之一,速度更快。
本章小结
本节我们系统学习了 YOLO 系列在 2018 年的重要版本——YOLOv3。它集前代优点与多项创新于一身:
- 采用基于残差连接的Darknet-53作为主干网络,增强了特征提取能力。
- 创新性地使用多尺度特征金字塔(FPN-like)结构进行预测,通过上采样和特征融合,使不同尺度的检测头都能获得强语义和高分辨率的特征,极大改善了小目标检测。
- 将锚框策略优化为“3尺度×3先验”,使检测任务更具针对性。
- 改用Logistic输出和二元交叉熵损失,以支持更灵活的多标签分类场景。
- 在检测精度达到当时一流水平的同时,保持了当时领先的推理速度,在 2018 年的实时检测领域处于领先位置。
需要说明的是,以上评价针对的是 2018 年前后的技术格局;以今天的标准看,YOLOv3 已是历史模型:YOLOv4、YOLOv5、YOLO11 等在精度和速度上已超越它,DETR 系列则提供了无需锚框和 NMS 的端到端路径;但其多尺度融合与 anchor 分配思路仍是现代检测器的重要基础。
📋 行动清单
- 在脑海中绘制出YOLOv3的网络结构图,特别是三个检测头的特征融合路径(上采样、连接)。
- 理解“3×3”锚框策略与多尺度检测之间的关系,并能解释其为何能提升小目标检测性能。
- 对比YOLOv2,总结YOLOv3在损失函数、主干网络和检测策略上的核心改进点。
2026 视角
YOLOv3在2018年发布后,其多尺度预测和特征融合的思想影响深远,但目标检测领域并未止步。从今天的视角回望,YOLOv3更像是一个承前启后的关键节点。
YOLO系列的工程化演进:YOLOv3之后,YOLO系列在工程优化和架构改进上持续迭代。YOLOv4(2020)在YOLOv3基础上集成了当时多种优秀的“技巧”(Bag of Freebies/Bag of Specials),如Mosaic数据增强、CIoU损失、SPP模块、PANet特征融合等,在速度和精度上取得了更好平衡。YOLOv5(2020)并非官方续作,但其基于PyTorch的工程实现非常优秀,提供了极其易用的训练和部署流程,迅速在工业界流行。此后的 YOLOv8(2023)、YOLO11(2024)等版本,进一步优化了骨干网络和 neck 结构,并集成了更先进的训练策略和任务头(如实例分割、姿态估计),形成了一个统一、强大且用户友好的算法框架家族,至今仍是工业界实时检测的首选之一。
端到端检测器的兴起:YOLOv3仍需依赖手工设计的锚框和复杂的后处理(如NMS)。以DETR(2020)为代表,基于Transformer的端到端检测器开始兴起。它利用Transformer的全局注意力机制,将目标检测视为一个集合预测问题,直接输出最终的边界框集合,无需锚框和NMS。随后,Deformable DETR等改进工作提升了小目标检测性能和训练速度。这类方法展示了全新的技术路径,但在实时性上通常仍不及高度优化的YOLO系列。
大模型时代的冲击与机遇:随着视觉基础大模型(如SAM)和多模态大模型(如CLIP)的出现,目标检测的范式也在被重新思考。SAM展示了强大的零样本分割能力,其思想可以启发新的检测框架。而CLIP等模型提供的强大语义表征,也被用于提升开放词汇检测(Open-Vocabulary Detection)的能力,使模型能够检测训练时未见过的类别。
总结来说,YOLOv3的设计思想在今天依然具有重要价值。当前的主流检测器,无论是YOLO的后续版本还是其他新架构,都在不同程度上继承了多尺度特征融合、轻量高效等核心理念。同时,端到端学习和基础大模型正在为这个领域带来新的变革动力。理解YOLOv3,是理解现代目标检测技术演进脉络的坚实基础。
—— 小象教研组