YOLO Vision 2026:

Ultralytics YOLOを使用したデータオーギュメンテーション#

YOLO data augmentation examples showing original and augmented images for training

はじめに#

データ拡張は、既存の画像にさまざまな変換を適用してトレーニングデータセットを人工的に拡張する、コンピュータビジョンにおける極めて重要な手法です。Ultralytics YOLOのようなディープラーニングモデルをトレーニングする際、データ拡張はモデルのロバスト性を高め、過学習を軽減し、現実世界のシナリオに対する汎化性能を向上させるのに役立ちます。



Watch: How to use Mosaic, MixUp & more Data Augmentations to help Ultralytics YOLO Models generalize better 🚀

データオーギュメンテーションが重要な理由#

データオーギュメンテーションは、コンピュータビジョンモデルの学習において、以下のような複数の重要な役割を果たします。

  • データセットの拡張: 既存の画像のバリエーションを作成することで、新しいデータを収集することなく、実質的に学習データセットのサイズを拡大できます。
  • 汎化性能の向上: さまざまな条件下でオブジェクトを認識する方法をモデルが学習するため、実世界のアプリケーションにおいてモデルがより堅牢になります。
  • 過学習の低減: 学習データに多様性を持たせることで、モデルが特定の画像の特徴をそのまま暗記してしまう可能性を減らします。
  • パフォーマンスの向上: 適切な拡張を行ってトレーニングされたモデルは、通常、検証セットやテストセットでより高い精度を達成します。

Ultralytics YOLOの実装では、包括的なオーギュメンテーション手法を提供しています。それぞれの手法は特定の目的を持ち、異なる方法でモデルのパフォーマンス向上に寄与します。本ガイドでは、各オーギュメンテーションパラメータについて詳細に解説し、プロジェクトにおいていつどのように効果的に使用すべきかを理解する手助けをします。

設定例#

Python API、コマンドラインインターフェース(CLI)、または設定ファイルを使用して、各パラメータをカスタマイズできます。各手法でデータオーギュメンテーションを設定する方法の例を以下に示します。

設定例
import albumentations as A

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Training with custom augmentation parameters
model.train(data="coco.yaml", epochs=100, hsv_h=0.03, hsv_s=0.6, hsv_v=0.5)

# Training without any augmentations (disabled values omitted for clarity)
model.train(
    data="coco.yaml",
    epochs=100,
    hsv_h=0.0,
    hsv_s=0.0,
    hsv_v=0.0,
    translate=0.0,
    scale=0.0,
    fliplr=0.0,
    mosaic=0.0,
    erasing=0.0,
    auto_augment=None,
)

# Training with custom Albumentations transforms (Python API only)
custom_transforms = [
    A.Blur(blur_limit=7, p=0.5),
    A.CLAHE(clip_limit=4.0, p=0.5),
]
model.train(data="coco.yaml", epochs=100, augmentations=custom_transforms)

設定ファイルの使用#

データ拡張を含むすべてのトレーニングパラメータを、YAML設定ファイル(例: train_custom.yaml)で定義できます。modeパラメータは、CLIを使用する場合にのみ必要です。この新しいYAMLファイルは、ultralyticsパッケージ内にあるデフォルトのものを上書きします。

# train_custom.yaml
# 'mode' is required only for CLI usage
mode: train
data: coco8.yaml
model: yolo26n.pt
epochs: 100
hsv_h: 0.03
hsv_s: 0.6
hsv_v: 0.5

次に、Python APIで学習を開始します:

学習例
from ultralytics import YOLO

# Load a COCO-pretrained YOLO26n model
model = YOLO("yolo26n.pt")

# Train the model with custom configuration
model.train(cfg="train_custom.yaml")

色空間のオーギュメンテーション#

色相の調整(hsv_h#

  • 範囲: 0.0 - 1.0
  • デフォルト: 0.015
  • 使用方法: 画像の色相の関係を維持しながら色をシフトします。hsv_hハイパーパラメータはシフトの大きさを定義し、最終的な調整は-hsv_hからhsv_hの間でランダムに選択されます。たとえば、hsv_h=0.3の場合、シフトは-0.3から0.3の範囲内でランダムに選択されます。0.5を超える値の場合、色相シフトはカラーホイールを一周するため、拡張結果は0.5-0.5の間で同じように見えます。
  • 目的: 照明条件がオブジェクトの外観に大きく影響する屋外のシナリオで特に有用です。例えば、バナナは直射日光の下ではより黄色く見えますが、屋内ではより緑がかって見えることがあります。
  • Ultralyticsの実装: RandomHSV
-0.5-0.250.00.250.5
Hue shift -0.5 augmentationHue shift -0.25 augmentationOriginal image without augmentationHue shift 0.25 augmentationHue shift -0.5 augmentation

彩度の調整(hsv_s#

  • 範囲: 0.0 - 1.0
  • デフォルト: 0.7
  • 使用方法: 画像内の色の強度を変更します。hsv_sハイパーパラメータはシフトの大きさを定義し、最終的な調整は-hsv_sからhsv_sの間でランダムに選択されます。たとえば、hsv_s=0.7の場合、強度は-0.7から0.7の範囲内でランダムに選択されます。
  • 目的: 天候の変化やカメラ設定の違いに対応するモデルを構築するのに役立ちます。例えば、赤い交通標識は晴れた日には非常に鮮やかに見えるかもしれませんが、霧の中ではくすんで色あせて見えることがあります。
  • Ultralyticsの実装: RandomHSV
-1.0-0.50.00.51.0
Saturation -1.0 grayscale augmentationSaturation -0.5 augmentationOriginal image without augmentationSaturation 0.5 augmentationSaturation 1.0 vivid augmentation

明るさの調整(hsv_v#

  • 範囲: 0.0 - 1.0
  • デフォルト: 0.4
  • 使用方法: 画像の明るさを変更します。hsv_vハイパーパラメータはシフトの大きさを定義し、最終的な調整は-hsv_vからhsv_vの間でランダムに選択されます。たとえば、hsv_v=0.4の場合、強度は-0.4から0.4の範囲内でランダムに選択されます。
  • 目的: さまざまな照明条件下で機能する必要があるモデルを学習させるために不可欠です。例えば、赤いリンゴは直射日光の下では明るく見えるかもしれませんが、日陰ではかなり暗く見えることがあります。
  • Ultralyticsの実装: RandomHSV
-1.0-0.50.00.51.0
Brightness -1.0 dark augmentationBrightness -0.5 augmentationOriginal image without augmentationBrightness 0.5 augmentationBrightness 1.0 bright augmentation

幾何学的変換#

回転(degrees#

  • 範囲: 0.0180
  • デフォルト: 0
  • 使用方法: 指定された範囲内で画像をランダムに回転させます。degreesハイパーパラメータは回転角度を定義し、最終的な調整は-degreesからdegreesの間でランダムに選択されます。たとえば、degrees=10.0の場合、回転は-10.0から10.0の範囲内でランダムに選択されます。
  • 目的: オブジェクトがさまざまな向きで現れる可能性があるアプリケーションにおいて極めて重要です。例えば、空撮のドローン画像では、車両はどのような方向でも配置される可能性があるため、モデルは回転に関係なくオブジェクトを認識する必要があります。
  • Ultralyticsの実装: RandomPerspective
-180-900.090180
Rotation -180 degrees augmentationRotation -90 degrees augmentationOriginal image without augmentationRotation 90 degrees augmentationRotation 180 degrees augmentation

平行移動(translate#

  • 範囲: 0.0 - 1.0
  • デフォルト: 0.1
  • 使用方法: 画像サイズに対するランダムな割合だけ、画像を水平方向および垂直方向にシフトします。translateハイパーパラメータはシフトの大きさを定義し、最終的な調整は範囲-translateおよびtranslate内で2回(各軸に1回ずつ)ランダムに選択されます。たとえば、translate=0.5の場合、x軸上の平行移動は-0.5から0.5の範囲内でランダムに選択され、y軸上でも同じ範囲内で別の独立したランダム値が選択されます。
  • 目的: 部分的にしか見えないオブジェクトを検出する能力をモデルが学習し、オブジェクトの位置に対する堅牢性を向上させるのに役立ちます。例えば、車両の損傷評価アプリケーションでは、カメラマンの位置や距離に応じて車の部品がフレーム内に収まっていたり、一部だけが見えたりすることがありますが、平行移動オーギュメンテーションを行うことで、モデルはオブジェクトの全体像や位置に関係なく、それらの特徴を認識することを学習します。
  • Ultralyticsの実装: RandomPerspective
  • 注意: 説明を簡単にするため、以下で適用される平行移動は、x軸とy軸の両方で毎回同じになっています。値-1.0および1.0は、画像が完全にフレームの外に出てしまうため、表示されていません。
-0.5-0.250.00.250.5
Translation -0.5 shift augmentationTranslation -0.25 shift augmentationOriginal image without augmentationTranslation 0.25 shift augmentationTranslation 0.5 shift augmentation

スケール(scale#

  • 範囲: 0.0 - 1.0
  • デフォルト: 0.5
  • 使用方法: 指定された範囲内のランダムな係数で画像のサイズを変更します。scaleハイパーパラメータはスケーリング係数を定義し、最終的な調整は1-scaleから1+scaleの間でランダムに選択されます。たとえば、scale=0.5の場合、スケーリングは0.5から1.5の範囲内でランダムに選択されます。
  • 目的: さまざまな距離やサイズにあるオブジェクトをモデルが処理できるようにします。例えば、自動運転アプリケーションでは、車両がカメラから様々な距離にある可能性があるため、モデルはサイズに関係なくそれらを認識する必要があります。
  • Ultralyticsの実装: RandomPerspective
  • :
    • -1.0は画像が消えてしまうため表示されず、一方1.0は単に2倍のズーム結果になります。
    • 下の表に表示されている値は、最終的なスケール係数ではなく、ハイパーパラメータscaleを通じて適用されたものです。
    • scale1.0より大きい場合、スケーリング係数が1-scale1+scaleの間でランダムに選択されるため、画像が非常に小さくなったり反転したりすることがあります。たとえば、scale=3.0の場合、スケーリングは-2.0から4.0の範囲内でランダムに選択されます。負の値が選択された場合、画像は反転します。
-0.5-0.250.00.250.5
Scale 0.5x zoom out augmentationScale 0.75x zoom out augmentationOriginal image without augmentationScale 1.25x zoom in augmentationScale 1.5x zoom in augmentation

せん断(shear#

  • 範囲: -180+180
  • デフォルト: 0
  • 使用方法: x軸とy軸の両方に沿って画像を歪ませる幾何学的変換を導入し、平行線を維持しながら画像の一部を1方向にシフトさせます。shearハイパーパラメータはせん断角度を定義し、最終的な調整は-shearからshearの間でランダムに選択されます。たとえば、shear=10.0の場合、x軸上のせん断は-10から10の範囲内でランダムに選択され、y軸上でも同じ範囲内で別の独立したランダム値が選択されます。
  • 目的: わずかな傾きや斜めの視点によって生じる視覚的変化に対して、モデルが汎化できるように支援します。例えば、交通監視において、車や交通標識などのオブジェクトがカメラの非直交配置によって斜めに見えることがあります。せん断変形オーギュメンテーションを適用することで、モデルはこのような歪みがあってもオブジェクトを認識できることを学習します。
  • Ultralyticsの実装: RandomPerspective
  • :
    • shearの値を使用すると画像が急激に歪む可能性があるため、小さな値から始めて徐々に大きくすることをお勧めします。
    • パースペクティブ変換とは異なり、せん断変形は奥行きや消失点を導入せず、対辺を平行に保ったまま角度を変えることでオブジェクトの形状を歪ませます。
-10-50.0510
Shear -10 degrees augmentationShear -5 degrees augmentationOriginal image without augmentationShear 5 degrees augmentationShear 10 degrees augmentation

パースペクティブ(perspective#

  • 範囲: 0.0 - 0.001
  • デフォルト: 0
  • 使用方法: x軸とy軸の両方に沿って完全なパースペクティブ変換を適用し、異なる奥行きや角度から見たときのオブジェクトの見え方をシミュレートします。perspectiveハイパーパラメータはパースペクティブの大きさを定義し、最終的な調整は-perspectiveからperspectiveの間でランダムに選択されます。たとえば、perspective=0.001の場合、x軸上のパースペクティブは-0.001から0.001の範囲内でランダムに選択され、y軸上でも同じ範囲内で別の独立したランダム値が選択されます。
  • 目的: 遠近法の拡張は、特に視点の変化によって物体が短縮や歪みを生じるようなシナリオで、極端な視点の変化を扱うために非常に重要です。例えば、ドローンによる物体検出では、ドローンの傾きや高度に応じて、建物、道路、車両が伸びたり圧縮されたりして見えることがあります。遠近法の変換を適用することで、モデルはこうした遠近法による歪みがあっても物体を認識できるようになり、実環境での導入における堅牢性が向上します。
  • Ultralyticsの実装: RandomPerspective
-0.001-0.00050.00.00050.001
Perspective -0.001 transformationPerspective -0.0005 transformationOriginal image without augmentationPerspective 0.0005 transformationPerspective 0.001 transformation

上下反転(flipud#

  • 範囲: 0.0 - 1.0
  • デフォルト: 0
  • 使用方法: y軸に沿って画像を反転させることで垂直反転を行います。この変換は画像全体を上下反転させますが、オブジェクト間のすべての空間的関係は維持されます。flipudハイパーパラメータは変換を適用する確率を定義し、値flipud=1.0はすべての画像が反転されることを保証し、値flipud=0.0は変換を完全に無効にします。たとえば、flipud=0.5の場合、各画像が上下反転する確率は50%です。
  • 目的: 物体が逆さまに現れる可能性があるシナリオで役立ちます。例えば、ロボットビジョンシステムにおいて、コンベアベルトやロボットアーム上の物体は、さまざまな向きで拾い上げられたり配置されたりすることがあります。垂直方向の反転は、モデルがトップダウンの配置に関係なく物体を認識するのに役立ちます。
  • Ultralyticsの実装: RandomFlip
flipudオフflipudオン
Original image without augmentation垂直反転拡張が有効

左右反転(fliplr#

  • 範囲: 0.0 - 1.0
  • デフォルト: 0.5
  • 使用方法: x軸に沿って画像をミラーリングすることで水平反転を行います。この変換は空間的一貫性を保ちながら左右を入れ替えるため、モデルが鏡像の向きで現れるオブジェクトに対しても汎化できるようになります。fliplrハイパーパラメータは変換を適用する確率を定義し、値fliplr=1.0はすべての画像が反転されることを保証し、値fliplr=0.0は変換を完全に無効にします。たとえば、fliplr=0.5の場合、各画像が左右反転する確率は50%です。
  • 目的: 水平反転は、物体検出、姿勢推定、顔認識において、左右のバリエーションに対する堅牢性を向上させるために広く使用されています。例えば、自動運転では車両や歩行者が道路のどちら側に現れるかわからず、水平反転はモデルがどちらの向きでも等しくうまく認識するのに役立ちます。
  • Ultralyticsの実装: RandomFlip
fliplrオフfliplrオン
Original image without augmentation水平反転拡張が有効

BGRチャネルスワップ(bgr#

  • 範囲: 0.0 - 1.0
  • デフォルト: 0
  • 使用方法: 画像の色チャネルをRGBからBGRにスワップし、色の表現順序を変更します。bgrハイパーパラメータは変換を適用する確率を定義し、bgr=1.0はすべての画像でチャネルスワップが行われることを保証し、bgr=0.0はそれを無効にします。たとえば、bgr=0.5の場合、各画像がRGBからBGRに変換される確率は50%です。
  • 目的: 異なるカラーチャネル順序に対する堅牢性を向上させます。例えば、RGBとBGRの形式が一貫して使用されていない様々なカメラシステムや画像ライブラリで動作する必要があるモデルをトレーニングする場合や、入力カラー形式がトレーニングデータと異なる可能性のある環境にモデルをデプロイする場合に役立ちます。
  • Ultralyticsの実装: Format
bgrオフbgrオン
Original image without augmentationBGRチャンネルスワップ拡張

モザイク(mosaic#

  • 範囲: 0.0 - 1.0
  • デフォルト: 1
  • 使用方法: 4つのトレーニング画像を1つに結合します。mosaicハイパーパラメータは変換を適用する確率を定義し、mosaic=1.0はすべての画像が結合されることを保証し、mosaic=0.0は変換を無効にします。たとえば、mosaic=0.5の場合、各画像が他の3つの画像と結合される確率は50%です。
  • 目的: 小さな物体の検出とコンテキストの理解を向上させるために非常に効果的です。例えば、野生動物保護プロジェクトでは、動物が様々な距離やスケールで現れることがありますが、モザイク拡張は、限られたデータから多様なトレーニングサンプルを人工的に作成することで、モデルが異なるサイズ、部分的なオクルージョン、環境的な状況全体で同じ種を認識することを学ぶのに役立ちます。
  • Ultralyticsの実装: Mosaic
  • :
    • mosaicの拡張によってモデルのロバスト性が向上する一方で、トレーニングプロセスがより困難になる場合もあります。
    • mosaicの拡張は、トレーニング終了間際にclose_mosaicを、それを無効にする完了前のエポック数に設定することで無効にできます。たとえば、epochs200に設定され、close_mosaic20に設定されている場合、mosaicの拡張は180エポック後に無効になります。もしclose_mosaic0に設定されている場合、mosaicの拡張はトレーニングプロセス全体を通じて有効になります。
    • 生成されたモザイクの中心はランダムな値を使用して決定され、画像の内側または外側のいずれかになります。
    • mosaic拡張の現在の実装では、データセットからランダムに選択された4つの画像を結合します。データセットが小さい場合、同じモザイク内で同じ画像が複数回使用されることがあります。
mosaicオフmosaicオン
Original image without augmentationモザイク4画像拡張が有効

Mixup(mixup#

  • 範囲: 0.0 - 1.0
  • デフォルト: 0
  • 使用方法: 指定された確率で2つの画像とそのラベルをブレンドします。mixupハイパーパラメータは変換を適用する確率を定義し、mixup=1.0はすべての画像が混和されることを保証し、mixup=0.0は変換を無効にします。たとえば、mixup=0.5の場合、各画像が別の画像と混和される確率は50%です。
  • 目的: モデルの堅牢性を向上させ、過学習を低減します。例えば、小売製品認識システムにおいて、ミックスアップは異なる製品の画像をブレンドすることでモデルがより堅牢な特徴を学習するのを助け、混雑した棚で一部しか見えていなかったり他の製品に隠れていたりするようなアイテムでも識別できるように教えます。
  • Ultralyticsの実装: Mixup
  • :
    • mixupの比率はnp.random.beta(32.0, 32.0)のベータ分布からランダムに選択された値であり、各画像がわずかな変動を伴いながら約50%ずつ寄与することを意味します。
1番目の画像、mixupオフ2番目の画像、mixupオフmixupオン
MixUpブレンド用の1番目の画像MixUpブレンド用の2番目の画像MixUpブレンド拡張が有効

CutMix(cutmix#

  • 範囲: 0.0 - 1.0
  • デフォルト: 0
  • 使用方法: 指定された確率で1つの画像から矩形領域を切り抜き、別の画像に貼り付けます。cutmixハイパーパラメータは変換を適用する確率を定義し、cutmix=1.0はすべての画像がこの変換を受けることを保証し、cutmix=0.0はそれを完全に無効にします。たとえば、cutmix=0.5の場合、各画像で領域が別の画像からのパッチに置き換わる確率は50%です。
  • 目的: ローカルの特徴の整合性を維持しながら、現実的なオクルージョンのシナリオを作成することでモデルのパフォーマンスを向上させます。例えば、自動運転システムにおいて、カットミックスは他の物体によって部分的に隠されている場合でも車両や歩行者を認識するように学習させることで、重なり合う物体が存在する複雑な実環境での検出精度を向上させます。
  • Ultralyticsの実装: CutMix
  • :
    • カット領域のサイズと位置は、適用ごとにランダムに決定されます。
    • ピクセル値をグローバルにブレンドするmixupとは異なり、cutmixは切り抜かれた領域内の元のピクセル強度を維持し、ローカルな特徴を保持します。
    • 領域は、既存のバウンディングボックスと重ならない場合にのみターゲット画像に貼り付けられます。さらに、貼り付けられた領域内で元の面積の少なくとも0.1(10%)を保持しているバウンディングボックスのみが保持されます。
    • この最小バウンディングボックス面積の閾値は、現在の実装では変更できず、デフォルトで0.1に設定されています。
1番目の画像、cutmixオフ2番目の画像、cutmixオフcutmixオン
CutMix用の1番目の画像CutMix用の2番目の画像CutMix拡張が有効

セグメンテーション固有の拡張#

コピー&ペースト(copy_paste#

  • 範囲: 0.0 - 1.0
  • デフォルト: 0
  • 使用方法: セグメンテーションタスクのみで機能します。この拡張は、copy_paste_modeによって制御される指定された確率に基づいて、画像内または画像間でオブジェクトをコピーします。copy_pasteハイパーパラメータは変換を適用する確率を定義し、copy_paste=1.0はすべての画像がコピーされることを保証し、copy_paste=0.0は変換を無効にします。たとえば、copy_paste=0.5の場合、各画像で別の画像からオブジェクトがコピーされる確率は50%です。
  • 目的: インスタンスセグメンテーションタスクや珍しい物体クラスに特に役立ちます。例えば、特定の欠陥が頻繁に発生しない工業的な欠陥検出では、コピー&ペースト拡張を使用してそれらをある画像から別の画像にコピーすることで、欠陥の発生を人工的に増やし、追加の欠陥サンプルを必要とせずに、モデルがこうした表現不足のケースをよりよく学習できるようにします。
  • Ultralyticsの実装: CopyPaste
  • :
    • 下のgifに示されているように、copy_pasteの拡張を使用して、ある画像から別の画像へオブジェクトをコピーすることができます。
    • オブジェクトがコピー対象として選択されると、copy_paste_modeに関係なく、ターゲット画像にすでに存在するすべてのオブジェクトに対してそのIoAが計算されます。すべてのIoA値が0.3(30%)未満である場合にのみオブジェクトが貼り付けられ、いずれかのIoA値が0.3以上である場合は貼り付けられません。
    • IoAの閾値は現在の実装では変更できず、デフォルトで0.3に設定されています。
copy_pasteオフcopy_paste_mode=flipによるcopy_pasteの有効化copy_pasteプロセスの視覚化
拡張なしの元の画像コピペ拡張が有効コピペ拡張のアニメーションデモ

コピー&ペーストモード(copy_paste_mode#

  • オプション: 'flip''mixup'
  • デフォルト: 'flip'
  • 使用方法: コピー&ペースト拡張に使用される手法を決定します。'flip'に設定した場合、オブジェクトは同じ画像から取得され、'mixup'では異なる画像からオブジェクトをコピーできます。
  • 目的: コピーされた物体をターゲット画像に統合する方法に柔軟性を持たせます。
  • Ultralyticsの実装: CopyPaste
  • :
    • IoAの原則は両方のcopy_paste_modeオプションで同じですが、オブジェクトのコピー方法は異なります。
    • 画像のサイズによっては、物体がフレームの外側に部分的または完全にコピーされることがあります。
    • ポリゴンアノテーションの品質によっては、コピーされた物体が元の物体と比べて形状がわずかに異なる場合があります。
参照画像copy_pasteに選択された画像copy_paste_mode=mixupによるcopy_pasteの有効化
MixUpブレンド用の2番目の画像拡張なしの元の画像MixUpモード付きコピペ

分類固有の拡張#

自動拡張(auto_augment#

  • オプション: 'randaugment''autoaugment''augmix'None
  • デフォルト: 'randaugment'
  • 使用方法: 分類のための自動拡張ポリシーを適用します。'randaugment'オプションはRandAugmentを使用し、'autoaugment'はAutoAugmentを使用し、'augmix'はAugMixを使用します。Noneに設定すると、自動拡張が無効になります。
  • 目的: 分類タスクにおいてオーグメンテーション戦略を自動的に最適化します。それぞれの違いは以下の通りです。
    • AutoAugment: このモードは、ImageNet、CIFAR10、SVHNなどのデータセットから学習した事前定義済みの拡張ポリシーを適用します。ユーザーはこれらの既存のポリシーを選択できますが、Torchvision内で新しいポリシーをトレーニングすることはできません。特定のデータセットに最適な拡張戦略を発見するには、外部ライブラリまたはカスタム実装が必要になります。AutoAugmentの論文をご参照ください。
    • RandAugment: 均一な大きさを持つ変換のランダムな選択を適用します。このアプローチにより、大規模な検索フェーズの必要性が減り、モデルのロバスト性を高めながら計算効率が向上します。RandAugmentの論文をご参照ください。
    • AugMix: AugMixは、単純な変換のランダムな組み合わせを通じて多様な画像バリエーションを作成することにより、モデルのロバスト性を高めるデータ拡張手法です。AugMixの論文をご参照ください。
  • Ultralyticsの実装: classify_augmentations()
  • :
    • 本質的に、これら3つの手法の主な違いは、オーグメンテーションポリシーの定義方法と適用方法にあります。
    • 3つの方法を詳細に比較しているこの記事をご参照ください。

ランダム消去(erasing#

  • 範囲: 0.0 - 0.9
  • デフォルト: 0.4
  • 使用方法: 分類トレーニング中に画像の一部をランダムに消去します。erasingハイパーパラメータは変換を適用する確率を定義し、erasing=0.9はほぼすべての画像が消去されることを保証し、erasing=0.0は変換を無効にします。たとえば、erasing=0.5の場合、各画像の一部が消去される確率は50%です。
  • 目的: モデルが頑健な特徴を学習するのを助け、特定の画像領域への過度な依存を防ぎます。例えば、顔認識システムでは、ランダム消去はサングラス、マスク、または顔の特徴を部分的に覆う可能性のある他の物体のような部分的な遮蔽に対して、モデルがより頑健になるのを助けます。これにより、特徴の一部が隠されても特定の領域のみに頼るのではなく、複数の顔の特徴を使用して個体を識別するようモデルを強制することで、現実世界でのパフォーマンスが向上します。
  • Ultralyticsの実装: classify_augmentations()
  • :
    • erasingの拡張には、現在の実装では変更できないscaleratio、およびvalueのハイパーパラメータが含まれています。PyTorchのドキュメントに記載されているように、それらのデフォルト値はそれぞれ(0.02, 0.33)(0.3, 3.3)、および0です。
    • erasingハイパーパラメータの上限は、すべての画像に変換が適用されるのを防ぐために0.9に設定されています。
erasingオフerasingオン(例1)erasingオン(例2)erasingオン(例3)
Original image without augmentationランダム消去の例1ランダム消去の例2ランダム消去の例3

高度なオーグメンテーション機能#

カスタムAlbumentations変換(augmentations#

  • タイプ: Albumentations変換のlist
  • デフォルト: None
  • 使用方法: Python APIを使用して、データ拡張用のカスタムAlbumentations変換を提供できます。このパラメータは、デフォルトのAlbumentations変換の代わりにトレーニング中に適用されるAlbumentations変換オブジェクトのリストを受け入れます。
  • 目的: 広範な Albumentations 変換ライブラリを活用することで、データオーグメンテーション戦略を詳細に制御できます。これは、高度な色調整、ノイズ注入、ドメイン固有の変換など、組み込みの YOLO オプションを超える特殊なオーグメンテーションが必要な場合に特に役立ちます。
  • Ultralyticsの実装: Albumentations
カスタム Albumentations の例
import albumentations as A

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Define custom Albumentations transforms
custom_transforms = [
    A.Blur(blur_limit=7, p=0.5),
    A.GaussNoise(var_limit=(10.0, 50.0), p=0.3),
    A.CLAHE(clip_limit=4.0, p=0.5),
    A.RandomBrightnessContrast(brightness_limit=0.2, contrast_limit=0.2, p=0.5),
    A.HueSaturationValue(hue_shift_limit=20, sat_shift_limit=30, val_shift_limit=20, p=0.5),
]

# Train with custom Albumentations transforms
model.train(
    data="coco8.yaml",
    epochs=100,
    augmentations=custom_transforms,  # Pass custom transforms
    imgsz=640,
)

重要なポイント:

  • Python API 専用: カスタム Albumentations 変換は、現在 Python API を通じてのみサポートされています。CLI や YAML 設定ファイルからは指定できません。
  • デフォルト変換の置き換え: augmentationsパラメータを介してカスタム変換を提供すると、それらはデフォルトのAlbumentations変換を完全に置き換えます。デフォルトのYOLO拡張(mosaichsv_hhsv_sdegreesなど)はアクティブなままであり、独立して適用されます
  • BBox の互換性: 空間変換(画像の形状を変更する変換)を使用する場合は注意してください。Ultralytics は BBox の調整を自動的に処理しますが、複雑な変換の中には追加の設定が必要なものもあります。
  • 豊富なライブラリ: Albumentationsには70種類以上の異なる変換が用意されています。利用可能なすべてのオプションを確認するには、Albumentationsドキュメントを探索してください。
  • パフォーマンスへの配慮: オーグメンテーションを追加しすぎたり、計算コストの高い変換を使用すると、トレーニングが遅くなる可能性があります。少ないセットから始めて、トレーニング速度を監視してください。

一般的なユースケース:

  • 医療画像: X線やMRI画像のオーグメンテーションに、弾性変形やグリッド歪みなどの特殊な変換を適用します。
  • 航空/衛星画像: 俯瞰視点に最適化された変換を使用します。
  • 低照度条件: ノイズ調整や明るさ調整を適用して、困難な照明条件をシミュレートします。
  • 産業検査: 品質管理用途として、欠陥のようなパターンやテクスチャのバリエーションを追加します。

互換性に関する注意:

  • Albumentations バージョン 1.0.3 以上が必要です。
  • すべての YOLO 検出(detection)およびセグメンテーション(segmentation)タスクと互換性があります。
  • 分類タスクには適用されません(分類は異なるオーグメンテーションパイプラインを使用します)。

Albumentationsおよび利用可能な変換の詳細については、公式Albumentationsドキュメントをご覧ください。

よくある質問 (FAQ)#

オーグメンテーションの種類が多すぎて何を選べばよいかわかりません。どのように判断すればよいでしょうか?#

適切なオーグメンテーションの選択は、特定のユースケースとデータセットによって異なります。判断に役立つ一般的なガイドラインをいくつか示します。

  • ほとんどの場合、色と明るさのわずかな変動は有益です。hsv_hhsv_s、およびhsv_vのデフォルト値は、確実な出発点となります。
  • カメラの視点が一定であり、モデルのデプロイ後も変更されない場合は、rotationtranslationscaleshear、またはperspectiveなどの幾何学的変換はおそらくスキップできます。ただし、カメラの角度が変動する可能性があり、モデルのロバスト性をさらに高める必要がある場合は、これらの拡張を維持することをお勧めします。
  • 部分的に隠れたオブジェクトや画像あたりの複数のオブジェクトが存在することが許容され、ラベル値が変化しない場合にのみ、mosaic拡張を使用してください。あるいは、mosaicをアクティブにしたままclose_mosaicの値を増やして、トレーニングプロセスの早い段階でそれを無効にすることもできます。

要するに、シンプルに保つことが重要です。まずは少数のオーグメンテーションから始め、必要に応じて徐々に追加してください。目標はトレーニングプロセスを過度に複雑にすることではなく、モデルの汎化性能と頑健性を向上させることです。また、適用するオーグメンテーションが、モデルがプロダクション環境で遭遇するであろうものと同じデータ分布を反映していることを確認してください。

トレーニングを開始すると、albumentations: Blur[...]の参照が表示されます。これは、Ultralytics YOLOがぼかしなどの追加の拡張を実行することを意味しますか?#

albumentationsパッケージがインストールされている場合、Ultralyticsはそれを使用して一連の追加の画像拡張を自動的に適用します。これらの拡張は内部で処理され、追加の設定は必要ありません。

適用される変換の完全なリストは、技術ドキュメントおよびAlbumentations統合ガイドに記載されています。確率p0より大きい拡張のみがアクティブになることに注意してください。これらは、ぼかしやグレースケール効果などの現実世界の視覚的アーティファクトを模倣するために、意図的に低い頻度で適用されます。

Python APIを使用して独自のカスタムAlbumentations変換を提供することもできます。詳細については、高度な拡張機能セクションをご覧ください。

トレーニングを開始した際、albumentations に関する参照が表示されません。なぜでしょうか?#

albumentations パッケージがインストールされているか確認してください。インストールされていない場合は、pip install albumentations を実行してインストールできます。インストールされると、パッケージは Ultralytics によって自動的に検出され使用されます。

オーグメンテーションをカスタマイズするにはどうすればよいですか?#

カスタムデータセットクラスとトレーナーを作成することで、augmentationをカスタマイズできます。たとえば、デフォルトの Ultralytics 分類 augmentationを PyTorch の torchvision.transforms.Resize やその他の transform に置き換えることができます。実装の詳細については、分類ドキュメントの custom training example を参照してください。

コメント