コンテンツにスキップ

Ultralytics YOLOを使用したデータ拡張

画像拡張の例

はじめに

データ拡張は、既存の画像にさまざまな変換を適用してトレーニングデータセットを人工的に拡張する、コンピュータビジョンにおける重要なテクニックです。Ultralytics YOLOのような深層学習モデルをトレーニングする場合、データ拡張はモデルの堅牢性を向上させ、過学習を軽減し、現実世界のシナリオへの一般化を強化するのに役立ちます。



見る: Ultralytics YOLO モデルをより良く一般化するために、Mosaic、MixUp、その他のデータ補強をどのように使うか 🚀。

データ拡張が重要な理由

データ拡張は、コンピュータビジョンモデルのトレーニングにおいて、複数の重要な目的を果たします。

  • 拡張されたデータセット: 既存の画像のバリエーションを作成することで、新しいデータを収集せずに、トレーニングデータセットのサイズを効果的に増やすことができます。
  • 汎化性能の向上: モデルはさまざまな条件下でオブジェクトを認識することを学習し、実際のアプリケーションでより堅牢になります。
  • 過学習の抑制:学習データに多様性を取り入れることで、モデルが特定の画像特性を記憶する可能性を低減します。
  • パフォーマンスの向上: 適切な拡張でトレーニングされたモデルは、通常、検証セットとテストセットでより良い精度を達成します。

Ultralytics YOLOの実装は、包括的な拡張手法スイートを提供し、それぞれが特定の目的を果たし、さまざまな方法でモデルのパフォーマンスに貢献します。このガイドでは、各拡張パラメータについて詳しく説明し、プロジェクトでいつ、どのように効果的に使用するかを理解するのに役立ちます。

構成例

各パラメータは、python API、コマンドラインインターフェース(CLI)、または設定ファイルを使用してカスタマイズできます。以下は、各方法でデータ拡張を設定する方法の例です。

構成例

import albumentations as A

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.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)
# Training with custom augmentation parameters
yolo detect train data=coco8.yaml model=yolo11n.pt epochs=100 hsv_h=0.03 hsv_s=0.6 hsv_v=0.5

設定ファイルを使用しています

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

# train_custom.yaml
# 'mode' is required only for CLI usage
mode: train
data: coco8.yaml
model: yolo11n.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 YOLO11n model
model = YOLO("yolo11n.pt")

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

カラースペースの拡張

色相調整(hsv_h)

  • 範囲: 0.0 - 1.0
  • デフォルト: 0.015
  • 使用法: 色の関係を維持しながら、画像の色をシフトさせます。 hsv_h ハイパーパラメータはシフトの大きさ(shift magnitude)を定義し、最終的な調整はランダムに選択されます。 -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
色相調整(hsv_h_-0.5)色相調整(hsv_h_-0.25)augmentation_identity色相調整(hsv_h_0.25)色相調整(hsv_h_-0.5)

彩度調整(hsv_s)

  • 範囲: 0.0 - 1.0
  • デフォルト: 0.7
  • 使用法: 画像内の色の強度を変更します。 hsv_s ハイパーパラメータはシフトの大きさ(shift magnitude)を定義し、最終的な調整はランダムに選択されます。 -hsv_s および hsv_s。たとえば、 hsv_s=0.7強度はランダムに選択されます-0.7 宛先 0.7.
  • 目的: モデルがさまざまな気象条件とカメラ設定を処理するのに役立ちます。たとえば、赤い交通標識は晴れた日には非常に鮮やかに見えるかもしれませんが、霧の多い状態では鈍く色あせて見えます。
  • Ultralyticsの実装: RandomHSV
-1.0-0.50.00.51.0
彩度調整(hsv_s_-1)彩度調整(hsv_s_-0.5)augmentation_identity彩度調整(hsv_s_0.5)彩度調整(hsv_s_1)

明るさ調整(hsv_v)

  • 範囲: 0.0 - 1.0
  • デフォルト: 0.4
  • 使用法は、画像の明るさを変更します。 hsv_v ハイパーパラメータはシフトの大きさ(shift magnitude)を定義し、最終的な調整はランダムに選択されます。 -hsv_v および hsv_v。たとえば、 hsv_v=0.4強度はランダムに選択されます-0.4 宛先 0.4.
  • 目的: さまざまな照明条件で実行する必要があるモデルをトレーニングするために不可欠です。たとえば、赤いリンゴは日光の下では明るく見えるかもしれませんが、日陰でははるかに暗く見えます。
  • Ultralyticsの実装: RandomHSV
-1.0-0.50.00.51.0
明度調整(hsv_v_-1)明度調整(hsv_v_-0.5)augmentation_identity明度調整(hsv_v_0.5)明度調整(hsv_v_1)

幾何変換

回転(degrees)

  • 範囲: 0.0 宛先 180
  • デフォルト: 0.0
  • 使用法: 指定された範囲内で画像をランダムに回転させます。 degrees ハイパーパラメータは回転角度を定義し、最終的な調整はランダムに選択されます。 -degrees および degrees。たとえば、 degrees=10.0、回転はランダムに選択されます。-10.0 宛先 10.0.
  • 目的: オブジェクトがさまざまな方向に出現する可能性のあるアプリケーションにとって重要です。たとえば、航空ドローン imagery では、車両はどの方向にも向いている可能性があり、モデルは回転に関係なくオブジェクトを認識する必要があります。
  • Ultralyticsの実装: RandomPerspective
-180-900.090180
degrees_-180_augmentationdegrees_-90_augmentationaugmentation_identitydegrees_90_augmentationdegrees_180_augmentation

Translation(translate)

  • 範囲: 0.0 - 1.0
  • デフォルト: 0.1
  • 使用法: 画像サイズに対するランダムな割合で画像を水平方向および垂直方向にシフトさせます。 translate ハイパーパラメータはシフトの大きさ(shift magnitude)を定義し、最終的な調整は範囲内で2回(各軸に1回)ランダムに選択されます。 -translate および translate。たとえば、 translate=0.5、平行移動はランダムに選択されます。-0.5 宛先 0.5 x軸上で、ある独立したランダムな値が選択され、y軸上でも同じ範囲内で別の独立したランダムな値が選択されます。
  • 目的: モデルが部分的に表示されているオブジェクトを検出し、オブジェクトの位置に対する堅牢性を向上させるのに役立ちます。たとえば、車両の損傷評価アプリケーションでは、写真家の位置と距離に応じて、車の部品がフレーム内に完全または部分的に表示される場合があります。並進拡張は、モデルにそれらの完全性または位置に関係なく、これらの特徴を認識するように教えます。
  • Ultralyticsの実装: RandomPerspective
  • : 簡略化のため、以下に適用される変換は、毎回両方に対して同じです。 x および y 軸。値 -1.0 および 1.0は、画像を完全にフレームから外してしまうため、表示されません。
-0.5-0.250.00.250.5
translate_-0.5_augmentationtranslate_-0.25_augmentationaugmentation_identitytranslate_0.25_augmentationtranslate_0.5_augmentation

スケール(scale)

  • 範囲: ≥0.0
  • デフォルト: 0.5
  • 使用法: 指定された範囲内でランダムな係数で画像のサイズを変更します。 scale ハイパーパラメータはスケーリングファクターを定義し、最終的な調整はランダムに選択されます。 1-scale および 1+scale。たとえば、 scale=0.5、スケーリングはランダムに選択されます。0.5 宛先 1.5.
  • 目的: モデルがさまざまな距離とサイズでオブジェクトを処理できるようにします。たとえば、自動運転アプリケーションでは、車両はカメラからさまざまな距離で表示される可能性があり、モデルはサイズに関係なくそれらを認識する必要があります。
  • Ultralyticsの実装: RandomPerspective
  • :
    • -1.0 は画像が消えてしまうため表示されませんが、 1.0 単純に2倍にズームするだけです。
    • 以下の表に表示されている値は、ハイパーパラメータを通して適用される値です。 scale最終的なスケールファクターではありません。
    • もし scale より大きい 1.0スケーリングファクターはランダムに選択されるため、画像は非常に小さくしたり、反転させたりすることができます。 1-scale および 1+scale。たとえば、 scale=3.0、スケーリングはランダムに選択されます。-2.0 宛先 4.0。負の値を選択すると、画像が反転します。
-0.5-0.250.00.250.5
scale_-0.5_augmentationscale_-0.25_augmentationaugmentation_identityscale_0.25_augmentationscale_0.5_augmentation

シア(shear)

  • 範囲: -180 宛先 +180
  • デフォルト: 0.0
  • 使用法: 画像をx軸とy軸の両方に沿って歪ませる幾何学的変換を導入し、平行線を維持しながら画像の一部を一方向に効果的にシフトさせます。 shear ハイパーパラメータはせん断角度を定義し、最終的な調整はランダムに選択されます。 -shear および shear。たとえば、 shear=10.0、シアー(せん断)はランダムに選択されます。-10 宛先 10 x軸上で、ある独立したランダムな値が選択され、y軸上でも同じ範囲内で別の独立したランダムな値が選択されます。
  • 目的: わずかな傾きまたは斜めの視点によって引き起こされる視野角の変化に対して、モデルが一般化するのに役立ちます。たとえば、交通監視では、車や道路標識などのオブジェクトは、垂直でないカメラの配置により傾いて見える場合があります。せん断拡張を適用すると、モデルはこのような歪んだ歪みにもかかわらずオブジェクトを認識することを学習します。
  • Ultralyticsの実装: RandomPerspective
  • :
    • shear 値は画像を急速に歪める可能性があるため、最初は小さな値から始めて徐々に大きくすることをお勧めします。
    • パースペクティブ変換とは異なり、せん断は奥行きや消失点を導入しませんが、対向する辺を平行に保ちながら角度を変更してオブジェクトの形状を歪めます。
-10-50.0510
shear_-10_augmentationshear_-5_augmentationaugmentation_identityshear_5_augmentationshear_10_augmentation

パースペクティブ(perspective)

  • 範囲: 0.0 - 0.001
  • デフォルト: 0.0
  • 使用法は、x軸とy軸の両方に沿って完全な遠近法変換を適用し、異なる深度または角度から見たときのオブジェクトの見え方をシミュレートします。 perspective ハイパーパラメータは遠近法の大きさ(perspective magnitude)を定義し、最終的な調整はランダムに選択されます。 -perspective および perspective。たとえば、 perspective=0.001パースペクティブはランダムに選択されます-0.001 宛先 0.001 x軸上で、ある独立したランダムな値が選択され、y軸上でも同じ範囲内で別の独立したランダムな値が選択されます。
  • 目的: パースペクティブ拡張は、特に遠近法の変化によってオブジェクトが短縮されたり歪んだりして見えるシナリオにおいて、極端な視点の変化を処理するために重要です。例えば、ドローンベースの物体検出では、建物、道路、車両がドローンの傾きや高度に応じて引き伸ばされたり圧縮されたりして見えることがあります。パースペクティブ変換を適用することで、モデルはこれらのパースペクティブによる歪みにもかかわらずオブジェクトを認識することを学習し、実際の環境での展開における堅牢性を向上させます。
  • Ultralyticsの実装: RandomPerspective
-0.001-0.00050.00.00050.001
perspective_-0.001_augmentationperspective_-0.0005_augmentationaugmentation_identityperspective_0.0005_augmentationperspective_0.001_augmentation

上下反転(flipud)

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

左右反転(fliplr)

  • 範囲: 0.0 - 1.0
  • デフォルト: 0.5
  • 使用法: x軸に沿って画像をミラーリングすることにより、水平方向の反転を実行します。この変換は、左右を入れ替えながら空間的な一貫性を維持し、モデルがミラーリングされた向きで表示されるオブジェクトに一般化するのに役立ちます。 fliplr ハイパーパラメータは変換の適用確率を定義し、値は次のようになります。 fliplr=1.0 すべての画像が確実に反転され、次の値になるようにし、 fliplr=0.0 変換を完全に無効にします。たとえば、 fliplr=0.5各画像は、左右に50%の確率で反転されます。
  • 目的: 水平方向の反転は、オブジェクト検出、ポーズ推定、および顔認識で広く使用されており、左右の変動に対する堅牢性を向上させます。たとえば、自動運転では、車両と歩行者は道路の両側に表示される可能性があり、水平方向の反転により、モデルは両方の方向でそれらを同様に認識できます。
  • Ultralyticsの実装: RandomFlip
fliplr オフfliplr オン
augmentation_identityfliplr_on_augmentation

BGRチャンネルスワップ(bgr)

  • 範囲: 0.0 - 1.0
  • デフォルト: 0.0
  • 使用法: 画像の色チャネルをRGBからBGRにスワップし、色の表現順序を変更します。 bgr ハイパーパラメータは変換の適用確率を定義し、 bgr=1.0 すべての画像が確実にチャネルスワップされるようにし、 bgr=0.0 それを無効にします。たとえば、 bgr=0.5各画像は、RGBからBGRに50%の確率で変換されます。
  • 目的: さまざまなカラーチャネルの順序に対する堅牢性を高めます。たとえば、RGB および BGR 形式が一貫して使用されていないさまざまなカメラシステムおよび画像ライブラリで動作する必要があるモデルをトレーニングする場合、または入力カラー形式がトレーニングデータと異なる環境にモデルをデプロイする場合。
  • Ultralyticsの実装: Format
bgr オフbgr オン
augmentation_identitybgr_on_augmentation

モザイク(mosaic)

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

Mixup(mixup)

  • 範囲: 0.0 - 1.0
  • デフォルト: 0.0
  • 使用法は、与えられた確率で2つの画像とそのラベルをブレンドします。 mixup ハイパーパラメータは変換の適用確率を定義し、 mixup=1.0 すべての画像が確実に混合されるようにし、 mixup=0.0 変換を無効にします。たとえば、 mixup=0.5各画像は、別の画像と50%の確率で混合されます。
  • 目的: モデルの堅牢性を向上させ、過剰適合を軽減します。たとえば、小売製品認識システムでは、mixup は、モデルが異なる製品の画像をブレンドすることにより、より堅牢な特徴を学習するのに役立ち、混雑した店の棚にある他の製品によって部分的に表示または不明瞭になっている場合でも、アイテムを識別するように教えます。
  • Ultralyticsの実装: Mixup
  • :
    • The mixup ratioはランダムに選択された値です。 np.random.beta(32.0, 32.0) ベータ分布。各画像が約50%寄与し、わずかな変動があります。
最初の画像、 mixup オフ2番目の画像 mixup オフmixup オン
augmentation_mixup_identity_1augmentation_mixup_identity_2mixup_on_augmentation

CutMix(cutmix)

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

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

コピー&ペースト (copy_paste)

  • 範囲: 0.0 - 1.0
  • デフォルト: 0.0
  • 使用法: セグメンテーションタスクでのみ機能し、この拡張は、指定された確率に基づいて、画像内または画像間でオブジェクトをコピーします。 copy_paste_modecopy_paste ハイパーパラメータは変換の適用確率を定義し、 copy_paste=1.0 すべての画像が確実にコピーされるようにし、 copy_paste=0.0 変換を無効にします。たとえば、 copy_paste=0.5各画像は、別の画像からオブジェクトがコピーされる確率が50%あります。
  • 目的: 特にインスタンスセグメンテーションタスクとまれなオブジェクトクラスに役立ちます。たとえば、特定の種類の欠陥が発生頻度が低い産業用欠陥検出では、コピーペースト拡張は、ある画像から別の画像にコピーすることにより、これらのまれな欠陥の発生を人為的に増やすことができ、モデルが追加の欠陥サンプルを必要とせずに、これらの過小評価されたケースをより適切に学習するのに役立ちます。
  • Ultralyticsの実装: CopyPaste
  • :
    • 下のgif画像に示すように、 copy_paste augmentationを使用して、ある画像から別の画像にオブジェクトをコピーできます。
    • オブジェクトがコピーされると、 copy_paste_modeそのIntersection over Area(IoA)は、ソース画像のすべてのオブジェクトで計算されます。すべてのIoAが以下の場合 0.3 (30%)の場合、オブジェクトはターゲット画像に貼り付けられます。IoAが上記の場合のみ 0.3オブジェクトはターゲット画像に貼り付けられません。
    • IoAのしきい値は、現在の実装では変更できず、に設定されています 0.3 デフォルトで。
copy_paste オフcopy_paste オン copy_paste_mode=flip可視化 copy_paste プロセス
augmentation_identitycopy_paste_on_augmentationcopy_paste_augmentation_gif_demo

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

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

分類固有の拡張

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 - 0.9
  • デフォルト: 0.4
  • 使用法: 分類トレーニング中に画像の一部をランダムに消去します。 erasing ハイパーパラメータは変換の適用確率を定義し、 erasing=0.9 ほとんどすべての画像が確実に消去されるようにし、 erasing=0.0 変換を無効にします。たとえば、 erasing=0.5各画像は、一部が50%の確率で消去されます。
  • 目的: モデルが堅牢な特徴を学習し、特定の画像領域への過度の依存を防ぐのに役立ちます。たとえば、顔認識システムでは、ランダム消去は、モデルがサングラス、フェイスマスク、または顔の特徴を部分的に覆う可能性のある他のオブジェクトのような部分的なオクルージョンに対してより堅牢になるのに役立ちます。これにより、隠されている可能性のある特徴的な特徴だけに依存するのではなく、複数の顔の特徴を使用して個人を識別することにより、現実世界のパフォーマンスが向上します。
  • Ultralyticsの実装: classify_augmentations()
  • :
    • The erasing データ拡張には、以下のような効果があります。 scale, ratio、および value の変更できないハイパーパラメータ 現在の実装のデフォルト値は、 (0.02, 0.33), (0.3, 3.3)、および 0それぞれ、PyTorchに記載されているとおり ドキュメンテーション.
    • 上限値 erasing ハイパーパラメータはに設定されています。 0.9 すべての画像に変換を適用することを避けるため。
erasing オフerasing オン (例 1)erasing オン (例 2)erasing オン (例 3)
augmentation_identityerasing_ex1_augmentationerasing_ex2_augmentationerasing_ex3_augmentation

高度な補強機能

カスタム・アルブメンテーション・トランスフォーム (augmentations)

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

カスタム・アルブメンテーションの例

import albumentations as A

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.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,
)
import albumentations as A

from ultralytics import YOLO

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

# Define advanced custom Albumentations transforms with specific parameters
advanced_transforms = [
    A.OneOf(
        [
            A.MotionBlur(blur_limit=7, p=1.0),
            A.MedianBlur(blur_limit=7, p=1.0),
            A.GaussianBlur(blur_limit=7, p=1.0),
        ],
        p=0.3,
    ),
    A.OneOf(
        [
            A.GaussNoise(var_limit=(10.0, 50.0), p=1.0),
            A.ISONoise(color_shift=(0.01, 0.05), intensity=(0.1, 0.5), p=1.0),
        ],
        p=0.2,
    ),
    A.CLAHE(clip_limit=4.0, tile_grid_size=(8, 8), p=0.5),
    A.RandomBrightnessContrast(brightness_limit=0.3, contrast_limit=0.3, brightness_by_max=True, p=0.5),
    A.HueSaturationValue(hue_shift_limit=20, sat_shift_limit=30, val_shift_limit=20, p=0.5),
    A.CoarseDropout(
        max_holes=8, max_height=32, max_width=32, min_holes=1, min_height=8, min_width=8, fill_value=0, p=0.2
    ),
]

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

重要なポイント

  • Python API のみ:カスタム Albumentations トランスフォームは、現在Python API でのみサポートされています。CLI や YAML 設定ファイルで指定することはできません。
  • デフォルトのトランスフォームを置き換える:カスタム変換を augmentations パラメータを指定すると、デフォルトの Albumentations 変換を完全に置き換えます。 デフォルトのYOLO 補強(例えば mosaic, hsv_h, hsv_s, degreesなど)がアクティブのまま、独立して適用される。.
  • バウンディングボックスの互換性:空間変換(画像のジオメトリを変更する変換)を使用する場合は注意が必要です。Ultralytics バウンディングボックスの調整を自動的に処理しますが、一部の複雑な変換では追加の設定が必要になる場合があります。
  • 豊富なライブラリ:Albumentationsは、70以上の異なる変換を提供します。Albumentationsのドキュメントを参照して、利用可能なオプションをすべて見つけてください。
  • パフォーマンスの考慮:オーグメンテーションを追加しすぎたり、計算コストの高い変換を使用すると、トレーニングが遅くなる可能性があります。小さなセットから始め、トレーニング速度を監視する。

一般的な使用例:

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

互換性に関する注意事項

  • Albumentationsのバージョン1.0.3以上が必要です。
  • すべてのYOLO 検出およびセグメンテーションタスクに対応
  • 分類タスクには適用されない(分類には別のオーグメンテーション・パイプラインが使用される)

Albumentationsと利用可能なトランスフォームの詳細については、Albumentationsの公式ドキュメントを参照してください。

よくある質問

選択できる拡張があまりにも多いです。どれを使用すればよいかわかりますか?

適切なデータ拡張の選択は、特定のユースケースとデータセットによって異なります。以下に、決定を支援するための一般的なガイドラインをいくつか示します。

  • ほとんどの場合、色と明るさのわずかな変化は有益です。デフォルト値は hsv_h, hsv_s、および hsv_v は、良い出発点となります。
  • カメラの視点が一定で、モデルのデプロイ後に変更されない場合は、次のような幾何学的変換を省略できます。 rotation, translation, scale, shear、または perspective。ただし、カメラの角度が変化する可能性があり、モデルをより堅牢にする必要がある場合は、これらの拡張を維持することをお勧めします。
  • 以下を使用します mosaic 部分的に遮られたオブジェクトや、1つの画像に複数のオブジェクトが存在することが許容され、ラベルの値を変更しない場合にのみ、データ拡張を使用してください。あるいは、 mosaic アクティブですが、 close_mosaic トレーニングプロセスでより早く無効にするための値。

要するに、シンプルに保ちます。まず、小さな拡張セットから始めて、必要に応じて徐々に追加していきます。目標は、モデルの一般化と堅牢性を向上させることであり、トレーニングプロセスを複雑にしすぎることではありません。また、適用する拡張が、モデルが本番環境で遭遇するのと同じデータ分布を反映していることを確認してください。

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

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

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

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

トレーニングを開始しても、albumentationsへの参照が表示されません。なぜですか?

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

データ拡張をカスタマイズするにはどうすればよいですか?

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



📅作成 7ヶ月前 ✏️更新 10日前
picsalexRizwanMunawarglenn-jocheronuralpszrmiles-deans-ultralyticsLaughing-qartzuros

コメント