timm documentation

Адаптация и экспорт моделей

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Адаптация и экспорт моделей

Каналы на входе

Укажите в in_chans количество каналов, которое будет получать ваша модель. Для контрольной точки, отличной от RGB, параметр input_size[0] в её предобученной конфигурации должен описывать количество каналов исходной контрольной точки. Например, чтобы использовать два стопки 13-полосных изображений с соответствующей 13-полосной контрольной точкой ResNet-18:

import timm

model = timm.create_model(
    'resnet18',
    pretrained=True,
    in_chans=26,
    num_classes=10,
    pretrained_cfg_overlay={
        'file': 'path/to/your_13_band_resnet18.pth',
        'input_size': (13, 224, 224),
        'num_classes': 10,
    },
)

Для этого примера требуется собственный контрольный пункт с соответствующей архитектурой и количеством исходных классов. Веса входной свёртки повторяются или обрезаются в порядке каналов, а затем умножаются на отношение количества каналов от исходного к целевому. Таким образом, при преобразовании с 13 на 26 каналы веса повторяются дважды и масштабируются на 1/2; повторные копии одного и того же кадра сохраняют отклик входной свёртки. При преобразовании с 13 на 11 каналы сохраняются первые 11 каналов, а масштабирование выполняется на 13/11. При совпадении количества каналов веса загружаются без изменений. При преобразовании в один канал веса исходных каналов суммируются.

Для прямого преобразования весов явно укажите ту же исходную информацию:

from timm.models import adapt_input_conv

temporal_weights = adapt_input_conv(26, pretrained_weights, base_chans=13)

base_chans describes physical image channels, which can differ from a space-to-depth stem’s convolution input dimension. The existing RGB default and space-to-depth grayscale conversion remain supported; other space-to-depth channel conversions still use the unsupported-format fallback during loading. Band-specific selection, semantic band matching, and normalization are not inferred: arrange the bands and preprocessing for your sensor and task.

Сохранение адаптированных моделей

model.pretrained_cfg по-прежнему описывает исходную контрольную точку после адаптации. Текущая модель предоставляет in_chans и num_classes. Словарь _traits, принадлежащий экземпляру, фиксирует его номинальный img_size, ограничение fixed_input_size и путь first_conv. Отдельный словарь _model_args фиксирует аргументы конструирования для экспорта. Поддерживаемые методы set_input_size() обновляют характеристики и аргументы реконструкции вместе.

Используйте timm.models.get_model_traits(model), чтобы просмотреть копию характеристик, а также текущие атрибуты in_chans и num_classes. Эти значения считываются из атрибутов, а не дублируются в _traits, поэтому сброс классификатора отражается корректно. timm.models.get_model_input_config(model) определяет конфигурацию входных данных на основе этих характеристик, а timm.models.get_model_args(model) возвращает аргументы для реконструкции.

Экспорт в Hub записывает новую конфигурацию, описывающую сохранённые веса, не изменяя исходную конфигурацию. Передайте предобработку, использованную для адаптированной модели:

from timm.models import save_for_hf

save_for_hf(model, 'my_model', data_config=data_config)
restored = timm.create_model('local-dir:my_model', pretrained=True)

Встроенные скрипты обучения, валидации, инференса и бенчмаркинга разрешают входные настройки относительно текущей модели. Существующие помощники resolve_data_config и resolve_model_data_config сохраняют поведение, связанное с исходной конфигурацией.

Экспортированные аргументы конструирования

Фабрика фиксирует аргументы построения, такие как активация, нормализация и размеры эмбеддингов. Экспорт исключает размещение на устройстве/типе данных и захваченную регуляризацию обучения: drop_rate, drop_path_rate, drop_block_rate и *_drop_rate. Поэтому при повторной загрузке используются значения регуляризации по умолчанию для данной архитектуры, если вызывающая сторона не передаст новые значения. Явный экспорт model_args может сохранить значение скорости, если это сделано намеренно.

Аргументы-вызываемые объекты (callable) не могут быть надёжно сериализованы. При построении модели предпочтительнее использовать зарегистрированные строковые имена, либо указывать эквивалентное имя при экспорте:

import torch.nn as nn

model = timm.create_model('resnet18', act_layer=nn.SiLU)
save_for_hf(model, 'my_silu_resnet', model_args={'act_layer': 'silu'})

Без сериализуемого заменщика экспорт вызывает ошибку, указывающую на имя аргумента. Его молчаливое удаление может привести к восстановлению другой модели, даже если веса загружаются успешно.

Update on GitHub