当前位置: 首页 > news >正文

yolo ultralytics之yolov8.yaml文件简介

核心概念

YOLOv8 的 .yaml 文件是一个模型结构定义文件。它不包含训练参数(如学习率、优化器),而是精确地描述了神经网络每一层的类型、参数以及层与层之间的连接方式

你可以把它看作是一张乐高模型的搭建说明书,指明了:

  1. 需要哪些积木(层的类型,如 ConvC2fSPPF)。

  2. 积木的属性(层的参数,如输入/输出通道数、卷积核大小)。

  3. 积木的拼接顺序(从输入到输出的流水线)。

  4. 如何组装(哪一层的输出应该作为哪一层的输入)。


文件结构详解

一个典型的 yolov8n.yaml 文件包含以下三个主要部分:

1. 基础参数 (ncscalesdepth_multiplewidth_multiple)

yaml

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8n object detection model with 80 classes. For usage examples see https://docs.ultralytics.com/tasks/detect# Parameters
nc: 80  # number of classes (类别数,COCO数据集是80类)
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8n.yaml with scale 'n'# [depth, width, max_channels] 深度、宽度、最大通道数的缩放系数n: [0.33, 0.25, 1024]  # YOLOv8n: 深度缩放0.33,宽度缩放0.25s: [0.33, 0.50, 1024]  # YOLOv8s: (small)m: [0.67, 0.75, 1024]  # YOLOv8m: (medium)l: [1.00, 1.00, 1024]  # YOLOv8l: (large)x: [1.00, 1.25, 1024]  # YOLOv8x: (extra large)# YOLOv8.0n backbone
backbone:# [from, number, module, args]...
# YOLOv8.0n head
head:...
  • nc: 模型需要检测的类别数量。

  • scales模型缩放系数,这是 YOLOv8 的一个关键设计。

    • depth_multiple (深度缩放):控制模块的重复次数(如 C2f 中的 n)。n: 0.33 意味着所有模块的基准重复次数会乘以 0.33。

    • width_multiple (宽度缩放):控制模块的通道数(如 Conv 中的 c2)。n: 0.25 意味着所有模块的基准通道数会乘以 0.25。

    • max_channels: 限制所有层的最大通道数,防止宽度缩放得太大。

  • backbone主干网络定义,负责从输入图像中提取多层次的特征图。

  • head检测头定义,负责从主干网络提取的特征图中进行目标定位和分类。


2. 主干网络 (backbone)

主干网络通常由卷积层C2f 模块下采样层组成。

yaml

backbone:# [from, number, module, args]- [-1, 1, Conv, [64, 3, 2]]  # 0-P1/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

每一行的格式 [from, number, module, args]

  • from输入来源

    • -1 表示来自上一层的输出。

    • 2 表示来自第 2 层的输出(层数从 0 开始)。

  • number该模块的重复次数(会与 depth_multiple 相乘得到实际次数)。

  • module模块的类型(如 ConvC2fSPPF)。这些模块在 ultralytics/nn/modules.py 中定义。

  • args传递给模块构造函数的参数列表

    • 对于 Conv[ch_out, kernel_size, stride, ...]

    • 对于 C2f[ch_out, shortcut]

    • 对于 SPPF[ch_out, kernel_size]

关键模块:

  • Conv: 标准的 卷积 + BN + SiLU 模块。

  • C2f: YOLOv8 的核心模块,是 C3 模块的升级版,设计更高效。它包含了丰富的梯度流和跨层连接(类似残差结构)。

  • SPPF空间金字塔池化快速版,将不同尺度的特征进行融合,极大地增加了感受野,对检测不同大小的物体非常有效。

特征金字塔:
注意注释中的 P1/2P2/4P3/8P4/16P5/32。这表示主干网络在不同深度输出了5种不同尺度的特征图(P1最大,P5最小),它们构成了特征金字塔,用于检测不同大小的物体。


3. 检测头 (head)

检测头接收主干网络输出的多尺度特征图,并最终输出检测结果。

yaml

head:- [-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) (检测层)

关键操作:

  • Upsample + Concat: 这是 FPN (Feature Pyramid Network) 结构的体现。通过上采样将深层的小特征图放大,然后与浅层的大特征图进行拼接,融合了高层的语义信息和底层的细节信息。

  • Detect检测层,是最终的输出层。它接收来自 P3P4P5 三个尺度的特征图。

    • 在每个尺度上,它都会应用卷积来预测:边界框(xywh)、置信度(objectness)、分类分数(class scores)

    • 例如,对于 COCO 80 类,P3/8 尺度的输出维度为 (batch_size, 4+1+80, height, width)


总结:YOLOv8 架构的核心思想

  1. 模块化设计:通过 .yaml 文件清晰定义,易于修改和扩展。

  2. 复合缩放:通过 scales 参数轻松缩放模型大小(n, s, m, l, x),在速度和精度间取得平衡。

  3. 现代化的主干:使用 C2f 和 SPPF 等高效模块,提升特征提取能力。

  4. PAFPN 风格颈部:使用上采样和拼接操作,有效地融合了来自主干网络的多尺度特征。

  5. 解耦头:YOLOv8 的 Detect 层将分类和回归任务在一定程度上分离,提升了检测性能。

总而言之,yolov8.yaml 文件是 YOLOv8 模型的蓝图。 Ultralytics 的框架会读取这个文件,根据其中的指令动态地构建出对应的 PyTorch 模型。这种设计将模型结构代码完全分离,使得研究和实验变得非常灵活。

http://www.dtcms.com/a/354400.html

相关文章:

  • 《信息检索与论文写作》实验报告三 中文期刊文献检索
  • Linux 云服务器内存不足如何优化
  • LinuxC系统多线程程序设计
  • C语言:数据在内存中的存储
  • nginx referer-policy 和 referer
  • redis集群分片策略
  • 【温室气体数据集】NOAA CCGG 飞机观测温室气体
  • 2025年06月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • spring-cloud项目中gateway配置解析
  • DMA学习
  • 【0420】Postgres内核 smgr + md + vfd 实现为指定 table(CREATE TABLE)创建 disk file
  • 每日八股文8.27
  • Linux系统调优工具
  • [Sync_ai_vid] 数据处理流水线 | 配置管理系统
  • 【重学 MySQL】九十二、 MySQL8 密码强度评估与配置指南
  • mysql mvcc机制详解
  • 期权交易中的“道”:从《道德经》中汲取投资智慧
  • RHEL9部署MySQL数据库及数据库的基本使用(增删改查,数据备份恢复)
  • 基于SpringBoot的社区儿童疫苗接种预约系统设计与实现(代码+数据库+LW)
  • Vue将内容生成为二维码,并将所有二维码下载为图片,同时支持批量下载(下载为ZIP),含解决一次性生成过多时页面崩溃解决办法
  • 【雅思020】Opening a bank account
  • C语言二级考试环境配置教程【window篇】
  • 能源行业数据库远程运维安全合规实践:Web化平台的落地经验
  • 【系统分析师】高分论文:论快速应用开发方法及应用
  • Linux初始——基础指令篇
  • Libvio 访问异常排查指南​
  • List | 常见的List实现类(ArrayList、LinkedList、Vector)以及ArrayList源码解读
  • 【Redis】数据分片机制和集群机制
  • 8.28 模拟|双指针
  • 零基础-力扣100题从易到难详解(持续更新1-10题)