timm documentation
Адаптация и экспорт моделей
Адаптация и экспорт моделей
Каналы на входе
Укажите в 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