# Adaptar e Exportar Modelos

## Canais de Entrada

Defina `in_chans` como o número de canais que seu modelo receberá. Para um checkpoint não-RGB, o `input_size[0]` da configuração pré-treinada deve descrever a contagem de canais do **checkpoint de origem**. Por exemplo, para usar duas imagens empilhadas de 13 bandas com um checkpoint ResNet-18 correspondente de 13 bandas:

```py
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,
    },
)
```

Este exemplo requer um checkpoint próprio com a arquitetura correspondente e o número de classes de origem. Os pesos da convolução de entrada são repetidos ou truncados na ordem dos canais e, em seguida, multiplicados pela razão entre os canais de origem e de destino. Assim, uma conversão de 13 para 26 repete os pesos duas vezes e os escala por 1/2; cópias repetidas do mesmo quadro preservam a resposta da convolução de entrada. Uma conversão de 13 para 11 mantém os primeiros 11 canais e escala por 13/11. Contagens de canais correspondentes são carregadas sem alterações. A conversão para um único canal soma os pesos dos canais de origem.

Para conversão direta de pesos, especifique explicitamente as mesmas informações de origem:

```py
from timm.models import adapt_input_conv

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

`base_chans` descreve os canais físicos da imagem, que podem diferir da dimensão de entrada da convolução do tronco space-to-depth. O padrão RGB existente e a conversão space-to-depth para cinza continuam sendo suportados; outras conversões de canais space-to-depth ainda usam o fallback de formato não suportado durante o carregamento. A seleção específica de banda, o correspondência semântica de bandas e a normalização não são inferidos: organize as bandas e o pré-processamento para o seu sensor e tarefa.

## Salvar Modelos Adaptados

`model.pretrained_cfg` continua descrevendo o checkpoint de origem após a adaptação. O modelo atual expõe `in_chans` e `num_classes`. Um dicionário `_traits` pertencente à instância registra seu `img_size` nominal, a restrição `fixed_input_size` e o caminho `first_conv`. O dicionário separado `_model_args` registra os argumentos de construção para exportação. Os métodos `set_input_size()` suportados atualizam os traits e os argumentos de reconstrução juntos.

Use `timm.models.get_model_traits(model)` para inspecionar uma cópia das características, além dos atributos atuais `in_chans` e `num_classes`. Essas contagens são lidas dos atributos em vez de serem duplicadas em `_traits`, de modo que os resets do classificador continuem refletidos. `timm.models.get_model_input_config(model)` resolve a configuração de entrada a partir dessas características, e `timm.models.get_model_args(model)` retorna os argumentos de reconstrução.

A exportação para o Hub grava uma nova configuração descrevendo os pesos salvos sem alterar a configuração de origem ativa. Passe o pré-processamento usado para o modelo adaptado:

```py
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)
```

Os scripts integrados de treinamento, validação, inferência e benchmark resolvem as configurações de entrada em relação ao modelo atual. Os auxiliares existentes `resolve_data_config` e `resolve_model_data_config` mantêm seu comportamento de configuração de origem.

## Argumentos de Construção Exportados

O registro de fábrica armazena argumentos de construção, como dimensões de ativação, normalização e incorporação. A exportação exclui a colocação de dispositivo/tipo de dados e a regularização de treinamento capturada: `drop_rate`, `drop_path_rate`, `drop_block_rate` e `*_drop_rate`. Portanto, o recarregamento usa os padrões de regularização da arquitetura, a menos que o chamador forneça novos valores. A exportação explícita de `model_args` pode reter uma taxa quando isso for intencional.

Argumentos chamáveis não podem ser serializados de forma confiável. Prefira nomes de string registrados ao construir um modelo, ou forneça um nome equivalente ao exportar:

```py
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'})
```

Sem uma substituição serializável, o export gera um erro que especifica o argumento. Removê-lo silenciosamente poderia reconstruir um modelo diferente, mesmo que seus pesos sejam carregados com sucesso.

