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="coco8.yaml", epochs=100, hsv_h=0.03, hsv_s=0.6, hsv_v=0.5)

# Training with every configurable augmentation disabled (disabled values omitted for clarity)
model.train(
    data="coco8.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="coco8.yaml", epochs=100, augmentations=custom_transforms)
拡張引数をゼロにしても Albumentations は無効になりません

このページに記載されている変換は、トレーニング引数を通じて制御するものです。Ultralytics は、albumentations パッケージがインストールされており、default.yaml のどの引数でもオフになっていない場合、小さな Albumentations セット(ぼかし、メディアンブラー、グレースケール、CLAHE、それぞれ p=0.01)も適用します。削除するにはパッケージをアンインストールするか、augmentations に独自のリストを渡して置き換えてください。

設定ファイルの使用#

データ拡張を含むすべてのトレーニングパラメータを、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、または明示的な (min, max) タプル
  • デフォルト: 0.5
  • 使用法: 指定された範囲内のランダムな係数で画像をリサイズします。浮動小数点数として、scale ハイパーパラメータはスケーリングゲインを定義し、最終的な係数は 1-scale から 1+scale の間でランダムに選択されます。たとえば、scale=0.5 の場合、スケーリングは 0.5 から 1.5 の間でランダムに選択されます。タプルとして、scale はその範囲を直接設定するため、scale=(0.5, 2.0)0.52.0 の間で係数をサンプリングします。
  • 目的: さまざまな距離やサイズにあるオブジェクトをモデルが処理できるようにします。例えば、自動運転アプリケーションでは、車両がカメラから様々な距離にある可能性があるため、モデルはサイズに関係なくそれらを認識する必要があります。
  • Ultralyticsの実装: RandomPerspective
  • :
    • -1.0は画像が消えてしまうため表示されず、一方1.0は単に2倍のズーム結果になります。
    • 下の表に表示されている値は、実際に適用されたスケールデルタであり、scale ハイパーパラメータに渡す値ではありません。
    • 浮動小数点数形式は 0.0 - 1.0 の範囲で検証され、この範囲外の値は ValueError を発生させます。2倍ズームを超える係数をサンプリングするには、代わりに (min, max) タプル形式を渡してください。
    • タプル形式は幾何学的タスクにのみ適用されます。分類トレーニングは、浮動小数点数(1.0 - scale から 1.0)から独自のクロップ範囲を導出するため、そこでタプルを渡すと TypeError が発生します。
-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 augmentationVertical flip augmentation enabled

左右反転(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 augmentationHorizontal flip augmentation enabled

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 channel swap augmentation

モザイク(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の拡張はトレーニングプロセス全体を通じて有効になります。
    • モザイクを閉じると、同じエポックで copy_pastemixup、および cutmix も無効になります。これら4つは一緒にオフになるため、最終エポックはそれらなしでトレーニングされ、他のすべての拡張機能(幾何学的変換、HSV、反転、Albumentations)は実行され続けたままになります。copy_paste はデフォルトの flip モードでは複数の画像を組み合わせるのではなく、単一の画像内で機能することに注意してください。
    • 生成されたモザイクの中心はランダムな値を使用して決定され、画像の内側または外側のいずれかになります。
    • mosaic 拡張の現在の実装は、最近読み込まれた画像のバッファから、または cache='ram' の場合はデータセット内の任意の場所から取得された他の3つの画像と現在の画像を結合します。どちらの方法でも復元抽出でサンプリングされるため、単一のモザイク内で同じ画像が複数回表示されることがあります。
mosaicオフmosaicオン
Original image without augmentationMosaic 4-image augmentation enabled

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オン
First image for MixUp blendingSecond image for MixUp blendingMixUp blending augmentation enabled

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.01(1%)です。
1番目の画像、cutmixオフ2番目の画像、cutmixオフcutmixオン
First image for CutMixSecond image for CutMixCutMix augmentation enabled

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

コピー&ペースト(copy_paste#

  • 範囲: 0.0 - 1.0
  • デフォルト: 0
  • 使い方: セグメンテーションタスクでのみ機能します。このアグメンテーションは、copy_paste_modeによって制御され、画像内または画像間でオブジェクトをコピーします。flipモードでは、copy_pasteはコピーされる対象オブジェクトの割合です。たとえば、6つの対象オブジェクトがある画像では、copy_paste=0.5の場合に3つのコピーが追加されます。mixupモードでは、同じ値がコピーペーストが実行される確率も制御します。copy_paste=0.0はこの変換を無効にします。
  • 目的: インスタンスセグメンテーションタスクや珍しい物体クラスに特に役立ちます。例えば、特定の欠陥が頻繁に発生しない工業的な欠陥検出では、コピー&ペースト拡張を使用してそれらをある画像から別の画像にコピーすることで、欠陥の発生を人工的に増やし、追加の欠陥サンプルを必要とせずに、モデルがこうした表現不足のケースをよりよく学習できるようにします。
  • Ultralyticsの実装: CopyPaste
  • :
    • 以下の動画に示すように、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プロセスの視覚化
Original image without augmentationCopy-paste augmentation enabled

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

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

分類固有の拡張#

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

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

カスタムAlbumentations変換(augmentations#

  • タイプ: Albumentations変換のlist
  • デフォルト: None
  • 使用方法: Python APIを使用して、データ拡張用のカスタムAlbumentations変換を提供できます。このパラメータは、デフォルトのAlbumentations変換の代わりにトレーニング中に適用されるAlbumentations変換オブジェクトのリストを受け入れます。
  • 目的: Albumentations の豊富な変換ライブラリを活用して、データ拡張戦略をきめ細かく制御できるようにします。これは、組み込みの YOLO オプションの範囲を超える特殊な拡張(医療画像用の弾性変形やグリッド歪み、上空の航空写真や衛星の視点に合わせて調整された変換、低照度条件をシミュレートするノイズや明るさのシフト、または産業検査用の欠陥のようなテクスチャのバリエーションなど)が必要な場合に特に役立ちます。
  • Ultralyticsの実装: Albumentations
  • :
    • 変換オブジェクトの構築には Python API が必要です。Ultralytics はチェックポイントの保存時に A.to_dict() でこれらをシリアル化するため、既にシリアル化されたリストは YAML 設定ファイルまたは CLI を介してラウンドトリップし、これにより resume で復元できるようになります。
    • カスタム変換は、デフォルトの Albumentations セットを完全に置き換えます。このページの他の場所で設定されたすべての拡張(mosaichsv_hdegrees、およびその他)はアクティブなままであり、独立して適用されます。
    • 画像のジオメトリを変更する空間変換には注意してください。Ultralytics はバウンディングボックスを自動的に調整しますが、複雑な変換によっては追加の設定が必要になる場合があります。
    • Albumentations には 70 以上の変換が用意されており、Albumentations ドキュメントにすべてリストされています。多くの変換や計算コストの高い変換を追加するとトレーニングが遅くなるため、少数のセットから始めてエポック時間を確認してください。
    • detectsegmentsemanticdepthpose、および obb の各タスクに適用されます。分類は別の拡張パイプラインを使用するため除外されます。

以下の例には Albumentations 1.4.22 以降、および Python 3.9 以降が必要です。

カスタム 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(std_range=(0.0124, 0.0277), 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,
)

よくある質問 (FAQ)#

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

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

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

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

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

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

  • albumentations パッケージがインストールされているかどうかを確認してください。インストールされていない場合は、インストールします:

    pip install albumentations

    インストールされると、パッケージが自動的に検出され、Ultralytics によって使用されるはずです。

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

コメント