timm documentation

モデルの適応とエクスポート

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v1.0.30).
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バンドの画像を2枚重ねて、対応する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への変換では、重みが2回繰り返され、1/2でスケーリングされます。同じフレームの繰り返しコピーにより、入力畳み込みの応答が保持されます。13から11への変換では、最初の11チャネルが保持され、13/11でスケーリングされます。チャネル数が一致する場合、変更なしで読み込まれます。1チャネルへの変換では、ソースチャネルの重みが合計されます。

直接の重み変換を行う場合は、ソース情報を明示的に指定します:

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() メソッドは、traits と再構築引数をまとめて更新します。

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 exportは、ライブのソース設定を変更せずに、保存された重みを記述する新しい設定を書き込みます。適応済みモデルに使用された前処理を渡します:

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ヘルパーは、ソース設定の動作を維持します。

エクスポートされた構築引数

ファクトリは、活性化、正規化、埋め込み次元などの構築引数を記録します。エクスポートでは、デバイス/dtype の配置と、キャプチャされた訓練時の正則化パラメータ、すなわち 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'})

シリアライズ可能な代替物が存在しない場合、exportは該当する引数名を指定してエラーを発生させます。 これを無視して削除すると、重みが正常にロードされた場合でも、異なるモデルが再構築される可能性があります。

Update on GitHub