# PAN2Transformer3DModel

PAN 2의 diffusion transformer입니다. 비디오 토큰과 텍스트 토큰에 대해 결합된 attention을 수행하며, 각 스트림에 대해 별도의 projection과 feed-forward network를 사용합니다.

비디오 입력은 노이즈가 포함된 잠재 변수, 조건부 잠재 변수, 그리고 1채널 조건부 마스크를 스택하므로, 동일한 모델이 텍스트-비디오 및 이미지-비디오 모두에 사용할 수 있습니다.

```python
import torch
from diffusers import PAN2Transformer3DModel

transformer = PAN2Transformer3DModel.from_pretrained("IFM/PAN2", subfolder="transformer", dtype=torch.bfloat16)
```

## PAN2Transformer3DModel[[diffusers.PAN2Transformer3DModel]]

#### diffusers.PAN2Transformer3DModel[[diffusers.PAN2Transformer3DModel]]

```python
diffusers.PAN2Transformer3DModel(patch_size: tuple[int, int, int] = (1, 2, 2), in_channels: int = 97, out_channels: int = 48, num_attention_heads: int = 32, attention_head_dim: int = 128, num_layers: int = 44, num_refiner_layers: int = 4, mlp_ratio: float = 8.0, context_mlp_ratio: float = 4.0, refiner_mlp_ratio: float = 4.0, text_embed_dim: int = 4096, rope_axes_dim: tuple[int, int, int] = (16, 56, 56), rope_theta: float = 256.0, rope_temporal_scale: float = 0.6666666666666666)
```

[소스](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/transformers/transformer_pan2.py#L325)

**매개변수:**

patch_size (`tuple[int, int, int]`, 기본값 `(1, 2, 2)`) : 패치 임베딩의 `(t, h, w)` 패치 크기입니다.

in_channels (`int`, 기본값 `97`) : 입력 채널 수입니다. 노이즈된 latents, 조건부 latents, 그리고 하나의 조건부 mask 채널을 포함합니다.

out_channels (`int`, 기본값 `48`) : 출력 채널의 수.

num_attention_heads (`int`, 기본값 `32`) : 어텐션 헤드의 수입니다.

attention_head_dim (`int`, 기본값 `128`) : 각 attention head의 채널 수입니다.

num_layers (`int`, 기본값 `44`) : joint-attention 블록의 수입니다.

num_refiner_layers (`int`, 기본값 `4`) : 텍스트 임베딩에 적용되는 토크인 리파이너 블록의 수입니다.

mlp_ratio (`float`, 기본값 `8.0`) : 비디오 피드포워드 내부 차원과 숨겨진 차원의 비율입니다.

context_mlp_ratio (`float`, 기본값 `4.0`) : 텍스트 피드포워드 내부 차원과 숨겨진 차원의 비율입니다.

refiner_mlp_ratio (`float`, 기본값 `4.0`) : 토크인 리파이너 피드포워드 내부 차원과 히든 차원의 비율입니다.

text_embed_dim (`int`, 기본값 `4096`) : 텍스트 인코더의 숨겨진 상태(hidden states) 차원입니다.

rope_axes_dim (`tuple[int, int, int]`, 기본값 `(16, 56, 56)`) : rotary embedding에서 각 `(t, h, w)` 축의 채널 수입니다.

rope_theta (`float`, 기본값 `256.0`) : 회전 임베딩의 밑(base)입니다.

rope_temporal_scale (`float`, 기본값 `16 / 24`) : rotary embedding의 프레임 위치가 곱해지는 계수입니다. rotary embedding의 기준 프레임 레이트를 비디오의 프레임 레이트로 나눈 값입니다.

PAN 2의 diffusion transformer입니다.

패치화된 비디오 라텐트와 정제된 텍스트 토큰의 연결(concatenation) 위에 쌓인 결합 주의(joint-attention) 블록 스택입니다. 비디오 입력은 노이즈가 포함된 라텐트, 조건부 라텐트, 조건부 마스크를 채널 축을 따라 스택하여 전달하므로, 동일한 모델이 텍스트-비디오 생성과 이미지-비디오 생성 모두에 사용됩니다.

#### forward[[diffusers.PAN2Transformer3DModel.forward]]

```python
forward(hidden_states: Tensor, timestep: Tensor, encoder_hidden_states: Tensor, attention_kwargs: dict[str, typing.Any] | None = None, return_dict: bool = True)
```

[소스](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/transformers/transformer_pan2.py#L438)

**매개변수:**

hidden_states (`torch.Tensor`, shape `(batch_size, in_channels, num_frames, height, width)`) : 노이즈가 포함된 latents, conditioning latents, conditioning mask를 채널 방향으로 연결(concatenate)한 값.

timestep (`torch.Tensor`, shape `(batch_size,)`) : `[0, 1000]` 범위의 노이즈 제거 타임스텝입니다.

encoder_hidden_states (`torch.Tensor`, shape `(batch_size, text_seq_len, text_embed_dim)`) : 텍스트 인코더의 히든 상태입니다.

attention_kwargs (`dict`, *선택 사항*) : `AttentionProcessor`로 전달되는 kwargs 딕셔너리입니다. LoRA 스케일에만 사용됩니다.

return_dict (`bool`, *선택 사항*, 기본값 `True`) : 일반 튜플 대신 [Transformer2DModelOutput](/docs/diffusers/v0.43.0/ko/api/models/cogview3plus_transformer2d#diffusers.models.modeling_outputs.Transformer2DModelOutput)을 반환할지 여부.

**반환값:** [Transformer2DModelOutput](/docs/diffusers/v0.43.0/ko/api/models/cogview3plus_transformer2d#diffusers.models.modeling_outputs.Transformer2DModelOutput) 또는 `tuple`

`(batch_size, out_channels, num_frames, height, width)` 형태의 예측 속도입니다.

[PAN2Transformer3DModel](/docs/diffusers/v0.43.0/ko/api/models/pan2_transformer3d#diffusers.PAN2Transformer3DModel)의 forward 메서드입니다.

