Ultralytics YOLOを使用したデータ拡張
はじめに
データ拡張は、既存の画像に様々な変換を適用してトレーニングデータセットを人工的に拡張する、コンピュータビジョンにおける重要な手法です。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)設定ファイルの使用
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")色空間の拡張
色相(Hue)の調整 (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.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
彩度(Saturation)の調整 (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.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
明度(Brightness)の調整 (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.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
幾何学的変換
回転 (degrees)
- 範囲:
0.0から180 - デフォルト:
0 - 使用方法: 指定された範囲内で画像をランダムに回転させます。
degreesハイパーパラメータは回転角度を定義し、最終的な調整値は-degreesからdegreesの間でランダムに選択されます。例えば、degrees=10.0の場合、回転は-10.0から10.0の間でランダムに選択されます。 - 目的: オブジェクトが異なる向きで現れる可能性のあるアプリケーションにおいて重要です。例えば、航空ドローン画像では車両はどの方向を向いていてもよいため、モデルは回転に関係なくオブジェクトを認識する必要があります。
- Ultralyticsの実装: RandomPerspective
-180 | -90 | 0.0 | 90 | 180 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
平行移動 (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
xandyaxes. Values-1.0and1.0are not shown as they would translate the image completely out of the frame.
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
スケール (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を通じて適用されたものであり、最終的なスケーリング倍率ではありません。 scaleが1.0より大きい場合、スケーリング倍率は1-scaleから1+scaleの間でランダムに選択されるため、画像は非常に小さくなるか、反転する可能性があります。例えば、scale=3.0の場合、スケーリングは-2.0から4.0の間でランダムに選択されます。負の値が選択された場合、画像は反転します。
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
シアー(せん断、shear)
- 範囲:
-180から+180 - デフォルト:
0 - 使用方法: 平行線を維持しながら画像の一部を一方向にシフトさせ、x軸とy軸の両方に沿って画像を歪ませる幾何学的変換を導入します。
shearハイパーパラメータはシアー角を定義し、最終的な調整値は-shearからshearの間でランダムに選択されます。例えば、shear=10.0の場合、x軸上のシアーは-10から10の間でランダムに選択され、y軸上でも独立したランダムな値が同じ範囲から選択されます。 - 目的: わずかな傾きや斜めの視点によって生じる視角の変化にモデルが汎化するのを助けます。例えば、交通監視では、カメラの配置が垂直でないため、車や道路標識が斜めに見えることがあります。シアー拡張を適用することで、このような歪みがあってもモデルがオブジェクトを認識できるようになります。
- Ultralyticsの実装: RandomPerspective
- 注意:
shear値は急速に画像を歪ませるため、小さい値から始めて徐々に大きくすることをお勧めします。- 遠近法変換とは異なり、シアーは奥行きや消失点を導入しませんが、対向する辺を平行に保ちながら角度を変えることでオブジェクトの形状を歪ませます。
-10 | -5 | 0.0 | 5 | 10 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
遠近法 (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.0005 | 0.0 | 0.0005 | 0.001 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
上下反転 (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.0ensuring that all images are flipped and a value offlipud=0.0disabling the transformation entirely. For example, withflipud=0.5, each image has a 50% chance of being flipped upside-down. - 目的: 物体が上下逆さまに現れる可能性があるシナリオで役立ちます。例えば、ロボットビジョンシステムでは、コンベアベルトやロボットアーム上の物体が様々な向きでピックアップされたり配置されたりすることがあります。垂直反転は、モデルがトップダウンの配置に関係なく物体を認識するのに役立ちます。
- Ultralyticsの実装: RandomFlip
flipud オフ | flipud オン |
|---|---|
![]() | ![]() |
左右反転 (fliplr)
- 範囲:
0.0-1.0 - デフォルト:
0.5 - 使用方法: 画像をx軸に沿ってミラーリングすることで、水平方向のフリップを実行します。この変換は空間的な一貫性を維持しながら左右を入れ替えるため、鏡像的な向きで現れる物体に対してモデルを汎化させるのに役立ちます。
fliplrハイパーパラメータは変換を適用する確率を定義し、fliplr=1.0の場合はすべての画像が反転され、fliplr=0.0の場合は変換が完全に無効になります。例えば、fliplr=0.5の場合、各画像は50%の確率で左右反転されます。 - 目的: 水平反転は、物体検出、姿勢推定、顔認識において、左右のバリエーションに対する堅牢性を向上させるために広く使用されています。例えば、自動運転では、車両や歩行者が道路のどちら側にも現れる可能性があるため、水平反転はモデルがどちらの向きでも等しくうまく認識できるようにするのに役立ちます。
- Ultralyticsの実装: RandomFlip
fliplr オフ | fliplr オン |
|---|---|
![]() | ![]() |
BGRチャンネルスワップ (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 オン |
|---|---|
![]() | ![]() |
モザイク (mosaic)
- 範囲:
0.0-1.0 - デフォルト:
1 - 使用方法: 4つのトレーニング画像を1つに統合します。
mosaicハイパーパラメータは変換を適用する確率を定義し、mosaic=1.0の場合はすべての画像が統合され、mosaic=0.0の場合は変換が無効になります。例えば、mosaic=0.5の場合、各画像は50%の確率で他の3つの画像と統合されます。 - 目的: 小さな物体の検出とコンテキストの理解を向上させるのに非常に効果的です。例えば、動物が様々な距離やスケールで現れる野生動物保護プロジェクトでは、モザイク拡張により、限られたデータから多様なトレーニングサンプルを人工的に作成することで、モデルが異なるサイズ、部分的な遮蔽、環境コンテキストにわたって同じ種を認識することを学習できます。
- Ultralyticsの実装: Mosaic
- 注意:
mosaic拡張によってモデルの堅牢性は向上しますが、トレーニングプロセスがより困難になる可能性もあります。- The
mosaicaugmentation can be disabled near the end of training by settingclose_mosaicto the number of epochs before completion when it should be turned off. For example, ifepochsis set to200andclose_mosaicis set to20, themosaicaugmentation will be disabled after180epochs. Ifclose_mosaicis set to0, themosaicaugmentation will be enabled for the entire training process. - 生成されるモザイクの中心はランダムな値を使用して決定され、画像の内側または外側のどちらにも配置されます。
- 現在の
mosaic拡張の実装では、データセットからランダムに選ばれた4つの画像を結合します。データセットが小さい場合、同じモザイク内で同じ画像が複数回使用されることがあります。
mosaic オフ | mosaic オン |
|---|---|
![]() | ![]() |
ミックスアップ (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 オン |
|---|---|---|
![]() | ![]() | ![]() |
カットミックス (cutmix)
- 範囲:
0.0-1.0 - デフォルト:
0 - 使用方法: 指定された確率で1つの画像から矩形領域を切り取り、別の画像に貼り付けます。
cutmixハイパーパラメータは変換を適用する確率を定義し、cutmix=1.0の場合はすべての画像がこの変換を受け、cutmix=0.0の場合は完全に無効になります。例えば、cutmix=0.5の場合、各画像は50%の確率で一部の領域が別の画像からのパッチに置き換わります。 - 目的: ローカルな特徴の整合性を維持しつつ、リアルな遮蔽シナリオを作成することでモデルのパフォーマンスを向上させます。例えば、自動運転システムでは、カットミックスはモデルが他の物体に部分的に隠れていても車両や歩行者を認識できるように学習するのを助け、物体が重なり合う複雑な実環境での検出精度を向上させます。
- Ultralyticsの実装: CutMix
- 注意:
- カットされる領域のサイズと位置は、適用ごとにランダムに決定されます。
- 画素値をグローバルにブレンドするミックスアップとは異なり、
cutmixはカットされた領域内の元の画素輝度を維持し、ローカルな特徴を保持します。 - 領域は、既存のバウンディングボックスと重ならない場合にのみターゲット画像に貼り付けられます。さらに、貼り付けられた領域内で元の面積の少なくとも
0.1(10%) を保持しているバウンディングボックスのみが保持されます。 - この最小バウンディングボックス面積のしきい値は、現在の実装では変更できず、デフォルトで
0.1に設定されています。
1番目の画像、cutmix オフ | 2番目の画像、cutmix オフ | 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%の確率で別の画像からオブジェクトをコピーされます。 - 目的: インスタンスセグメンテーションタスクや稀な物体クラスに対して特に有用です。例えば、特定の種類の欠陥がめったに現れない産業用欠陥検出において、コピーペースト拡張は、それらを1つの画像から別の画像にコピーすることで、これらの稀な欠陥の発生を人工的に増加させることができます。これにより、追加の不良サンプルを必要とせずに、モデルがこれらの過小評価されているケースをよりよく学習できるようになります。
- Ultralyticsの実装: CopyPaste
- 注意:
- 下のGIFに示すように、
copy_paste拡張を使用して、ある画像から別の画像へオブジェクトをコピーできます。 - オブジェクトがコピーされると、
copy_paste_modeにかかわらず、ソース画像内のすべてのオブジェクトとの IoA (Intersection over Area) が計算されます。すべての IoA が0.3(30%) 未満であれば、オブジェクトはターゲット画像に貼り付けられます。IoA が0.3を超えるものが1つでもあれば、オブジェクトは貼り付けられません。 - IoA のしきい値は現在の実装では変更できず、デフォルトで
0.3に設定されています。
- 下のGIFに示すように、
copy_paste オフ | copy_paste オン (copy_paste_mode=flip 使用) | copy_paste プロセスの可視化 |
|---|---|---|
![]() | ![]() | ![]() |
コピーペーストモード (copy_paste_mode)
- オプション:
'flip','mixup' - デフォルト:
'flip' - 使用方法: コピーペースト 拡張に使用される方法を決定します。
'flip'に設定すると、オブジェクトは同じ画像から取得されます。'mixup'は、異なる画像からオブジェクトをコピーすることを可能にします。 - 目的: コピーされたオブジェクトをターゲット画像に統合する方法に柔軟性を持たせます。
- Ultralyticsの実装: CopyPaste
- 注意:
- IoA の原理はどちらの
copy_paste_modeでも同じですが、オブジェクトがコピーされる方法が異なります。 - 画像サイズによっては、オブジェクトがフレームの外に部分的または完全にコピーされることがあります。
- ポリゴンアノテーションの品質によっては、コピーされたオブジェクトは元のオブジェクトと比較してわずかに形状が異なる場合があります。
- IoA の原理はどちらの
| 参照画像 | copy_paste 用に選択された画像 | copy_paste オン (copy_paste_mode=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()
- 注意:
- The
erasingaugmentation comes with ascale,ratio, andvaluehyperparameters that cannot be changed with the current implementation. Their default values are(0.02, 0.33),(0.3, 3.3), and0, respectively, as stated in the PyTorch documentation. erasingハイパーパラメータの上限は、すべての画像に変換が適用されることを避けるため0.9に設定されています。
- The
erasing 無効 | erasing 有効 (例 1) | erasing 有効 (例 2) | erasing 有効 (例 3) |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
高度なデータ拡張機能
カスタム Albumentations 変換 (augmentations)
- タイプ: Albumentations 変換の
list - デフォルト:
None - 使用方法: Python API を使用して、データ拡張用のカスタム Albumentations 変換を提供できます。このパラメータは、デフォルトの Albumentations 変換の代わりにトレーニング中に適用される Albumentations 変換オブジェクトのリストを受け取ります。
- 目的: 豊富な Albumentations 変換ライブラリを活用することで、データ拡張戦略をきめ細かく制御できます。これは、高度な色調整、ノイズ注入、ドメイン固有の変換など、組み込みの YOLO オプションを超える特殊な拡張が必要な場合に特に役立ちます。
- Ultralytics の実装: 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 データ拡張(mosaic、hsv_h、hsv_s、degreesなど)は有効なままであり、独立して適用されます。 - BBox(境界ボックス)の互換性: 空間変換(画像の幾何学的形状を変更する変換)を使用する場合は注意してください。Ultralytics は境界ボックスの調整を自動的に処理しますが、複雑な変換の中には追加の設定が必要になる場合があります。
- 豊富なライブラリ: Albumentations は 70 以上の異なる変換を提供しています。Albumentations ドキュメントを調べて、利用可能なすべてのオプションを確認してください。
- パフォーマンスへの配慮: データ拡張を過度に追加したり、計算コストの高い変換を使用すると、トレーニングが遅くなる可能性があります。少数のセットから始めて、トレーニング速度を監視してください。
一般的なユースケース:
- 医療画像: X線やMRI画像の拡張には、弾性変形やグリッド歪みなどの特殊な変換を適用します。
- 航空/衛星画像: 真上からの視点に最適化された変換を使用します。
- 低照度条件: 厳しい照明環境をシミュレートするために、ノイズや明るさの調整を適用します。
- 産業検査: 品質管理用途向けに、欠陥のようなパターンやテクスチャの変化を追加します。
互換性に関する注意:
- Albumentations バージョン 1.0.3 以上が必要です
- すべての YOLO 検出およびセグメンテーションタスクと互換性があります
- 分類タスクには適用されません(分類は別のデータ拡張パイプラインを使用します)
Albumentations と利用可能な変換の詳細については、公式 Albumentations ドキュメントをご覧ください。
FAQ
データ拡張の種類が多すぎて選択に困ります。どれを使えばよいのでしょうか?
適切なデータ拡張の選択は、特定のユースケースとデータセットに依存します。決定に役立つ一般的なガイドラインをいくつか紹介します。
- 多くの場合、色や明るさのわずかな変化は有益です。
hsv_h、hsv_s、hsv_vのデフォルト値は、良い出発点となります。 - カメラの視点が一定で、モデル展開後も変更されない場合は、
rotation、translation、scale、shear、perspectiveなどの幾何学的変換をスキップしても問題ありません。ただし、カメラの角度が変わる可能性があり、モデルの堅牢性を高める必要がある場合は、これらのデータ拡張を保持することをお勧めします。 mosaicデータ拡張は、一部が隠れた物体や画像内に複数の物体が含まれても問題なく、ラベル値が変わらない場合にのみ使用してください。あるいは、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 や他の変換に置き換えることができます。実装の詳細については、分類ドキュメントのカスタムトレーニング例を参照してください。
















































