Diffusers documentation
ControlNetUnionModel
ControlNetUnionModel
ControlNetUnionModel은 Stable Diffusion XL용 ControlNet의 구현입니다.
ControlNet 모델은 xinsir6에 의해 ControlNetPlus에서 소개되었습니다. 계산량을 증가시키지 않고 여러 조건 입력을 지원합니다.
조건부 텍스트-이미지 생성에서 10개 이상의 제어 유형을 지원하고, Midjourney와 시각적으로 비교할 수 있는 고해상도 이미지를 생성할 수 있는 새로운 아키텍처를 설계했습니다. 이 네트워크는 원래의 ControlNet 아키텍처를 기반으로 하며, 두 가지 새로운 모듈을 제안합니다. 1. 동일한 네트워크 파라미터를 사용하여 다양한 이미지 조건을 지원하도록 원래의 ControlNet을 확장합니다. 2. 계산 오프로드를 증가시키지 않고도 여러 조건 입력을 지원합니다. 이는 이미지를 세밀하게 편집하려는 디자이너에게 특히 중요하며, 서로 다른 조건은 동일한 조건 인코더를 사용하여 추가적인 계산이나 파라미터를 추가하지 않습니다.
로딩
기본적으로 ControlNetUnionModel은 from_pretrained()로 로드해야 합니다.
from diffusers import StableDiffusionXLControlNetUnionPipeline, ControlNetUnionModel
controlnet = ControlNetUnionModel.from_pretrained("xinsir/controlnet-union-sdxl-1.0")
pipe = StableDiffusionXLControlNetUnionPipeline.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0", controlnet=controlnet)ControlNetUnionModel
클래스 diffusers.ControlNetUnionModel
< source >( in_channels: int = 4conditioning_channels: int = 3flip_sin_to_cos: bool = Truefreq_shift: int = 0down_block_types: tuple = ('CrossAttnDownBlock2D', 'CrossAttnDownBlock2D', 'CrossAttnDownBlock2D', 'DownBlock2D')only_cross_attention: bool | tuple[bool] = Falseblock_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 = 1280transformer_layers_per_block: int | tuple[int, ...] = 1encoder_hid_dim: int | None = Noneencoder_hid_dim_type: str | None = Noneattention_head_dim: int | tuple[int, ...] = 8num_attention_heads: int | tuple[int, ...] | None = Noneuse_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'projection_class_embeddings_input_dim: int | None = Nonecontrolnet_conditioning_channel_order: str = 'rgb'conditioning_embedding_out_channels: tuple[int, ...] | None = (48, 96, 192, 384)global_pool_conditions: bool = Falseaddition_embed_type_num_heads: int = 64num_control_type: int = 6num_trans_channel: int = 320num_trans_head: int = 8num_trans_layer: int = 1num_proj_channel: int = 320 )
매개변수
- in_channels (
int, 기본값 4) — 입력 샘플의 채널 수입니다. - flip_sin_to_cos (
bool, 기본값True) — 시간 임베딩에서 sin을 cos로 전환할지 여부. - freq_shift (
int, 기본값 0) — 시간 임베딩에 적용할 주파수 시프트입니다. - down_block_types (
tuple[str], 기본값("CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "DownBlock2D")) — 사용할 다운샘플 블록의 튜플입니다. - only_cross_attention (
bool | tuple[bool], 기본값False) — - block_out_channels (
tuple[int], 기본값(320, 640, 1280, 1280)) — 각 블록의 출력 채널 수를 나타내는 튜플입니다. - layers_per_block (
int, 기본값 2) — 블록당 레이어 수입니다. - downsample_padding (
int, 기본값 1) — 하위 샘플링 컨볼루션에 사용할 패딩입니다. - mid_block_scale_factor (
float, 기본값 1) — 미드 블록에 사용할 스케일 팩터입니다. - act_fn (
str, 기본값 “silu”) — 사용할 활성화 함수입니다. - norm_num_groups (
int, 선택 사항, 기본값 32) — 정규화에 사용할 그룹의 수입니다. None인 경우 후처리에서 정규화 및 활성화 레이어가 건너뜁니다. - norm_eps (
float, 기본값 1e-5) — 정규화에 사용할 epsilon 값입니다. - cross_attention_dim (
int, 기본값 1280) — 크로스 어텐션 특징의 차원입니다. - transformer_layers_per_block (
int또는tuple[int], 선택 사항, 기본값 1) —BasicTransformerBlock유형의 transformer 블록 수입니다.~models.unet_2d_blocks.CrossAttnDownBlock2D,~models.unet_2d_blocks.CrossAttnUpBlock2D,~models.unet_2d_blocks.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 | tuple[int], 기본값 8) — Attention head의 차원입니다. - use_linear_projection (
bool, 기본값False) — - class_embed_type (
str, 선택 사항, 기본값None) — 결국 time embeddings와 합산되는 class embedding의 유형입니다. None,"timestep","identity","projection", 또는"simple_projection"중 하나를 선택할 수 있습니다. - addition_embed_type (
str, 선택 사항, 기본값None) — 시간 임베딩과 합산될 선택적 임베딩을 구성합니다.None또는 “text” 중 하나를 선택할 수 있습니다. “text”를 선택하면TextTimeEmbedding레이어가 사용됩니다. - num_class_embeds (
int, 선택 사항, 기본값 0) —class_embed_type가None인 경우 클래스 조건화를 수행할 때time_embed_dim으로 투영되는 학습 가능한 임베딩 행렬의 입력 차원. - upcast_attention (
bool, 기본값False) — - resnet_time_scale_shift (
str, 기본값"default") — ResNet 블록의 시간 스케일 시프트 설정입니다(ResnetBlock2D참조).default또는scale_shift중 하나를 선택합니다. - projection_class_embeddings_input_dim (
int, 선택 사항, 기본값None) —class_embed_type="projection"일 때class_labels입력의 차원입니다.class_embed_type="projection"인 경우 필수입니다. - controlnet_conditioning_channel_order (
str, 기본값"rgb") — 조건부 이미지의 채널 순서입니다.bgr인 경우rgb로 변환됩니다. - conditioning_embedding_out_channels (
tuple[int], 선택 사항, 기본값(48, 96, 192, 384)) —conditioning_embedding레이어의 각 블록에 대한 출력 채널 튜플입니다. - global_pool_conditions (
bool, 기본값False) —
ControlNetUnion 모델입니다.
forward
< source >( sample: Tensortimestep: typing.Union[torch.Tensor, float, int]encoder_hidden_states: Tensorcontrolnet_cond: listcontrol_type: Tensorcontrol_type_idx: listconditioning_scale: float | list[float] = 1.0class_labels: typing.Optional[torch.Tensor] = Nonetimestep_cond: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneadded_cond_kwargs: dict[str, torch.Tensor] | None = Nonecross_attention_kwargs: dict[str, typing.Any] | None = Nonefrom_multi: bool = Falseguess_mode: bool = Falsereturn_dict: bool = True ) → ~models.controlnet.ControlNetOutput or tuple
매개변수
- sample (
torch.Tensor) — 노이즈가 포함된 입력 텐서. - timestep (
torch.Tensor | float | int) — 입력을 디노이즈할 타임스텝 수입니다. - encoder_hidden_states (
torch.Tensor) — 인코더 히든 상태입니다. - controlnet_cond (
list[torch.Tensor]) — 조건부 입력 텐서입니다. - control_type (
torch.Tensor) — 제어 유형이 사용되는지에 따라 값이0또는1인, 형태가(batch, num_control_type)인 텐서입니다. - control_type_idx (
list[int]) —control_type의 인덱스입니다. - conditioning_scale (
float, 기본값1.0) — ControlNet 출력의 스케일 팩터입니다. - class_labels (
torch.Tensor, 선택 사항, 기본값None) — 조건부 생성을 위한 선택적 클래스 라벨입니다. 이 라벨의 임베딩은 타임스텝 임베딩과 합산됩니다. - timestep_cond (
torch.Tensor, 선택 사항, 기본값None) — timestep에 대한 추가 조건 임베딩입니다. 제공된 경우, 이 임베딩은self.time_embedding레이어를 통해 전달된 timestep_embedding과 합산되어 최종 timestep 임베딩을 생성합니다. - attention_mask (
torch.Tensor, 선택 사항, 기본값None) —(batch, key_tokens)형태의 attention mask가encoder_hidden_states에 적용됩니다.1인 경우 mask가 유지되고,0인 경우 폐기됩니다. Mask는 bias로 변환되어 “폐기” 토큰에 해당하는 attention score에 큰 음수 값을 더합니다. - added_cond_kwargs (
dict) — Stable Diffusion XL UNet에 대한 추가 조건입니다. - cross_attention_kwargs (
dict[str], 선택 사항, 기본값None) — 지정된 경우AttnProcessor에 전달되는 kwargs 사전입니다. - from_multi (
bool, 기본값False) —MultiControlNetUnionModel에서 호출될 때 표준 스케일링을 사용합니다. - guess_mode (
bool, 기본값False) — 이 모드에서는 모든 프롬프트를 제거하더라도 ControlNet 인코더가 입력 콘텐츠의 내용을 인식하도록 최선을 다합니다.guidance_scale은 3.0에서 5.0 사이 값을 권장합니다. - return_dict (
bool, 기본값True) — 일반 튜플 대신~models.controlnet.ControlNetOutput를 반환할지 여부.
반환값
~models.controlnet.ControlNetOutput or tuple
return_dict가 True인 경우 ~models.controlnet.ControlNetOutput가 반환되고, 그렇지 않으면 첫 번째 요소가 샘플 텐서인 튜플이 반환됩니다.
ControlNetUnionModel의 forward 메서드입니다.
from_unet
< source >( unet: UNet2DConditionModelcontrolnet_conditioning_channel_order: str = 'rgb'conditioning_embedding_out_channels: tuple[int, ...] | None = (16, 32, 96, 256)load_weights_from_unet: bool = True )
매개변수
- unet (
UNet2DConditionModel) — ControlNetUnionModel에 복사할 UNet 모델 가중치입니다. 적용 가능한 모든 구성 옵션도 함께 복사됩니다.
UNet2DConditionModel에서 ControlNetUnionModel을(를) 초기화합니다.
set_attention_slice
< source >( slice_size: str | int | list[int] )
슬라이스된 어텐션 계산을 활성화합니다.
이 옵션이 활성화되면 attention 모듈은 입력 텐서를 슬라이스로 분할하여 여러 단계에 걸쳐 attention을 계산합니다. 이는 속도가 약간 감소하는 대신 메모리를 절약하는 데 유용합니다.
커스텀 어텐션 프로세서를 비활성화하고 기본 어텐션 구현을 설정합니다.