Diffusers documentation

UNet3DConditionModel

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

UNet3DConditionModel

UNet 모델은 Ronneberger et al.에 의해 바이오메디컬 이미지 분할을 위해 처음 소개되었지만, 입력과 동일한 크기의 이미지를 출력하기 때문에 🤗 Diffusers에서도 널리 사용됩니다. 실제 확산(diffusion) 과정을 담당하는 핵심 구성 요소 중 하나입니다. 🤗 Diffusers에는 차원 수와 조건부 모델 여부(conditional model)에 따라 UNet 모델의 여러 변형(variant)이 있습니다. 여기서는 3D UNet 조건부 모델입니다.

해당 논문의 초록은 다음과 같습니다:

딥 네트워크의 성공적인 학습에는 수천 개의 라벨이 붙은 학습 샘플이 필요하다는 데에 큰 합의가 있습니다. 본 논문에서는 데이터 증강을 강하게 활용하여 사용 가능한 라벨 샘플을 더 효율적으로 사용하는 네트워크와 학습 전략을 제시합니다. 아키텍처는 컨텍스트를 포착하기 위한 수축 경로와 정확한 위치 파악을 가능하게 하는 대칭적인 확장 경로로 구성됩니다. 이러한 네트워크가 매우 적은 이미지로 끝에서 끝까지(end-to-end) 학습될 수 있으며, 전자 현미경 스택의 신경 구조 분할을 위한 ISBI 챌린지에서 이전의 최선 방법(슬라이딩 윈도우 컨볼루션 네트워크)보다 우수한 성능을 보임을 보여줍니다. 동일한 네트워크를 투과광 현미경 이미지(위상 대비 및 DIC)로 학습하여, 해당 카테고리에서 ISBI 세포 추적 챌린지 2015를 큰 격차로 우승했습니다. 또한, 이 네트워크는 빠릅니다. 최신 GPU에서 512x512 이미지의 분할은 1초 미만으로 수행됩니다. 전체 구현(Caffe 기반)과 학습된 네트워크는 http://lmb.informatik.uni-freiburg.de/people/ronneber/u-net에서 사용할 수 있습니다.

UNet3DConditionModel

클래스 diffusers.UNet3DConditionModel

< >

( sample_size: int | None = Nonein_channels: int = 4out_channels: int = 4down_block_types: tuple = ('CrossAttnDownBlock3D', 'CrossAttnDownBlock3D', 'CrossAttnDownBlock3D', 'DownBlock3D')up_block_types: tuple = ('UpBlock3D', 'CrossAttnUpBlock3D', 'CrossAttnUpBlock3D', 'CrossAttnUpBlock3D')block_out_channels: tuple = (320, 640, 1280, 1280)layers_per_block: int = 2downsample_padding: int = 1mid_block_scale_factor: float = 1act_fn: str = 'silu'norm_num_groups: int | None = 32norm_eps: float = 1e-05cross_attention_dim: int = 1024attention_head_dim: int | tuple[int] = 64num_attention_heads: int | tuple[int] | None = Nonetime_cond_proj_dim: int | None = None )

매개변수

  • sample_size (int 또는 tuple[int, int], 선택 사항, 기본값 None) — 입력/출력 샘플의 높이와 너비.
  • in_channels (int, 선택 사항, 기본값 4) — 입력 샘플의 채널 수.
  • out_channels (int, 선택 사항, 기본값 4) — 출력의 채널 수입니다.
  • down_block_types (tuple[str], 선택 사항, 기본값 ("CrossAttnDownBlock3D", "CrossAttnDownBlock3D", "CrossAttnDownBlock3D", "DownBlock3D")) — 사용할 다운샘플 블록의 튜플입니다.
  • up_block_types (tuple[str], 선택 사항, 기본값 ("UpBlock3D", "CrossAttnUpBlock3D", "CrossAttnUpBlock3D", "CrossAttnUpBlock3D")) — 사용할 업샘플 블록의 튜플입니다.
  • block_out_channels (tuple[int], 선택 사항, 기본값 (320, 640, 1280, 1280)) — 각 블록의 출력 채널 수를 나타내는 튜플입니다.
  • layers_per_block (int, 선택 사항, 기본값 2) — 블록당 레이어 수입니다.
  • downsample_padding (int, 선택 사항, 기본값 1) — 다운샘플링 컨볼루션에 사용할 패딩입니다.
  • mid_block_scale_factor (float, 선택 사항, 기본값 1.0) — mid block에 사용할 스케일 팩터입니다.
  • act_fn (str, 선택 사항, 기본값 "silu") — 사용할 활성화 함수입니다.
  • norm_num_groups (int, 선택 사항, 기본값 32) — 정규화에 사용할 그룹의 수입니다. None인 경우, 후처리에서 정규화 및 활성화 레이어가 건너뜁니다.
  • norm_eps (float, 선택 사항, 기본값 1e-5) — 정규화에 사용할 epsilon 값입니다.
  • cross_attention_dim (int, 선택 사항, 기본값 1024) — 크로스 어텐션 특징의 차원입니다.
  • attention_head_dim (int, 선택 사항, 기본값 64) — 어텐션 헤드의 차원입니다.
  • num_attention_heads (int, 선택 사항) — 어텐션 헤드의 수입니다.
  • time_cond_proj_dim (int, 선택 사항, 기본값 None) — timestep 임베딩에서 cond_proj 레이어의 차원입니다.

노이즈 샘플, 조건 상태, 타임스텝을 입력으로 받아 샘플 모양의 출력을 반환하는 조건부 3D UNet 모델

이 모델은 ModelMixin에서 상속됩니다. 모든 모델에 대해 구현된 일반적 메서드(다운로드 또는 저장 등)에 대해서는 상위 클래스 문서를 확인하세요.

disable_freeu

< >

( )

FreeU 메커니즘을 비활성화합니다.

enable_forward_chunking

< >

( chunk_size: int | None = Nonedim: int = 0 )

매개변수

  • chunk_size (int, 선택 사항) — 피드포워드 레이어의 청크 크기입니다. 지정하지 않으면 dim 차원의 각 텐서에 대해 피드포워드 레이어를 개별적으로 실행합니다.
  • dim (int, 선택 사항, 기본값 0) — 피드포워드 계산을 청킹할 차원입니다. dim=0 (배치) 또는 dim=1 (시퀀스 길이) 중 하나를 선택합니다.

피드 포워드 청킹을 사용할 어텐션 프로세서를 설정합니다.

enable_freeu

< >

( s1s2b1b2 )

매개변수

  • s1 (float) — 1단계의 스케일링 계수로, 스킵 특징의 기여도를 감쇠시키는 데 사용됩니다. 이는 강화된 노이즈 제거 과정에서 “과도한 매끄러움 효과(oversmoothing effect)”를 완화하기 위한 것입니다.
  • s2 (float) — 2단계의 스케일링 계수로, 스킵 특징의 기여도를 감쇠시키는 데 사용됩니다. 이는 강화된 노이즈 제거 과정에서 “과도한 매끄러움 효과(oversmoothing effect)”를 완화하기 위한 것입니다.
  • b1 (float) — 백본 특징의 기여도를 증폭하기 위한 1단계의 스케일링 계수.
  • b2 (float) — 백본 특징의 기여도를 증폭하기 위한 2단계의 스케일링 계수.

https://huggingface.co/papers/2309.11497의 FreeU 메커니즘을 활성화합니다.

스케일링 인자 뒤에 붙는 접미사는 해당 인자가 적용되는 스테이지 블록을 나타냅니다.

Stable Diffusion v1, v2, Stable Diffusion XL과 같은 다양한 파이프라인에서 잘 작동하는 것으로 알려진 값 조합에 대해서는 공식 저장소를 참고하세요.

forward

< >

( sample: Tensortimestep: typing.Union[torch.Tensor, float, int]encoder_hidden_states: Tensorclass_labels: typing.Optional[torch.Tensor] = Nonetimestep_cond: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Nonecross_attention_kwargs: dict[str, typing.Any] | None = Nonedown_block_additional_residuals: tuple[torch.Tensor] | None = Nonemid_block_additional_residual: typing.Optional[torch.Tensor] = Nonereturn_dict: bool = True ) → UNet3DConditionOutput or tuple

매개변수

  • sample (torch.Tensor) — 다음과 같은 모양 (batch, num_channels, num_frames, height, width를 가진 노이즈 입력 텐서
  • timestep (torch.Tensor 또는 float 또는 int) — 입력의 노이즈를 제거할 타임스텝 수.
  • encoder_hidden_states (torch.Tensor) — (batch, sequence_length, feature_dim) 모양의 인코더 히든 상태입니다.
  • class_labels (torch.Tensor, 선택 사항, 기본값 None) — 조건부 생성을 위한 선택적 클래스 라벨입니다. 이 라벨의 임베딩은 타임스텝 임베딩과 합산됩니다.
  • timestep_cond — (torch.Tensor, 선택 사항, 기본값 None): timestep에 대한 조건부 임베딩입니다. 값이 제공되면, self.time_embedding 레이어를 통과한 샘플과 합산되어 timestep 임베딩을 생성합니다.
  • attention_mask (torch.Tensor, 선택 사항, 기본값 None) — (batch, key_tokens) 형태의 attention mask가 encoder_hidden_states에 적용됩니다. 1인 경우 mask가 유지되고, 0인 경우 폐기됩니다. Mask는 bias로 변환되어 “폐기” 토큰에 해당하는 attention score에 큰 음수 값을 더합니다.
  • cross_attention_kwargs (dict, 선택 사항) — 지정된 경우 diffusers.models.attention_processor의 self.processor에서 정의된 AttentionProcessor로 전달되는 kwargs 사전입니다.
  • down_block_additional_residuals — (tuple of torch.Tensor, 선택 사항): 지정된 경우, down unet 블록의 잔차에 추가되는 텐서의 튜플입니다.
  • mid_block_additional_residual — (torch.Tensor, 선택 사항): 지정된 경우 중간 unet 블록의 잔차에 추가되는 텐서입니다.
  • return_dict (bool, 선택 사항, 기본값 True) — 단순 tuple 대신 UNet3DConditionOutput를 반환할지 여부.
  • cross_attention_kwargs (dict, 선택 사항) — 지정된 경우 AttnProcessor에 전달되는 kwargs 사전입니다.

반환값

UNet3DConditionOutput 또는 tuple

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

UNet3DConditionModel의 forward 메서드입니다.

fuse_qkv_projections

< >

( )

융합된 QKV 투영을 활성화합니다. 셀프 어텐션 모듈의 경우, 모든 투영 행렬(즉, 쿼리, 키, 값)이 융합됩니다. 크로스 어텐션 모듈의 경우, 키와 값 투영 행렬이 융합됩니다.

> 이 API는 🧪 실험적입니다.

set_attention_slice

< >

( slice_size: str | int | list[int] )

매개변수

  • slice_size (str 또는 int 또는 list(int), 선택 사항, 기본값 "auto") — "auto"인 경우, 어텐션 헤드에 입력되는 데이터가 절반으로 줄어들어 어텐션이 두 단계로 계산됩니다. "max"인 경우, 한 번에 하나의 슬라이스만 실행하여 최대의 메모리를 절약합니다. 숫자가 제공되면 attention_head_dim // slice_size만큼의 슬라이스를 사용합니다. 이 경우 attention_head_dim 은 slice_size의 배수여야 합니다.

슬라이스된 어텐션 계산을 활성화합니다.

이 옵션이 활성화되면 attention 모듈은 입력 텐서를 슬라이스로 분할하여 여러 단계에 걸쳐 attention을 계산합니다. 이는 속도가 약간 감소하는 대신 메모리를 절약하는 데 유용합니다.

set_default_attn_processor

< >

( )

커스텀 어텐션 프로세서를 비활성화하고 기본 어텐션 구현을 설정합니다.

unfuse_qkv_projections

< >

( )

활성화된 경우, 융합된 QKV 투영을 비활성화합니다.

> 이 API는 🧪 실험적입니다.

UNet3DConditionOutput

클래스 diffusers.models.unets.unet_3d_condition.UNet3DConditionOutput

< >

( sample: Tensor )

매개변수

  • sample (torch.Tensor, shape (batch_size, num_channels, num_frames, height, width)) — encoder_hidden_states 입력에 조건부인 히든 스테이트 출력입니다. 모델의 마지막 레이어 출력입니다.

UNet3DConditionModel의 출력입니다.

Update on GitHub