Ultralytics YOLO27: ウェイトリストに登録する。
Get Started
レッスン初級

データセット用YAMLを作成する

Ultralyticsにフォルダーの場所を指定し、クラス名を定義するdata.yamlを作成します。どこからでもパスを解決できるようにし、yolo valで動作確認します。

データセットYAMLは、フォルダーとすべてのUltralyticsコマンドを結び付ける契約です。パスを間違えると処理が実行されません。クラスの順序を間違えると、警告が一切表示されないまま処理は実行され、すべての予測に誤った名前が付けられます。

このレッスンでは、錠剤データセット用のdata.yamlを作成し、チームメンバーのマシンでも動作するようにUltralyticsがパスを解決する仕組みを詳しく学びます。さらに、1行の検証コマンドを実行して動作を確認し、学習で上回る必要のあるベースラインを取得します。

成果

どの作業ディレクトリからでもパスを解決できるdata.yamlを作成し、クラスインデックスの一貫性を保ち、yolo valのスキャン結果を読んでデータセットが正しく接続されていることを確認できるようになります。

短期集中コース
すでに使い方をご存じの方は、こちらをご覧ください。
  1. pathにデータセットのルートを設定し、train/valにはルートからの相対パスで画像フォルダーを指定します。

  2. namesをインデックス → 名前の形式で列挙し、ラベルファイルと完全に一致させます。

  3. yolo val model=yolo26n.pt data=my_dataset/data.yamlを実行し、スキャン結果を確認します。

  4. 共有する前にpathを絶対パスにします。クラスを追加する場合は、必ず末尾に追加してください。

実践的

ファイルを作成する#

Ultralytics Platformのプロフィールページ。ユーザーのデータセット一覧と「New Dataset」ボタンを表示

Ultralytics Platform上のデータセットには、それぞれ独自のクラスと分割があり、data=ul://username/datasets/nameのようなURIで学習時に指定します。自分のマシンで作業する場合は、YAMLがその契約にあたります。次の内容をmy_dataset/data.yamlとして保存します。

path: my_dataset # dataset root: absolute, or relative to where you run yolo
train: images/train # relative to path
val: images/val # relative to path
# test: images/test  # optional held-out split

names:
  0: pill
キー必須意味
pathいいえデータセットのルート。train、val、testはこのルートからの相対パスです。省略した場合はYAMLファイルが置かれているフォルダーになります。
train, valはい画像フォルダー、画像パスを記載した.txtファイル、またはいずれかのリストです。
testいいえ学習から除外したtest画像。評価にはsplit=testのみを使用します。
namesはいクラスインデックス → 名前。要素数によってクラス数が決まります。
downloadいいえ画像が見つからない場合にデータセットを取得するURLまたはスクリプト

trainとvalは画像フォルダーを指します。ラベルはimagesをlabelsに置き換えて検索されます。coco8 YAMLは最小構成の動作する例で、VOC YAMLはより大規模な例です。

実例:動作確認を行う#

事前学習済みモデルを使った検証は、エンドツーエンドで確認する最も速い方法です。すべての画像とラベルを読み込み、問題を報告し、指標を計算します。

yolo val model=yolo26n.pt data=my_dataset/data.yaml
val: Scanning my_dataset/labels/val... 23 images, 0 backgrounds, 0 corrupt: 100%
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95)
                   all         23        399     0.0256    0.00251      0.001     0.0002

順番に確認します。

  1. Scanning my_dataset/labels/val:Ultralyticsが実際に解決したフォルダーです。想定したフォルダーか確認してください。
  2. 23 images, 0 backgrounds, 0 corrupt:すべての検証画像に有効なラベルファイルがあります。意図しない背景画像や破損ファイル数がある場合は、前のレッスンに戻ってください。
  3. 399個のインスタンス:ラベルファイルには錠剤が399個記録されています。
  4. mAP50-95が0.0002:この値で正しく、壊れているわけではありません。COCOには錠剤クラスがないため、事前学習済みモデルは錠剤を検出できません。このほぼゼロのスコアがベースラインです。人物や車など、対象クラスがCOCOに含まれている場合は、同じコマンドで意味のあるベースラインを取得できます。

どこからでもパスを解決できるようにする#

「画像が見つかりません」というエラーの多くは、パスの誤りが原因です。Ultralyticsはpathを次のように解決します。

datasets_dirはUltralyticsの設定項目です。yolo settingsで現在の値を表示でき、設定ガイドでは変更方法を説明しています。組み込みデータセットはこのフォールバックを利用します。coco8.yamlがpath: coco8とdownload:のURLを設定するため、data=coco8.yamlはどのフォルダーからでも動作します。

判断の目安:

  • 自分だけが使い、常にプロジェクトフォルダーから実行しますか? 相対パスのpathで問題ありません。
  • 別フォルダーにあるチームメイト、サーバー、CI、ノートブックから使いますか? 絶対パスの path を使用します。
  • データが別の場所にあり、自動で取得させたいですか? zip URLを指定して download: を追加します。

クラスインデックスを契約として維持する#

各ラベル行の先頭にある整数は、names 内のインデックスです。Ultralyticsは範囲(Label class 1 exceeds dataset class count 1)をチェックしますが、意味までは確認できません。ラベリングツールが 0: forklift, 1: person をエクスポートし、YAMLに 0: person, 1: forklift と記述されていた場合、学習は成功し、検証時の mAP も問題ないように見えますが、すべての予測に誤った名前が付けられます。ラベリングツール、変換スクリプト、YAML、デプロイコードで共有するクラスリストを、唯一の信頼できる情報源として維持してください。

次の間違いに注意する#

誤ったフォルダーを基準にした相対パス

症状: FileNotFoundError: Dataset 'data.yaml' images not found, missing path '.../datasets/my_dataset/images/val' が表示され、データセットのダウンロードディレクトリーに関するメッセージが出ます。原因: 別のフォルダーから実行したため、相対パス path が存在せず、Ultralyticsは代わりに datasets_dir を参照しました。対処: プロジェクトフォルダーから実行するか、path を絶対パスにしてください。

名前の並べ替えは破壊的な変更になる

ラベルを付け直さずに names の項目を入れ替えたり削除したりすると、すべてのラベルの意味が気付かないうちに変わります。モデルはエラーを出さずにトレーニングされ、誤ったクラスを予測します。新しいクラスは次の空きインデックスで末尾に追加し、既存のクラス番号は変更しないでください。

リストが統合されて1つのスコアになる

val: [images/val_day, images/val_night] は両方のフォルダーを1つの検証セットに統合し、1つの数値を報告します。昼と夜を別々に確認する場合や、厳選した回帰テストセットと新しい本番サンプルを並べて確認する場合は、セットごとにYAMLファイルを用意して、それぞれを検証してください。split=test を使って一度しか評価しない test 分割については、データセットを正しく分割するで説明しています。

データ拡張やキャッシュなどの学習設定は、YAMLキーではなく train の引数です。すべて設定リファレンスに記載されています。

試してみる

my_dataset/data.yaml を作成して、yolo val model=yolo26n.pt data=my_dataset/data.yaml を実行します。画像、背景、破損データ、インスタンスの件数と、ベースラインのmAP50-95を記録します。次に、別のフォルダーに cd し、YAMLのパスを指定して再実行します。エラーを確認し、どこからでもコマンドを実行できるようにYAMLを修正します。修正したYAMLと、両方のスキャン結果の行を提出してください。

完了条件
以下のすべてを満たすと、レッスンは完了です。
  • yolo val は、YAMLについて画像23件、背景0件、破損データ0件と報告します。

  • データセットの事前学習済みベースラインmAP50-95を記録しました。

  • path が絶対パスなので、どの作業ディレクトリからでもYAMLを使用できます。

解答を表示
path: /home/you/projects/pills/my_dataset # absolute path to the dataset root
train: images/train
val: images/val

names:
  0: pill
val: Scanning /home/you/projects/pills/my_dataset/labels/val... 23 images, 0 backgrounds, 0 corrupt
                   all         23        399     0.0256    0.00251      0.001     0.0002

別のフォルダーから実行すると、相対パス版は Dataset ... images not found で失敗しました。そこには my_dataset がなく、フォールバック先の datasets_dir にもコピーがなかったためです。絶対パスの path を使えば、この検索の問題は解消されます。ベースラインのmAP50-95は約0です。事前学習済みモデルには錠剤クラスがありません。

次のステップ

データが接続され、ベースラインも記録されました。次は、そのデータでYOLO26を学習します。