YAML
了解 YAML 如何简化 AI 工作流。探索如何使用 YAML 文件配置数据集并训练 Ultralytics YOLO26 模型,从而更快、更轻松地开展 MLOps。
YAML(YAML 不是标记语言)是一种人类可读的数据序列化标准,广泛用于软件行业中的配置文件编写。与更复杂的标记语言不同,YAML 优先考虑格式简洁性和可读性,因此非常适合需要快速检查或修改参数的开发者和数据科学家。其简单结构依靠缩进而非括号或标签,使用户能够以极少的视觉杂乱定义列表和字典等层次化数据结构。在人工智能和机器学习领域,YAML 充当了连接人类意图与机器执行的关键桥梁,以易于进行版本控制和共享的格式存储从数据集路径到超参数调优设置等各种信息。
在机器学习中的相关性#
在现代机器学习运维(MLOps)中,保持实验的可复现性和组织性至关重要。YAML 文件充当这些实验的蓝图,将所有必要的配置细节封装在单个文档中。Ultralytics YOLO26模型等框架高度依赖这些配置文件来定义模型架构和训练流程。
训练计算机视觉模型时,你通常需要指定训练数据的位置、要检测的类别数量以及这些类别的名称。与其将这些值硬编码到 Python 脚本中,导致代码库变得杂乱,不如将这些数据分离到 YAML 文件中。这种关注点分离使研究人员能够在不接触核心代码库的情况下更换数据集或调整学习率,从而促进更好的实验跟踪与协作。
YAML 与 JSON、XML 的比较#
虽然 YAML 经常与JSON(JavaScript 对象表示法)和XML(可扩展标记语言)进行比较,但它们在 AI 生态系统中承担的用途略有不同。
- **YAML:**最适合由人编写和读取的配置文件。它支持注释,这对于记录为何选择特定的模型权重或参数至关重要。
- **JSON:**非常适合机器之间的通信,例如 Web API 或保存推理结果。由于必须使用引号和大括号,它的规则更严格,也更难由人手动编辑,并且不支持注释。
- **XML:**一种更加冗长的格式,常用于遗留系统或复杂文档存储(例如Pascal VOC 标注)。在现代深度学习工作流中,它通常被认为对于简单的配置任务而言过于繁重。
AI 中的实际应用#
YAML 在 AI 开发生命周期的多个关键阶段发挥作用:
- **数据集配置:**使用 COCO 等目标检测数据集或Ultralytics Platform上的自定义数据时,YAML 文件(
data.yaml)通常用于定义训练集、验证集和测试集的目录路径。它还会将类别索引(0、1、2)映射到类别名称(person、bicycle、car),确保模型理解数据结构。 - **CI/CD 流水线:**在持续集成工作流中,GitHub Actions 等工具使用 YAML 定义自动化步骤。这可能包括对新的神经网络架构运行单元测试,或在代码推送到代码仓库时将模型部署到Docker 容器中。
示例:配置 YOLO 训练运行#
以下示例展示了典型 YAML 文件如何充当训练YOLO26模型的数据集接口。下面的 Python 代码片段展示了 Ultralytics 库如何读取此文件并启动训练流程。
**1. coco8.yaml 文件(概念):**此文件将包含图像路径和类别名称列表。
path: ../datasets/coco8 # dataset root dir
train: images/train # train images (relative to 'path')
val: images/val # val images (relative to 'path')
# Classes
names:
0: person
1: bicycle
2: car
...**2. Python 用法:**代码读取配置,并使用指定参数启动训练。
from ultralytics import YOLO
# Load the YOLO26 model (recommended for new projects)
model = YOLO("yolo26n.pt")
# Train the model using the dataset configuration defined in the YAML file
# The 'data' argument points directly to the YAML file
results = model.train(data="coco8.yaml", epochs=5, imgsz=640)语法关键概念#
了解一些关键语法规则有助于避免常见错误,例如 ScannerError 或 ParserError;这些错误通常是由缩进不正确导致的。
- **缩进:**YAML 使用空白字符(空格而非制表符)表示结构。嵌套项的缩进必须比其父项更深。
- **键值对:**数据以
key: value的形式存储。例如,epochs: 100用于设置训练周期数。 - **列表:**序列由连字符
-表示。这对于定义数据增强步骤列表或多个输入源非常有用。 - **注释:**以
#开头的行会被解析器忽略,因此你可以直接在文件中留下关于特定超参数的备注。
掌握 YAML 后,从业者可以简化模型训练工作流,减少配置错误,并确保其 AI 项目保持可扩展且易于维护。









