下面我们从零基础出发,逐步拆解这段 YOLOv8-l 配置中 backbone(主干网络)和 head(检测头)的语法与功能,并结合常见输入分辨率 640×640,画出骨架结构示意图,标注各层的输入/输出特征图大小。


一、配置语法说明

YOLOv8 的配置通常用一个列表定义网络的每一层,格式为:

[ from, repeats, module, args ]
  • from:指定该层的输入来源,-1 代表上一层,或 [i, j] 表示将第 i 层和第 j 层特征拼接后作为输入。
  • repeats:该模块在这一位置重复多少次。
  • module:调用的 PyTorch 模块类名,如 ConvC2fSPPFDetect 等。
  • args:该模块构造时的参数列表,比如卷积通道、卷积核大小、步幅、是否使用残差等。

二、Backbone(主干网络)

骨干网络负责从输入图像中提取多尺度特征。假设输入图像为 640×640×3

层级 定义 输出尺寸 说明
0 [-1,1,Conv,[64,3,2]] 320×320×64 首层 3×3 卷积,stride=2
1 [-1,1,Conv,[128,3,2]] 160×160×128 下采样
2 [-1,3,C2f,[128,True]] 160×160×128 3 次 C2f 块
3 [-1,1,Conv,[256,3,2]] 80×80×256 下采样
4 [-1,6,C2f,[256,True]] 80×80×256 6 次 C2f 块
5 [-1,1,Conv,[512,3,2]] 40×40×512 下采样
6 [-1,6,C2f,[512,True]] 40×40×512 6 次 C2f 块
7 [-1,1,Conv,[512,3,2]] 20×20×512 下采样
8 [-1,3,C2f,[512,True]] 20×20×512 3 次 C2f 块
9 [-1,1,SPPF,[512,5]] 20×20×512 空间金字塔池化(SPPF)
  • Conv:标准卷积层。第一个参数是输出通道数,第二个是核大小,第三个是 stride。
  • C2f:CSP-style 两分支融合模块,内部包含若干卷积与残差,True 表示使用残差连接。
  • SPPF:Spatial Pyramid Pooling—Fast,用不同大小的池化核(这里是 5)并拼接,以增强感受野。

三、Head(检测头)

检测头接收从 Backbone 拿到的三个尺度特征(P3、P4、P5),上采样拼接融合后,再输出最终的检测结果。

假设我们用 P5=20×20×512,P4=40×40×512,P3=80×80×256:

# -----------------------------------------------
#  上采样 & 拼接 P4
# -----------------------------------------------
10: [-1,1,Upsample,[None,2,'nearest']] → 40×40×512
11: [[10,6],1,Concat,[1]]             → 拼接6层特征(即 Backbone 的 P4):40×40×1024
12: [-1,3,C2f,[512]]                  → 40×40×512(融合后降维)

# -----------------------------------------------
#  上采样 & 拼接 P3
# -----------------------------------------------
13: [-1,1,Upsample,[None,2,'nearest']] → 80×80×512
14: [[13,4],1,Concat,[1]]              → 拼接 P3(80×80×256):80×80×768
15: [-1,3,C2f,[256]]                   → 80×80×256

# -----------------------------------------------
#  下采样 & 拼接中尺度 P4
# -----------------------------------------------
16: [-1,1,Conv,[256,3,2]]              → 从80回到40:40×40×256
17: [[16,12],1,Concat,[1]]             → 拼接上一步 12 的输出:40×40×768
18: [-1,3,C2f,[512]]                   → 40×40×512

# -----------------------------------------------
#  再下采样 & 拼接大尺度 P5
# -----------------------------------------------
19: [-1,1,Conv,[512,3,2]]              → 20×20×512
20: [[19,9],1,Concat,[1]]              → 拼接 Backbone P5:20×20×1024
21: [-1,3,C2f,[512]]                   → 20×20×512

# -----------------------------------------------
#  最后检测层 Detect(P3,P4,P5)
# -----------------------------------------------
22: [[15,18,21],1,Detect,[nc]]         → 输出三个尺度的预测

其中:

  • Upsample:将特征图尺度×2,用最邻近插值。
  • Concat:通道拼接。
  • Detect:YOLOv8 的检测头,给出每个尺度上每个位置的 (x, y, w, h, conf, cls1…clsk) 预测,共 nc 类。

四、整体结构示意图

下面用简化的 ASCII 图示说明数据流(仅通道数和分辨率):

输入 640×640×3
 └─Conv 64,3,2→ 320×320×64
     └─Conv 128,3,2→ 160×160×128 ──┐
         └─3×C2f(128)→ 160×160×128 ─┤
             └─Conv 256,3,2→ 80×80×256 ─┐
                 └─6×C2f(256)→ 80×80×256 ─┤   ←—— P3
                     └─Conv 512,3,2→ 40×40×512 ─┐
                         └─6×C2f(512)→ 40×40×512 ─┤   ←—— P4
                             └─Conv 512,3,2→ 20×20×512 ─┐
                                 └─3×C2f(512)→ 20×20×512 ─┤  ←—— P5
                                     └─SPPF(5)→ 20×20×512

检测头:
 P5 20×20×512 ─┐
               ├─Up×2→40×40×512──┐
 P4 40×40×512──┘                ├─Concat(→1024)→C2f→40×40×512──┐
                                                          ├─Up×2→80×80×512──┐
 P3 80×80×256────────────────────────────────────────────┘               ├─Concat(→768)→C2f→80×80×256 ──┐
                                                                                          └─Conv(↓2)→40×40×256 │
               16:40×40×256 ←─Downsample from 80                              ┌──────────────┘
 12:40×40×512 ←─来自 P4 上采样分支                                           │
                                                                           ├─Concat(40×40×768)→C2f→40×40×512──┐
                                                                           │                                  ├─Downsample→20×20×512
 P5                                   21:20×20×512 ←─来自 P5 上采样分支   20:20×20×512 ←─C2f──┘
                                                                           │                                  ├─Concat→20×20×1024
                                                                           │                                  └─C2f→20×20×512
 最后 Detect([80×80×256,40×40×512,20×20×512]) → 预测三尺度输出

🔑 核心要点

  1. 多尺度融合:上采样→拼接→下采样→拼接,使得 P3/P4/P5 三个尺度都融合了更丰富的上下文和细节。
  2. C2f 模块:在每个融合点用一系列卷积和残差,保证信息充分混合。
  3. Detect 层:直接输出每个像素的类别与边界框回归,完成一阶段检测。

通过以上分解和图示,你应该能够清晰地理解每一行配置的作用、特征图的流向,以及如何根据输入 640×640 得到三种尺度 80×80、40×40、20×20 的检测输出。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐