YOLOv8网络结构详解
深入浅出 YOLOv8 网络结构一张图看懂目标检测三件套Backbone / Neck / Head摘要本文面向目标检测入门者系统拆解 YOLOv8 的整体架构。从为什么选 YOLOv8谈起逐层讲清 Backbone特征提取、Neck特征融合实际藏在 head 段中、Head解耦头 Anchor-Free 检测头各自的作用与数据流并对照官方yolov8.yaml配置逐行解读帮助读者建立从原图到检测框的完整直觉。本文面向刚入门目标检测的同学把 YOLOv8 的整体架构拆成三层讲清楚。不涉及复杂公式重点是建立直觉。一、总概为什么大家都爱用 YOLOv8在众多 YOLO 系列YOLOv3/v5/v7/v8/v10/v11……先后出现的今天YOLOv8 依然是很多人做检测任务的首选。原因很简单它把好不好用这件事做到了极致社区最大、文档最全、教程最多你遇到的 99% 问题都能搜到现成答案兼容性最强主流数据集格式、训练框架都能接部署链路最成熟从 PyTorch 训练到 ONNX、TensorRT、量化、边缘端Jetson / 瑞芯微 / 安卓一条龙量化工具完善INT8 量化、剪枝方案成熟落地省心。所以即使有更新的 YOLO 陆续发布YOLOv8 依旧是工程落地最稳妥的青睐对象—— 学习它性价比最高。下面直接上 YOLOv8 的模型结构示意图图 1后文所有讲解都围绕它展开二、整体架构三层的流水线先看下面这张整体网络架构图图 2整个 YOLOv8 就三层层级名称干啥的第 1 层Backbone骨干网络把图片转成模型更容易学的特征第 2 层Neck特征融合网络把不同尺度的特征融合生成融合图第 3 层Head检测头做最终判断目标是什么、在哪训练/推理过程就是一条流水线输入图像 → 第 1 层Backbone提取成各种特征图 → 第 2 层Neck把这些特征融合并生成特征融合图 → 第 3 层Head输出判断检测到的目标类别 位置框。记住这个三件套框架后面每一层都往里填内容就行。三、Backbone骨干网络1. 作用图像的特征提取工厂Backbone 的核心工作只有一句话输入一张图通过层层卷积和下采样把原始像素信息提取成不同尺度分辨率不同的特征图。对应三个关键输出尺度P380×80高分辨率保留细节 → 负责小目标、边缘纹理P440×40中分辨率兼顾细节与语义 → 负责中等目标P520×20低分辨率强语义 → 负责大目标、整体轮廓。2. 结构图与yolov8.yaml对照看先放一份标准的 YOLOv8n 配置文件你训练时用的就是这种# Parametersnc:1# number of classes你的类别数通用场景改成实际类别数量如 80scales:# model compound scaling constants, i.e. modelyolov8n.yaml will call yolov8.yaml with scale n# [depth, width, max_channels]n:[0.33,0.25,1024]# YOLOv8n summary: 225 layers, 3157200 parameters, 8.9 GFLOPs#s: [0.33, 0.50, 1024] # YOLOv8s summary: 225 layers, 11166560 parameters, 28.8 GFLOPs#m: [0.67, 0.75, 1024] # YOLOv8m summary: 295 layers, 25902640 parameters, 79.3 GFLOPs#l: [1.00, 1.00, 512] # YOLOv8l summary: 365 layers, 43691520 parameters, 165.7 GFLOPs#x: [1.00, 1.25, 512] # YOLOv8x summary: 365 layers, 68229648 parameters, 258.5 GFLOP# YOLOv8.0n backbonebackbone:# [from, repeats, module, args]-[-1,1,Conv,[64,3,2]]# 0-P1/2-[-1,1,Conv,[128,3,2]]# 1-P2/4-[-1,3,C2f,[128,True]]-[-1,1,Conv,[256,3,2]]# 3-P3/8-[-1,6,C2f,[256,True]]-[-1,1,Conv,[512,3,2]]# 5-P4/16-[-1,6,C2f,[512,True]]-[-1,1,Conv,[1024,3,2]]# 7-P5/32-[-1,3,C2f,[1024,True]]-[-1,1,SPPF,[1024,5]]# 9# YOLOv8.0n headhead:-[-1,1,nn.Upsample,[None,2,nearest]]-[[-1,6],1,Concat,[1]]# cat backbone P4-[-1,3,C2f,[512]]# 12-[-1,1,nn.Upsample,[None,2,nearest]]-[[-1,4],1,Concat,[1]]# cat backbone P3-[-1,3,C2f,[256]]# 15 (P3/8-small)-[-1,1,Conv,[256,3,2]]-[[-1,12],1,Concat,[1]]# cat head P4-[-1,3,C2f,[512]]# 18 (P4/16-medium)-[-1,1,Conv,[512,3,2]]-[[-1,9],1,Concat,[1]]# cat head P5-[-1,3,C2f,[1024]]# 21 (P5/32-large)-[[15,18,21],1,Detect,[nc]]# Detect(P3, P4, P5)小白提示scales里的n/s/m/l/x是模型大小档位[depth, width, max_channels]三个数控制网络多深、通道多宽、通道上限。你用的yolov8n就是最轻量的n档。从结构图图 3和配置对照看原图640×640×3分辨率 640×6403 个通道 RGB 三原色→ 经过第一个卷积Conv(k3, s2, p1)卷积核 3×3、步长 2、padding 1→ 输出320×320×64×w分辨率减半通道变成 64×w 个。这对应配置里的- [-1, 1, Conv, [64, 3, 2]] # 0-P1。下一个模块- [-1, 1, Conv, [128, 3, 2]] # 1-P2同理分辨率再减半、通道再翻倍。这里的w就是前面scales里的width宽度系数。比如 YOLOv8n 的width0.25配置写 64 通道实际就是64 × 0.25 16个通道。所以后面分析热力图时你看到的16 个通道就是这么来的。3. 细节拓展C2f 模块下面是 C2f 的细节结构图图 4它是 YOLOv8 引入的一种高效特征提取模块Split把输入通道分成两路——一路走shortcut直连一路进Bottleneck每个Bottleneck用 3×3 卷积提取空间特征且通道减半以减小运算量。这样能在不缩小分辨率的前提下把特征变得更干净、更有区分度C2f把每个 Bottleneck 的输出都拼接起来→ 多阶段特征全部保留避免特征丢失。4. 分析特征图与热力图现在能看出来了Backbone 层实际就是一系列 Conv 卷积核 C2f 模块对图片做改通道、改分辨率的操作。一张图会被转化成不同分辨率的特征图而且经过专门训练后部分通道的卷积核学成了边缘提取器部分学成了纹理 / 色彩梯度提取器。把单通道可视化出来就会出现边缘突出、色块区分明显的效果——这就是模型真正在看的东西。下面是第一个 Conv 核实际 16 个通道求均值生成的热力图关键直觉高分辨率特征图如 80×80每个像素对应原图很小一块区域只能看局部细节边缘、纹理看不到全局低分辨率特征图如 20×20每个像素对应原图很大一块区域感受野变大能看到物体整体轮廓和位置关系。⚠️ 注意模型最终是根据像素块转成的数字来做判断的不是直接看原图。随着不断卷积分辨率不断减小、通道数不断增加于是 Backbone 输出给 Neck 的三层P3 / P4 / P5分别携带小目标、中目标、大目标特征。下面是传递到 Neck 层的第 4/6/9 个模块处理后的图像P3 / P4 / P5可以明显看到SPPF 用更少的像素格表示了整张图低分辨率。举个例子原图一个小目标占 10 个像素 → 到 P3(80×80) 大约还有 1 个像素但到 P5(20×20) 会被压缩到不足 1 个像素特征直接丢失。所以P5 天然不负责小目标小目标交给高分辨率 P3P5 专攻大目标。四、Neck特征融合网络1. 作用特征的沟通协调官P3 / P4 / P5 传给 Neck 后做双向特征融合深层P5的强语义信息往浅层P3传递 → 帮小目标判断这到底是什么物体浅层P3的细节定位信息往深层P5传递 → 帮大目标修正物体的精确位置。下面是 Neck 层结构图图 7注意箭头方向是数据传递方向对应到配置注意 Ultralytics 把 Neck 写进了head段里# YOLOv8.0n headhead:-[-1,1,nn.Upsample,[None,2,nearest]]# 10 上采样-[[-1,6],1,Concat,[1]]# 11 cat backbone P4-[-1,3,C2f,[512]]# 12-[-1,1,nn.Upsample,[None,2,nearest]]# 13 上采样-[[-1,4],1,Concat,[1]]# 14 cat backbone P3-[-1,3,C2f,[256]]# 15 (P3/8-small)-[-1,1,Conv,[256,3,2]]# 16 下采样-[[-1,12],1,Concat,[1]]# 17 cat head P4-[-1,3,C2f,[512]]# 18 (P4/16-medium)-[-1,1,Conv,[512,3,2]]# 19 下采样-[[-1,9],1,Concat,[1]]# 20 cat head P5-[-1,3,C2f,[1024]]# 21 (P5/32-large)重要知识点YOLOv8 官方 YAML 只写backboneheadNeck 被包在 head 里面了即 Head Neck Detect。代码和模型结构对照方式和 Backbone 完全一样。2. 细节拓展上采样 拼接Concat看下图图 8Concat 是 C2f 和 Upsample 的合并输出结果可以明显看出Concat既有 P4 的特征也有 P5 的特征P4来自 6-C2f图像清晰知道目标在哪但不确定是啥P5来自 SPPF经 10-Upsample 放大到和 P4 同分辨率方便合并图像模糊知道是啥但不确定具体在哪。两者一融合就得到一张既知道位置、又知道类别的特征融合图。最终三个检测头Detect输入的 P3 / P4 / P5都已经是深浅层特征双向融合后的特征图但各自仍保留尺度偏向P3 偏小目标、P4 偏中目标、P5 偏大目标并不是完全一样的东西。五、Head检测头角色最终的决策裁判。核心工作接收 Neck 融合后的 P3 / P4 / P5 特征分别输出两类预测分类分支Cls.判断每个位置的目标是什么类别石头 / 树枝 / 叶子……回归分支Bbox.预测目标的精确位置和大小x、y、w、h。两个关键升级YOLOv8 相比旧版的重要改进解耦头Decoupled Head分类和回归完全分离成两个独立分支 → 避免任务冲突收敛更快、精度更高无锚框Anchor-Free直接预测目标中心不用再手动设计锚框anchor→ 训练更简单后处理 NMS 也更快。一句话总结Head 把融合后的特征转换成最终的目标类别 边界框坐标。六、小结把整篇串起来YOLOv8 就是一条三层流水线Backbone用 Conv C2f SPPF把原图变成 P3/P4/P5 三档特征小/中/大目标Neck藏在 head 里用上采样 拼接做双向融合让深浅特征互补Head解耦 无锚框输出类别和框。理解了三件套各自干什么再看任何一张 YOLO 结构图都不会懵。建议配合本文的yolov8.yaml配置边看边在本地把模型print出来对照印象会更深。参考资料Ultralytics 官方 YOLOv8 文档与yolov8.yaml源码。文中结构图与热力图为作者训练可视化所得。附一行代码看结构动手验证文中所有层级都能在本地打印出来对照跑下面这段即可需先pip install ultralyticsfromultralyticsimportYOLO# 加载模型并打印结构对应文中 yaml 各层层数 / 参数量 / GFLOPsmodelYOLO(yolov8n.yaml)# 看结构用 yaml看预训练权重用 yolov8n.ptmodel.info()# 终端会列出每一层的模块、输入输出通道、参数量把model.info()的输出和本文的backbone/head配置一行行对一遍三层流水线的理解会立刻扎实。创作声明本文由 AI 辅助整理与润色技术内容基于作者本人的目标检测训练实践与 Ultralytics 官方文档欢迎交流与指正。