Meet YOLO26: next-gen vision AI.

Link to this sectionUltralytics YOLOを使用したデータオーギュメンテーション#

YOLO data augmentation examples showing original and augmented images for training

Link to this sectionはじめに#

データオーギュメンテーションは、コンピュータビジョンにおいて非常に重要な手法です。既存の画像にさまざまな変換を適用することで、学習データセットを人工的に拡張します。Ultralytics YOLOのようなディープラーニングモデルを学習させる際、データオーギュメンテーションはモデルの堅牢性を向上させ、過学習を低減し、実世界のシナリオに対する汎化性能を強化するのに役立ちます。



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

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

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

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

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

Link to this section設定例#

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)

Link to this section設定ファイルの使用#

You can define all training parameters, including augmentations, in a YAML configuration file (e.g., train_custom.yaml). The mode parameter is only required when using the CLI. This new YAML file will then override the default one located in the ultralytics package.

# 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")

Link to this section色空間のオーギュメンテーション#

Link to this section色相調整 (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

Link to this section彩度調整 (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

Link to this section輝度調整 (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

Link to this section幾何学的変換#

Link to this section回転 (degrees)#

  • 範囲: 0.0 から 180
  • デフォルト: 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

Link to this section平行移動 (translate)#

  • 範囲: 0.0 - 1.0
  • デフォルト: 0.1
  • 使用法: 画像サイズに対するランダムな割合で、画像を水平方向および垂直方向にシフトさせます。translateハイパーパラメータはシフトの大きさを定義し、最終的な調整値は-translateからtranslateの範囲内で2回(各軸に対して1回ずつ)ランダムに選択されます。例えば、translate=0.5の場合、x軸上の平行移動は-0.5から0.5の間でランダムに選択され、y軸上でも同じ範囲で独立したランダムな値が選択されます。
  • 目的: 部分的にしか見えないオブジェクトを検出する能力をモデルが学習し、オブジェクトの位置に対する堅牢性を向上させるのに役立ちます。例えば、車両の損傷評価アプリケーションでは、カメラマンの位置や距離に応じて車の部品がフレーム内に収まっていたり、一部だけが見えたりすることがありますが、平行移動オーギュメンテーションを行うことで、モデルはオブジェクトの全体像や位置に関係なく、それらの特徴を認識することを学習します。
  • Ultralyticsの実装: RandomPerspective
  • Note: For simplicity, the translations applied below are the same each time for both x and y axes. Values -1.0 and 1.0 are not shown as they would translate the image completely out of the frame.
-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

Link to this sectionスケーリング (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-scaleから1+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

Link to this sectionせん断変形 (shear)#

  • 範囲: -180 から +180
  • デフォルト: 0
  • 使用法: 画像をx軸とy軸の両方向に歪ませる幾何学的変換を導入します。これにより、平行線を維持しながら画像の一部を一方の方向にシフトさせます。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

Link to this section遠近法 (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

Link to this section上下反転 (flipud)#

  • 範囲: 0.0 - 1.0
  • デフォルト: 0
  • Usage: Performs a vertical flip by inverting the image along the y-axis. This transformation mirrors the entire image upside-down but preserves all spatial relationships between objects. The flipud hyperparameter defines the probability of applying the transformation, with a value of flipud=1.0 ensuring that all images are flipped and a value of flipud=0.0 disabling the transformation entirely. For example, with flipud=0.5, each image has a 50% chance of being flipped upside-down.
  • 目的: 物体が逆さまに現れる可能性があるシナリオで役立ちます。例えば、ロボットビジョンシステムにおいて、コンベアベルトやロボットアーム上の物体は、さまざまな向きで拾い上げられたり配置されたりすることがあります。垂直方向の反転は、モデルがトップダウンの配置に関係なく物体を認識するのに役立ちます。
  • Ultralyticsの実装: RandomFlip
flipud オフflipud オン
Original image without augmentationVertical flip augmentation enabled

Link to this section左右反転 (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

Link to this sectionBGRチャネルスワップ (bgr)#

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

Link to this sectionモザイク (mosaic)#

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

Link to this sectionミックスアップ (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%ずつ寄与することを意味しますが、わずかな変動があります。
最初の画像、mixup オフ2番目の画像、mixup オフmixup オン
First image for MixUp blendingSecond image for MixUp blendingMixUp blending augmentation enabled

Link to this sectionカットミックス (cutmix)#

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

Link to this sectionセグメンテーション固有の拡張#

Link to this sectionコピー&ペースト (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に関係なく、そのIntersection over Area (IoA) がソース画像のすべての物体に対して計算されます。すべてのIoAが0.3 (30%)を下回る場合、その物体はターゲット画像に貼り付けられます。IoAが1つでも0.3を上回る場合、物体はターゲット画像に貼り付けられません。
    • IoAしきい値は現在の実装では変更できず、デフォルトで0.3に設定されています。
copy_paste オフcopy_paste オン (copy_paste_mode=flipの場合)copy_pasteプロセスの可視化
Original image without augmentationCopy-paste augmentation enabledCopy-paste augmentation animated demo

Link to this sectionコピー&ペーストモード (copy_paste_mode)#

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

Link to this section分類固有の拡張#

Link to this section自動拡張 (auto_augment)#

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

Link to this sectionランダム消去 (erasing)#

  • 範囲: 0.0 - 0.9
  • デフォルト: 0.4
  • 使用方法: 分類トレーニング中に画像の一部をランダムに消去します。erasing ハイパーパラメータは変換を適用する確率を定義します。erasing=0.9 はほぼすべての画像が消去されることを保証し、erasing=0.0 は変換を無効にします。例えば、erasing=0.5 の場合、各画像には50%の確率で一部が消去される可能性があります。
  • 目的: モデルが頑健な特徴を学習するのを助け、特定の画像領域への過度な依存を防ぎます。例えば、顔認識システムでは、ランダム消去はサングラス、マスク、または顔の特徴を部分的に覆う可能性のある他の物体のような部分的な遮蔽に対して、モデルがより頑健になるのを助けます。これにより、特徴の一部が隠されても特定の領域のみに頼るのではなく、複数の顔の特徴を使用して個体を識別するようモデルを強制することで、現実世界でのパフォーマンスが向上します。
  • Ultralytics の実装: classify_augmentations()
  • :
    • The erasing augmentation comes with a scale, ratio, and value hyperparameters that cannot be changed with the current implementation. Their default values are (0.02, 0.33), (0.3, 3.3), and 0, respectively, as stated in the PyTorch documentation.
    • erasing ハイパーパラメータの上限は、すべての画像に変換が適用されることを防ぐため 0.9 に設定されています。
erasing オフerasing オン (例 1)erasing オン (例 2)erasing オン (例 3)
Original image without augmentationRandom erasing example 1Random erasing example 2Random erasing example 3

Link to this section高度なオーグメンテーション機能#

Link to this sectionカスタム 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 ドキュメントにアクセスしてください。

Link to this sectionよくある質問 (FAQ)#

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

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

  • ほとんどの場合、色と明るさのわずかな変化は有益です。hsv_hhsv_shsv_v のデフォルト値は、確かな出発点となります。
  • カメラの視点が一定で、モデルのデプロイ後に変化しない場合は、rotationtranslationscaleshearperspective といった幾何学的変換をスキップできる可能性が高いです。しかし、カメラアングルが変化する可能性がある場合や、モデルにより高い頑健性が必要な場合は、これらのオーグメンテーションを残す方が適しています。
  • mosaic オーグメンテーションは、部分的に遮蔽された物体や画像内に複数の物体があっても問題なく、ラベル値が変わらない場合にのみ使用してください。あるいは、mosaic を有効にしたまま close_mosaic の値を増やして、トレーニングプロセスの早い段階で無効にすることもできます。

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

Link to this sectionトレーニングを開始すると albumentations: Blur[...] という参照が表示されます。これは Ultralytics YOLO がぼかしのような追加のオーグメンテーションを実行しているということですか?#

albumentations パッケージがインストールされている場合、Ultralytics はそれを使用して一連の追加画像オーグメンテーションを自動的に適用します。これらのオーグメンテーションは内部的に処理され、追加の設定は不要です。

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

Python API を使用して独自のカスタム Albumentations 変換を提供することも可能です。詳細については、高度なオーグメンテーション機能のセクションを参照してください。

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

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

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

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

コメント