Markdownで表示

データ拡張マトリクス

データ拡張ノブを設定しても、必ずパイプラインに届くとは限りません。このページでは、ライブラリが唯一の信頼できる情報源として提供する宣言的な表を使い、学習可能な各ファミリーがTrainConfig上の各ノブをどのように扱うかを記録します。

ノブ

これらはCLIでの表記ではなく、TrainConfigのフィールド名です。CLIは固有の別名をこれらにマッピングするため、--mosaicmosaic_probを設定します。

ノブ意味
mosaic_prob4画像のmosaicサンプルを構築する確率
mixup_prob2つ目のサンプルを混ぜる確率
hsv_probHSVカラージッターを行う確率
flip_prob水平反転の確率
degreesアフィン変換におけるランダム回転範囲(度)
translateアフィン変換におけるランダム平行移動の割合
mosaic_scaleアフィン変換におけるランダムスケール範囲
mixup_scaleMixUp相手の画像に適用するジッタースケール範囲
shearアフィン変換におけるランダムせん断範囲(度)
perspectiveアフィン変換における射影変換の大きさ
flipud垂直反転の確率
no_aug_epochs強いデータ拡張を無効にして学習する最後のエポック数
auto_augment分類用AutoAugmentポリシー:randaugment、autoaugment、augmix
erasing分類用RandomErasingの確率
mixupソフトラベルを使う分類用バッチMixUpの確率
cutmixソフトラベルを使う分類用バッチCutMixの確率

最後の4つが分類パックです。検出ファミリーはこれらを無視します。mixupはAPI専用ノブです。CLIの--mixupは検出用mixup_probの別名です。

仕様を直接照会
from libreyolo.data.augment.spec import (    AUG_KNOBS,    aug_support,    ignored_aug_params,    uses_mosaic_gating,) print(sorted(AUG_KNOBS)) table = aug_support("yolo9")print(table["mixup_prob"].status, table["mixup_prob"].note) print(sorted(ignored_aug_params("dfine")))print(uses_mosaic_gating("yolo9"), uses_mosaic_gating("yolonas"))

3つの状態

状態意味
usedノブがファミリーの学習パイプラインに届き、サンプルを変更
gated_by_mosaicmosaic分岐に入ったサンプルだけにノブを適用。mosaic_prob == 0なら一切発動しない
ignoredノブはパイプラインに届かず、設定しても何も変わらない

実行前に確認する価値があるのはignoredです。何も失敗しないためです。明示的に設定した学習パラメータを選択したファミリーが無視する場合、CLIは警告します。ファミリーがMixUpをmosaicに依存させ、mosaic_probがゼロのためmixup_prob > 0が発動できない場合も、トレーナーが警告します。

パイプライン構成

対象となるすべてのファミリーは、以下に示す少数のファミリー固有差を除き、6つのパイプラインのいずれかに従います。

ノブYOLOX形式YOLO-NASDETR形式分類セマンティック復元
mosaic_prob使用無視無視無視無視無視
mixup_probmosaic依存使用無視無視無視無視
hsv_prob使用使用無視無視無視無視
flip_prob使用使用使用無視無視無視
degreesmosaic依存使用無視無視無視無視
translatemosaic依存使用無視無視無視無視
mosaic_scalemosaic依存使用無視無視無視無視
mixup_scalemosaic依存使用無視無視無視無視
shearmosaic依存使用無視無視無視無視
perspectivemosaic依存使用無視無視無視無視
flipud使用使用無視無視無視無視
no_aug_epochs使用使用使用使用使用使用
auto_augment無視無視無視使用無視無視
erasing無視無視無視使用無視無視
mixup無視無視無視使用無視無視
cutmix無視無視無視使用無視無視

YOLOX形式のパイプラインでは、サンプルごとの前処理がHSVジッターと反転を適用し、アフィン変換とMixUpはmosaic分岐の中だけで実行されます。一方、YOLO-NASは常に有効なサンプルごとのアフィン変換を実行し、mosaicを無視し、MixUpを独立して適用します。mosaic_scaleはアフィン変換のスケール範囲として再利用されます。

DETR形式のパイプラインはmosaicなしの通過型変換です。測光変形、zoom-out、IoU-cropは設定可能なノブではなくレシピ定数なので、hsv_probと幾何学ノブは一切届きません。分類パイプラインはflip_probではなく固定値0.5の水平反転を持つImageFolder変換を使います。セマンティックのスケールジッターとHSVは設定ノブではなくファミリーのクラス属性に由来し、復元の反転は入力とターゲットを連動させる固定確率0.5の処理です。

no_aug_epochsはすべての場所で反映されますが、無効にするものは異なります。YOLOX形式ではmosaicとMixUp、YOLO-NASではアフィン変換とMixUp、DETR形式では強い測光拡張とcrop拡張および学習率の末尾、そのほかではスケジューラーの末尾です。

構成別のファミリー

構成ファミリー
YOLOX形式yoloxyolo7yolo9yolo9_e2eyolo9_p2rtmdetpicodetrtdetrrtdetrv2fomo
YOLO-NASyolonas
DETR形式dfinedomedetrdeimdeimv2rtdetrv4rfdetrecdinov2
分類resnetconvnextmobilenetv4efficientnetv2
セマンティックsegformer
復元nafnet

25のファミリーが対象です。この一覧にないファミリーでは無視される集合が空で返されるため、警告は表示されません。

差異

ファミリー構成との差異
rtmdetflipudを無視。変換に垂直反転がない
picodetflipudを無視
rtdetrflipudを無視
rtdetrv2flipudを無視
fomoperspectiveflipudを無視
ectask="pose"の場合だけhsv_probdegreestranslateを使用。detectとsegmentでは固定の測光レシピを使用
dinov2task="classify"の場合だけ分類パックを使用

ecdinov2はマルチタスクファミリーなので、ファミリーの学習可能なすべてのタスクが無視する場合だけノブを無視とマークします。これにより、あるタスクでは誤りで別のタスクでは正しいCLI警告が出ることはありません。

Dome-DETRはD-FINEの変換を変更せずに継承します。利用できないのはマルチスケール学習だけで、データ拡張仕様ではなく設定によって無効にされます。

ファミリー固有のノブ

一部のファミリーは、基本クラスではなく固有のTrainConfigサブクラスにデータ拡張ノブを持ちます。CLIはこれらを公開しないため、Python APIから設定してください。

ファミリーノブ意味
yolo9yolo9_e2eyolo9_p2copy_pastetask="segment"だけで使うcopy-pasteインスタンス拡張の確率
yolo9yolo9_e2eyolo9_p2copy_paste_modecopy-pasteのソース。flipは同じサンプルを鏡像化し、mixupは2つ目のサンプルを使用
yolo9yolo9_e2eyolo9_p2rot90ランダムな90度回転の確率
rfdetrcopy_pastetask="segment"向けcopy-pasteの確率。flipモードだけ
rfdetrcopy_paste_modetask="segment"向けcopy-pasteソースモード
rfdetrcrop_resize_probネイティブパイプライン内のランダムcrop-resize確率
dfinecrop_resize_probtask="segment"向けランダムcrop-resize確率
eccrop_resize_probtask="segment"向けランダムcrop-resize確率
ecyolonasbrightness_contrast_probtask="pose"向け明るさとコントラストのジッター確率
ecyolonasaffine_probtask="pose"向けキーポイント対応アフィン変換の確率

rot90yolo9のdetectとOBBに適用されます。

仕様の照会

ヘルパー返り値
aug_support(family)ノブからSupportへの表。不明なファミリーではNone
ignored_aug_params(family)ファミリーが無視するノブ名の集合。不明なファミリーでは空
uses_mosaic_gating(family)ファミリーのMixUpがmosaicサンプルだけで発動するか
display_name(family)警告で使うユーザー向けファミリー名
mixup_gating_warning(family, mosaic_prob, mixup_prob)MixUpが一切発動できない場合の警告テキスト。それ以外はNone

Supportstatusnoteからなる名前付きタプルで、noteはそのファミリーでノブが無視される、またはmosaicに依存する理由を説明します。

mosaicゲート

YOLOX形式のファミリーでは、mosaic_prob=0mixup_prob=0.5を指定するとMixUpが完全に無効になります。MixUpはmosaicサンプルだけに適用されるためです。この組み合わせは学習後半でmosaicを無効にすると簡単に発生します。トレーナーはファミリー名を示す警告をログに記録し、その背後にある純粋関数がmixup_gating_warningです。

ノブ一覧、状態、構成、ファミリーごとの差異、ヘルパー関数はv1.5.0のlibreyolo/data/augment/spec.pyで確認しました。この表と実際のパイプラインとの一致はtests/unit/test_augment_spec.pyで固定されています。