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 نطاقًا مع نقطة تحقق ResNet-18 متطابقة من 13 نطاقًا:

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 قنوات الصورة الفيزيائية، والتي قد تختلف عن بُعد مدخلات الالتفاف لجذع تحويل المساحة إلى عمق. لا تزال التحويلات الافتراضية للألوان RGB وتحويل الرمادي من المساحة إلى العمق مدعومة؛ بينما لا تزال تحويلات القنوات الأخرى من المساحة إلى العمق تستخدم بديل الصيغة غير المدعومة أثناء التحميل. لا يتم استنتاج الاختيار المحدد لكل نطاق، أو مطابقة النطاقات الدلالية، أو التطبيع: رتّب النطاقات والمعالجة المسبقة الخاصة بمستشعرك ومهمتك.

حفظ النماذج المُكيَّفة

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 بسلوكها الخاص بإعدادات المصدر.

معاملات البناء المُصدَّرة

تسجّل المصنع معاملات البناء مثل الأبعاد الخاصة بالتفعيل، والتطبيع، والتضمين. يستثني التصدير تحديد الجهاز/نوع البيانات (device/dtype) والتسوية التدريبية الملتقطة: drop_rate، drop_path_rate، drop_block_rate، و*_drop_rate. لذلك، يستخدم إعادة التحميل قيم التسوية الافتراضية المعمارية ما لم يوفّر المستدعي قيمًا جديدة. يمكن لحجج التصدير الصريحة model_args أن تحتفظ بمعدل معين عندما يكون ذلك مقصودًا.

لا يمكن تسلسل (serialize) الحجج القابلة للاستدعاء بشكل موثوق. يُفضَّل استخدام أسماء السلاسل المسجَّلة عند بناء النموذج، أو تقديم اسم مكافئ عند التصدير:

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