timm documentation
Данные
Данные
На этой странице представлена справочная документация по API подпакета timm.data, а также обзор входного конвейера, который он предоставляет: разрешение конфигурации предобработки модели, построение трансформаций, создание наборов данных и загрузчиков, Mixup / CutMix и загрузчик с переменным разрешением NaFlex.
Использование
Пайплайн собирается в четыре шага: 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задает силу изменения цвета.--train-interpolationзадаёт интерполяцию для изменения размера при обучении.--workersзадает количество рабочих процессов загрузчика.--no-prefetcherотключает предзагрузчик.
Mixup и CutMix (Mixup):
--mixupзадает альфа Mixup.--cutmixзадает альфа-параметр CutMix.--cutmix-minmaxзадаёт диапазон размеров CutMix-коробок.--mixup-probзадает вероятность смешивания.--mixup-switch-probзадает вероятность выбора CutMix, когда оба метода включены.--mixup-modeвыбирает смешивание на уровне батча, пары или элемента.--smoothingзадаёт сглаживание меток.
См. примеры в разделе Scripts.
Конфигурация данных
resolve_data_config возвращает словарь со следующими ключами, которые соответствуют аргументам create_transform и create_loader. Значения, установленные в args (словарь, например, vars(args) разобранных аргументов командной строки), имеют приоритет над аргументом pretrained_cfg, который по умолчанию равен model.pretrained_cfg. resolve_model_data_config делает то же самое, но принимает модель первым аргументом.
Обе функции читают размер входа и количество каналов из предобученного 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 | Нормализация, одно значение повторяется для каждого канала | Среднее / стандартное отклонение ImageNet |
crop_pct | crop_pct | Eval crop: изображение масштабируется до size / crop_pct перед обрезкой до size (test_crop_pct при use_test_size=True) | 0.875 |
crop_mode | crop_mode | Режим обрезки для оценки, center, squash или border | center |
Режимы обрезки для оценки, для выходного size и scale_size = floor(size / crop_pct):
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), изменение цвета (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 | RandAugment с помощью rand_augment_transform |
augmix-m5-w4-d2 | AugMix с помощью augment_and_mix_transform |
original, originalr, v0, v0r, 3a | Политика AutoAugment через auto_augment_transform |
Токены опций RandAugment:
mзадает величину (по умолчанию 10).nзадает количество операций на изображение (по умолчанию 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.
Поведение трансформации:
- Color jitter отключается, если задан параметр
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 с тем же | Папка с набором данных или файл .tar | |
torch/<name> | torchvision cifar10, cifar100, mnist, kmnist, fashion_mnist, qmnist, inaturalist (inat), places365, imagenet или image_folder (folder) | Корень датасета torchvision | |
hfds/<name> | ImageDataset на датасете Hugging Face Hub (или локальном пути) через datasets.load_dataset | Каталог кэша (необязательно) | datasets |
hfids/<name> | IterableImageDataset, набор данных Hugging Face, передаваемый потоком, либо предварительно загруженный и подготовленный с download=True | Каталог кэша (необязательно) | datasets |
tfds/<name> | IterableImageDataset в TensorFlow Datasets, download=True загружает и строит | Каталог данных TFDS | tensorflow, tensorflow-datasets |
wds/<name> | IterableImageDataset на tar-шардах WebDataset | Папка с шардами, содержащая _info.json (или info.json) с описанием разбиений | webdataset |
Варианты набора данных:
splitвыбирает разделение набора данных (по умолчаниюvalidation). Для WebDataset это также может быть шаблон шарда с количеством образцов,'imagenet-train-{0000..1023}.tar|1281167'.search_split=True(по умолчанию) заставляет датасеты в формате папок искать подпапкуrootс именемsplitили, если её нет, синоним обучающего (train,training) или оценочного (val,valid,validation,eval,evaluation) сплита.add_img_extensionsдобавляет расширения к стандартным расширениям изображений (.png,.jpgи.jpeg).class_mapпереназначает имена классов на индексы с помощью словаря, файла.txt(один класс на строку) или файла.pkl.
Итерируемые наборы данных (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или поле в сопутствующем файле.jsonс именем, заданным вtarget_key). Значение, разделённое запятыми, читает одно бинарное поле на каждый класс.target_format='multihot'читает плотные многогорячие векторы вместо списков индексов классов для данных с несколькими метками.target_transform=MultiLabelTarget(num_classes)кодирует целевые значения как float-тензоры с мульти-горячим кодированием. Передайтеdense=TrueвMultiLabelTargetдля полей с мульти-горячим кодированием.
Читатели папок и tar-архивов возвращают индексы одного класса. Подробности см. в разделе многоклассовая классификация.
Загрузчики
create_loader создаёт трансформ с помощью create_transform на основе собственных аргументов,
присваивает его dataset.transform (заменяя существующий трансформ) и возвращает DataLoader. Загрузчики для обучения
(is_training=True) перемешивают данные и отбрасывают последний неполный батч.
- Предварительный загрузчик (Prefetcher). При
use_prefetcher=True(по умолчанию) набор данных возвращает тензоры типаuint8, батчи перемещаются наdevice(по умолчаниюcuda, на отдельном потоке для CUDA), преобразуются вimg_dtype, нормализуются и случайно стираются там. Укажитеdeviceкак устройство обучения или задайтеuse_prefetcher=Falseдля обычногоDataLoaderс нормализованными тензорами. - Распределённый режим.
distributed=TrueиспользуетDistributedSamplerдля обучающих наборов данных map-style (или повторный сэмплер аугментации сnum_aug_repeats) и упорядоченный сэмплер для оценки, который дополняет каждый процесс до одинакового количества образцов, что может незначительно изменить результаты валидации. Итерируемые наборы данных сами распределяются по процессам и воркерам. - Collate.
collate_fnзаменяет стандартную (fast_collateс prefetcher,default_collateбез него), например, наFastCollateMixup. - Разделения аугментации. Для AugMix с потерей JSD (
--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 во время коллации в воркерах загрузчика, для этого требуется префетчер. Оба возвращают плотные целевые значения (batch_size, num_classes) с применённым label_smoothing (по умолчанию 0.1), которые предназначены для использования с потерей для мягких целевых значений, например 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, наpairэлементов или наelem(элемент).multi_label=Trueсмешивает плотные многометочные целевые значения, сглаживая каждую метку в сторону 0.5.mixup_enabled = Falseотключает смешивание, например, для последних эпох (--mixup-off-epoch). ДляFastCollateMixupзначение читается в рабочих процессах; постоянные рабочие процессы сохраняют значение, с которым они были запущены.
НаFlex переменное разрешение
create_naflex_loader загружает изображения как последовательности патчей переменной длины,
без изменения размера до фиксированного квадрата, для моделей, принимающих вход в виде патчей NaFlex (например, модели naflexvit_*). Каждая
партия представляет собой словарь с ключами patches, patch_coord, patch_valid и seq_len, дополненный до длины последовательности партии.
- Обучение. Набор данных оборачивается в
NaFlexMapDatasetWrapper(только для map-style наборов данных), который выбирает одно из значенийtrain_seq_lensдля каждой партии и выполняет случайный resize-crop каждого изображения, чтобы оно соответствовало выбранному количеству патчей.batch_size— это размер партии при максимальной длине последовательности; для более коротких последовательностей размер партии увеличивается пропорционально (округляется вниз до кратного 8), чтобы количество токенов в партии оставалось примерно постоянным.patch_size_choices(вместе сpatch_size_choice_probs) также варьирует размер патча для каждой партии, если модель это поддерживает. - Оценка. Изображения масштабируются так, чтобы вписать
max_seq_lenпатчей при заданномpatch_size(обязательно для оценки), и дополняются доmax_seq_len. - Mixup. Передайте
NaFlexMixupв качествеmixup_fn: он выполняет смешивание внутри каждой партии и не поддерживает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 )
Параметры
- model (nn.Module) — экземпляр модели
- args (dict) — аргументы командной строки / конфигурация в формате dict (перекрывает pretrained_cfg)
- pretrained_cfg (dict) — конфигурация предобученной модели (заменяет pretrained_cfg, привязанную к модели)
- use_test_size (bool) — использовать разрешение входных данных на этапе тестирования (если оно существует) вместо разрешения по умолчанию для обучения
- verbose (bool) — включить дополнительное логирование разрешённых значений
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 (для аугментаций в стиле 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’]. По умолчанию ‘center’, если значение равно None.
- crop_border_pixels — Обрезка границы при инференсе на указанное количество пикселей вокруг края исходного изображения.
- tf_preprocessing — Используйте предобработку для вывода TF 1.0 для тестирования портированных моделей
- use_prefetcher — Включен предварительный загрузчик. Не преобразуйте изображение в тензор и не нормализуйте.
- normalize — Выход тензора нормализации с указанными средним/стандартным отклонением (если prefetcher не используется).
- separate — Выводит трансформации в виде кортежа из трёх элементов.
- patchify — Разбивать вывод на патчи, не полагаясь на префетчер.
- patchify_channels_last — Использовать каналы-последние (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’ - целое значение, задающее величину (magnitude) для rand augment
- ‘n’ - целое число, количество слоёв (число выбранных операций трансформации на изображение)
- ‘p’ - вероятность применения каждого слоя (по умолчанию 0.5)
- ‘mstd’ - стандартное отклонение шума амплитуды, применяемого в виде гауссова шума, или равномерная выборка, если значение равно бесконечности (или > 100)
- ‘mmax’ - установить верхнюю границу амплитуды в значение, отличное от значения по умолчанию _LEVEL_DENOM (10)
- ‘inc’ - целое (bool), использовать аугментации, чья сила возрастает с увеличением величины (по умолчанию: 0)
- ‘t’ - str имя набора трансформаций, который следует использовать
- hparams (dict) — Другие гиперпараметры (kwargs) для схемы RandAugmentation
Создайте трансформацию RandAugment
Примеры:
'rand-m9-n3-mstd0.5'— это RandAugment с величиной 9, 3 слоями и стандартным отклонением величины 0.5.'rand-mstd1-tweights'— это RandAugment со стандартным отклонением величины 1.0 и взвешенным выбором трансформаций, при величине по умолчанию 10 и 2 слоях.
timm.data.auto_augment_transform
< source >( config_str: strhparams: typing.Optional[typing.Dict] = None )
Параметры
- config_str — Строка, определяющая конфигурацию автоматического аугментирования. Состоит из нескольких разделов, разделённых дефисами (’-’). Первый раздел определяет политику AutoAugment (одна из ‘v0’, ‘v0r’, ‘original’, ‘originalr’). Остальные разделы определяют другие аргументы
- ‘mstd’ - стандартное отклонение шума амплитуды
- hparams — Другие гиперпараметры (kwargs) для схемы AutoAugmentation
Создайте трансформацию AutoAugment
Примеры:
'original-mstd0.5'— это AutoAugment с исходной политикой и стандартным отклонением величины 0.5.
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’ — float, стандартное отклонение шума величины, применяемого (по умолчанию: 0) Например, ‘augmix-m5-w4-d2’ приводит к AugMix с серьёзностью 5, шириной цепочки 4 и глубиной цепочки 2
- 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' )
Параметры
- probability — Вероятность выполнения операции Random Erasing.
- min_area — Минимальный процент удалённой области относительно площади входного изображения.
- max_area — Максимальный процент удалённой области относительно площади входного изображения.
- min_aspect — минимальное соотношение сторон удаляемой области.
- mode — режим цвета пикселей, одно из значений ‘const’, ‘rand’ или ‘pixel’ ‘const’ — блок стирания имеет постоянный цвет 0 для всех каналов ‘rand’ — блок стирания имеет одинаковый случайный (нормальный) цвет для каждого канала ‘pixel’ — блок стирания имеет случайный (нормальный) цвет для каждого пикселя
Случайным образом выбирает прямоугольную область на изображении и стирает её пиксели. «Random Erasing Data Augmentation» авторов Zhong et al. См. https://arxiv.org/pdf/1708.04896.pdf
Этот вариант RandomErasing предназначен для применения к тензору батча или одиночного изображения после его нормализации средним и стандартным отклонением набора данных.
max_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 — Корневая папка набора данных (All)
- split — Разделение датасета (Все)
- search_split — Поиск дочернего фолда, соответствующего указанному сплиту, начиная с корневого узла, чтобы можно было указывать
imagenet/вместо/imagenet/valи т. д. в командной строке или конфигурации. (Папка, Torch) - class_map — Укажите сопоставление классов с индексами с помощью текстового файла или словаря (Folder)
- load_bytes — Загрузка данных, возврат изображений в виде недекодированных байтов (Folder)
- download — Загрузить датасет, если он отсутствует и поддерживается (HFIDS, TFDS, Torch)
- is_training — Создать датасет в режиме обучения, это отличается от разбиения (split). Для Iterable / TDFS включает перемешивание, для других датасетов игнорируется. (TFDS, WDS, HFIDS)
- batch_size — Подсказка размера батча для итерируемых наборов данных (TFDS, WDS, HFIDS)
- seed — Значение для итерируемых наборов данных (TFDS, WDS, HFIDS)
- repeats — количество повторов датасета на итерацию, то есть на эпоху (TFDS, WDS, HFIDS)
- input_img_mode — Режим преобразования цвета входного изображения, например, ‘RGB’, ‘L’ (папка, TFDS, WDS, HFDS, HFIDS)
- trust_remote_code — Доверять удалённому коду в Hugging Face Datasets, если True (HFDS, HFIDS)
- **kwargs — Другие аргументы для передачи в базовые классы Dataset и/или Reader
Фабричный метод датасета
В скобках после каждого аргумента указан тип поддерживаемого для него набора данных, один из:
- Папка — по умолчанию, набор данных изображений на основе папки (или архива tar) timm
- Torch - наборы данных на основе torchvision
- HFDS - Hugging Face Datasets
- HFIDS - Hugging Face Datasets Iterable (потоковый режим, с IterableDataset)
- TFDS - обёртка над Tensorflow-datasets в интерфейсе IterableDataset через IterableImageDataset
- WDS - Webdataset
- Все — любой из перечисленных выше
класс timm.data.ImageDataset
< source >( rootreader = Nonesplit = 'train'class_map = Noneload_bytes = Falseinput_img_mode = 'RGB'transform = Nonetarget_transform = Noneadditional_features = None**kwargs )
класс 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 или других смесей чистых/дополненных данных
Кодирует многометочную цель как многогорячий тензор float32 длины num_classes.
По умолчанию целевое значение представляет собой последовательность индексов положительных классов: пустая последовательность означает отсутствие положительных меток, повторения разрешены, а отрицательные, выходящие за пределы диапазона или нецелочисленные значения отклоняются. При dense=True целевое значение уже является вектором длины num_classes, содержащим значения типа bool, int или float в диапазоне [0, 1]; оно проверяется и приводится к 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 (для ауг
- 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’]. По умолчанию ‘center’, если значение равно None.
- crop_border_pixels — Обрезка границы при инференсе на указанное количество пикселей вокруг края исходного изображения.
- collate_fn — Переопределение функции collate_fn по умолчанию.
- pin_memory — Фиксация памяти для передачи на устройство.
- fp16 — Устаревший аргумент для входного типа данных с половинной точностью. Используйте 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 — Режим расписания выбора, принимает значение
constantилиprogressive. - batch_schedule_epochs — Количество эпох, в течение которых прогрессивное расписание проходит по своим вариантам.
- batch_schedule_spread — Стандартное отклонение окна прогрессивного выбора, в единицах индексов выбора.
- batch_schedule_random_mix — Доля равномерного случайного исследования среди вариантов с ненулевым весом в прогрессивном расписании.
- num_batches — фиксированное количество батчей загрузчика на эпоху. Если не указано, вычисляется на основе среднего размера батча в расписании для прогрессивных расписаний.
Mixup и CutMix
класс 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; mixup активен, если значение > 0.
- cutmix_alpha (float) — значение альфы для cutmix; cutmix активен, если значение > 0.
- cutmix_minmax (List[float]) — минимальное и максимальное соотношение изображений для cutmix; cutmix активен и использует это значение вместо alpha, если оно не равно None.
- prob (float) — вероятность применения mixup или cutmix для каждой партии или элемента
- switch_prob (float) — вероятность переключения на cutmix вместо mixup, когда оба метода активны
- mode (str) — способ применения параметров mixup/cutmix (для ‘batch’, ‘pair’ (пара элементов), ‘elem’ (элемент)
- correct_lam (bool) — применять коррекцию lambda, если bbox cutmix обрезан границами изображения
- label_smoothing (float) — применяет сглаживание меток к смешанному тензору целевых значений
- num_classes (int) — количество классов для целевой переменной
- multi_label (bool) — Смешивает плотные многометочные целевые значения, сглаживая каждую метку в сторону 0.5.
Mixup/Cutmix, применяющий разные параметры к каждому элементу или всей выборке
класс 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 )
Быстрый Collate с Mixup/Cutmix, применяющий разные параметры к каждому элементу или ко всей выборке
Реализация 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 — Вероятность применения color jitter.
- 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 — Режим инициализации рабочих процессов.
- patchify_channels_last — Плоская раскладка для каждого патча.
True(по умолчанию): индекс канала меняется быстрее всего (настройка по умолчанию в NaFlex).False: C-P-P (каналы впереди — нативная раскладка Gemma4 / HF). Передаётся в внешнийPatchifyи в раскладку нормализации предзагрузчика.
Создайте загрузчик данных с динамической выборкой длины последовательности для обучения.
класс 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 )
Обёртка IterableDataset для базового набора данных в стиле map.
Формирует батчи с переменной длиной последовательностей. Вычисляет каноническое расписание батчей (пары длины последовательности и размера батча) один раз на основе общего размера набора данных (с выравниванием для распределения). В каждой эпохе перемешивает порядок этого канонического расписания и индексов набора данных. Это обеспечивает одинаковое количество батчей и образцов в каждой эпохе на всех рангах. Поддерживает распределённое обучение и несколько рабочих процессов.
Установите чтение эпохи, безопасное для многопроцессорности, для рабочих процессов DataLoader.
класс 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 )
Вызываемая обёртка, объединяющая смешивание и генерацию целевых значений.
Обновите состояние mixup для указанной эпохи.