Ultralytics YOLO27: ウェイトリストに登録する。
Get Started
高性能YOLOデータセットの構築·準備する·レッスン 7/10
レッスン初級

拡張を慎重に使う

すべての拡張をデプロイ先のカメラに照らして検証し、根拠のあるプロファイルを作成して、その設定で学習し、学習バッチで結果を確認します。

デフォルトの色相ジッターを使って、赤いカプセルとオレンジ色のカプセルを仕分けるラインを学習する場面を想像してください。各エポックで赤いカプセルがオレンジ色に色付けされた画像をモデルに見せると、モデルは色が重要ではないと学習します。しかし、色こそが学習させる必要のあった要素です。拡張によってモデルの頑健性が高まるのは、各変換がデプロイ先のカメラで実際に起こり得る場合に限られます。このレッスンでは、どの変換を使うかを決めるためのテストを紹介します。

成果

変更する引数ごとに、デプロイ環境に基づく根拠を1行で示して拡張プロファイルを選び、その設定で学習して、train_batch0.jpgで検証します。

短期集中コース
すでに使い方をご存じの方は、こちらをご覧ください。
  1. まずデフォルトの拡張設定で学習し、ベースラインを記録します。

  2. 色がクラスを定義する場合の色相シフトなど、カメラでは発生し得ない変換を無効にします。

  3. 俯瞰画像向けのflipudなど、カメラで発生し得る変換を有効にします。

  4. train_batch0.jpgを開き、バウンディングボックスが適切にフィットし、クラスの手がかりが保たれていることを確認します。

実践的

データ拡張の役割#

1枚のコンゴウインコの写真に適用した拡張:水平反転、クロップ、メディアンブラー、コントラスト、色相・彩度・明度のシフト、ガンマ補正

データ拡張では、学習画像をその場で変換するため、モデルは各エポックで画像ごとに少しずつ異なるバージョンを見ます。適切に行えば、照明、スケール、向きに対する頑健性が向上し、過学習も抑制されます。画像が常に変化するため、モデルが画像を記憶できないからです。不適切な拡張は、物理的にあり得ないシーンを学習させ、修正すべきデータセットの不足を隠してしまいます。

上の色相パネルを見てください。赤いコンゴウインコが黄色に変わっています。「コンゴウインコか、それ以外か」の分類では問題ありませんが、色で2つのクラスを区別する場合には致命的です。

重要なデフォルト設定#

以下はUltralytics 8.4のデフォルト設定です。拡張設定リファレンスにすべての引数が記載されています。

引数デフォルト機能変更する場合
hsv_h0.015色相ジッター色がクラスを定義する場合は0に設定します
hsv_s / hsv_v0.7 / 0.4彩度と明度のジッター照明が固定され、制御されている場合は値を下げます
degrees0.0ランダム回転(±度)オブジェクトがあらゆる角度で現れる場合は値を上げます
translate / scale0.1 / 0.5シフトとズームクロップによってクラスを定義する部分が切れる場合は値を下げます
fliplr0.5水平反転の確率文字のように左右が重要な場合は0に設定します
flipud0.0垂直反転の確率俯瞰画像、航空画像、顕微鏡画像では値を上げます
mosaic1.04枚の画像を1枚に合成します使用することはまれです。close_mosaicを参照してください
close_mosaic10最後のNエポックではモザイクを無効にします実行期間が非常に短い場合は値を下げます
mixup / cutmix0.0 / 0.02枚の画像をブレンドする/一方の画像のパッチをもう一方に貼り付けるベースラインを取得してから、小規模データセットで試します
copy_paste0.0画像間でオブジェクトのインスタンスを貼り付けますセグメンテーション、セマンティック、OBBのデータセットで、希少クラスがある場合

例外は深度データセットです。mosaic、mixup、cutmix、copy_pasteを適用すると対応する深度マップが無効になるため、深度データローダーはこれらの値を自動的に0に設定します。

デプロイ環境でのテスト#

有効にするすべての変換について、2つの問いに順番に答える必要があります。

変換現実的か?判定
屋外カメラで明るさを±30%変更はい:時間帯によって変わります使用する
監視カメラで水平反転はい:人は両方向に歩きます使用する
壁面設置カメラで垂直反転いいえ:床は常に下側にあります無効化
俯瞰コンベアカメラでの垂直反転はい。「上」という方向がフレーム内にありません有効化
固定式道路カメラでの90°回転いいえ。カメラが回転することはありません無効化
赤色と緑色の部品が異なるクラスの場合の色相シフトいいえ。識別信号が失われます無効化

180度の回転データ拡張:固定式の直立カメラでは撮影されない、逆さまのコンゴウインコ

真下を向くドローンには、逆さまのコンゴウインコも適切な学習画像ですが、壁に固定されたカメラには無駄な画像です。このテストに通らない変換は、負の学習信号を生み出します。モデルは実際には見ることのない画像を認識するよう学習し、その分、実際に見る画像に割ける容量が減ります。

設定例#

コンベアを見下ろすカメラで、色だけが異なるクラスの部品を仕分けします。色相ジッターは無効にし、垂直反転と小さな回転は現実的な変換になります。以下はCOCO8のデモセットで実行できる設定です。データYAMLと実際のエポック数に置き換えてください。

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.train(
    data="coco8.yaml",
    epochs=1,
    imgsz=320,
    hsv_h=0.0,  # 色がクラスのシグナルです。色相を忠実に保つ
    flipud=0.5,  # 俯瞰視点では、フレームに「上」はない
    degrees=10.0,  # 部品はさまざまな小さな角度で配置される
)

実行フォルダー内のtrain_batch0.jpgを開き、次の3点を確認します。変換後もボックスが対象にぴったり合っていること、クラスを定義する手掛かり(色、形状、テキスト)が保たれていること、物理的にあり得ない見た目になっていないことです。いずれかを損なう変換は弱めてください。最初のモデルをトレーニングするでは、トレーニングの実行手順を説明しています。

Mosaicとclose_mosaic#

4枚のオウムの写真を1枚の学習画像につなぎ合わせるMosaicデータ拡張

Mosaicは4枚の画像を1枚につなぎ合わせる手法で、デフォルトで有効になっています。検出に最も大きな効果をもたらすデータ拡張です。各学習画像に複数のシーン、スケール、物体のコンテキストが含まれます。ただし、Mosaic画像はデプロイ時のフレームとは異なる見た目になるため、close_mosaic=10は最後の10エポックでMosaicを無効にし、現実的な入力でモデルの学習を仕上げます。Mosaicを終了すると、mixup、cutmix、copy_pasteも無効になりますが、反転、HSV、幾何学的変換は継続します。

短い実行ではモザイクを使わない

上記の1エポックのプロファイルを含め、close_mosaicエポック以下の実行では、最初のエポックからモザイクがオフになります。スモークテストではなく、フルレングス実行のtrain_batch0.jpgを基準にモザイクを評価します。

データ拡張で解決できないこと#

データ拡張は、既存のデータを増幅するものです。データセットに夜間の画像がなければ、どの設定でも夜間画像は生成できません。生成されるのは、昼間の画像を明るくしたり暗くしたりしたものです。あるクラスを強いデータ拡張でしか扱えないなら、そのクラスのデータが不足しています。高品質で代表性のあるデータを収集するに戻ってください。

すべての設定値を最大にすると、本当の問題が見えなくなる

小規模なデータセットですべての拡張を最大にすると、配備環境からますます遠い画像で学習することになり、検証時のmAPが低下することもよくあります。理由を明確にしたうえで、一度に1つの引数だけを変更し、同じ分割でデフォルトのベースラインと比較します。

クロップでクラスが消えてしまう場合

トランプの角のマークのように、物体の小さな部分でクラスが定義される場合、mosaic、translate、scaleによってその部分が切り取られ、別のクラスとまったく同じに見える学習画像が作られることがあります。そのデータセットではこれらの値を下げ、train_batch0.jpgで修正を確認します。

試してみる

デフォルトの表にある各引数について、デプロイ環境に応じて維持、変更、無効化のいずれかを指定し、変更ごとに1行で理由を記載してください。同じデータ分割で、デフォルト設定と独自設定をそれぞれ使って1回ずつ学習し、両方のval mAP50-95を記録します。提出物:注釈を加えた表、両方のスコア、独自設定で実行したtrain_batch0.jpg。

完了条件
以下のすべてを満たすと、レッスンは完了です。
  • 変更した引数にはすべて、デプロイ上の理由が1行で記載されています。

  • デフォルト設定と独自設定を、同じvalデータ分割で比較しています。

  • 独自設定で実行したtrain_batch0.jpgで、ボックスがぴったり合い、クラスの手掛かりが保たれていることを確認できます。

解答を表示

ドローンが港を真上から撮影し、船を方向付きボックスで検出します。この視点には「上」がなく、船はあらゆる方向を向いており、色はクラスの定義に関係しません。

引数選択理由
flipud0.5俯瞰画像は垂直反転しても同じに見えます
degrees180船はあらゆる方位を向いています
hsv_hデフォルト船体の色はさまざまで、クラスの判断基準ではありません
mosaicデフォルト画像あたりの小さな物体が多いため、Mosaicが役立ちます

DOTA8の航空画像デモセットでは:

yolo obb train data=dota8.yaml model=yolo26n-obb.pt epochs=1 imgsz=320 flipud=0.5 degrees=180

固定式の道路カメラでは、同じ2つの変更はデプロイ環境のテストに通りません。壁に取り付けたカメラの映像で、車が逆さまに映ることはないためです。

次のステップ

データセット、データ分割、データ拡張の準備が整いました。次のレッスンでは、データセットが学習に使える状態かどうかを客観的に判断します。