Ultralytics YOLO27:

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 パッケージがインストールされている場合、ぼかし、メディアンブラー、グレースケール、CLAHEからなる小規模な Albumentations セットも、それぞれ p=0.01 で適用します。また、default.yaml 内の引数でこれを無効にすることはできません。パッケージをアンインストールして削除するか、独自のリストを 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_hhsv_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_shsv_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_vhsv_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.0から180
  • デフォルト: 0
  • 使用方法: 指定した範囲内で画像をランダムに回転させます。degreesハイパーパラメーターが回転角度を定義し、最終的な調整値は-degreesdegreesの間からランダムに選択されます。たとえば、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ハイパーパラメーターがシフト量を定義し、最終的な調整値は-translatetranslateの範囲内で、各軸について1回ずつ、ランダムに選択されます。たとえば、translate=0.5の場合、x軸では-0.5から0.5の範囲内で平行移動量がランダムに選択され、y軸では同じ範囲内から別の独立したランダム値が選択されます。
  • 目的: 部分的に見えている物体の検出をモデルが学習できるようにし、物体の位置に対する堅牢性を高めます。たとえば、車両の損傷評価アプリケーションでは、撮影者の位置や距離に応じて車の部品がフレーム内に完全または部分的に現れることがあります。平行移動のデータ拡張により、完全性や位置に関係なく、こうした特徴を認識するようモデルに学習させられます。
  • Ultralyticsの実装: RandomPerspective
  • : 簡略化のため、以下で適用する平行移動は、x軸とy軸の両方で毎回同じです。-1.01.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#

  • 範囲: floatの場合は0.0 - 1.0、または明示的な(min, max)タプル
  • デフォルト: 0.5
  • 使用方法: 指定した範囲内のランダムな係数で画像のサイズを変更します。floatの場合、scaleハイパーパラメーターがスケーリングゲインを定義し、最終的な係数は1-scale1+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ハイパーパラメーターに渡す値ではなく、実際に適用されたスケール差分です。
    • float形式は0.0 - 1.0の範囲で検証され、範囲外の値を指定するとValueErrorが発生します。2倍ズームを超える係数をサンプリングするには、代わりに(min, max)のタプル形式を渡してください。
    • タプル形式は幾何学的タスクにのみ適用されます。Classificationトレーニングでは、float(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軸の両方に沿って画像をゆがませる幾何学的変換を適用します。これにより、平行線を維持しながら画像の一部を一方向にシフトします。shearハイパーパラメーターがせん断角度を定義し、最終的な調整値は-shearshearの間からランダムに選択されます。たとえば、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ハイパーパラメーターがパースペクティブ量を定義し、最終的な調整値は-perspectiveperspectiveの間からランダムに選択されます。たとえば、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データ拡張によってモデルの堅牢性が高まる一方で、トレーニングプロセスがより難しくなることもあります。
    • トレーニング終了前に何エポックで無効にするかをclose_mosaicに設定すると、トレーニング終盤にmosaicデータ拡張を無効にできます。たとえば、epochs200に設定し、close_mosaic20に設定すると、mosaicデータ拡張は180エポック後に無効になります。close_mosaic0に設定すると、mosaicデータ拡張はトレーニング全体で有効になります。
    • モザイクを終了すると、同じエポックでcopy_pastemixupcutmixも無効になります。この4つは同時にオフになるため、最終エポックではこれらを使用せずにトレーニングしますが、その他のデータ拡張(幾何学的変換、HSV、反転、Albumentations)は引き続き実行されます。なお、デフォルトのflipモードにおけるcopy_pasteは、複数の画像を結合するのではなく、1枚の画像内で動作します。
    • 生成されるモザイクの中心はランダム値を使用して決定され、画像内または画像外のいずれかになります。
    • 現在のmosaicデータ拡張の実装では、現在の画像と、最近読み込まれた画像のバッファーから取得した3枚の画像、またはcache='ram'の場合はデータセット内の任意の場所から取得した3枚の画像を結合します。いずれの場合も復元抽出でサンプリングされるため、1つのモザイク内に同じ画像が複数回現れることがあります。
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%です。
  • 目的: モデルの堅牢性を高め、過学習を抑制します。たとえば、小売商品の認識システムでは、Mixupによって異なる商品の画像をブレンドし、より堅牢な特徴を学習できます。これにより、混雑した店舗の棚で商品が部分的に見えていたり、他の商品に隠れていたりしても識別できるようになります。
  • 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%です。
  • 目的: 局所的な特徴の整合性を維持しながら、現実的な遮蔽シナリオを作成してモデルのパフォーマンスを高めます。たとえば、自動運転システムでは、CutMixによって他の物体に部分的に遮蔽されていても車両や歩行者を認識するようモデルに学習させられ、物体が重なり合う複雑な実世界環境での検出精度が向上します。
  • Ultralyticsの実装: CutMix
  • :
    • 切り出す領域のサイズと位置は、適用するたびにランダムに決定されます。
    • ピクセル値を画像全体でブレンドするMixupとは異なり、cutmixは切り出した領域内の元のピクセル強度を維持し、局所的な特徴を保持します。
    • 領域は、既存のBBoxと重ならない場合にのみ対象画像へ貼り付けられます。また、貼り付けた領域内に元の面積を十分に保持しているBBoxのみが維持されます。
    • この最小BBox面積のしきい値は、現在の実装では変更できません。検出ラベルでは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
  • 使用方法: ポリゴンラベルが必要なため、セグメントタスクとOBBタスクに適用されます。このデータ拡張は、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_pastecopy_paste_mode=flipで有効化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_pastecopy_paste_mode=mixupで有効化
Second image for MixUp blendingOriginal image without augmentationCopy-paste with MixUp mode

分類固有の拡張#

Auto Augment(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つの手法を詳しく比較したこの記事を参照してください。

Random Erasing(erasing#

  • 範囲: 0.0 - 1.0
  • デフォルト: 0.4
  • 用途: 分類の学習中に画像の一部をランダムに消去します。erasingハイパーパラメーターは変換を適用する確率を定義します。erasing=1.0ではすべての画像で領域が消去され、erasing=0.0では変換が無効になります。たとえば、erasing=0.5では、各画像に対して50%の確率で一部が消去されます。
  • 目的: モデルが堅牢な特徴を学習できるようにし、特定の画像領域への過度な依存を防ぎます。たとえば顔認識システムでは、Random Erasingによって、サングラス、フェイスマスク、その他の物体による顔の特徴の部分的な遮蔽に対するモデルの堅牢性が向上します。これにより、隠れている可能性のある特徴だけに依存せず、複数の顔の特徴を使用して個人を識別するようモデルに促すため、実環境での性能が向上します。
  • Ultralyticsの実装: classify_augmentations()
  • :
    • erasingの拡張には、現在の実装では変更できないscaleratiovalueハイパーパラメーターがあります。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など)は有効なままで、それぞれ独立して適用されます。
    • 画像のジオメトリを変更する空間変換(A.OneOf または A.Compose にネストされたものを含む)は、バウンディングボックス、ポリゴン、キーポイント、深度マスク、セマンティックマスクを画像と一緒に移動させます。A.RandomGridShuffle はポリゴンやキーポイントのトポロジを維持できず、セグメンテーション、ポーズ、および OBB サンプルに対してエラーを発生させます。
    • Albumentationsには70種類以上の変換があり、Albumentationsのドキュメントにすべて記載されています。多くの変換や計算コストの高い変換を追加すると学習が遅くなるため、少数のセットから始めてエポック時間を確認してください。
    • detectsegmentsemanticdepthposeobbのタスクに適用されます。分類は別の拡張パイプラインを使用するため対象外です。

以下の例には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_shsv_vのデフォルト値は、適切な出発点です。
    • カメラの視点が一貫しており、モデルのデプロイ後に変わらない場合は、rotationtranslationscaleshearperspectiveなどの幾何変換を省略できる可能性があります。ただし、カメラの角度が変わる可能性があり、モデルの堅牢性を高める必要がある場合は、これらの拡張を維持することをお勧めします。
    • 部分的に遮蔽されたオブジェクトや、1画像内に複数のオブジェクトが存在しても問題なく、ラベル値が変わらない場合にのみ、mosaic拡張を使用してください。別の方法として、mosaicを有効なままにして、close_mosaicの値を大きくし、学習プロセスの早い段階で無効にすることもできます。

    要するに、シンプルにしてください。少数の拡張から始め、必要に応じて徐々に追加します。目的は学習プロセスを複雑にしすぎることではなく、モデルの汎化性能と堅牢性を向上させることです。また、適用する拡張が、モデルが本番環境で遭遇するデータ分布と同じ分布を反映していることを確認してください。

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

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

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

  • albumentationsパッケージがインストールされているか確認してください。インストールされていない場合は、次のコマンドでインストールしてください。

    pip install albumentations

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

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

コメント