YOLOv3 vs YOLOv4大白话对比:新手速懂指南

2026-05-31阅读 0热度 0
人工智能
先从 YOLOv3 说起。它在当时之所以能脱颖而出,核心在于其巧妙的设计哲学:**全卷积 + 残差连接 + 多尺度融合**。这个架构完全不依赖池化层和全连接层,因此它能灵活地适配任何32倍数的输入尺寸(默认是416×416),这在当时的检测网络中是很少见的。 #### 骨干网络 YOLOv3 的骨干网络叫 Darknet-53。输入图像会先经过一个基础的CBL模块(卷积 + 批归一化 + LeakyReLU激活)做初步的特征提取。然后,特征图会依次送入五组残差模块,这五组模块内的残差单元堆叠数量分别是1、2、8、8、4。这种设计思路和ResNet一脉相承,通过“短路连接”来应对深层网络中的梯度消失问题。 说得更直观一点,Darknet-53 就是一个纯粹的卷积堆叠: - **Darknet‑53 = 全卷积 + 5次下采样 + 16个残差块 + 共53个卷积层** - **没有池化,没有全连接层** - **输入**: 416×416×3 图像 - **输出**: 3个特征图,尺寸分别为 13×13、26×26、52×52,直接喂给检测头 每个CBL块(Conv + BN + LeakyReLU)和残差块(Residual)都是精心设计的。残差块内部走的是“1×1降维” -> “3×3升维”的路径,然后通过短接相加(add,不是concat)来保持通道数不变。这里要注意,add和concat是两种不同的操作:add是数值相加,通道数不变,用于构建残差;concat是通道拼接,通道数增加,常用于特征融合。 整个下采样流程可以清晰地表示为: ```plain 输入 416×416×3 ↓ CBL(32) ↓ 下采样(64) → Res×1 ↓ 下采样(128) → Res×2 ↓ 下采样(256) → Res×8 → 输出 52×52×256 ↓ 下采样(512) → Res×8 → 输出 26×26×512 ↓ 下采样(1024) → Res×4 → 输出 13×13×1024 ``` #### 颈部网络 有了骨干网络提取的多尺度特征,接下来就需要把它们融合起来。YOLOv3 采用的是经典的 FPN(特征金字塔)结构,走的是自上而下的融合路径。 具体来说,从骨干网络最底层输出的13×13深层特征开始,先堆叠5层CBL模块,然后接一层CBL和卷积,得到第一组检测需要的13×13×255张量,专门负责大目标。 但工作还没完。在五层CBL之后,模型会引出一个分支,经过一层CBL调整后,立即进行上采样。上采样能将13×13的小图放大成26×26,常见的做法有最近邻插值或双线性插值。放大后的特征图,会与骨干网络倒数第二层(26×26)的浅层特征进行通道拼接融合。之后,再重复一遍“五层CBL、一层CBL、一层卷积”的结构,输出26×26×255的张量,负责检测中等目标。 同理,对融合后的26×26特征再进行一次上采样和拼接,最终就能得到52×52×255的高分辨率特征图,专门用来捕捉小目标。 通过这种多尺度上采样与跨层拼接,YOLOv3 成功地把深层语义信息和浅层细节信息结合在了一起,让大、中、小不同尺寸的物体都能被有效地检测到。 #### 检测头部 YOLOv3 最后会输出三个不同尺度的预测张量。每个尺度的特征图,其实就是把图像划分成了密密麻麻的网格(比如13×13=169个)。 每个网格单元都对应一个255维的特征张量。这个255是怎么来的?它是3×85的结果。也就是说,每个网格预先设定了3个不同形状的锚框(Anchor Box),每个锚框又对应85个预测参数,包含了坐标偏移、尺寸、置信度以及类别概率。 **举个例子:对于13×13层来说:** - 第一段85维 → 负责修正第1号(偏宽)锚框 - 第二段85维 → 负责修正第2号(中等)锚框 - 第三段85维 → 负责修正第3号(偏高)锚框 为什么要这么设计?原因很简单:一个网格里可能同时存在多个物体,而且它们的形状千差万别。一个锚框模板肯定不够用,所以提前准备三种不同长宽比的模板,让网络去学习和修正,这样检测精度就上去了。 所以,13×13的深层特征图,因为感受野大、语义信息强,专门检测大目标;26×26的负责中等目标;52×52的高分辨率特征图,则擅长捕捉小目标。三种尺度的锚框规格也是分别匹配的,共同保障了多尺度检测的最终效果。 --- 说完了YOLOv3,我们再来看它的进化版——**YOLOv4**。如果说v3是奠基之作,那v4就是把工程优化做到了极致。 YOLOv4 的主干特征提取网络变成了 **CSPDarknet-53**。名字其实已经说明了核心:它还是Darknet-53,但引入了CSP(跨阶段部分连接)模块。这个技巧很巧妙,它把计算量砍了约20%,而且训练起来更稳定。 另一个重要的改变是激活函数。YOLOv4 将CBL中的LeakyReLU换成了**Mish激活函数**。Mish函数更平滑,梯度收敛更快,虽然只用在网络的第一层,但效果立竿见影。 在残差单元内部,CBL也变成了CBM。残差模块的改动更大一些,多了几个CBM层,并且内部做了拼接操作,这就是CSP模块的精髓。 此外,YOLOv4 还在Neck部分引入了一个关键组件——**空间金字塔池化(SPP)**。它用了3个不同尺寸的池化核(比如13×13、9×9、5×5)对特征图进行处理,然后把结果拼接起来。这个操作的核心在于两点:一是大尺寸的池化核(13×13)极大地增加了感受野,二是多尺寸池化让模型能提取更丰富的特征。结果就是,小目标检测变强了,而计算量没怎么增加。 **Neck部分** YOLOv4的Neck部分比v3复杂得多。骨干网络输出后,先经过三层CBL,接着是SPP模块,再堆叠三层CBL整合,得到13×13×512的深层特征。 然后,特征会经过一层CBL和上采样,与骨干网络的26×26层特征拼接,再经过五层CBL提纯。之后,再重复一遍上采样和拼接,得到52×52的浅层特征。 但YOLOv4 没有止步于此。它又加了一条**反向下采样分支**:从浅层特征开始,用卷积逐步缩小特征图尺寸,将浅层的定位细节反向传递给上层特征,强化深层语义。这种**自上而下 + 自下而上**的双向融合结构,就是大名鼎鼎的 **PANet**。 可以简单对比一下:YOLOv3 的FPN是单向融合,而YOLOv4的PANet是双向融合。双向融合弥补了FPN的不足,既让深层特征有了细节,也让浅层特征有了语义,大小目标的特征融合更充分,检测精度自然就上去了。
免责声明

本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。

相关阅读

更多
欢迎回来 登录或注册后,可保存提示词和历史记录
登录后可同步收藏、历史记录和常用模板
注册即表示同意服务条款与隐私政策