Ultralytics YOLO27: ウェイトリストに登録する
YOLOのライセンス
Ultralytics用語集に戻る

YAML

YAMLは、インデントで構造を表す人間が読みやすいデータ形式で、MLデータセットや学習設定の記述に広く使われています。構文、注意点、代替形式について解説します。

YAML(「YAMLはマークアップ言語ではない」の頭字語を自身に含む再帰的頭字語)は、人が読みやすいデータシリアライズ言語で、主に設定ファイルに使われます。かっこやタグの代わりにインデントでネストされたデータを記述し、コメントをサポートします。また、プログラミング言語の辞書、リスト、文字列、数値に直接対応するため、人もプログラムも同じファイルを簡単に扱えます。機械学習では、YAMLファイルにデータセットのパス、モデルアーキテクチャ、ハイパーパラメーター、パイプラインのステップをコードの外に記述できます。そのため、実験の再現、レビュー、Gitでのバージョン管理が容易になります。現在の仕様はYAML 1.2.2で、YAML 1.2は有効なJSONをYAMLとしても有効に扱えるように設計されています。

YAML構文の基本#

YAMLドキュメントは3種類のノードで構成されます。マッピングはkey: valueのペア、シーケンスは- で始まる項目、またはインラインで[a, b]と記述される項目です。スカラーは文字列、数値、ブール値などの単一の値です。ネストはスペースによるインデントで表し、インデントにタブ文字は使えません。#はコメントを開始し、---は1つのファイル内の複数のドキュメントを区切ります。アンカー(&name)とエイリアス(*name)を使うと、ファイル内の別の場所でブロックを再利用できます。通常、文字列に引用符は不要なのでファイルを簡潔にできますが、引用符のない値の型はパーサーによって判断されます。

機械学習ワークフローにおけるYAML#

YAMLで設定を管理することで、実験で行う内容とコードでの実行方法を分離でき、チームはファイルを編集してデータセットを切り替えたり、学習率を変更したりでき、実験トラッキングで正確な設定を記録し、プルリクエストで変更をレビューできます。スタック全体のツールでYAMLが使われており、たとえばHydraは実験設定の構成に、GitHub Actionsは継続的インテグレーションパイプラインに、Docker Composeはマルチコンテナアプリに、Kubernetesのマニフェストはモデルのデプロイに使われます。Ultralytics YOLOではYAMLを3つのレベルで使用し、データセットファイルには画像フォルダーとクラス名が記載され、モデルファイル(たとえばyolo26.yaml)ではレイヤーとYOLO26のnからxまでのスケールが定義され、デフォルト設定ファイルには学習、推論、エクスポートに関するすべての設定が含まれ、その設定はcfg=で渡すカスタムファイルによって上書きできます。この抜粋は、同梱のcoco8.yamlデータセットファイルの構造を示しています:

path: 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
  # ... up to 79: toothbrush

学習では、ファイル名を指定してファイルを読み込み、pathから画像フォルダーを特定し、namesからクラス数とクラス名を取得します。

from ultralytics import YOLO

# 事前学習済みYOLO26 nanoモデルを読み込みます
model = YOLO("yolo26n.pt")

# YAMLファイルに記述されたデータセットで学習します
results = model.train(data="coco8.yaml", epochs=3, imgsz=640)

カスタムデータセットには、同じキーを持ち、画像の場所を指定し、クラスを一覧表示する専用のYAMLファイルだけが必要です。これはUltralyticsの検出データセット形式に従います。

YAML、JSON、TOMLの比較#

  • JSON: 中かっこ、角かっこ、引用符付きのキーを使い、コメントは使えませんが、どの環境でも同じように解析されます。人が編集するファイルより、APIレスポンスや保存済みの予測など、プログラム間で交換するデータに適しています。
  • TOML: 型が明示され、インデントによる予期しない問題が少ないINI風の形式です。Pythonのpyproject.tomlで使われています。深くネストされたデータにはあまり適していません。
  • XML: タグベースの冗長なマークアップ言語で、Pascal VOCなどの古いアノテーション形式では今も使われていますが、新しい設定ファイルで選ばれることはほとんどありません。

YAMLでよくある落とし穴#

YAMLのエラーの多くはインデントが原因です。タブ文字やずれたスペースがあると構造が変わったり、ScannerErrorまたはParserErrorでパーサーが停止したりします。より見つけにくい問題は、型が暗黙に決まることに起因します。多くのPythonプロジェクトで使われているパーサーのPyYAMLは、古いYAML 1.1のルールに従います。そのため、引用符のない単語がブール値に変換されることがあり、浮動小数点数には小数点が必要です。信頼できないファイルをyaml.unsafe_loadまたはPyYAMLのUnsafeLoaderで読み込むと、任意のPythonオブジェクトを構築してコードを実行できるため、設定コードではプレーンなデータ型のみを構築するyaml.safe_loadを使用します。

import yaml

config = """
model: yolo26n.pt
epochs: 100
lr0: 1e-3
python: 3.10
country: NO
classes: [person, car]
"""

# safe_load builds plain Python dicts, lists, and scalars from the text
data = yaml.safe_load(config)
for key, value in data.items():
    print(f"{key}: {value!r} ({type(value).__name__})")

出力には3つの意外な結果が示されます。小数点がないため、lr0は文字列'1e-3'として読み込まれます。python: 3.10は浮動小数点数3.1になり、国コードNOはブール値Falseになります。これはYAML 1.1のルールで、「ノルウェー問題」という通称があります。YAML 1.2のコアスキーマでは、1e-3は浮動小数点数として読み込まれ、NOは文字列のままですが、3.10は引き続き3.1になります。

ソリューションを見る

スポーツにおけるコンピュータービジョン

スポーツにおけるコンピュータービジョン

Ultralytics YOLOが、選手やボールの追跡、パフォーマンス分析、コーチングへの知見、アスリートのリハビリを通じて、スポーツビジョンをどのように支えるかをご紹介します。
詳しく見る
航空画像向けコンピュータービジョン

航空画像向けコンピュータービジョン

Ultralytics YOLOを使用して、ドローンや航空画像をリアルタイムの知見に変換し、農業、水産養殖、自然保護、地理空間分析に活用できます。
詳しく見る
航空宇宙分野のコンピュータービジョン

航空宇宙分野のコンピュータービジョン

Ultralytics YOLOを活用して航空宇宙分野でコンピュータビジョンを導入し、航空機検査、滑走路上のFOD検出、空港の地上業務、複合材の欠陥検出に活用できます。
詳しく見る
セキュリティ分野のコンピュータービジョン

セキュリティ分野のコンピュータービジョン

Ultralytics YOLOモデルであらゆる施設を保護しましょう。ビジョンAIは、周辺監視、脅威検知、ナンバープレート認識、職場の安全管理を支援します。
詳しく見る
ロボティクス分野のコンピュータービジョン

ロボティクス分野のコンピュータービジョン

Ultralytics YOLOモデルで、よりスマートなマシンを実現しましょう。ロボティクスにおけるビジョンAIは、自律ナビゲーション、認識、物体追跡、リアルタイム制御を支援します。
詳しく見る
物流におけるコンピュータービジョン

物流におけるコンピュータービジョン

Ultralytics YOLOモデルで物流を効率化しましょう。ビジョンAIにより、荷物検査、仕分け、車両追跡、倉庫のリアルタイム安全監視を実現します。
詳しく見る
小売業におけるコンピュータービジョン

小売業におけるコンピュータービジョン

Ultralytics YOLOモデルで小売のあり方を変革しましょう。ビジョンAIにより、在庫追跡、棚の監視、行列管理、より高度な顧客インサイトを実現します。
詳しく見る
医療分野におけるコンピュータービジョン

医療分野におけるコンピュータービジョン

Ultralytics YOLOモデルで医療ソリューションを構築しましょう。医療分野のビジョンAIは、医用画像処理の高速化、より高度な診断、患者モニタリングを実現します。
詳しく見る
製造業におけるコンピュータービジョン

製造業におけるコンピュータービジョン

Ultralytics YOLOモデルで製造を最適化しましょう。ビジョンAIは、品質管理、欠陥検出、PPE準拠、組立ラインの自動化を推進します。
詳しく見る
自動車分野におけるコンピュータービジョン

自動車分野におけるコンピュータービジョン

Ultralytics YOLOモデルで自動車分野にコンピュータービジョンを導入しましょう。ビジョンAIは、道路の安全性、運転支援、車両の自動化を向上させ、よりスマートな道路を実現します。
詳しく見る
農業におけるコンピュータービジョン

農業におけるコンピュータービジョン

Ultralytics YOLOモデルでスマート農業にビジョンAIを導入しましょう。作物のモニタリング、家畜の追跡、精密農業を支援し、より高く効率的な収量を実現します。
詳しく見る

AIの未来を一緒に築きましょう!

機械学習の未来に向けた歩みを始めましょう