Diffusers documentation
UNet2DConditionModel
UNet2DConditionModel
UNet 모델은 Ronneberger et al.에 의해 바이오메디컬 이미지 분할을 위해 처음 소개되었지만, 입력과 동일한 크기의 이미지를 출력하기 때문에 🤗 Diffusers에서도 널리 사용됩니다. 실제 확산(diffusion) 과정을 담당하는 핵심 구성 요소 중 하나입니다. 🤗 Diffusers에는 차원 수와 조건부 모델 여부(conditional model)에 따라 UNet 모델의 여러 변형(variant)이 있습니다. 여기서는 2D UNet 조건부 모델입니다.
해당 논문의 초록은 다음과 같습니다:
딥 네트워크의 성공적인 학습에는 수천 개의 라벨이 붙은 학습 샘플이 필요하다는 데에 큰 합의가 있습니다. 본 논문에서는 데이터 증강을 강하게 활용하여 사용 가능한 라벨 샘플을 더 효율적으로 사용하는 네트워크와 학습 전략을 제시합니다. 아키텍처는 컨텍스트를 포착하기 위한 수축 경로와 정확한 위치 파악을 가능하게 하는 대칭적인 확장 경로로 구성됩니다. 이러한 네트워크가 매우 적은 이미지로 끝에서 끝까지(end-to-end) 학습될 수 있으며, 전자 현미경 스택의 신경 구조 분할을 위한 ISBI 챌린지에서 이전의 최선 방법(슬라이딩 윈도우 컨볼루션 네트워크)보다 우수한 성능을 보임을 보여줍니다. 동일한 네트워크를 투과광 현미경 이미지(위상 대비 및 DIC)로 학습하여, 해당 카테고리에서 ISBI 세포 추적 챌린지 2015를 큰 격차로 우승했습니다. 또한, 이 네트워크는 빠릅니다. 최신 GPU에서 512x512 이미지의 분할은 1초 미만으로 수행됩니다. 전체 구현(Caffe 기반)과 학습된 네트워크는 http://lmb.informatik.uni-freiburg.de/people/ronneber/u-net에서 사용할 수 있습니다.
UNet2DConditionModel
클래스 diffusers.UNet2DConditionModel
< source >( sample_size: int | tuple[int, int] | None = Nonein_channels: int = 4out_channels: int = 4center_input_sample: bool = Falseflip_sin_to_cos: bool = Truefreq_shift: int = 0down_block_types: tuple = ('CrossAttnDownBlock2D', 'CrossAttnDownBlock2D', 'CrossAttnDownBlock2D', 'DownBlock2D')mid_block_type: str | None = 'UNetMidBlock2DCrossAttn'up_block_types: tuple = ('UpBlock2D', 'CrossAttnUpBlock2D', 'CrossAttnUpBlock2D', 'CrossAttnUpBlock2D')only_cross_attention: bool | tuple[bool] = Falseblock_out_channels: tuple = (320, 640, 1280, 1280)layers_per_block: int | tuple[int] = 2downsample_padding: int = 1mid_block_scale_factor: float = 1dropout: float = 0.0act_fn: str = 'silu'norm_num_groups: int | None = 32norm_eps: float = 1e-05cross_attention_dim: int | tuple[int] = 1280transformer_layers_per_block: int | tuple[int] | tuple[tuple] = 1reverse_transformer_layers_per_block: tuple[tuple[int]] | None = Noneencoder_hid_dim: int | None = Noneencoder_hid_dim_type: str | None = Noneattention_head_dim: int | tuple[int] = 8num_attention_heads: int | tuple[int] | None = Nonedual_cross_attention: bool = Falseuse_linear_projection: bool = Falseclass_embed_type: str | None = Noneaddition_embed_type: str | None = Noneaddition_time_embed_dim: int | None = Nonenum_class_embeds: int | None = Noneupcast_attention: bool = Falseresnet_time_scale_shift: str = 'default'resnet_skip_time_act: bool = Falseresnet_out_scale_factor: float = 1.0time_embedding_type: str = 'positional'time_embedding_dim: int | None = Nonetime_embedding_act_fn: str | None = Nonetimestep_post_act: str | None = Nonetime_cond_proj_dim: int | None = Noneconv_in_kernel: int = 3conv_out_kernel: int = 3projection_class_embeddings_input_dim: int | None = Noneattention_type: str = 'default'class_embeddings_concat: bool = Falsemid_block_only_cross_attention: bool | None = Nonecross_attention_norm: str | None = Noneaddition_embed_type_num_heads: int = 64 )
매개변수
- sample_size (
int또는tuple[int, int], 선택 사항, 기본값None) — 입력/출력 샘플의 높이와 너비. - in_channels (
int, 선택 사항, 기본값 4) — 입력 샘플의 채널 수. - out_channels (
int, 선택 사항, 기본값 4) — 출력의 채널 수. - center_input_sample (
bool, 선택 사항, 기본값False) — 입력 샘플을 중앙으로 이동할지 여부. - flip_sin_to_cos (
bool, 선택 사항, 기본값True) — 시간 임베딩에서 sin을 cos로 전환할지 여부입니다. - freq_shift (
int, 선택 사항, 기본값 0) — 시간 임베딩에 적용할 주파수 시프트입니다. - down_block_types (
tuple[str], 선택 사항, 기본값("CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "DownBlock2D")) — 사용할 다운샘플 블록의 튜플입니다. - mid_block_type (
str, 선택 사항, 기본값"UNetMidBlock2DCrossAttn") — UNet 중간 부분의 블록 유형으로,UNetMidBlock2DCrossAttn,UNetMidBlock2D, 또는UNetMidBlock2DSimpleCrossAttn중 하나일 수 있습니다.None인 경우 중간 블록 레이어가 건너뜁니다. - up_block_types (
tuple[str], 선택 사항, 기본값("UpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D")) — 사용할 업샘플 블록의 튜플입니다. - only_cross_attention(
bool또는tuple[bool], 선택 사항, 기본값False) — 기본 transformer 블록에 self-attention을 포함할지 여부.BasicTransformerBlock을 참조하세요. - 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에 사용할 스케일 팩터입니다. - dropout (
float, 선택 사항, 기본값 0.0) — 사용할 dropout 확률입니다. - act_fn (
str, 선택 사항, 기본값"silu") — 사용할 활성화 함수입니다. - norm_num_groups (
int, 선택 사항, 기본값 32) — 정규화에 사용할 그룹의 수입니다.None인 경우, 후처리에서 정규화 및 활성화 레이어가 건너뜁니다. - norm_eps (
float, 선택 사항, 기본값 1e-5) — 정규화에 사용할 epsilon 값입니다. - cross_attention_dim (
int또는tuple[int], 선택 사항, 기본값 1280) — 크로스 어텐션 특징의 차원입니다. - transformer_layers_per_block (
int,tuple[int], 또는tuple[tuple], 선택 사항, 기본값 1) —BasicTransformerBlock유형의 transformer 블록 수입니다.CrossAttnDownBlock2D,CrossAttnUpBlock2D,UNetMidBlock2DCrossAttn에만 관련이 있습니다. - reverse_transformer_layers_per_block — (
tuple[tuple], 선택 사항, 기본값 None): U-Net의 업샘플링 블록에서BasicTransformerBlock유형의 transformer 블록 수입니다.transformer_layers_per_block의 유형이tuple[tuple]이고CrossAttnDownBlock2D,CrossAttnUpBlock2D,UNetMidBlock2DCrossAttn인 경우에만 관련이 있습니다. - encoder_hid_dim (
int, 선택 사항, 기본값 None) —encoder_hid_dim_type이 정의된 경우,encoder_hidden_states는encoder_hid_dim차원에서cross_attention_dim으로 투사됩니다. - encoder_hid_dim_type (
str, 선택 사항, 기본값None) — 지정된 경우,encoder_hidden_states및 기타 임베딩이encoder_hid_dim_type에 따라 차원cross_attention의 텍스트 임베딩으로 다운프로젝트됩니다. - attention_head_dim (
int, 선택 사항, 기본값 8) — 어텐션 헤드의 차원입니다. - num_attention_heads (
int, 선택 사항) — 어텐션 헤드의 수입니다. 정의되지 않은 경우 기본값은attention_head_dim입니다. - resnet_time_scale_shift (
str, 선택 사항, 기본값"default") — ResNet 블록의 시간 스케일 시프트 설정(ResnetBlock2D참조).default또는scale_shift중 하나를 선택합니다. - class_embed_type (
str, 선택 사항, 기본값None) — 결국 시간 임베딩과 합산되는 클래스 임베딩의 유형입니다.None,"timestep","identity","projection", 또는"simple_projection"중 하나를 선택합니다. - addition_embed_type (
str, 선택 사항, 기본값None) — 시간 임베딩과 합산될 선택적 임베딩을 구성합니다.None또는 “text” 중 하나를 선택할 수 있습니다. “text”를 선택하면TextTimeEmbedding레이어가 사용됩니다. - addition_time_embed_dim — (
int, 선택 사항, 기본값None): 타임스텝 임베딩의 차원. - num_class_embeds (
int, 선택 사항, 기본값None) —class_embed_type가None인 경우 클래스 조건화를 수행할 때time_embed_dim으로 투영되는 학습 가능한 임베딩 행렬의 입력 차원입니다. - time_embedding_type (
str, 선택 사항, 기본값positional) — 타임스텝에 사용할 위치 임베딩의 유형입니다.positional또는fourier중 하나를 선택합니다. - time_embedding_dim (
int, 선택 사항, 기본값None) — 투영된 시간 임베딩의 차원을 선택적으로 재정의합니다. - time_embedding_act_fn (
str, 선택 사항, 기본값None) — 시간 임베딩이 UNet의 나머지 부분으로 전달되기 전에 한 번만 사용할 선택적 활성화 함수입니다.silu,mish,gelu,swish중 하나를 선택할 수 있습니다. - timestep_post_act (
str, 선택 사항, 기본값None) — timestep 임베딩에 사용할 두 번째 활성화 함수입니다.silu,mish,gelu중 하나를 선택할 수 있습니다. - time_cond_proj_dim (
int, 선택 사항, 기본값None) — timestep 임베딩에서cond_proj레이어의 차원입니다. - conv_in_kernel (
int, 선택 사항, 기본값3) —conv_in레이어의 커널 크기입니다. - conv_out_kernel (
int, 선택 사항, 기본값3) —conv_out레이어의 커널 크기입니다. - projection_class_embeddings_input_dim (
int, 선택 사항) —class_embed_type="projection"일 때class_labels입력의 차원입니다.class_embed_type="projection"일 때 필수입니다. - class_embeddings_concat (
bool, 선택 사항, 기본값False) — 시간 임베딩을 클래스 임베딩과 연결할지 여부. - mid_block_only_cross_attention (
bool, 선택 사항, 기본값None) —UNetMidBlock2DSimpleCrossAttn을 사용할 때 mid block에 cross attention을 사용할지 여부입니다.only_cross_attention가 단일 boolean으로 주어지고mid_block_only_cross_attention이None인 경우,only_cross_attention의 값이mid_block_only_cross_attention의 값으로 사용됩니다. 그 외의 경우 기본값은False입니다.
노이즈 샘플, 조건 상태, 타임스텝을 입력으로 받아 샘플 모양의 출력을 반환하는 조건부 2D UNet 모델
이 모델은 ModelMixin에서 상속됩니다. 모든 모델에 대해 구현된 일반적 메서드(다운로드 또는 저장 등)에 대해서는 상위 클래스 문서를 확인하세요.
FreeU 메커니즘을 비활성화합니다.
enable_freeu
< source >( s1: floats2: floatb1: floatb2: float )
매개변수
- 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
< source >( 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 = Noneadded_cond_kwargs: dict[str, torch.Tensor] | None = Nonedown_block_additional_residuals: tuple[torch.Tensor] | None = Nonemid_block_additional_residual: typing.Optional[torch.Tensor] = Nonedown_intrablock_additional_residuals: tuple[torch.Tensor] | None = Noneencoder_attention_mask: typing.Optional[torch.Tensor] = Nonereturn_dict: bool = True ) → UNet2DConditionOutput or tuple
매개변수
- sample (
torch.Tensor) — 다음과 같은 형태(batch, channel, 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 사전입니다. - added_cond_kwargs — (
dict, 선택 사항): 지정된 경우 UNet 블록으로 전달되는 임베딩에 추가되는 추가 임베딩을 포함하는 kwargs 사전입니다. - down_block_additional_residuals — (
tupleoftorch.Tensor, 선택 사항): 지정된 경우, down unet 블록의 잔차에 추가되는 텐서의 튜플입니다. - mid_block_additional_residual — (
torch.Tensor, 선택 사항): 지정된 경우 중간 unet 블록의 잔차에 추가되는 텐서입니다. - down_intrablock_additional_residuals (
tupleoftorch.Tensor, 선택 사항) — UNet 다운 블록 내에서 추가될 잔차, 예를 들어 T2I-Adapter 사이드 모델에서 오는 값 - encoder_attention_mask (
torch.Tensor) —(batch, sequence_length)모양의 크로스 어텐션 마스크가encoder_hidden_states에 적용됩니다.True인 경우 마스크가 유지되고,False인 경우 폐기됩니다. 마스크는 바이어스로 변환되어 “폐기” 토큰에 해당하는 어텐션 점수에 큰 음의 값을 더합니다. - return_dict (
bool, 선택 사항, 기본값True) — 단순 tuple 대신 UNet2DConditionOutput를 반환할지 여부.
반환값
UNet2DConditionOutput 또는 tuple
return_dict가 True이면 UNet2DConditionOutput이 반환되고, 그렇지 않으면 첫 번째 요소가 샘플 텐서인 tuple이 반환됩니다.
UNet2DConditionModel의 forward 메서드입니다.
융합된 QKV 투영을 활성화합니다. 셀프 어텐션 모듈의 경우, 모든 투영 행렬(즉, 쿼리, 키, 값)이 융합됩니다. 크로스 어텐션 모듈의 경우, 키와 값 투영 행렬이 융합됩니다.
> 이 API는 🧪 실험적입니다.
set_attention_slice
< source >( slice_size: str | int | list[int] = 'auto' )
슬라이스된 어텐션 계산을 활성화합니다.
이 옵션이 활성화되면 attention 모듈은 입력 텐서를 슬라이스로 분할하여 여러 단계에 걸쳐 attention을 계산합니다. 이는 속도가 약간 감소하는 대신 메모리를 절약하는 데 유용합니다.
커스텀 어텐션 프로세서를 비활성화하고 기본 어텐션 구현을 설정합니다.
UNet2DConditionOutput
클래스 diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput
< source >( sample: Tensor = None )
UNet2DConditionModel의 출력입니다.