Buckets:
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]]
diffusers.SanaTransformer2DModel[[diffusers.SanaTransformer2DModel]]
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)
매개변수:
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 모델 계열에서 소개된 2D Transformer 모델입니다.
forward[[diffusers.SanaTransformer2DModel.forward]]
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)
매개변수:
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의 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의 forward 메서드입니다.
Transformer2DModelOutput[[diffusers.models.modeling_outputs.Transformer2DModelOutput]]
diffusers.models.modeling_outputs.Transformer2DModelOutput[[diffusers.models.modeling_outputs.Transformer2DModelOutput]]
diffusers.models.modeling_outputs.Transformer2DModelOutput(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의 출력입니다.
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.