# UVit2DModel

Mô hình [U-ViT](https://hf.co/papers/2301.11093) là một UNet dựa trên vision transformer (ViT). Mô hình này tích hợp các yếu tố từ ViT (xem tất cả các đầu vào như thời gian, điều kiện và các patch ảnh nhiễu như các token) và UNet (các kết nối skip dài giữa các lớp nông và lớp sâu). Kết nối skip rất quan trọng để dự đoán các đặc trưng ở cấp độ pixel. Một khối convolution 3x3 bổ sung được áp dụng trước đầu ra cuối cùng để cải thiện chất lượng ảnh.

Tóm tắt từ bài báo là:

*Hiện tại, việc áp dụng các mô hình khuếch tán trong không gian pixel của ảnh độ phân giải cao là rất khó khăn. Thay vào đó, các phương pháp hiện có tập trung vào khuếch tán trong các không gian có số chiều thấp hơn (khuếch tán ẩn), hoặc sử dụng nhiều cấp độ siêu phân giải trong quá trình sinh, được gọi là các chuỗi liên tiếp. Nhược điểm là các phương pháp này làm tăng thêm độ phức tạp cho khung khuếch tán. Bài báo này nhằm mục đích cải thiện khuếch tán khử nhiễu cho ảnh độ phân giải cao trong khi giữ cho mô hình đơn giản nhất có thể. Bài báo xoay quanh câu hỏi nghiên cứu: Làm thế nào để huấn luyện các mô hình khuếch tán khử nhiễu tiêu chuẩn trên ảnh độ phân giải cao mà vẫn đạt được hiệu suất tương đương với các phương pháp thay thế này? Bốn phát hiện chính là: 1) lịch trình nhiễu cần được điều chỉnh cho ảnh độ phân giải cao, 2) chỉ cần mở rộng một phần cụ thể của kiến trúc là đủ, 3) cần thêm dropout tại các vị trí cụ thể trong kiến trúc, và 4) hạ mẫu là một chiến lược hiệu quả để tránh các bản đồ đặc trưng độ phân giải cao. Kết hợp các kỹ thuật đơn giản nhưng hiệu quả này, chúng tôi đạt được hiệu suất tiên tiến trong số các mô hình khuếch tán cho việc sinh ảnh trên ImageNet mà không sử dụng các bộ chỉnh sửa lấy mẫu.*

## UVit2DModel[[diffusers.UVit2DModel]]

#### diffusers.UVit2DModel[[diffusers.UVit2DModel]]

```python
diffusers.UVit2DModel(hidden_size: int = 1024, use_bias: bool = False, hidden_dropout: float = 0.0, cond_embed_dim: int = 768, micro_cond_encode_dim: int = 256, micro_cond_embed_dim: int = 1280, encoder_hidden_size: int = 768, vocab_size: int = 8256, codebook_size: int = 8192, in_channels: int = 768, block_out_channels: int = 768, num_res_blocks: int = 3, downsample: bool = False, upsample: bool = False, block_num_heads: int = 12, num_hidden_layers: int = 22, num_attention_heads: int = 16, attention_dropout: float = 0.0, intermediate_size: int = 2816, layer_norm_eps: float = 1e-06, ln_elementwise_affine: bool = True, sample_size: int = 64)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/unets/uvit_2d.py#L38)

#### forward[[diffusers.UVit2DModel.forward]]

```python
forward(input_ids, encoder_hidden_states, pooled_text_emb, micro_conds, cross_attention_kwargs = None)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/unets/uvit_2d.py#L150)

**Tham số:**

input_ids (`torch.LongTensor`) : Các id token của các token ảnh tiềm ẩn bị che, có hình dạng `(batch_size, height, width)`.

encoder_hidden_states (`torch.Tensor`) : Các embedding điều kiện (các embedding được tính toán từ các điều kiện đầu vào như prompts) cần sử dụng.

pooled_text_emb (`torch.Tensor`) : Các embedding văn bản đã được pool, dùng cho việc điều kiện bổ sung.

micro_conds (`torch.Tensor`) : Các giá trị điều kiện vi mô được nhúng và kết hợp với `pooled_text_emb`.

cross_attention_kwargs (`dict`, *tùy chọn*) : Một từ điển kwargs mà nếu được chỉ định sẽ được truyền đến `AttentionProcessor`.

**Trả về:** `torch.Tensor`

Logits trên codebook cho mỗi token ảnh, có hình dạng `(batch_size, codebook_size, height, width)`.

#### set_default_attn_processor[[diffusers.UVit2DModel.set_default_attn_processor]]

```python
set_default_attn_processor()
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/unets/uvit_2d.py#L232)

Tắt các bộ xử lý chú ý tùy chỉnh và đặt cài đặt chú ý mặc định.

## UVit2DConvEmbed[[diffusers.models.unets.uvit_2d.UVit2DConvEmbed]]

#### diffusers.models.unets.uvit_2d.UVit2DConvEmbed[[diffusers.models.unets.uvit_2d.UVit2DConvEmbed]]

```python
diffusers.models.unets.uvit_2d.UVit2DConvEmbed(in_channels, block_out_channels, vocab_size, elementwise_affine, eps, bias)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/unets/uvit_2d.py#L248)

## UVitBlock[[diffusers.models.unets.uvit_2d.UVitBlock]]

#### diffusers.models.unets.uvit_2d.UVitBlock[[diffusers.models.unets.uvit_2d.UVitBlock]]

```python
diffusers.models.unets.uvit_2d.UVitBlock(channels, num_res_blocks: int, hidden_size, hidden_dropout, ln_elementwise_affine, layer_norm_eps, use_bias, block_num_heads, attention_dropout, downsample: bool, upsample: bool)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/unets/uvit_2d.py#L263)

## ConvNextBlock[[diffusers.models.unets.uvit_2d.ConvNextBlock]]

#### diffusers.models.unets.uvit_2d.ConvNextBlock[[diffusers.models.unets.uvit_2d.ConvNextBlock]]

```python
diffusers.models.unets.uvit_2d.ConvNextBlock(channels, layer_norm_eps, ln_elementwise_affine, use_bias, hidden_dropout, hidden_size, res_ffn_factor = 4)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/unets/uvit_2d.py#L362)

## ConvMlmLayer[[diffusers.models.unets.uvit_2d.ConvMlmLayer]]

#### diffusers.models.unets.uvit_2d.ConvMlmLayer[[diffusers.models.unets.uvit_2d.ConvMlmLayer]]

```python
diffusers.models.unets.uvit_2d.ConvMlmLayer(block_out_channels: int, in_channels: int, use_bias: bool, ln_elementwise_affine: bool, layer_norm_eps: float, codebook_size: int)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/unets/uvit_2d.py#L407)

