timm documentation
データ
データ
このページには、timm.dataサブパッケージのAPIリファレンスドキュメントと、その入力パイプラインの概要が含まれています。具体的には、モデルの事前処理設定の解決、変換の構築、データセットとローダーの作成、Mixup / CutMix、およびNaFlex可変解像度ローダーについてです。
使用方法
パイプラインは4つのステップで構築されます: resolve_model_data_config がモデルの前処理設定を読み取り、create_transform が学習または評価用の変換を構築し、create_dataset が名前とルートからデータセットを作成し、create_loader がデータセットの変換とデータローダーを構築します。
import os
import tempfile
import torch
from PIL import Image
import timm
from timm.data import create_dataset, create_loader, create_transform, resolve_model_data_config
model = timm.create_model('resnet50', pretrained=False).eval()
# Preprocessing config from the model's pretrained_cfg, the default pretrained tag's config is attached to the model
# with or without pretrained weights.
data_config = resolve_model_data_config(model)
print(data_config)
# {'input_size': (3, 224, 224), 'interpolation': 'bicubic', 'mean': (0.485, 0.456, 0.406),
# 'std': (0.229, 0.224, 0.225), 'crop_pct': 0.95, 'crop_mode': 'center'}
# Eval transform for a PIL image, resize to 224 / crop_pct, center crop 224, to tensor and normalize.
transform = create_transform(**data_config, is_training=False)
img = Image.new('RGB', (320, 240), color=(200, 120, 40))
with torch.no_grad():
output = model(transform(img).unsqueeze(0)) # (1, 1000)
# A folder dataset, <root>/<split>/<class>/<image>, two classes w/ four generated images each.
root = tempfile.mkdtemp()
for i, cls in enumerate(('cat', 'dog')):
os.makedirs(os.path.join(root, 'validation', cls))
for j in range(4):
path = os.path.join(root, 'validation', cls, f'{j}.jpg')
Image.new('RGB', (300, 200), color=(60 * i, 40 * j, 128)).save(path)
dataset = create_dataset('', root=root, split='validation') # finds the 'validation' sub-folder
print(len(dataset), dataset.reader.class_to_idx) # 8 {'cat': 0, 'dog': 1}
# The loader creates the transform from the same config and assigns it to the dataset.
loader = create_loader(dataset, **data_config, batch_size=4, use_prefetcher=False, num_workers=0)
with torch.no_grad():
for images, targets in loader:
output = model(images) # images (4, 3, 224, 224), targets (4,)クイックスタートでは、推論のための設定から変換までの手順を説明しています。
学習スクリプト(train.py)は、パイプラインの各部分についてこれらのオプションを公開しています。
入力設定の上書き(resolve_input_data_config):
--input-sizeは入力形状(C, H, W)を設定します。--img-sizeは--input-sizeの正方形のショートカットであり、モデルのチャネル数は維持されます。--in-chansは入力チャネル数を設定します。--interpolationは、リサイズ時の補間方法を設定します。--meanは正規化の平均値を設定します。--stdは正規化の標準偏差を設定します。--crop-pctは、評価用のクロップ率を設定します。
データセットの作成(create_dataset)とターゲットの設定:
--datasetは、データセットとリーダーを選択します。--data-dirは、データセットのルートディレクトリを設定します。--train-splitは、トレーニング用スプリットを選択します。--val-splitは、検証用スプリットを選択します。--class-mapはクラスのマッピングを指定します。--input-img-modeは、画像の色変換モードを設定します。--input-keyは画像フィールドを選択します。--target-keyは、ラベルのフィールドを選択します。--target-formatは、クラスインデックスまたはデンスなマルチホットターゲットを選択します。
ローダーと拡張のオプション(create_loader)には、以下が含まれます:
--aaは、自動拡張ポリシーを選択します。--reprobは、ランダムイレーシングの確率を設定します。--remodeは、ランダムイレーシングの塗りつぶしモードを選択します。--scaleは、ランダムリサイズクロップのスケール範囲を設定します。--ratioは、ランダムリサイズクロップのアスペクト比の範囲を設定します。--hflipは、水平方向の反転確率を設定します。--color-jitterはカラージャITTERの強度を設定します。--train-interpolationは、トレーニング時のリサイズ補間を設定します。--workersは、ローダーのワーカー数を設定します。--no-prefetcherは、プリフェッチャーを無効にします。
MixupとCutMix(Mixup):
--mixupは、Mixup の alpha を設定します。--cutmixは CutMix の alpha を設定します。--cutmix-minmaxは、CutMixのボックスサイズ範囲を設定します。--mixup-probは、混合の確率を設定します。--mixup-switch-probは、両方の手法が有効な場合に CutMix を選択する確率を設定します。--mixup-modeは、バッチ、ペア、または要素ごとの混合を選択します。--smoothingはラベルスモーthingを設定します。
例については、Scriptsを参照してください。
データ設定
resolve_data_config は、create_transform および create_loader の引数と一致する以下のキーを持つ dict を返します。args(dict、例えば解析済みのコマンドライン引数の vars(args))で設定された値は、pretrained_cfg 引数よりも優先されます。pretrained_cfg のデフォルト値は model.pretrained_cfg です。resolve_model_data_config は、最初の引数が model である以外は同じです。
両方とも、ソースのチェックポイントを記述する事前学習済み cfg から入力サイズとチャネル数を読み取ります。これは、異なる img_size または in_chans を使用するように作成または変更されたモデルではありません。学習、検証、推論のスクリプトで使用される resolve_input_data_config は、モデルの現在の入力を基準に解決します。固定入力サイズのモデルには常に現在のサイズが割り当てられ、モデルのチャネル数や固定サイズと競合する明示的な args はエラーを発生させます。また、チャネル数と一致しない mean / std は、その平均値に置き換えられます(警告付き)。
| キー | argsのキー | 説明 | デフォルト |
|---|---|---|---|
input_size | input_size, img_size, in_chans | (C, H, W)の入力サイズ。use_test_size=Trueの場合、設定にtest_input_sizeがあればそれが使用されます | (3, 224, 224) |
interpolation | interpolation | リサイズ補間、bilinear、bicubic、… | bicubic |
mean, std | mean, std | Normalization、各チャネルに対して単一の値が繰り返し適用されます | ImageNetの平均/標準偏差 |
crop_pct | crop_pct | Eval cropでは、画像はsizeにクロップする前にsize / crop_pctにリサイズされます(use_test_size=Trueの場合はtest_crop_pct) | 0.875 |
crop_mode | crop_mode | Evalのクロップモード、center、squashまたはborder | center |
出力のsizeとscale_size = floor(size / crop_pct)に対する、eval用のクロップモードは以下の通りです:
crop_mode | 動作 |
|---|---|
center | 最も短い辺をscale_sizeにリサイズし(アスペクト比を維持)、sizeに中央クロップします |
squash | 両辺をscale_sizeにリサイズし(アスペクト比は保持されません)、sizeに中央クロップします |
border | 最も長い辺をscale_sizeにリサイズし、中央クロップと平均色でのパディングを行います。全体画像はcrop_pct=1.0で保持されます。 |
変換
create_transform は torchvision の Compose を返します。評価用の変換では、上記と同様にリサイズとクロップを行い、その後テンソルに変換して正規化します。学習用の変換では、ランダムリサイズクロップ(デフォルトで scale=(0.08, 1.0)、ratio=(3/4, 4/3))、水平方向の反転(hflip=0.5)、カラージャITTER(color_jitter=0.4)、任意の auto_augment ポリシー、テンソル変換と正規化、そしてランダムイレーシングを行います。
train_crop_mode='rkrc'または'rkrr'を指定すると、ランダムリサイズクロップが、アスペクト比を維持したままのランダムリサイズ、それに続く中央クロップまたはパディング(rkrc)またはランダムクロップまたはパディング(rkrr)に置き換えられます。interpolation='random'(学習用のtrain.pyのデフォルト値)は、画像ごとに双線形補間または双三次補間をランダムに選択します。no_aug=Trueを設定すると、トレーニングはリサイズとセンタークロップのみになります。
auto_augment | 拡張 |
|---|---|
rand-m9-mstd0.5-inc1 | rand_augment_transform による RandAugment |
augmix-m5-w4-d2 | AugMix via augment_and_mix_transform |
original, originalr, v0, v0r, 3a | auto_augment_transform による AutoAugment ポリシー |
RandAugmentオプションのトークン:
mは大きさを設定します(デフォルトは 10)。nは、1枚の画像あたりの操作数を設定します(デフォルトは2)。pは、オペレーションごとの確率を設定します(デフォルトは 0.5)。mstdは、マグニチュードノイズの標準偏差を設定します。inc1は、規模とともに重大度が増加する操作を選択します。t<name>はオペレーションセット(weights、3a、3aw)を選択します。
AugMixオプションのトークン:
mは重大度(デフォルトは 3)を設定します。wは幅を設定します(デフォルトは3)。dは深度を設定します(デフォルトは-1、ランダムで1〜3)。b1はブレンド拡張を有効にします。mstdは、マグニチュードノイズの標準偏差を設定します。
AutoAugmentはmstdを受け付けます。例えばoriginal-mstd0.5などです。
Transform の動作:
auto_augmentが設定されている場合、文字列に3aが含まれていない限り、カラージッターは無効になります。RandomErasing(re_prob、re_count) は正規化されたテンソルに対して実行されます。re_modeは、ゼロで埋める (const、デフォルト)、領域ごとにランダムな正規分布の色で埋める (rand)、またはランダムな正規分布のピクセルで埋める (pixel、train.pyのデフォルト) のいずれかを指定します。use_prefetcher=Trueを設定すると、変換はuint8テンソルで終了し、正規化とランダムイレーシングはその後、ローダーによってデバイス上で実行されます。create_transformとcreate_loaderは、モデルの値ではなく、デフォルトでbilinear補間と ImageNet の平均 / 標準偏差を使用します。モデルの事前学習に合わせるには、解決済みのデータ設定を渡してください。
データセット
create_dataset は、name のプレフィックスに基づいて、データセットの実装とリーダーを選択します:
name | データセット | root | 必要 |
|---|---|---|---|
'' またはプレフィックスなし | ImageDataset、クラスサブフォルダー内の画像(再帰的に検索され、リーフフォルダー名がクラス名となります)、または同じ形式の単一の.tarファイル | Datasetフォルダまたは.tarファイル | |
torch/<name> | torchvision cifar10、cifar100、mnist、kmnist、fashion_mnist、qmnist、inaturalist(inat)、places365、imagenet、または image_folder(folder) | torchvision データセットのルート | |
hfds/<name> | Hugging Face Hubのデータセット(またはローカルパス)からdatasets.load_dataset経由でImageDataset | キャッシュディレクトリ(任意) | datasets |
hfids/<name> | IterableImageDataset、Hugging Face のストリーミングデータセット、または download=True を指定して事前にダウンロード・準備したデータセット | キャッシュディレクトリ(任意) | datasets |
tfds/<name> | TensorFlow Datasets の IterableImageDataset で download=True を指定すると、ダウンロードとビルドが実行されます | TFDS データディレクトリ | tensorflow, tensorflow-datasets |
wds/<name> | WebDatasetのtarシャードにおけるIterableImageDataset | _info.json(またはinfo.json)でスプリットを説明するシャードフォルダ | webdataset |
データセットのオプション:
splitは、データセットの分割を選択します(デフォルトはvalidation)。WebDatasetの場合、サンプル数を含むシャードパターン、'imagenet-train-{0000..1023}.tar|1281167'を指定することもできます。search_split=True(デフォルト)では、フォルダ形式のデータセットは、root内のsplitという名前のサブフォルダを探します。見つからない場合は、train(train、training)または eval(val、valid、validation、eval、evaluation)スプリットの同義語として名付けられたフォルダを探します。add_img_extensionsは、デフォルトの画像拡張子(.png、.jpg、.jpeg)に追加します。class_mapは、辞書、.txt(1行に1クラス)、または.pklファイルを使用して、クラス名をインデックスに再マッピングします。
Iterable データセット(hfids、tfds、wds)も、以下を受け取ります:
is_trainingがシャッフルを有効にします。batch_sizeは、学習時に各ワーカーが担当するサンプル数を、バッチ単位で切り上げて丸めます。num_samplesはサンプル数を設定します。リーダーがサンプル数を決定できない場合(分割情報なしのhfids)には、この指定が必須です。seedは乱数のシードを設定します。repeatsはエポックあたりのサンプル数を倍増し、リーダーがその回数だけデータを繰り返し読み取ります。
各エポックでdataset.set_epoch()を呼び出してシャッフルし直します。
その他のキーワード引数はリーダーにそのまま渡されます。Hugging Face、TFDS、WebDatasetリーダーの場合:
input_keyは、画像フィールド(デフォルトではimage、wdsの場合はjpg、pngまたはwebp画像)を選択します。target_keyは、ラベルフィールド(デフォルトではlabel、wdsの場合は.clsファイルまたはtarget_keyで指定された.jsonサイドカーフィールド)を選択します。カンマ区切りの値を指定すると、クラスごとに1つのバイナリフィールドを読み取ります。target_format='multihot'は、マルチラベルデータにおいてクラスインデックスのリストではなく、密なマルチホットベクトルを読み取ります。target_transform=MultiLabelTarget(num_classes)は、ターゲットを float 型のマルチホットテンソルとしてエンコードします。 マルチホットフィールドには、MultiLabelTargetにdense=Trueを渡します。
フォルダリーダーとtarリーダーは単一のクラスインデックスを生成します。詳細については、マルチラベル分類を参照してください。
ローダー
create_loader は、自身の引数から create_transform を用いて transform を作成し、それを dataset.transform に割り当て(既存の transform を置き換えます)、DataLoader を返します。トレーニング用ローダー(is_training=True)は、シャッフルを行い、最後の不完全なバッチを破棄します。
- プリフェッチャー。
use_prefetcher=True(デフォルト)の場合、データセットはuint8テンソルを生成し、バッチはdevice(デフォルトはcuda、CUDA の場合はサイドストリーム上で)に移動され、img_dtypeに変換、正規化、ランダムに消去されます。deviceをトレーニングデバイスに設定するか、正規化されたテンソルの通常のDataLoaderにする場合はuse_prefetcher=Falseに設定してください。 - 分散処理。
distributed=Trueは、map スタイルの学習データセットに対してDistributedSampler(またはnum_aug_repeatsを使用した反復拡張サンプラー)を使用し、評価には、各プロセスを同じサンプル数にパディングする順序付きサンプラーを使用します。これにより、検証結果がわずかに変化することがあります。Iterable データセットは、プロセスとワーカー間で自動的にシャード化されます。 - Collate。
collate_fnは、デフォルトの(fast_collate(prefetcher あり)、default_collate(なし))を、例えばFastCollateMixupに置き換えます。 - 拡張スプリット。 JSD損失付きのAugMix(
--aug-splits)を使用する場合は、AugMixDataset(dataset, num_splits=n)でデータセットをラップし、num_aug_splits=nを渡します。各バッチには、クリーンなスプリットとn - 1個の拡張スプリットが含まれ、プリフェッチャによってバッチ次元に沿って連結されます。 - スケジュールによる解決。
input_size_choices(--train-img-sizes) はバッチごとに入力サイズを選択します。必要に応じて、各選択肢ごとのバッチサイズ (batch_size_choices) と、最初の選択肢から最後の選択肢までのprogressiveスケジュールを指定できます。
MixupとCutMix
Mixup は、ローダーの後に、デバイス上で正規化された画像のバッチを混合します。FastCollateMixup は同じ引数を受け取り、ローダーのワーカー内でコラレーション中にuint8画像を混合します。この場合、プリフェッチャーが必要です。どちらもlabel_smoothing(デフォルトは0.1)を適用した密行列の(batch_size, num_classes)ターゲットを返し、timm.loss.SoftTargetCrossEntropyのようなソフトターゲット損失関数と組み合わせて使用します。また、バッチサイズが偶数である必要があります。
from timm.data import Mixup, FastCollateMixup
# Continuing the example above.
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
mixup_args = dict(mixup_alpha=0.8, cutmix_alpha=1.0, label_smoothing=0.1, num_classes=1000)
# Prefetcher enabled (default), mixed in the loader's collate.
loader = create_loader(
dataset,
**data_config,
batch_size=4,
is_training=True,
collate_fn=FastCollateMixup(**mixup_args),
device=device,
)
for images, targets in loader:
... # images normalized on device, targets (4, 1000)
# Prefetcher disabled, mixed in the training loop.
loader = create_loader(dataset, **data_config, batch_size=4, is_training=True, use_prefetcher=False)
mixup_fn = Mixup(**mixup_args)
for images, targets in loader:
images, targets = mixup_fn(images.to(device), targets.to(device))MixupとCutMixの制御:
mixup_alpha > 0を設定すると、Mixup が有効になります。cutmix_alpha > 0を設定すると、CutMix が有効になります。cutmix_minmaxは、ボックスサイズ範囲を指定して CutMix を有効にします。switch_probは、両方の手法が有効な場合にCutMixを選択する確率を設定します。probは、ミキシングを行う確率を設定します。modeは、batchごとに1回、要素のpairごとに1回、またはelem(要素)ごとに1回、パラメータをサンプリングします。multi_label=Trueを設定すると、密なマルチラベルのターゲットが混在し、各ラベルが 0.5 に向かって平滑化されます。mixup_enabled = Falseは、最終エポック(--mixup-off-epoch)などでの混在を無効にします。FastCollateMixupの場合は、この値はワーカープロセス内で読み込まれ、永続ワーカーは開始時の値を保持し続けます。
NaFlex 可変解像度
create_naflex_loader は、NaFlex パッチ入力を扱うモデル(naflexvit_* モデルなど)向けに、固定の正方形サイズへのリサイズを行わず、可変長のパッチシーケンスとして画像を読み込みます。各バッチは、patches、patch_coord、patch_valid、seq_len からなる辞書で、バッチのシーケンス長にパディングされます。
- 学習。 データセットは
train_seq_lensからバッチごとに1つを選択し、各画像をそのパッチ数に収まるようにランダムリサイズクロップするNaFlexMapDatasetWrapper(マップスタイルのデータセットのみ)でラップされます。batch_sizeは最長のシーケンス長におけるバッチサイズであり、より短い長さはバッチが比例的に大きくなります(8の倍数に切り捨て)。これにより、バッチあたりのトークン数はほぼ一定に保たれます。patch_size_choices(patch_size_choice_probs付き)は、対応するモデルにおいてバッチごとにパッチサイズも変化させます。 - 評価。画像は、指定された
patch_size(評価に必要)でmax_seq_len個のパッチに収まるようにリサイズされ、max_seq_lenまでパディングされます。 - Mixup。
mixup_fnとしてNaFlexMixupを渡すと、バッチ内でミキシングが行われますが、modeおよびcutmix_minmaxはサポートされていません。
train.pyのオプションは以下の通りです:
--naflex-loaderは、NaFlexローダーを有効にします。--naflex-train-seq-lensは、トレーニングシーケンス長を設定します。--naflex-max-seq-lenは、評価シーケンスの最大長を設定します。--naflex-patch-sizesは、可変パッチサイズ学習用のパッチサイズを設定します。--naflex-patch-size-probsは、これらのパッチサイズに対する確率を設定します。--naflex-loss-scaleは、バッチサイズに基づいてロススケーリングを選択します(none、sqrt、またはlinear)。
API
データ設定
timm.data.resolve_data_config
< source >( args = Nonepretrained_cfg = Nonemodel = Noneuse_test_size = Falseverbose = False )
timm.data.resolve_model_data_config
< source >( modelargs = Nonepretrained_cfg = Noneuse_test_size = Falseverbose = False )
Resolve Model Data Config これはresolve_data_config()と同等ですが、引数の順序を変更してモデルを先頭に配置しています。
timm.data.resolve_input_data_config
< source >( modelargs: typing.Optional[typing.Dict[str, typing.Any]] = Nonepretrained_cfg: typing.Optional[typing.Dict[str, typing.Any]] = Noneuse_test_size: bool = Falseverbose: bool = False )
現在のモデルの入力制約に対して前処理を解決します。
固定の次元数とチャネル数は、明示的なリクエストと一致する必要があります。フレキシブルなモデルは、上書きされない限り、学習/テストの事前処理に関する推奨事項を維持します。正規化は、プリフェッチローダーの既存のチャネル適応ポリシーを使用します。
変換
timm.data.create_transform
< source >( input_size: typing.Union[int, typing.Tuple[int, int], typing.Tuple[int, int, int]] = 224is_training: bool = Falseno_aug: bool = Falsetrain_crop_mode: typing.Optional[str] = Nonescale: typing.Optional[typing.Tuple[float, float]] = Noneratio: typing.Optional[typing.Tuple[float, float]] = Nonehflip: float = 0.5vflip: float = 0.0color_jitter: typing.Union[float, typing.Tuple[float, ...]] = 0.4color_jitter_prob: typing.Optional[float] = Nonegrayscale_prob: float = 0.0gaussian_blur_prob: float = 0.0auto_augment: typing.Optional[str] = Noneinterpolation: str = 'bilinear'mean: typing.Tuple[float, ...] = (0.485, 0.456, 0.406)std: typing.Tuple[float, ...] = (0.229, 0.224, 0.225)re_prob: float = 0.0re_mode: str = 'const're_count: int = 1re_num_splits: int = 0crop_pct: typing.Optional[float] = Nonecrop_mode: typing.Optional[str] = Nonecrop_border_pixels: typing.Optional[int] = Nonetf_preprocessing: bool = Falseuse_prefetcher: bool = Falsenormalize: bool = Trueseparate: bool = Falsenaflex: bool = Falsepatch_size: typing.Union[int, typing.Tuple[int, int]] = 16max_seq_len: int = 576patchify: bool = Falsepatchify_channels_last: bool = Truepatchify_flatten: bool = True )
パラメータ
- input_size — 目標の入力サイズ(チャネル数、高さ、幅)のタプルまたはサイズのスカラー値。
- is_training — トレーニング(ランダム)変換を返します。
- no_aug — 学習時のデータ拡張を無効にします(デバッグに便利です)。
- train_crop_mode — 学習時のランダムクロップモード(‘rrc’、‘rkrc’、‘rkrr’)。
- scale — ランダムリサイズのスケーリング範囲(クロップ領域、< 1.0 => ズームイン)。
- ratio — ランダムなアスペクト比の範囲(RRC におけるクロップ比率、RKR における比率調整係数)。
- hflip — 水平方向に反転する確率。
- vflip — 垂直方向の反転確率。
- color_jitter — ランダムカラージッターのコンポーネント係数(明るさ、コントラスト、彩度、色相)。 スカラー値は (scalar,) * 3 として適用されます(色相なし)。
- color_jitter_prob — None 以外の場合、この確率でカラージャITTERを適用します(SimCLR 系の拡張用)。
- grayscale_prob — 画像をグレースケールに変換する確率(SimCLR 系の拡張用)。
- gaussian_blur_prob — ガウシアンぼかしを適用する確率(SimCLR風のデータ拡張用)。
- auto_augment — Auto augment 設定文字列(auto_augment.py を参照)。
- interpolation — 画像補間モード。
- mean — 画像正規化の平均値。
- std — 画像正規化の標準偏差。
- re_prob — ランダムイレーシングの確率。
- re_mode — ランダムイレーシングの塗りつぶしモード。
- re_count — ランダムエラージョン領域の数。
- re_num_splits — バッチサイズ全体でのランダムイレーシングの分割を制御します。
- crop_pct — 推論時のクロップ率(出力サイズ / リサイズサイズ)。
- crop_mode — 推論時のクロップモード。[‘squash’, ‘border’, ‘center’] のいずれかです。None の場合は ‘center’ がデフォルトになります。
- crop_border_pixels — 推論時に、元の画像の端から指定した # ピクセル分の境界をクロップします。
- tf_preprocessing — モデル移植のテストに TF 1.0 推論前処理を使用
- use_prefetcher — Pre-fetcherが有効です。画像をテンソルに変換したり、正規化したりしないでください。
- normalize — 指定された平均/標準偏差を用いた正規化テンソルの出力(プリフェッチャーを使用しない場合)。
- separate — 出力を3段階のタプルに変換します。
- patchify — プリフェッチャーに依存する代わりに、出力をパッチ化します。
- patchify_channels_last — 各パッチ内でチャネルラストのレイアウトを使用します。
- patchify_flatten — 評価用パッチをベクトルにフラット化します。モデルがパッチサイズの補間のために空間次元を必要とする場合は、無効にしてください。
timm.data.rand_augment_transform
< source >( config_str: strhparams: typing.Optional[typing.Dict] = Nonetransforms: typing.Union[str, typing.Dict, typing.List, NoneType] = None )
パラメータ
- config_str (str) — ランダム拡張の設定を定義する文字列。ダッシュ('-')で区切られた複数のセクションで構成されます。最初のセクションは、rand augment の特定のバリアントを定義します(現在は 'rand' のみ)。残りのセクションは順序を問わず、
- ‘m’ - rand augmentの整数値のmagnitude
- ‘n’ - 整数、レイヤー数(1枚の画像ごとに選択されるtransform操作の数)
- ‘p’ - 各レイヤーを適用する浮動小数点の確率(デフォルトは 0.5)
- ‘mstd’ - 適用されるmagnitudeノイズのfloat標準偏差、またはinfinity(または > 100)の場合はuniform sampling
- ‘mmax’ - 絶対値の上限を、デフォルトの _LEVEL_DENOM (10) 以外の値に設定します
- ‘inc’ - 整数 (bool)、重みの大きさとともに深刻度が増す拡張を使用します (デフォルト: 0)
- ‘t’ - 使用する変換セットの名前 (str)
- hparams (dict) — RandAugmentationスキーム用のその他のハイパーパラメータ(kwargs)
RandAugment 変換を作成します
例:
'rand-m9-n3-mstd0.5'は、magnitude が 9、レイヤー数が 3、magnitude の標準偏差が 0.5 の RandAugment を示します。'rand-mstd1-tweights'は、マグニチュードの標準偏差が 1.0 であり、重み付きのトランスフォーム選択を行う RandAugment です。マグニチュードはデフォルトの 10、レイヤー数は 2 です。
timm.data.auto_augment_transform
< source >( config_str: strhparams: typing.Optional[typing.Dict] = None )
AutoAugment 変換を作成します
例:
'original-mstd0.5'は、元のポリシーとマグニチュードの標準偏差 0.5 を使用した AutoAugment です。
timm.data.auto_augment.augment_and_mix_transform
< source >( config_str: strhparams: typing.Optional[typing.Dict] = None )
パラメータ
- config_str (str) — ランダム拡張の設定を定義する文字列。ダッシュ(’-’)で区切られた複数のセクションで構成されます。最初のセクションは、rand augment の特定のバリアントを定義します(現在サポートされているのは ‘rand’ のみ)。残りのセクションは順序を指定せず、以下のパラメータを決定します。 ‘m’ - 拡張ミックスの整数のマグニチュード(深刻度)(デフォルト: 3) ‘w’ - 拡張チェーンの整数の幅(デフォルト: 3) ‘d’ - 拡張チェーンの整数の深さ(-1 はランダム [1, 3]、デフォルト: -1) ‘b’ - 整数(bool)、最終的なブレンドなしでチェーンの各ブランチを最終結果にブレンドし、CPU 負荷を軽減します(デフォルト: 0) ‘mstd’ - 適用されるマグニチュードノイズの浮動小数点の標準偏差(デフォルト: 0) 例: ‘augmix-m5-w4-d2’ は、深刻度 5、チェーン幅 4、チェーン深さ 2 の AugMix を生成します
- hparams — 拡張変換用のその他のハイパーパラメータ(kwargs)
AugMix PyTorch 変換の作成
class timm.data.random_erasing.RandomErasing
< source >( probability = 0.5min_area = 0.02max_area = 0.3333333333333333min_aspect = 0.3max_aspect = Nonemode = 'const'min_count = 1max_count = Nonenum_splits = 0device = 'cuda' )
パラメータ
画像内の矩形領域をランダムに選択し、そのピクセルを消去します。 Zhong らによる「Random Erasing Data Augmentation」 https://arxiv.org/pdf/1708.04896.pdfを参照してください。
このRandomErasingのバリアントは、データセットの平均と標準偏差で正規化された後、バッチまたは単一の画像テンソルに適用することを意図しています。
max_count: 1枚の画像あたりの消去ブロックの最大数。ボックスの面積はcountによってスケーリングされます。 画像ごとのcountは1とこの値の間でランダムに選択されます。
データセット
timm.data.create_dataset
< source >( name: strroot: typing.Optional[str] = Nonesplit: str = 'validation'search_split: bool = Trueclass_map: dict = Noneload_bytes: bool = Falseis_training: bool = Falsedownload: bool = Falsebatch_size: int = 1num_samples: typing.Optional[int] = Noneseed: int = 42repeats: int = 0input_img_mode: str = 'RGB'trust_remote_code: bool = False**kwargs )
パラメータ
- name — データセット名。フォルダベースのデータセットの場合は空でも構いません。プレフィックス(例:
hfds/)は大文字小文字を区別せず、torch/以外の名前はそのまま(大文字小文字を区別して)渡されます。 - root — データセットのルートフォルダ(すべて)
- split — データセットの分割(すべて)
- search_split — ルートから分割に固有の子フォルダを検索することで、コマンドラインや設定で
imagenet/のように指定でき、/imagenet/valなどを指定する必要がなくなります。(Folder, Torch) - class_map — テキストファイルまたは辞書(Folder)でクラス -> インデックスのマッピングを指定します
- load_bytes — データを読み込み、画像をデコードされていないバイトとして返します(Folder)
- download — 存在せず、サポートされている場合(HFIDS、TFDS、Torch)にデータセットをダウンロードします
- is_training — train モードでデータセットを作成します。これは split とは異なります。 Iterable / TDFS の場合は shuffle が有効になり、その他のデータセット(TFDS、WDS、HFIDS)では無視されます。
- batch_size — イテラブルなデータセット(TFDS、WDS、HFIDS)向けのバッチサイズヒント
- seed — 反復可能データセット(TFDS、WDS、HFIDS)用のシード
- repeats — 1回のイテレーション(つまりエポック)あたりのDatasetの繰り返し回数(TFDS、WDS、HFIDS)
- input_img_mode — 入力画像の色変換モード(例: ‘RGB’、‘L’)(folder、TFDS、WDS、HFDS、HFIDS)
- trust_remote_code — True の場合、Hugging Face Datasets 内のリモートコードを信頼します (HFDS, HFIDS)
- **kwargs — 基盤となる Dataset クラスおよび/または Reader クラスに渡すその他の引数
Datasetファクトリメソッド
各引数の後の括弧内には、その引数がサポートするデータセットの型が記載されています。以下のいずれかです。
- フォルダー - デフォルト、timmフォルダー(またはtar)ベースのImageDataset
- Torch - torchvision ベースのデータセット
- HFDS - Hugging Face Datasets
- HFIDS - Hugging Face Datasets のイテラブル(ストリーミングモード、IterableDatasetを使用)
- TFDS - IterableImageDataset 経由で IterableDataset インターフェースにおける Tensorflow-datasets ラッパー
- WDS - Webdataset
- All - 上記のいずれか
class timm.data.ImageDataset
< source >( rootreader = Nonesplit = 'train'class_map = Noneload_bytes = Falseinput_img_mode = 'RGB'transform = Nonetarget_transform = Noneadditional_features = None**kwargs )
class timm.data.IterableImageDataset
< source >( rootreader = Nonesplit = 'train'class_map = Noneis_training = Falsebatch_size = 1num_samples = Noneseed = 42repeats = 0download = Falseinput_img_mode = 'RGB'input_key = Nonetarget_key = Nonetransform = Nonetarget_transform = Nonemax_steps = None**kwargs )
AugMixまたはその他のクリーン/拡張ミックスを実行するためのDatasetラッパー
num_classes の長さを持つ float32 のマルチホットテンソルとして、マルチラベルのターゲットをエンコードします。
デフォルトでは、ターゲットは正クラスのインデックスのシーケンスです。空のシーケンスは正ラベルがないことを意味し、重複は許可されますが、負の値、範囲外の値、または整数でない値は拒否されます。dense=Trueの場合、ターゲットはすでにnum_classesの長さのベクトルであり、[0, 1]の範囲のbool、int、またはfloatの値を保持しています。この値は検証され、float32にキャストされますが、ソフト値は保持されます。
ローダー
timm.data.create_loader
< source >( dataset: typing.Union[timm.data.dataset.ImageDataset, timm.data.dataset.IterableImageDataset]input_size: typing.Union[int, typing.Tuple[int, int], typing.Tuple[int, int, int]]batch_size: intis_training: bool = Falseno_aug: bool = Falsere_prob: float = 0.0re_mode: str = 'const're_count: int = 1re_split: bool = Falsetrain_crop_mode: typing.Optional[str] = Nonescale: typing.Optional[typing.Tuple[float, float]] = Noneratio: typing.Optional[typing.Tuple[float, float]] = Nonehflip: float = 0.5vflip: float = 0.0color_jitter: float = 0.4color_jitter_prob: typing.Optional[float] = Nonegrayscale_prob: float = 0.0gaussian_blur_prob: float = 0.0auto_augment: typing.Optional[str] = Nonenum_aug_repeats: int = 0num_aug_splits: int = 0interpolation: str = 'bilinear'mean: typing.Tuple[float, ...] = (0.485, 0.456, 0.406)std: typing.Tuple[float, ...] = (0.229, 0.224, 0.225)num_workers: int = 1distributed: bool = Falsecrop_pct: typing.Optional[float] = Nonecrop_mode: typing.Optional[str] = Nonecrop_border_pixels: typing.Optional[int] = Nonecollate_fn: typing.Optional[typing.Callable] = Nonepin_memory: bool = Falsefp16: bool = Falseimg_dtype: dtype = torch.float32device: device = torch.device()use_prefetcher: bool = Trueuse_multi_epochs_loader: bool = Falsepersistent_workers: bool = Trueworker_seeding: str = 'all'tf_preprocessing: bool = Falseinput_size_choices: typing.Optional[typing.Sequence[typing.Union[int, typing.Tuple[int, int], typing.Tuple[int, int, int]]]] = Nonebatch_size_choices: typing.Optional[typing.Sequence[int]] = Nonebatch_choice_weights: typing.Optional[typing.Sequence[float]] = Nonebatch_choice_seed: int = 0batch_choice_schedule: str = 'constant'batch_schedule_epochs: typing.Optional[int] = Nonebatch_schedule_spread: float = 0.65batch_schedule_random_mix: float = 0.1num_batches: typing.Optional[int] = None )
パラメータ
- dataset — 読み込む画像データセット。
- input_size — 目標の入力サイズ(チャネル数、高さ、幅)のタプルまたはサイズのスカラー値。
- batch_size — バッチ内のサンプル数。
- is_training — トレーニング(ランダム)変換を返します。
- no_aug — 学習時のデータ拡張を無効にします(デバッグに便利です)。
- re_prob — ランダムイレーシングの確率。
- re_mode — ランダムイレーシングの塗りつぶしモード。
- re_count — ランダムエラージョン領域の数。
- re_split — バッチサイズにわたるランダムイレーシングの分割を制御します。
- scale — ランダムリサイズのスケーリング範囲(クロップ領域、< 1.0 => ズームイン)。
- ratio — ランダムなアスペクト比の範囲(RRC におけるクロップ比率、RKR における比率調整係数)。
- hflip — 水平方向に反転する確率。
- vflip — 垂直方向の反転確率。
- color_jitter — ランダムカラージッターのコンポーネント係数(明るさ、コントラスト、彩度、色相)。 スカラー値は (scalar,) * 3 として適用されます(色相なし)。
- color_jitter_prob — None 以外の場合、この確率でカラージャITTERを適用します(SimCLR 風の拡張
- grayscale_prob — 画像をグレースケールに変換する確率(SimCLR 系の拡張用)。
- gaussian_blur_prob — ガウシアンぼかしを適用する確率(SimCLR風のデータ拡張用)。
- auto_augment — Auto augment 設定文字列(auto_augment.py を参照)。
- num_aug_repeats — 分散GPU間で同じ拡張を繰り返すための特別なサンプラーを有効にします。
- num_aug_splits — 拡張をバッチ内で分割できるモードを有効にします。
- interpolation — 画像補間モード。
- mean — 画像正規化の平均値。
- std — 画像正規化の標準偏差。
- num_workers — DataLoader ごとに使用されるワーカープロセスの数。
- distributed — 分散学習用のデータローディングを有効にします。
- crop_pct — 推論時のクロップ率(出力サイズ / リサイズサイズ)。
- crop_mode — 推論時のクロップモード。[‘squash’, ‘border’, ‘center’] のいずれかです。None の場合は ‘center’ がデフォルトになります。
- crop_border_pixels — 推論時に、元の画像の端から指定した # ピクセル分の境界をクロップします。
- collate_fn — デフォルトのcollate_fnを上書きします。
- pin_memory — デバイスへの転送のためにメモリをピン留めします。
- fp16 — 半精度入力 dtype 用の非推奨引数。img_dtype を使用してください。
- img_dtype — 入力画像のデータ型。
- device — 入力とターゲットを転送するデバイス。
- use_prefetcher — 効率的なプリフェッチャーを使用して、サンプルをデバイスに読み込みます。
- use_multi_epochs_loader —
- persistent_workers —
num_workersがゼロより大きい場合、永続的なワーカープロセスを有効にします。 - worker_seeding — 初期化時のワーカーのランダムシード設定を制御します。
- tf_preprocessing — モデル移植のテストに TF 1.0 推論前処理を使用します。
- input_size_choices — スケジュールされた解像度学習用のバッチごとの入力サイズ選択。
- batch_size_choices — 各入力サイズ選択に対応するバッチサイズ。指定されていない場合、すべての選択に対して
batch_sizeを使用します。 - batch_choice_weights — 入力サイズ選択のサンプリング重み。指定されていない場合は均等です。
- batch_choice_seed — バッチスケジュールの作成とシャッフルに使用される乱数シード。
- batch_choice_schedule — Choiceスケジュールモード。
constantまたはprogressiveのいずれかです。 - batch_schedule_epochs — 段階的なスケジュールが選択肢を順に移動するエポック数。
- batch_schedule_spread — 漸進的選択ウィンドウの標準偏差(選択インデックス単位)。
- batch_schedule_random_mix — 段階的スケジュールにおいて、重みがゼロでない選択肢に対する一様ランダム探索の割合。
- num_batches — 1エポックあたりのローダーバッチの固定数。指定されていない場合、プログレッシブスケジュールではスケジュール平均バッチサイズから推定されます。
MixupとCutMix
class timm.data.Mixup
< source >( mixup_alpha = 1.0cutmix_alpha = 0.0cutmix_minmax = Noneprob = 1.0switch_prob = 0.5mode = 'batch'correct_lam = Truelabel_smoothing = 0.1num_classes = 1000multi_label = False )
パラメータ
- mixup_alpha (float) — mixupのalpha値です。0より大きい場合、mixupが有効になります。
- cutmix_alpha (float) — cutmix の alpha 値です。0 より大きい場合、cutmix が有効になります。
- cutmix_minmax (List[float]) — cutmix の最小/最大画像比率。cutmix が有効な場合、None でない場合は alpha の代わりにこれを使用します。
- prob (float) — バッチまたは要素ごとにmixupまたはcutmixを適用する確率
- switch_prob (float) — 両方が有効な場合、mixup ではなく cutmix に切り替える確率
- mode (str) — mixup/cutmix パラメータを適用する方法(‘batch’、‘pair’(要素のペア)、‘elem’(要素))
- correct_lam (bool) — cutmix の bbox が画像の境界でクリップされた場合、lambda 補正を適用します
- label_smoothing (float) — 混合ターゲットテンソルにラベルスモーthingを適用します
- num_classes (int) — ターゲットのクラス数
- multi_label (bool) — 密なマルチラベルのターゲットを混合し、各ラベルを0.5に向けて平滑化します。
各要素またはバッチ全体に異なるパラメータを適用するMixup/Cutmix
class timm.data.FastCollateMixup
< source >( mixup_alpha = 1.0cutmix_alpha = 0.0cutmix_minmax = Noneprob = 1.0switch_prob = 0.5mode = 'batch'correct_lam = Truelabel_smoothing = 0.1num_classes = 1000multi_label = False )
各要素またはバッチ全体に異なるパラメータを適用する、Mixup/Cutmixを備えた高速なCollate
バッチの集約(コラテート)中に実行されるMixupの実装です。
NaFlex
timm.data.create_naflex_loader
< source >( datasetpatch_size: typing.Union[int, typing.Tuple[int, int], NoneType] = Nonepatch_size_choices: typing.Optional[typing.List[int]] = Nonepatch_size_choice_probs: typing.Optional[typing.List[float]] = Nonetrain_seq_lens: typing.Tuple[int, ...] = (128, 256, 576, 784, 1024)max_seq_len: int = 576batch_size: int = 32is_training: bool = Falsemixup_fn: typing.Optional[typing.Callable] = Noneno_aug: bool = Falsere_prob: float = 0.0re_mode: str = 'const're_count: int = 1re_split: bool = Falsetrain_crop_mode: typing.Optional[str] = Nonescale: typing.Optional[typing.Tuple[float, float]] = Noneratio: typing.Optional[typing.Tuple[float, float]] = Nonehflip: float = 0.5vflip: float = 0.0color_jitter: float = 0.4color_jitter_prob: typing.Optional[float] = Nonegrayscale_prob: float = 0.0gaussian_blur_prob: float = 0.0auto_augment: typing.Optional[str] = Nonenum_aug_repeats: int = 0num_aug_splits: int = 0interpolation: str = 'bilinear'mean: typing.Tuple[float, ...] = (0.485, 0.456, 0.406)std: typing.Tuple[float, ...] = (0.229, 0.224, 0.225)channels: int = 3crop_pct: typing.Optional[float] = Nonecrop_mode: typing.Optional[str] = Nonecrop_border_pixels: typing.Optional[int] = Nonenum_workers: int = 4distributed: bool = Falserank: int = 0world_size: int = 1seed: int = 42epoch: int = 0use_prefetcher: bool = Truepin_memory: bool = Trueimg_dtype: dtype = torch.float32device: typing.Union[str, torch.device] = torch.device()persistent_workers: bool = Trueworker_seeding: str = 'all'patchify_channels_last: bool = True )
パラメータ
- dataset — 読み込む対象のデータセット。
- patch_size — 使用する単一のパッチサイズ。
- patch_size_choices — 可変パッチサイズ学習用のパッチサイズのリスト。
- patch_size_choice_probs — 各パッチサイズ選択の確率。
- train_seq_lens — 動的バッチング用の学習シーケンス長。
- max_seq_len — 検証用の固定シーケンス長。
- batch_size — 検証用のバッチサイズおよび最大トレーニングシーケンス長。
- is_training — 学習用かどうか(動的バッチングを有効にします)。
- mixup_fn — 任意の mixup 関数。
- no_aug — 拡張を無効にします。
- re_prob — ランダムイレーシングの確率。
- re_mode — ランダムイレーシングのモード。
- re_count — 消去用矩形の最大数。
- re_split — ランダムイレーズ分割フラグ。
- train_crop_mode — 学習時のクロップモード。
- scale — ランダムリサイズクロップのスケール範囲。
- ratio — ランダムリサイズクロップのアスペクト比の範囲。
- hflip — 水平方向に反転する確率。
- vflip — 垂直方向の反転確率。
- color_jitter — 色ジッター係数。
- color_jitter_prob — 色ジッターの確率。
- grayscale_prob — グレースケール変換の確率。
- gaussian_blur_prob — ガウシアンぼかしの確率。
- auto_augment — AutoAugmentポリシー。
- num_aug_repeats — 拡張の繰り返し回数。
- num_aug_splits — 拡張スプリットの数。
- interpolation — 補間方法。
- mean — 正規化用の平均値。
- std — 正規化の標準偏差の値。
- channels — 画像のチャネル数。プリフェッチャーでのチャネルごとの正規化に使用されます。
- crop_pct — 検証用のクロップ率。
- crop_mode — クロップモード。
- crop_border_pixels — 境界ピクセルをクロップします。
- num_workers — データ読み込みワーカーの数。
- distributed — 分散学習を使用するかどうか。
- rank — 分散学習用のプロセスランク。
- world_size — プロセスの総数。
- seed — ランダムシード。
- epoch — 開始エポック。
- use_prefetcher — プリフェッチを使用するかどうか。
- pin_memory — メモリをピン留めするかどうか。
- img_dtype — 画像のデータ型。
- device — テンソルを移動先とするデバイス。
- persistent_workers —
num_workersがゼロより大きい場合、永続的なワーカーを使用するかどうか。 - worker_seeding — Workerのシード設定モード。
- patchify_channels_last — パッチごとのフラットなレイアウト。
True(デフォルト): チャネルインデックスが最も速く変化します(NaFlexのデフォルト)。False:C-P-P (チャネル優先 — Gemma4 / HFネイティブレイアウト)。上流のPatchifyおよびプリフェッチャーの正規化レイアウトに転送されます。
学習用に、動的なシーケンス長サンプリングを備えたデータローダーを作成します。
class timm.data.NaFlexMapDatasetWrapper
< source >( base_dataset: Datasetpatch_size: typing.Union[int, typing.Tuple[int, int], NoneType] = Nonepatch_size_choices: typing.Optional[typing.List[int]] = Nonepatch_size_choice_probs: typing.Optional[typing.List[float]] = Noneseq_lens: typing.Tuple[int, ...] = (128, 256, 576, 784, 1024)max_tokens_per_batch: int = 16384transform_factory: typing.Optional[typing.Callable] = Nonemixup_fn: typing.Optional[typing.Callable] = Noneseed: int = 42shuffle: bool = Truedistributed: bool = Falserank: int = 0world_size: int = 1epoch: int = 0batch_divisor: int = 8patchify_channels_last: bool = True )
mapスタイルのベースデータセット用のIterableDatasetラッパー。
可変のシーケンス長を持つバッチを生成します。データセットの総サイズ(配布用にパディング済み)に基づいて、正規のバッチスケジュール(シーケンス長とバッチサイズのペア)を一度だけ計算します。各エポックで、この正規スケジュールの順序とデータセットのインデックスをシャッフルします。これにより、すべてのランクでエポックあたりのバッチ数とサンプル数が一定になります。分散学習と複数のワーカーを処理します。
DataLoader のワーカーが読み取る、マルチプロセッシングに安全なエポックを設定します。
class timm.data.NaFlexMixup
< source >( num_classes: intmixup_alpha: float = 0.8cutmix_alpha: float = 1.0switch_prob: float = 0.5prob: float = 1.0local_shuffle: int = 4label_smoothing: float = 0.0mixup_off_epoch: int = 0multi_label: bool = False )
ミキシングとターゲット生成を組み合わせるCallableラッパーです。
指定されたエポックのmixup状態を更新します。