# Transformer2DModel

[CompVis](https://huggingface.co/CompVis)의 이미지형 데이터용 Transformer 모델로, Dosovitskiy et al.이 소개한 [Vision Transformer](https://huggingface.co/papers/2010.11929)를 기반으로 합니다. [Transformer2DModel](/docs/diffusers/main/ko/api/models/transformer2d#diffusers.Transformer2DModel)은 이산형(벡터 임베딩의 클래스) 또는 연속형(실제 임베딩) 입력을 받습니다.

입력이 **연속**인 경우:

1. 입력을 투영하고 `(batch_size, sequence_length, feature_dimension)`으로 재구성합니다.
2. Transformer 블록을 표준 방식으로 적용합니다.
3. 이미지로 리사이즈합니다.

입력이 **이산**인 경우:

> [!TIP]
> 입력 클래스 중 하나가 마스킹된 잠재 픽셀임을 가정합니다. 노이즈가 제거된 이미지의 예측 클래스에는 마스킹된 픽셀에 대한 예측이 포함되지 않습니다. 노이즈가 제거된 이미지는 마스킹할 수 없기 때문입니다.

1. 입력(잠재 픽셀 클래스)을 임베딩으로 변환하고 위치 임베딩을 적용합니다.
2. Transformer 블록을 표준 방식으로 적용합니다.
3. 노이즈가 없는 이미지의 클래스를 예측합니다.

## Transformer2DModel[[diffusers.Transformer2DModel]]

#### diffusers.Transformer2DModel[[diffusers.Transformer2DModel]]

```python
diffusers.Transformer2DModel(num_attention_heads: int = 16, attention_head_dim: int = 88, in_channels: int | None = None, out_channels: int | None = None, num_layers: int = 1, dropout: float = 0.0, norm_num_groups: int = 32, cross_attention_dim: int | None = None, attention_bias: bool = False, sample_size: int | None = None, num_vector_embeds: int | None = None, patch_size: int | None = None, activation_fn: str = 'geglu', num_embeds_ada_norm: int | None = None, use_linear_projection: bool = False, only_cross_attention: bool = False, double_self_attention: bool = False, upcast_attention: bool = False, norm_type: str = 'layer_norm', norm_elementwise_affine: bool = True, norm_eps: float = 1e-05, attention_type: str = 'default', caption_channels: int = None, interpolation_scale: float = None, use_additional_conditions: bool | None = None)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/transformer_2d.py#L39)

**매개변수:**

num_attention_heads (`int`, *선택 사항*, 기본값 16) : 멀티 헤드 어텐션에 사용할 헤드 수입니다.

attention_head_dim (`int`, *선택 사항*, 기본값 88) : 각 헤드(head)의 채널 수입니다.

in_channels (`int`, *선택 사항*) : 입력과 출력의 채널 수(입력이 **연속형**인 경우 지정).

num_layers (`int`, *선택 사항*, 기본값 1) : 사용할 Transformer 블록의 레이어 수입니다.

dropout (`float`, *선택 사항*, 기본값 0.0) : 사용할 dropout 확률입니다.

cross_attention_dim (`int`, *선택 사항*) : 사용할 `encoder_hidden_states` 차원의 수입니다.

sample_size (`int`, *선택 사항*) : 잠재 이미지의 너비(입력이 **discrete**인 경우 지정). 위치 임베딩의 수를 학습하는 데 사용되므로 학습 중에 고정됩니다.

num_vector_embeds (`int`, *선택 사항*) : 잠재 픽셀의 벡터 임베딩 클래스 수(입력이 **이산**인 경우 지정). 마스킹된 잠재 픽셀의 클래스를 포함합니다.

activation_fn (`str`, *선택 사항*, 기본값 `"geglu"`) : 피드포워드에서 사용할 활성화 함수.

num_embeds_ada_norm ( `int`, *선택 사항*) : 학습 중에 사용되는 확산 단계 수입니다. `AdaLayerNorm`이 norm_layers 중 하나 이상인 경우 전달해야 합니다. 이는 학습 중에 고정되며, hidden states에 추가되는 임베딩의 수를 학습하는 데 사용되기 때문입니다. 추론 시에는 `num_embeds_ada_norm`보다 많은 단계로 노이즈를 제거할 수는 없습니다.

attention_bias (`bool`, *선택 사항*) : `TransformerBlocks`의 attention에 bias 매개변수를 포함할지 구성합니다.

이미지형 데이터를 위한 2D Transformer 모델입니다.

#### forward[[diffusers.Transformer2DModel.forward]]

```python
forward(hidden_states: Tensor, encoder_hidden_states: typing.Optional[torch.Tensor] = None, timestep: typing.Optional[torch.LongTensor] = None, added_cond_kwargs: dict = None, class_labels: typing.Optional[torch.LongTensor] = None, cross_attention_kwargs: dict = None, attention_mask: typing.Optional[torch.Tensor] = None, encoder_attention_mask: typing.Optional[torch.Tensor] = None, return_dict: bool = True)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/transformer_2d.py#L324)

**매개변수:**

hidden_states (`torch.LongTensor`의 경우 `(batch size, num latent pixels)` 형태, `torch.Tensor`의 경우 `(batch size, channel, height, width)` 형태) : 입력 `hidden_states`.

encoder_hidden_states ( `torch.Tensor`, shape `(batch size, sequence len, embed dims)`, *선택 사항*) : cross attention layer에 사용되는 조건부 임베딩입니다. 제공되지 않으면 cross-attention은 기본적으로 self-attention으로 동작합니다.

timestep ( `torch.LongTensor`, *선택 사항*) : 노이즈 제거 단계를 나타내는 데 사용됩니다. `AdaLayerNorm`에서 임베딩으로 적용될 선택적 타임스텝입니다.

class_labels ( `torch.LongTensor`, shape `(batch size, num classes)`, *선택 사항*) : 클래스 레이블 조건화를 나타내는 데 사용됩니다. `AdaLayerZeroNorm`에서 임베딩으로 적용될 선택적 클래스 레이블입니다.

cross_attention_kwargs ( `dict[str, Any]`, *선택*) : 지정된 경우 [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py)의 `self.processor` 아래에서 정의된 `AttentionProcessor`로 전달되는 kwargs 사전입니다.

attention_mask ( `torch.Tensor`, *선택 사항*) : `(batch, key_tokens)` 모양의 어텐션 마스크가 `encoder_hidden_states`에 적용됩니다. `1`인 경우 마스크가 유지되고, `0`인 경우 폐기됩니다. 마스크는 바이어스로 변환되어 "폐기" 토큰에 해당하는 어텐션 점수에 큰 음의 값을 더합니다.

encoder_attention_mask ( `torch.Tensor`, *선택 사항*) : `encoder_hidden_states`에 적용되는 크로스 어텐션 마스크. 두 가지 형식을 지원합니다:  * 마스크 `(batch, sequence_length)` True = 유지, False = 제거. * 바이어스 `(batch, 1, sequence_length)` 0 = 유지, -10000 = 제거.  `ndim == 2`인 경우: 마스크로 해석된 후, 위의 형식과 일관된 바이어스로 변환됩니다. 이 바이어스는 크로스 어텐션 점수에 추가됩니다.

return_dict (`bool`, *선택 사항*, 기본값 `True`) : 일반 튜플 대신 [UNet2DConditionOutput](/docs/diffusers/main/ko/api/models/unet2d-cond#diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput)을 반환할지 여부.

**반환값:**

`return_dict`가 True이면 `Transformer2DModelOutput`이 반환되고, 그렇지 않으면 첫 번째 요소가 샘플 텐서인 `tuple`이 반환됩니다.

[Transformer2DModel](/docs/diffusers/main/ko/api/models/transformer2d#diffusers.Transformer2DModel)의 forward 메서드입니다.

## Transformer2DModelOutput[[diffusers.models.modeling_outputs.Transformer2DModelOutput]]

#### diffusers.models.modeling_outputs.Transformer2DModelOutput[[diffusers.models.modeling_outputs.Transformer2DModelOutput]]

```python
diffusers.models.modeling_outputs.Transformer2DModelOutput(sample: torch.Tensor)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/modeling_outputs.py#L21)

**매개변수:**

sample (`torch.Tensor`, shape `(batch_size, num_channels, height, width)` 또는 [Transformer2DModel](/docs/diffusers/main/ko/api/models/transformer2d#diffusers.Transformer2DModel)이 discrete인 경우 `(batch size, num_vector_embeds - 1, num_latent_pixels)`) : `encoder_hidden_states` 입력에 조건부인 hidden states 출력입니다. discrete인 경우, 노이즈가 제거된 latent 픽셀에 대한 확률 분포를 반환합니다.

[Transformer2DModel](/docs/diffusers/main/ko/api/models/transformer2d#diffusers.Transformer2DModel)의 출력입니다.

