Diffusers documentation
SanaTransformer2DModel
SanaTransformer2DModel
SANA: Efficient High-Resolution Image Synthesis with Linear Diffusion Transformers에서 소개된 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는 저비용 콘텐츠 생성을 가능하게 합니다. 코드와 모델은 공개될 예정입니다.
다음 코드 스니펫으로 모델을 로드할 수 있습니다.
from diffusers import SanaTransformer2DModel
transformer = SanaTransformer2DModel.from_pretrained("Efficient-Large-Model/Sana_1600M_1024px_BF16_diffusers", subfolder="transformer", dtype=torch.bfloat16)SanaTransformer2DModel
클래스 diffusers.SanaTransformer2DModel
< source >( in_channels: int = 32out_channels: int | None = 32num_attention_heads: int = 70attention_head_dim: int = 32num_layers: int = 20num_cross_attention_heads: int | None = 20cross_attention_head_dim: int | None = 112cross_attention_dim: int | None = 2240caption_channels: int = 2304mlp_ratio: float = 2.5dropout: float = 0.0attention_bias: bool = Falsesample_size: int = 32patch_size: int = 1norm_elementwise_affine: bool = Falsenorm_eps: float = 1e-06interpolation_scale: int | None = Noneguidance_embeds: bool = Falseguidance_embeds_scale: float = 0.1qk_norm: str | None = Nonetimestep_scale: float = 1.0 )
매개변수
- in_channels (
int, 기본값32) — 입력의 채널 수입니다. - out_channels (
int, 선택 사항, 기본값32) — 출력의 채널 수입니다. - num_attention_heads (
int, 기본값70) — 멀티헤드 어텐션에 사용할 헤드의 수입니다. - attention_head_dim (
int, 기본값32) — 각 헤드당 채널 수입니다. - num_layers (
int, 기본값20) — 사용할 Transformer 블록의 레이어 수입니다. - num_cross_attention_heads (
int, 선택 사항, 기본값20) — cross-attention에 사용할 헤드 수입니다. - cross_attention_head_dim (
int, 선택 사항, 기본값112) — 크로스 어텐션에서 각 헤드의 채널 수입니다. - cross_attention_dim (
int, 선택 사항, 기본값2240) — 크로스 어텐션 출력의 채널 수입니다. - caption_channels (
int, 기본값2304) — 캡션 임베딩의 채널 수입니다. - mlp_ratio (
float, 기본값2.5) — GLUMBConv 레이어에서 사용할 확장 비율입니다. - dropout (
float, 기본값0.0) — Dropout 확률입니다. - attention_bias (
bool, 기본값False) — attention 레이어에서 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) — timestep에 사용할 스케일입니다.
Sana 모델 계열에서 소개된 2D Transformer 모델입니다.
forward
< source >( hidden_states: Tensorencoder_hidden_states: Tensortimestep: Tensorguidance: typing.Optional[torch.Tensor] = Noneencoder_attention_mask: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneattention_kwargs: dict[str, typing.Any] | None = Nonecontrolnet_block_samples: tuple[torch.Tensor] | None = Nonereturn_dict: bool = True )
매개변수
- 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에 적용되는 셀프 어텐션 마스크. - attention_kwargs (
dict, 선택 사항) — 지정된 경우 diffusers.models.attention_processor의self.processor에서 정의된AttentionProcessor로 전달되는 kwargs 사전입니다. - controlnet_block_samples (
tupleoftorch.Tensor, 선택 사항) — 지정된 경우 transformer 블록의 잔차에 추가되는 텐서 목록입니다. - return_dict (
bool, 선택 사항, 기본값True) — 단순 tuple 대신~models.transformer_2d.Transformer2DModelOutput를 반환할지 여부.
SanaTransformer2DModel의 forward 메서드입니다.
Transformer2DModelOutput
클래스 diffusers.models.modeling_outputs.Transformer2DModelOutput
< source >( sample: torch.Tensor )
매개변수
- sample (
torch.Tensor, shape(batch_size, num_channels, height, width)또는 Transformer2DModel이 discrete인 경우(batch size, num_vector_embeds - 1, num_latent_pixels)) —encoder_hidden_states입력에 조건부인 hidden states 출력입니다. discrete인 경우, 노이즈가 제거된 latent 픽셀에 대한 확률 분포를 반환합니다.
Transformer2DModel의 출력입니다.