Transformers documentation
UPerNet
Model ini dipublikasikan di HF papers pada 2018-07-26 dan disumbangkan ke Hugging Face Transformers pada 2023-01-16.
UPerNet
Ikhtisar
Model UPerNet diusulkan dalam Unified Perceptual Parsing for Scene Understanding oleh Tete Xiao, Yingcheng Liu, Bolei Zhou, Yuning Jiang, dan Jian Sun. UPerNet adalah kerangka kerja umum untuk melakukan segmentasi secara efektif pada berbagai konsep dari gambar, dengan memanfaatkan backbone visi apa pun seperti ConvNeXt atau Swin.
Abstrak dari makalah tersebut adalah sebagai berikut:
Manusia mengenali dunia visual pada beberapa tingkatan: kita dengan mudah mengategorikan adegan dan mendeteksi objek di dalamnya, sekaligus mengidentifikasi tekstur dan permukaan objek beserta bagian-bagian komposisional yang berbeda. Dalam makalah ini, kami mempelajari tugas baru yang disebut Unified Perceptual Parsing, yang mensyaratkan sistem visi mesin untuk mengenali sebanyak mungkin konsep visual dari sebuah gambar. Kerangka kerja multi-tugas bernama UPerNet dan strategi pelatihan dikembangkan untuk belajar dari anotasi gambar yang heterogen. Kami melakukan benchmark kerangka kerja kami pada Unified Perceptual Parsing dan menunjukkan bahwa kerangka kerja ini mampu melakukan segmentasi berbagai konsep dari gambar secara efektif. Jaringan yang telah dilatih kemudian diterapkan untuk menemukan pengetahuan visual dalam adegan alami.
UPerNet framework. Taken from the original paper. Model ini disumbangkan oleh nielsr. Kode aslinya didasarkan pada mmsegmentation dari OpenMMLab di sini.
Contoh penggunaan
UPerNet adalah kerangka kerja umum untuk segmentasi semantik. Kerangka kerja ini dapat digunakan dengan backbone visi apa pun, seperti berikut:
from transformers import SwinConfig, UperNetConfig, UperNetForSemanticSegmentation
backbone_config = SwinConfig(out_features=["stage1", "stage2", "stage3", "stage4"])
config = UperNetConfig(backbone_config=backbone_config)
model = UperNetForSemanticSegmentation(config)Untuk menggunakan backbone visi lain, seperti ConvNeXt, cukup instansiasi model dengan backbone yang sesuai:
from transformers import ConvNextConfig, UperNetConfig, UperNetForSemanticSegmentation
backbone_config = ConvNextConfig(out_features=["stage1", "stage2", "stage3", "stage4"])
config = UperNetConfig(backbone_config=backbone_config)
model = UperNetForSemanticSegmentation(config)Perhatikan bahwa ini akan menginisialisasi secara acak semua bobot dari model.
Sumber daya
Daftar sumber resmi Hugging Face dan komunitas (ditandai dengan π) untuk membantu Anda memulai dengan UPerNet.
- Notebook demo untuk UPerNet dapat ditemukan di sini.
- UperNetForSemanticSegmentation didukung oleh notebook ini.
- Lihat juga: Panduan tugas segmentasi semantik
Jika Anda tertarik untuk mengirimkan sumber daya agar disertakan di sini, silakan buka Pull Request dan kami akan meninjaunya! Sumber daya tersebut sebaiknya mendemonstrasikan sesuatu yang baru, bukan menduplikasi sumber daya yang sudah ada.
UperNetConfig
kelas transformers.UperNetConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonebackbone_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonehidden_size: int = 512initializer_range: float = 0.02pool_scales: list[int] | tuple[int, ...] = (1, 2, 3, 6)use_auxiliary_head: bool = Trueauxiliary_loss_weight: float = 0.4auxiliary_in_channels: int | None = Noneauxiliary_channels: int = 256auxiliary_num_convs: int = 1auxiliary_concat_input: bool = Falseloss_ignore_index: int = 255 )
Parameter
- backbone_config (
Union[dict, ~configuration_utils.PreTrainedConfig], opsional) β Konfigurasi dari model backbone. - hidden_size (
int, opsional, default512) β Dimensi dari representasi tersembunyi. - initializer_range (
float, opsional, defaultnya0.02) β Standar deviasi dari truncated_normal_initializer untuk menginisialisasi semua matriks bobot. - pool_scales (
tuple[int], opsional, default[1, 2, 3, 6]) β Skala pooling yang digunakan dalam Pooling Pyramid Module yang diterapkan pada peta fitur terakhir. - use_auxiliary_head (
bool, opsional, defaultTrue) β Apakah akan menggunakan auxiliary head selama pelatihan. - auxiliary_loss_weight (
float, opsional, default 0.4) β Bobot dari loss cross-entropy dari kepala bantu (auxiliary head). - auxiliary_in_channels (
int, opsional, default 256) β Jumlah channel input pada auxiliary head. - auxiliary_channels (
int, opsional, default 256) β Jumlah channel yang digunakan di kepala bantu. - auxiliary_num_convs (
int, opsional, default 1) β Jumlah lapisan konvolusional yang digunakan di kepala bantu. - auxiliary_concat_input (
bool, opsional, defaultFalse) β Apakah akan menggabungkan output dari auxiliary head dengan input sebelum lapisan klasifikasi. - loss_ignore_index (
int, opsional, default 255) β Indeks yang diabaikan oleh fungsi loss.
Ini adalah kelas konfigurasi untuk menyimpan konfigurasi dari UpernetModel. Kelas ini digunakan untuk membuat instans model Upernet berdasarkan argumen yang ditentukan, sehingga mendefinisikan arsitektur model. Membuat instans konfigurasi dengan nilai bawaan akan menghasilkan konfigurasi yang serupa dengan konfigurasi dari openmmlab/upernet-convnext-tiny
Objek konfigurasi mewarisi dari PreTrainedConfig dan dapat digunakan untuk mengontrol output model. Baca dokumentasi dari PreTrainedConfig untuk informasi lebih lanjut.
Contoh:
>>> from transformers import UperNetConfig, UperNetForSemanticSegmentation
>>> # Initializing a configuration
>>> configuration = UperNetConfig()
>>> # Initializing a model (with random weights) from the configuration
>>> model = UperNetForSemanticSegmentation(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configUperNetForSemanticSegmentation
kelas transformers.UperNetForSemanticSegmentation
< source >( config: UperNetConfig )
Parameter
- config (UperNetConfig) β Kelas konfigurasi model dengan semua parameter model. Inisialisasi dengan file konfigurasi tidak memuat bobot yang terkait dengan model, hanya konfigurasinya. Lihat metode from_pretrained() untuk memuat bobot model.
Framework UperNet yang memanfaatkan backbone visi apa pun, misalnya untuk ADE20k, CityScapes.
Model ini mewarisi dari PreTrainedModel. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka untuk semua model (seperti mengunduh atau menyimpan, mengubah ukuran embedding input, memangkas kepala, dll.)
Model ini juga merupakan subclass dari torch.nn.Module PyTorch. Gunakan sebagai PyTorch Module biasa dan merujuk ke dokumentasi PyTorch untuk semua hal yang berkaitan dengan penggunaan dan perilaku umum.
forward
< source >( pixel_values: typing.Optional[torch.Tensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonelabels: typing.Optional[torch.Tensor] = Nonereturn_dict: bool | None = None**kwargs ) β SemanticSegmenterOutput or tuple(torch.Tensor)
Parameter
- pixel_values (
torch.Tensordengan bentuk(batch_size, num_channels, image_size, image_size), opsional) β Tensor yang sesuai dengan gambar input. Nilai piksel dapat diperoleh menggunakan SegformerImageProcessor. Lihat SegformerImageProcessor.call() untuk detailnya (processor_classmenggunakan SegformerImageProcessor untuk memproses gambar). - output_attentions (
bool, opsional) β Apakah akan mengembalikan tensor attentions dari semua lapisan attention. Lihatattentionsdi bawah tensor yang dikembalikan untuk detail lebih lanjut. - output_hidden_states (
bool, opsional) β Apakah akan mengembalikan hidden states dari semua lapisan. Lihathidden_statesdi bawah tensor yang dikembalikan untuk detail lebih lanjut. - labels (
torch.LongTensordengan bentuk(batch_size, height, width), opsional) β Peta segmentasi semantik ground truth untuk menghitung loss. Indeks harus berada dalam[0, ..., config.num_labels - 1]. Jikaconfig.num_labels > 1, loss klasifikasi dihitung (Cross-Entropy). - return_dict (
bool, opsional) β Apakah akan mengembalikan ModelOutput alih-alih tuple biasa.
Mengembalikan
SemanticSegmenterOutput atau tuple(torch.Tensor)
Sebuah SemanticSegmenterOutput atau tuple dari
torch.Tensor (jika return_dict=False diteruskan atau ketika config.return_dict=False) yang terdiri dari berbagai
elemen tergantung pada konfigurasi (UperNetConfig) dan input.
Metode forward dari UperNetForSemanticSegmentation menimpa metode khusus __call__.
Meskipun resep untuk forward pass perlu didefinisikan di dalam fungsi ini, sebaiknya panggil instance
Modulesetelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.
loss (
torch.Tensordengan bentuk(1,), opsional, dikembalikan saatlabelsdisediakan) β Loss klasifikasi (atau regresi jika config.num_labels==1).logits (
torch.Tensordengan bentuk(batch_size, config.num_labels, logits_height, logits_width)) β Skor klasifikasi untuk setiap piksel.Logits yang dikembalikan tidak selalu memiliki ukuran yang sama dengan
pixel_valuesyang diberikan sebagai input. Hal ini dilakukan untuk menghindari dua kali interpolasi dan kehilangan kualitas ketika pengguna perlu mengubah ukuran logits menjadi ukuran gambar asli sebagai pascapemrosesan. Anda harus selalu memeriksa bentuk logits Anda dan mengubah ukurannya sesuai kebutuhan.hidden_states (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_hidden_states=Truedilewatkan atau saatconfig.output_hidden_states=True) β Tuple daritorch.Tensor(satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk(batch_size, patch_size, hidden_size).Hidden-states model pada output setiap layer ditambah output embedding awal yang opsional.
attentions (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_attentions=Truedilewatkan atau saatconfig.output_attentions=True) β Tuple daritorch.Tensor(satu untuk setiap layer) dengan bentuk(batch_size, num_heads, patch_size, sequence_length).Bobot perhatian setelah softmax perhatian, digunakan untuk menghitung rata-rata berbobot di kepala perhatian diri (self-attention).
Contoh:
>>> from transformers import AutoImageProcessor, UperNetForSemanticSegmentation
>>> from PIL import Image
>>> from huggingface_hub import hf_hub_download
>>> image_processor = AutoImageProcessor.from_pretrained("openmmlab/upernet-convnext-tiny")
>>> model = UperNetForSemanticSegmentation.from_pretrained("openmmlab/upernet-convnext-tiny")
>>> filepath = hf_hub_download(
... repo_id="hf-internal-testing/fixtures_ade20k", filename="ADE_val_00000001.jpg", repo_type="dataset"
... )
>>> image = Image.open(filepath).convert("RGB")
>>> inputs = image_processor(images=image, return_tensors="pt")
>>> outputs = model(**inputs)
>>> logits = outputs.logits # shape (batch_size, num_labels, height, width)
>>> list(logits.shape)
[1, 150, 512, 512]