# ConvNeXt V2

## Ikhtisar

Model ConvNeXt V2 diusulkan dalam [ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders](https://huggingface.co/papers/2301.00808) oleh Sanghyun Woo, Shoubhik Debnath, Ronghang Hu, Xinlei Chen, Zhuang Liu, In So Kweon, Saining Xie. ConvNeXt V2 adalah model konvolusional murni (ConvNet), yang terinspirasi oleh desain Vision Transformers, dan merupakan penerus dari [ConvNeXT](convnext).

Abstrak dari makalah tersebut adalah sebagai berikut:

*Dipicu oleh arsitektur yang lebih baik dan kerangka kerja pembelajaran representasi yang lebih baik, bidang pengenalan visual mengalami modernisasi dan peningkatan kinerja yang pesat pada awal 2020-an. Sebagai contoh, ConvNet modern, yang diwakili oleh ConvNeXt, telah menunjukkan kinerja yang kuat dalam berbagai skenario. Meskipun model-model ini awalnya dirancang untuk pembelajaran terawasi dengan label ImageNet, mereka juga berpotensi diuntungkan oleh teknik pembelajaran tanpa pengawasan seperti masked autoencoders (MAE). Namun, kami menemukan bahwa sekadar menggabungkan kedua pendekatan ini menghasilkan kinerja yang kurang baik. Dalam makalah ini, kami mengusulkan kerangka kerja masked autoencoder yang sepenuhnya konvolusional dan lapisan Global Response Normalization (GRN) baru yang dapat ditambahkan ke arsitektur ConvNeXt untuk meningkatkan kompetisi fitur antar kanal. Desain bersama antara teknik pembelajaran tanpa pengawasan dan peningkatan arsitektur ini menghasilkan keluarga model baru yang disebut ConvNeXt V2, yang secara signifikan meningkatkan kinerja ConvNet murni pada berbagai benchmark pengenalan, termasuk klasifikasi ImageNet, deteksi COCO, dan segmentasi ADE20K. Kami juga menyediakan model ConvNeXt V2 yang telah dilatih sebelumnya dalam berbagai ukuran, mulai dari model Atto yang efisien dengan 3,7 juta parameter dan akurasi top-1 76,7% pada ImageNet, hingga model Huge 650 juta parameter yang mencapai akurasi state-of-the-art 88,9% menggunakan hanya data pelatihan publik.*

<img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/convnextv2_architecture.png"
alt="drawing" width="600"/>

 Arsitektur ConvNeXt V2. Diambil dari paper aslinya.

Model ini disumbangkan oleh [adirik](https://huggingface.co/adirik). Kode aslinya dapat ditemukan [di sini](https://github.com/facebookresearch/ConvNeXt-V2).

## Sumber daya

Daftar sumber resmi Hugging Face dan komunitas (ditandai dengan 🌎) untuk membantu Anda memulai dengan ConvNeXt V2.

- [ConvNextV2ForImageClassification](/docs/transformers/main/id/model_doc/convnextv2#transformers.ConvNextV2ForImageClassification) didukung oleh [notebook](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb) ini.

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.

## ConvNextV2Config[[transformers.ConvNextV2Config]]

#### transformers.ConvNextV2Config[[transformers.ConvNextV2Config]]

```python
transformers.ConvNextV2Config(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, num_channels: int = 3, patch_size: int | list[int] | tuple[int, int] = 4, num_stages: int = 4, hidden_sizes: list[int] | tuple[int, ...] | None = (96, 192, 384, 768), depths: list[int] | tuple[int, ...] | None = (3, 3, 9, 3), hidden_act: str = 'gelu', initializer_range: float = 0.02, layer_norm_eps: float = 1e-12, drop_path_rate: float | int = 0.0, image_size: int | list[int] | tuple[int, int] = 224, _out_features: list[str] | None = None, _out_indices: list[int] | None = None)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/convnextv2/configuration_convnextv2.py#L25)

**Parameter:**

num_channels (`int`, *opsional*, default `3`) : Jumlah saluran input.

patch_size (`Union[int, list[int], tuple[int, int]]`, *opsional*, defaultnya `4`) : Ukuran (resolusi) dari setiap patch.

num_stages (`int`, *opsional*, defaultnya 4) : Jumlah tahap dalam model.

hidden_sizes (`Union[list[int], tuple[int, ...]]`, *opsional*, defaultnya `(96, 192, 384, 768)`) : Dimensi (ukuran tersembunyi) pada setiap tahap model.

depths (`Union[list[int], tuple[int, ...]]`, *opsional*, defaultnya `(3, 3, 9, 3)`) : Kedalaman setiap lapisan dalam Transformer.

hidden_act (`str`, *opsional*, defaultnya `gelu`) : Fungsi aktivasi non-linear (fungsi atau string) di decoder. Misalnya, `"gelu"`, `"relu"`, `"silu"`, dan sebagainya.

initializer_range (`float`, *opsional*, defaultnya `0.02`) : Deviasi standar dari truncated_normal_initializer untuk menginisialisasi semua matriks bobot.

layer_norm_eps (`float`, *opsional*, defaultnya `1e-12`) : Epsilon yang digunakan oleh lapisan normalisasi lapisan.

drop_path_rate (`Union[float, int]`, *opsional*, defaultnya `0.0`) : Tingkat drop path untuk fusi patch.

image_size (`Union[int, list[int], tuple[int, int]]`, *opsional*, defaultnya `224`) : Ukuran (resolusi) dari setiap gambar.

Ini adalah kelas konfigurasi untuk menyimpan konfigurasi dari ConvNextV2Model. Kelas ini digunakan untuk membuat instans model Convnextv2 sesuai dengan argumen yang ditentukan, sehingga mendefinisikan arsitektur model. Membuat instans konfigurasi dengan nilai bawaan akan menghasilkan konfigurasi yang serupa dengan konfigurasi dari [facebook/convnextv2-tiny-1k-224](https://huggingface.co/facebook/convnextv2-tiny-1k-224)

Objek konfigurasi mewarisi dari [PreTrainedConfig](/docs/transformers/main/id/main_classes/configuration#transformers.PreTrainedConfig) dan dapat digunakan untuk mengontrol keluaran model. Baca dokumentasi dari [PreTrainedConfig](/docs/transformers/main/id/main_classes/configuration#transformers.PreTrainedConfig) untuk informasi lebih lanjut.

Contoh:
```python
>>> from transformers import ConvNeXTV2Config, ConvNextV2Model

>>> # Initializing a ConvNeXTV2 convnextv2-tiny-1k-224 style configuration
>>> configuration = ConvNeXTV2Config()

>>> # Initializing a model (with random weights) from the convnextv2-tiny-1k-224 style configuration
>>> model = ConvNextV2Model(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config
```

## ConvNextV2Model[[transformers.ConvNextV2Model]]

#### transformers.ConvNextV2Model[[transformers.ConvNextV2Model]]

```python
transformers.ConvNextV2Model(config: ConvNextV2Config)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/convnextv2/modeling_convnextv2.py#L273)

**Parameter:**

config ([ConvNextV2Config](/docs/transformers/main/id/model_doc/convnextv2#transformers.ConvNextV2Config)) : Kelas konfigurasi model dengan semua parameter model. Inisialisasi dengan file konfigurasi tidak memuat bobot yang terkait dengan model, hanya konfigurasinya. Lihat metode [from_pretrained()](/docs/transformers/main/id/main_classes/model#transformers.PreTrainedModel.from_pretrained) untuk memuat bobot model.

Model Convnextv2 polos yang menghasilkan hidden-states mentah tanpa head spesifik di atasnya.

Model ini mewarisi dari [PreTrainedModel](/docs/transformers/main/id/main_classes/model#transformers.PreTrainedModel). Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka ini untuk semua model (seperti mengunduh atau menyimpan, mengubah ukuran input embeddings, memangkas heads, dll.)

Model ini juga merupakan subclass dari [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#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[[transformers.ConvNextV2Model.forward]]

```python
forward(pixel_values: typing.Optional[torch.Tensor] = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/convnextv2/modeling_convnextv2.py#L287)

**Parameter:**

pixel_values (`torch.Tensor` dengan bentuk `(batch_size, num_channels, image_size, image_size)`, *opsional*) : Tensor yang sesuai dengan gambar input. Nilai piksel dapat diperoleh menggunakan [ConvNextImageProcessor](/docs/transformers/main/id/model_doc/convnext#transformers.ConvNextImageProcessor). Lihat [ConvNextImageProcessor.__call__()](/docs/transformers/main/id/model_doc/molmo2#transformers.Molmo2ImageProcessor.__call__) untuk detailnya (`processor_class` menggunakan [ConvNextImageProcessor](/docs/transformers/main/id/model_doc/convnext#transformers.ConvNextImageProcessor) untuk memproses gambar).

**Mengembalikan:** `BaseModelOutputWithPoolingAndNoAttention` atau `tuple(torch.Tensor)`

Sebuah `BaseModelOutputWithPoolingAndNoAttention` atau tuple dari `torch.Tensor` (jika `return_dict=False` diteruskan atau ketika `config.return_dict=False`) yang terdiri dari berbagai elemen tergantung pada konfigurasi ([ConvNextV2Config](/docs/transformers/main/id/model_doc/convnextv2#transformers.ConvNextV2Config)) dan input.

Metode forward dari [ConvNextV2Model](/docs/transformers/main/id/model_doc/convnextv2#transformers.ConvNextV2Model) menimpa metode khusus `__call__`.

Meskipun resep untuk forward pass perlu didefinisikan di dalam fungsi ini, sebaiknya panggil instance `Module` setelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.

- **last_hidden_state** (`torch.Tensor` dengan bentuk `(batch_size, num_channels, height, width)`) -- Urutan hidden-state pada keluaran lapisan terakhir model.
- **pooler_output** (`torch.Tensor` dengan bentuk `(batch_size, hidden_size)`) -- State tersembunyi dari lapisan terakhir setelah operasi pooling pada dimensi spasial.
- **hidden_states** (`tuple(torch.Tensor)`, *opsional*, dikembalikan ketika `output_hidden_states=True` dilewatkan atau ketika `config.output_hidden_states=True`) -- Tuple dari `torch.Tensor` (satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk `(batch_size, num_channels, height, width)`.

  Hidden-states model pada output setiap layer ditambah output embedding awal yang opsional.

Contoh:

```python
```

## ConvNextV2ForImageClassification[[transformers.ConvNextV2ForImageClassification]]

#### transformers.ConvNextV2ForImageClassification[[transformers.ConvNextV2ForImageClassification]]

```python
transformers.ConvNextV2ForImageClassification(config: ConvNextV2Config)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/convnextv2/modeling_convnextv2.py#L316)

**Parameter:**

config ([ConvNextV2Config](/docs/transformers/main/id/model_doc/convnextv2#transformers.ConvNextV2Config)) : Kelas konfigurasi model dengan semua parameter model. Inisialisasi dengan file konfigurasi tidak memuat bobot yang terkait dengan model, hanya konfigurasinya. Lihat metode [from_pretrained()](/docs/transformers/main/id/main_classes/model#transformers.PreTrainedModel.from_pretrained) untuk memuat bobot model.

Model ConvNextV2 dengan kepala klasifikasi gambar di atasnya (lapisan linear di atas fitur yang dipooling), misalnya untuk ImageNet.

Model ini mewarisi dari [PreTrainedModel](/docs/transformers/main/id/main_classes/model#transformers.PreTrainedModel). Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka ini untuk semua model (seperti mengunduh atau menyimpan, mengubah ukuran input embeddings, memangkas heads, dll.)

Model ini juga merupakan subclass dari [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#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[[transformers.ConvNextV2ForImageClassification.forward]]

```python
forward(pixel_values: typing.Optional[torch.Tensor] = None, labels: typing.Optional[torch.LongTensor] = None, **kwargs)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/convnextv2/modeling_convnextv2.py#L334)

**Parameter:**

pixel_values (`torch.Tensor` dengan bentuk `(batch_size, num_channels, image_size, image_size)`, *opsional*) : Tensor yang sesuai dengan gambar input. Nilai piksel dapat diperoleh menggunakan [ConvNextImageProcessor](/docs/transformers/main/id/model_doc/convnext#transformers.ConvNextImageProcessor). Lihat [ConvNextImageProcessor.__call__()](/docs/transformers/main/id/model_doc/molmo2#transformers.Molmo2ImageProcessor.__call__) untuk detailnya (`processor_class` menggunakan [ConvNextImageProcessor](/docs/transformers/main/id/model_doc/convnext#transformers.ConvNextImageProcessor) untuk memproses gambar).

labels (`torch.LongTensor` dengan bentuk `(batch_size,)`, *opsional*) : Label untuk menghitung loss klasifikasi/regresi gambar. Indeks harus berada dalam `[0, ..., config.num_labels - 1]`. Jika `config.num_labels == 1`, loss regresi dihitung (Mean-Square loss). Jika `config.num_labels > 1`, loss klasifikasi dihitung (Cross-Entropy).

**Mengembalikan:** [ImageClassifierOutputWithNoAttention](/docs/transformers/main/id/main_classes/output#transformers.modeling_outputs.ImageClassifierOutputWithNoAttention) atau `tuple(torch.Tensor)`

A [ImageClassifierOutputWithNoAttention](/docs/transformers/main/id/main_classes/output#transformers.modeling_outputs.ImageClassifierOutputWithNoAttention) atau tuple dari `torch.Tensor` (jika `return_dict=False` dilewatkan atau ketika `config.return_dict=False`) yang terdiri dari berbagai elemen tergantung pada konfigurasi ([ConvNextV2Config](/docs/transformers/main/id/model_doc/convnextv2#transformers.ConvNextV2Config)) dan input.

Metode forward dari [ConvNextV2ForImageClassification](/docs/transformers/main/id/model_doc/convnextv2#transformers.ConvNextV2ForImageClassification) menimpa metode khusus `__call__`.

Meskipun resep untuk forward pass perlu didefinisikan di dalam fungsi ini, sebaiknya panggil instance `Module` setelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.

- **loss** (`torch.Tensor` dengan bentuk `(1,)`, *opsional*, dikembalikan saat `labels` disediakan) -- Loss klasifikasi (atau regresi jika config.num_labels==1).
- **logits** (`torch.Tensor` dengan bentuk `(batch_size, config.num_labels)`) -- Skor klasifikasi (atau regresi jika config.num_labels==1) (sebelum SoftMax).
- **hidden_states** (`tuple(torch.Tensor)`, *opsional*, dikembalikan ketika `output_hidden_states=True` dilewatkan atau ketika `config.output_hidden_states=True`) -- Tuple dari `torch.Tensor` (satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap tahap) dengan bentuk `(batch_size, num_channels, height, width)`. Hidden-states (juga disebut feature maps) dari model pada output dari setiap tahap.

Contoh:

```python
>>> from transformers import AutoImageProcessor, ConvNextV2ForImageClassification
>>> import torch
>>> from datasets import load_dataset

>>> dataset = load_dataset("huggingface/cats-image")
>>> image = dataset["test"]["image"][0]

>>> image_processor = AutoImageProcessor.from_pretrained("facebook/convnextv2-tiny-1k-224")
>>> model = ConvNextV2ForImageClassification.from_pretrained("facebook/convnextv2-tiny-1k-224")

>>> inputs = image_processor(image, return_tensors="pt")

>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> # model predicts one of the 1000 ImageNet classes
>>> predicted_label = logits.argmax(-1).item()
>>> print(model.config.id2label[predicted_label])
...
```

