Buckets:

hf-doc-build/doc / diffusers /main /ko /api /models /sana_transformer2d.md
mishig's picture
|
download
raw
8.54 kB
# SanaTransformer2DModel
[SANA: Efficient High-Resolution Image Synthesis with Linear Diffusion Transformers](https://huggingface.co/papers/2410.10629)에서 소개된 NVIDIA와 MIT HAN Lab의 Enze Xie, Junsong Chen, Junyu Chen, Han Cai, Haotian Tang, Yujun Lin, Zhekai Zhang, Muyang Li, Ligeng Zhu, Yao Lu, Song Han에 의해 2D 데이터를 위한 Diffusion Transformer 모델이 도입되었습니다.
해당 논문의 초록은 다음과 같습니다:
*Sana를 소개합니다. Sana는 최대 4096×4096 해상도의 이미지를 효율적으로 생성할 수 있는 텍스트-이미지 프레임워크입니다. Sana는 놀라울 정도로 빠른 속도로 텍스트-이미지 정렬이 뛰어난 고해상도, 고품질 이미지를 합성할 수 있으며 노트북 GPU에 배포할 수 있습니다. 핵심 설계는 다음과 같습니다. (1) 딥 압축 오토인코더: 이미지를 8배만 압축하는 기존 AE와 달리, 우리는 잠재 토큰 수를 효과적으로 줄일 수 있는 32배 압축이 가능한 AE를 학습했습니다. (2) Linear DiT: DiT의 모든 일반 어텐션을 선형 어텐션으로 대체했습니다. 이는 품질 저하 없이 고해상도에서 더 효율적입니다. (3) 디코더 전용 텍스트 인코더: T5를 현대적인 디코더 전용 소형 LLM로 대체하여 텍스트 인코더로 사용했으며, 컨텍스트 내 학습을 통한 복잡한 인간 지시를 설계하여 이미지-텍스트 정렬을 강화했습니다. (4) 효율적인 학습 및 샘플링: 효율적인 캡션 라벨링 및 선택을 통해 수렴을 가속화하고, 샘플링 단계를 줄이기 위해 Flow-DPM-Solver를 제안했습니다. 그 결과, Sana-0.6B는 현대적인 거대 확산 모델(예: Flux-12B)과 매우 경쟁력이 있으며, 크기는 20배 작고 측정된 처리량은 100배 이상 빠릅니다. 또한, Sana-0.6B는 16GB 노트북 GPU에 배포할 수 있으며, 1024×1024 해상도의 이미지를 생성하는 데 1초 미만으로 소요됩니다. Sana는 저비용 콘텐츠 생성을 가능하게 합니다. 코드와 모델은 공개될 예정입니다.*
다음 코드 스니펫으로 모델을 로드할 수 있습니다.
```python
from diffusers import SanaTransformer2DModel
transformer = SanaTransformer2DModel.from_pretrained("Efficient-Large-Model/Sana_1600M_1024px_BF16_diffusers", subfolder="transformer", dtype=torch.bfloat16)
```
## SanaTransformer2DModel[[diffusers.SanaTransformer2DModel]]
#### diffusers.SanaTransformer2DModel[[diffusers.SanaTransformer2DModel]]
```python
diffusers.SanaTransformer2DModel(in_channels: int = 32, out_channels: int | None = 32, num_attention_heads: int = 70, attention_head_dim: int = 32, num_layers: int = 20, num_cross_attention_heads: int | None = 20, cross_attention_head_dim: int | None = 112, cross_attention_dim: int | None = 2240, caption_channels: int = 2304, mlp_ratio: float = 2.5, dropout: float = 0.0, attention_bias: bool = False, sample_size: int = 32, patch_size: int = 1, norm_elementwise_affine: bool = False, norm_eps: float = 1e-06, interpolation_scale: int | None = None, guidance_embeds: bool = False, guidance_embeds_scale: float = 0.1, qk_norm: str | None = None, timestep_scale: float = 1.0)
```
[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/sana_transformer.py#L294)
**매개변수:**
in_channels (`int`, 기본값 `32`) : 입력의 채널 수.
out_channels (`int`, *선택 사항*, 기본값 `32`) : 출력의 채널 수입니다.
num_attention_heads (`int`, 기본값 `70`) : multi-head attention에 사용할 head의 수입니다.
attention_head_dim (`int`, 기본값 `32`) : 각 헤드(head)의 채널 수입니다.
num_layers (`int`, 기본값 `20`) : 사용할 Transformer 블록의 레이어 수입니다.
num_cross_attention_heads (`int`, *선택 사항*, 기본값 `20`) : cross-attention에 사용할 헤드 수입니다.
cross_attention_head_dim (`int`, *선택 사항*, 기본값 `112`) : cross-attention의 각 head당 채널 수입니다.
cross_attention_dim (`int`, *선택 사항*, 기본값 `2240`) : cross-attention 출력의 채널 수입니다.
caption_channels (`int`, 기본값 `2304`) : 캡션 임베딩의 채널 수입니다.
mlp_ratio (`float`, 기본값 `2.5`) : GLUMBConv 레이어에서 사용할 확장 비율입니다.
dropout (`float`, 기본값 `0.0`) : dropout 확률입니다.
attention_bias (`bool`, 기본값 `False`) : attention layer에서 bias를 사용할지 여부.
sample_size (`int`, 기본값 `32`) : 입력 latent의 기본 크기입니다.
patch_size (`int`, 기본값 `1`) : 패치 임베딩 레이어에서 사용할 패치의 크기입니다.
norm_elementwise_affine (`bool`, 기본값 `False`) : 정규화 레이어에서 요소별 어피니티(elementwise affinity)를 사용할지 여부.
norm_eps (`float`, 기본값 `1e-6`) : 정규화 레이어의 epsilon 값입니다.
qk_norm (`str`, *선택 사항*, 기본값 `None`) : 쿼리와 키에 사용할 정규화입니다.
timestep_scale (`float`, 기본값 `1.0`) : timesteps에 사용할 스케일입니다.
[Sana](https://huggingface.co/papers/2410.10629) 모델 계열에서 소개된 2D Transformer 모델입니다.
#### forward[[diffusers.SanaTransformer2DModel.forward]]
```python
forward(hidden_states: Tensor, encoder_hidden_states: Tensor, timestep: Tensor, guidance: typing.Optional[torch.Tensor] = None, encoder_attention_mask: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, attention_kwargs: dict[str, typing.Any] | None = None, controlnet_block_samples: tuple[torch.Tensor] | None = None, return_dict: bool = True)
```
[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/sana_transformer.py#L419)
**매개변수:**
hidden_states (`torch.Tensor`, shape `(batch_size, in_channels, height, width)`) : 입력 `hidden_states`.
encoder_hidden_states (`torch.Tensor`, shape `(batch_size, sequence_len, embed_dims)`) : 사용할 조건 임베딩(프롬프트와 같은 입력 조건에서 계산된 임베딩).
timestep (`torch.LongTensor`) : 노이즈 제거 단계를 나타내는 데 사용됩니다.
guidance (`torch.Tensor`, *선택 사항*) : Guidance scale 임베딩.
encoder_attention_mask (`torch.Tensor`, *선택 사항*) : `encoder_hidden_states`에 적용되는 크로스 어텐션 마스크.
attention_mask (`torch.Tensor`, *선택 사항*) : `hidden_states`에 적용되는 자기 주의(self-attention) 마스크입니다.
attention_kwargs (`dict`, *선택 사항*) : 지정된 경우 [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py)의 `self.processor` 아래에서 정의된 `AttentionProcessor`로 전달되는 kwargs 사전입니다.
controlnet_block_samples (`tuple` of `torch.Tensor`, *선택 사항*) : 지정된 경우, Transformer 블록의 잔차(residuals)에 추가되는 텐서 목록입니다.
return_dict (`bool`, *선택 사항*, 기본값 `True`) : 일반 튜플 대신 `~models.transformer_2d.Transformer2DModelOutput`을 반환할지 여부.
**반환값:**
`return_dict`가 True이면 `~models.transformer_2d.Transformer2DModelOutput`이 반환되고, 그렇지 않으면 첫 번째 요소가 샘플 텐서인 `tuple`이 반환됩니다.
[SanaTransformer2DModel](/docs/diffusers/main/ko/api/models/sana_transformer2d#diffusers.SanaTransformer2DModel)의 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)의 출력입니다.

Xet Storage Details

Size:
8.54 kB
·
Xet hash:
dbdfed00667f498768242895c72104e968ae3626f97ba004e7f34f426c6696d2

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.