前面两篇已经补了两个很关键的前置知识:

  • CNN 为什么能逐层提特征

  • 为什么目标检测一定要做多尺度特征融合

那么现在可以正式进入 YOLOv8 的整体架构 了。


1. 先从整体上看:YOLOv8 到底在做什么

YOLOv8 是一个目标检测模型。
它的输入是一张图像,输出通常包括三类信息:

  • 目标类别

  • 目标位置

  • 目标置信度

所以它的整体流程可以先粗略写成:

\text{Image} \rightarrow \text{Backbone} \rightarrow \text{Neck} \rightarrow \text{Head} \rightarrow \text{Predictions}

也就是:

输入图像→特征提取→特征融合→检测预测→结果输出

这一条链路,就是 YOLOv8 架构时最核心的主线。


2. Backbone 是干什么的

一句话定义

Backbone 的任务,是从原始图像中提取越来越有语义的特征

也可以说:

Backbone 是整个检测器的“特征提取主干”


2.1 为什么需要 Backbone

原图本身只是像素。
检测器不可能直接拿原始像素去判断:

  • 这里是不是猫

  • 那里是不是人

  • 框应该画多大

所以第一步必须先把图像变成更适合计算的特征表示。

Backbone 做的事,本质上就是:

  • 用卷积等操作逐层提特征

  • 让特征图尺寸逐渐变小

  • 让通道数逐渐变多

  • 让语义逐渐增强


2.2 Backbone 里典型会发生什么

如果从数据形状角度理解,通常会出现这种变化趋势:

空间尺寸逐渐减小

例如:

640 \times 640 \rightarrow 320 \times 320 \rightarrow 160 \times 160 \rightarrow 80 \times 80 \rightarrow 40 \times 40 \rightarrow 20 \times 20

通道数逐渐增加

例如:

3 \rightarrow 32 \rightarrow 64 \rightarrow 128 \rightarrow 256 \rightarrow 512

这两种变化一起出现的意义是:

  • 分辨率变小,计算更可控

  • 表达能力变强,语义更丰富


2.3 怎么理解 Backbone 的工作过程

可以把它理解成一个逐层抽象的过程:

浅层

提边缘、纹理、简单局部结构

中层

提更复杂的局部模式和部件信息

深层

提更高层的语义表示,更利于理解目标整体

所以 Backbone 的核心关键词就是:

提特征


3. Neck 是干什么的

一句话定义

Neck 的任务,是把不同层级、不同尺度的特征进行融合

也可以说:

Neck 是连接 Backbone 和 Head 的“特征组织与融合模块”


3.1 为什么需要 Neck

因为:

  • 浅层分辨率高,适合小目标

  • 深层语义强,适合大目标和整体理解

如果没有 Neck,模型就很难同时兼顾:

  • 小目标细节

  • 大目标语义

  • 多尺度目标检测能力

所以 Neck 的意义就是:

把 Backbone 输出的多层特征重新组织起来,让它们更适合后续检测


3.2 Neck 通常会做什么

Neck 里最常见的动作包括:

  • 上采样

  • 下采样

  • 拼接

  • 特征融合

  • 横向连接

它的核心不是“再提一遍特征”,而是:

把已经提出来的不同尺度特征更合理地组合起来。


3.3 可以把 Neck 理解成什么

如果说 Backbone 是“采集信息”,
那 Neck 更像是“整理信息”。

也就是:

  • 把深层语义传给高分辨率层

  • 把浅层细节补给低分辨率层

  • 让不同尺度特征都变得更适合检测

所以 Neck 的核心关键词就是:

融合特征


4. Head 是干什么的

一句话定义

Head 的任务,是把融合后的特征变成真正的检测结果。

也就是最终预测:

  • 这个位置有没有目标

  • 是什么类别

  • 目标框在哪里


为什么还需要 Head

Backbone 和 Neck 做完后,得到的还是特征图。
特征图本身不是最终答案。

最终要落到检测结果上,还需要一个专门负责“输出预测”的模块。
这个模块就是 Head。


Head 到底输出什么

从检测任务本质看,Head 至少要处理三件事:

1. 分类

这个目标是什么类别。

2. 定位 / 回归

这个目标框的位置在哪。

3. 置信度

这个预测到底靠不靠谱。

可以把 Head 看成:

从“特征空间”走向“检测结果空间”的最后一步


Head 的核心关键词

做预测


5. 把三者连起来看:它们到底如何分工

现在可以把整条链路更明确地写出来:

Backbone

从输入图像中提取多层特征。

Neck

把多层特征做多尺度融合和组织。

Head

把融合后的特征映射成类别、框和置信度预测。

YOLOv8 的整体架构可以概括为:Backbone 负责特征提取,Neck 负责多尺度特征融合,Head 负责完成分类与定位预测。


6. 为什么这个三段式结构很合理

这个结构不是随便拆的,而是非常符合目标检测任务本身的需求。


第一步:先提特征

没有高质量特征,后面没法检测。

第二步:再融合特征

因为检测要兼顾不同尺度目标,不能只靠单层特征。

第三步:最后输出预测

检测不是停在特征层,而是必须真正输出框和类别。

这三步刚好对应:

提特征→融特征→做预测

所以这是一个功能分工非常清晰的架构。


7. 从尺寸变化角度理解三者

这个角度很适合技术汇报,因为比较直观。


在 Backbone 中

特征图通常越来越小,但语义越来越强。

例如:

640 \times 640 \rightarrow 320 \times 320 \rightarrow 160 \times 160 \rightarrow 80 \times 80 \rightarrow 40 \times 40 \rightarrow 20 \times 20


在 Neck 中

不同尺度特征会被重新拉通和融合,形成适合检测的多尺度输出。

例如可能保留几组关键尺度特征:

  • 80 \times 80

  • 40 \times 40

  • 20 \times 20

这些尺度往往分别适合:

  • 小目标

  • 中目标

  • 大目标


在 Head 中

模型会在这些尺度特征上分别输出预测结果。

所以从这个角度看:

  • Backbone 负责“生成多层特征”

  • Neck 负责“整理多层特征”

  • Head 负责“消费这些特征并输出结果”


8. 为什么不能把这三部分混成一团理解

很多初学者会觉得:

“反正都是卷积,分这么细有必要吗?”

有必要,而且很重要。

因为如果你不区分这三部分,后面很多技术点会听不懂。

比如:

C2f 属于哪里

更多是在 Backbone/部分 Neck 中作为特征提取与流动结构存在。

FPN / PAN 在哪里

主要属于 Neck 的多尺度融合思路。

decoupled head 在哪里

属于 Head 的设计问题。

anchor-free 在哪里体现

主要体现在 Head 的预测方式和训练目标设计上。


9. 用一个类比来帮助理解

可以把整个检测器想成一个三段流水线。


Backbone:原料加工

把原始图像加工成可用特征。

Neck:中间装配

把不同来源、不同尺度的信息重新整合。

Head:最终出货

把整理后的特征变成最后的检测结果。

这个类比不是特别学术,但对初学阶段很好用。


10. YOLOv8 里 Backbone 有什么特点

YOLOv8 的 Backbone 不是简单堆卷积,
里面会有一些更高效的结构模块,比如:

  • C2f

  • 不同阶段的卷积堆叠

  • 逐步下采样

这些设计的目的,是在计算量和特征表达能力之间做平衡。

所以当你看到别人说:

“YOLOv8 Backbone 更轻量、更高效、更利于特征流动”

就知道这不是空话,它说的是:

在不把计算代价搞得太高的前提下,尽量把特征提取得更好


11. YOLOv8 的 Neck 为什么很关键

因为检测不是只要深层语义就够。
尤其是实时检测器,更需要用相对高效的方式处理多尺度问题。

Neck 的价值主要体现在:

  • 把深层语义往高分辨率层传

  • 把浅层细节纳入检测流程

  • 提升对不同尺寸目标的适应能力

Neck 是 YOLOv8 处理多尺度检测问题的关键位置。

这句话是成立的。


12. YOLOv8 的 Head 为什么不能只讲“输出结果”

因为 Head 不只是“最后吐个框”,
它的设计会直接影响:

  • 分类效果

  • 定位精度

  • 训练难度

  • 推理效率

比如后面会学到:

  • 分类和回归分开处理

  • anchor-free 预测方式

  • 不同尺度检测头协同工作

这些都和 Head 强相关。

所以 Head 并不是一个“简单尾巴”,而是检测器非常核心的一部分。


13. 一个简洁的结构公式

F_{backbone} = B(X)

表示输入图像 X 经过 Backbone,得到多层特征。

然后:

F_{neck} = N(F_{backbone})

表示 Neck 对这些特征做融合和重组。

最后:

Y = H(F_{neck})

表示 Head 把融合后的特征映射成最终预测结果 (Y)。

所以完整写法就是:

Y = H(N(B(X)))


14. 这个公式到底怎么理解

我们把它拆开:

X

输入图像。

B(X)

Backbone 从图像中提取出来的特征。

N(B(X))

Neck 对 Backbone 特征进一步融合后的结果。

H(N(B(X)))

Head 基于融合特征做出的检测输出。

所以这条式子本质上就是:

图像先被提特征,再被融特征,最后被做预测。


15. 这一篇和后面内容怎么衔接

这一篇只是把总框架搭起来。
后面要继续往“技术层面"走,还要展开这几块:

下一步 1

Backbone 里到底有哪些关键模块,YOLOv8 为什么要用 C2f。

下一步 2

Neck 为什么常常和 FPN / PAN 这些结构思想联系在一起。

下一步 3

Head 为什么要做分类和回归分离,YOLOv8 的检测头到底怎么工作。

也就是说:这一篇解决的是“分工问题”,后面几篇解决的是“具体设计问题”。


16. 本篇小结

这一篇最核心的内容其实就三句:

  • Backbone 负责特征提取

  • Neck 负责多尺度特征融合

  • Head 负责最终检测预测

把它们连起来,就是:

Y = H(N(B(X)))

也就是:

输入图像先经过 Backbone 提特征,再经过 Neck 融合特征,最后由 Head 输出类别、位置和置信度。

Backbone 主要负责从输入图像中逐层提取特征,获得从浅层到深层的多级语义表示;Neck 主要负责将不同尺度的特征进行融合,增强模型对大中小目标的检测能力;Head 则在融合后的特征图上进行分类和边界框预测,最终输出检测结果。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐