timm documentation

Điều chỉnh và xuất mô hình

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Điều chỉnh và xuất mô hình

Kênh đầu vào

Đặt in_chans bằng số kênh mà mô hình của bạn sẽ nhận. Đối với checkpoint không phải RGB, input_size[0] trong cấu hình được huấn luyện trước của nó phải mô tả số kênh của checkpoint nguồn. Ví dụ, để sử dụng hai hình ảnh 13-band xếp chồng với checkpoint ResNet-18 13-band tương ứng:

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

Ví dụ này yêu cầu checkpoint của bạn có kiến trúc và số lượng lớp nguồn tương ứng. Trọng số của lớp tích chập đầu vào được lặp lại hoặc cắt bớt theo thứ tự kênh, sau đó nhân với tỷ số kênh từ nguồn sang đích. Do đó, chuyển đổi từ 13 sang 26 sẽ lặp lại trọng số hai lần và nhân chúng với 1/2; các bản sao lặp lại của cùng một khung hình giữ nguyên phản hồi của lớp tích chập đầu vào. Chuyển đổi từ 13 sang 11 sẽ giữ lại 11 kênh đầu tiên và nhân với 13/11. Nếu số lượng kênh khớp nhau, trọng số sẽ được nạp mà không thay đổi. Chuyển đổi sang một kênh sẽ cộng các trọng số của các kênh nguồn.

Để chuyển đổi trọng số trực tiếp, hãy chỉ định rõ ràng thông tin nguồn tương ứng:

from timm.models import adapt_input_conv

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

base_chans mô tả các kênh ảnh vật lý, có thể khác với chiều đầu vào của phép卷积 trong phần stem space-to-depth. Mặc định RGB hiện có và chuyển đổi grayscale space-to-depth vẫn được hỗ trợ; các chuyển đổi kênh space-to-depth khác vẫn sử dụng phương án dự phòng cho định dạng không được hỗ trợ trong quá trình nạp. Việc chọn lựa theo từng band, khớp band ngữ nghĩa và chuẩn hóa không được suy luận: hãy sắp xếp các band và tiền xử lý cho cảm biến và tác vụ của bạn.

Lưu các Mô hình Đã Thích ứng

model.pretrained_cfg tiếp tục mô tả checkpoint nguồn sau khi thích ứng. Mô hình hiện tại phơi bày in_chans và num_classes. Từ điển _traits thuộc về instance ghi lại img_size danh định, ràng buộc fixed_input_size, và đường dẫn first_conv. Từ điển riêng biệt _model_args ghi lại các đối số xây dựng cho mục đích xuất. Các phương thức set_input_size() được hỗ trợ cập nhật đồng thời các traits và các đối số tái tạo.

Sử dụng timm.models.get_model_traits(model) để kiểm tra một bản sao của các đặc tính cùng với các thuộc tính in_chans và num_classes hiện tại. Các giá trị đếm này được đọc từ các thuộc tính thay vì được sao chép trong _traits, do đó việc đặt lại bộ phân loại vẫn được phản ánh. timm.models.get_model_input_config(model) xác định cấu hình đầu vào từ các đặc tính này, và timm.models.get_model_args(model) trả về các đối số tái tạo.

Hub export ghi một cấu hình mới mô tả các trọng số đã lưu mà không thay đổi cấu hình nguồn đang chạy. Truyền vào tiền xử lý đã được sử dụng cho mô hình đã thích ứng:

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)

Các script huấn luyện, xác thực, suy luận và benchmark tích hợp sẵn sẽ giải quyết các cài đặt đầu vào dựa trên model hiện tại. Các hàm trợ giúp resolve_data_config và resolve_model_data_config hiện có vẫn giữ nguyên hành vi cấu hình nguồn của chúng.

Các đối số xây dựng đã xuất

Factory ghi lại các đối số xây dựng như kích thước kích hoạt, chuẩn hóa và nhúng. Export loại bỏ việc đặt device/dtype và các tham số regularization huấn luyện đã được ghi nhận: drop_rate, drop_path_rate, drop_block_rate và *_drop_rate. Do đó, khi nạp lại, hệ thống sẽ sử dụng các giá trị regularization mặc định của kiến trúc trừ khi người gọi cung cấp các giá trị mới. Việc export model_args rõ ràng có thể giữ lại một rate nếu đó là chủ đích.

Các đối số callable không thể được serialize một cách đáng tin cậy. Hãy ưu tiên sử dụng tên chuỗi đã đăng ký khi xây dựng mô hình, hoặc cung cấp một tên tương đương khi xuất:

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

Nếu không có bản thay thế có thể chuỗi hóa, export sẽ gây ra lỗi nêu rõ tên đối số. Việc loại bỏ đối số này một cách im lặng có thể tái tạo một mô hình khác ngay cả khi trọng số của nó được nạp thành công.

Update on GitHub