Diffusers documentation

T2I-Adapter

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

T2I-Adapter

Chong Mou, Xintao Wang, Liangbin Xie, Jian Zhang, Zhongang Qi, Ying Shan, Xiaohu Qie의 T2I-Adapter: Learning Adapters to Dig out More Controllable Ability for Text-to-Image Diffusion Models

pretrained models를 사용하면 control images(예: depth map)를 제공하여 Stable Diffusion의 텍스트-이미지 생성을 제어할 수 있습니다. 이를 통해 생성된 이미지가 depth image의 구조를 따르도록 하고 세부 사항을 채울 수 있습니다.

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

대규모 텍스트-이미지(T2I) 모델의 놀라운 생성 능력은 복잡한 구조와 의미 있는 시맨틱을 학습하는 강력한 힘을 입증했습니다. 그러나 텍스트 프롬프트에만 의존하면 모델이 학습한 지식을 완전히 활용하기 어렵고, 특히 유연하고 정확한 제어(예: 색상 및 구조)가 필요한 경우 더욱 그러합니다. 본 논문에서는 T2I 모델이 암묵적으로 학습한 능력을 “발굴”하고, 이를 명시적으로 활용하여 생성을 더 세밀하게 제어하는 것을 목표로 합니다. 구체적으로, 원래의 대규모 T2I 모델을 동결한 상태에서 T2I 모델 내부의 지식과 외부 제어 신호를 정렬하기 위해 단순하고 경량화된 T2I-Adapters를 학습하는 방법을 제안합니다. 이를 통해 다양한 조건에 따라 여러 어댑터를 학습하여 생성 결과의 색상과 구조에서 풍부한 제어 및 편집 효과를 달성할 수 있습니다. 또한, 제안된 T2I-Adapters는 조합 가능성과 일반화 능력과 같은 실용적 가치가 있는 매력적인 특성을 갖추고 있습니다. 광범위한 실험을 통해 우리의 T2I-Adapter가 유망한 생성 품질과 다양한 응용 범위를 가짐을 입증했습니다.

이 모델은 커뮤니티 기여자 HimariO ❤️ 에 의해 기여되었습니다.

StableDiffusionAdapterPipeline

클래스 diffusers.StableDiffusionAdapterPipeline

< >

( vae: AutoencoderKLtext_encoder: CLIPTextModeltokenizer: CLIPTokenizerunet: UNet2DConditionModeladapter: diffusers.models.adapter.T2IAdapter | diffusers.models.adapter.MultiAdapter | list[diffusers.models.adapter.T2IAdapter]scheduler: KarrasDiffusionSchedulerssafety_checker: StableDiffusionSafetyCheckerfeature_extractor: CLIPImageProcessorPilrequires_safety_checker: bool = True )

매개변수

  • adapter (T2IAdapter 또는 MultiAdapter 또는 list[T2IAdapter]) — denoising 과정에서 unet에 추가적인 conditioning을 제공합니다. 여러 Adapter를 list로 설정하면 각 Adapter의 출력값을 합산하여 하나의 통합된 추가 conditioning을 생성합니다.
  • adapter_weights (list[float], 선택 사항, 기본값 None) — 각 어댑터의 출력을 함께 더하기 전에 곱할 가중치를 나타내는 float 목록입니다.
  • vae (AutoencoderKL) — 이미지를 잠재 표현으로 인코딩하고 디코딩하는 Variational Auto-Encoder (VAE) 모델.
  • text_encoder (CLIPTextModel) — 동결된 텍스트 인코더. Stable Diffusion은 CLIP의 텍스트 부분을 사용하며, 구체적으로는 clip-vit-large-patch14 변형을 사용합니다.
  • tokenizer (CLIPTokenizer) — CLIPTokenizer 클래스의 토크나이저.
  • unet (UNet2DConditionModel) — 인코딩된 이미지 latents의 노이즈를 제거하기 위한 조건부 U-Net 아키텍처.
  • scheduler (SchedulerMixin) — 인코딩된 이미지 잠재를 디노이즈하기 위해 unet와 함께 사용할 스케줄러입니다. DDIMScheduler, LMSDiscreteScheduler, 또는 PNDMScheduler 중 하나일 수 있습니다.
  • safety_checker (StableDiffusionSafetyChecker) — 생성된 이미지가 offensive 또는 harmful로 간주될 수 있는지 추정하는 분류 모듈입니다. 자세한 내용은 model card를 참고하세요.
  • feature_extractor (CLIPImageProcessor) — 생성된 이미지에서 safety_checker의 입력으로 사용할 특징을 추출하는 모델입니다.

T2I-Adapter가 강화된 Stable Diffusion을 사용한 텍스트-이미지 생성을 위한 Pipeline https://huggingface.co/papers/2302.08453

이 모델은 DiffusionPipeline에서 상속됩니다. 라이브러리가 모든 파이프라인에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 특정 디바이스에서 실행 등)에 대해서는 상위 클래스 문서를 확인하세요.

__call__

< >

( prompt: str | list[str] = Noneimage: typing.Union[torch.Tensor, PIL.Image.Image, list[PIL.Image.Image]] = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 50timesteps: list[int] = Nonesigmas: list[float] = Noneguidance_scale: float = 7.5negative_prompt: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int = 1cross_attention_kwargs: dict[str, typing.Any] | None = Noneadapter_conditioning_scale: float | list[float] = 1.0clip_skip: int | None = None ) → ~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput or tuple

매개변수

  • prompt (str 또는 list[str], 선택 사항) — 이미지 생성을 안내할 프롬프트입니다. 정의되지 않은 경우 prompt_embeds를 대신 전달해야 합니다.
  • image (torch.Tensor, PIL.Image.Image, list[torch.Tensor] 또는 list[PIL.Image.Image] 또는 list[list[PIL.Image.Image]]) — Adapter의 입력 조건입니다. Adapter는 이 입력 조건을 사용하여 Unet에 가이던스를 생성합니다. 타입이 torch.Tensor로 지정된 경우, Adapter에 그대로 전달됩니다. PIL.Image.Image도 이미지로 허용됩니다. 컨트롤 이미지는 출력 이미지에 맞게 자동으로 리사이즈됩니다.
  • height (int, 선택 사항, 기본값: self.unet.config.sample_size * self.vae_scale_factor) — 생성된 이미지의 픽셀 단위 높이입니다.
  • width (int, 선택 사항, 기본값 self.unet.config.sample_size * self.vae_scale_factor) — 생성된 이미지의 픽셀 단위 너비입니다.
  • num_inference_steps (int, 선택 사항, 기본값 50) — 디노이징 단계의 수입니다. 디노이징 단계가 많을수록 일반적으로 더 높은 품질의 이미지를 생성하지만, 추론 속도가 느려집니다.
  • timesteps (list[int], 선택 사항) — timesteps 인수를 지원하는 스케줄러의 set_timesteps 메서드에서 디노이징 과정에 사용할 커스텀 timesteps입니다. 정의되지 않은 경우, num_inference_steps가 전달될 때의 기본 동작이 사용됩니다. 내림차순으로 정렬되어 있어야 합니다.
  • sigmas (list[float], 선택 사항) — set_timesteps 메서드에 sigmas 인수를 지원하는 스케줄러의 노이즈 제거 과정에 사용할 커스텀 시그마입니다. 정의되지 않은 경우, num_inference_steps가 전달될 때의 기본 동작이 사용됩니다.
  • guidance_scale (float, 선택 사항, 기본값 7.5) — Classifier-Free Diffusion Guidance에서 정의한 가이던스 스케일입니다. guidance_scale은 Imagen Paper의 방정식 2의 w로 정의됩니다. guidance_scale > 1로 설정하면 가이던스 스케일이 활성화됩니다. 가이던스 스케일이 높을수록 prompt 텍스트와 밀접하게 연결된 이미지를 생성하도록 유도하지만, 일반적으로 이미지 품질이 낮아지는 대가를 치릅니다.
  • negative_prompt (str 또는 list[str], 선택 사항) — 이미지 생성을 안내하지 않을 프롬프트입니다. 정의되지 않은 경우 negative_prompt_embeds를 대신 전달해야 합니다. 정의되지 않은 경우 negative_prompt_embeds를 대신 전달해야 합니다. 가이던스를 사용하지 않는 경우 무시됩니다(즉, guidance_scale이 1보다 작은 경우 무시됩니다).
  • num_images_per_prompt (int, 선택 사항, 기본값 1) — 프롬프트당 생성할 이미지의 수입니다.
  • eta (float, 선택 사항, 기본값 0.0) — DDIM 논문에서 파라미터 eta (η)에 해당합니다: https://huggingface.co/papers/2010.02502. schedulers.DDIMScheduler에만 적용되며, 다른 경우 무시됩니다.
  • generator (torch.Generator 또는 list[torch.Generator], 선택 사항) — 생성을 결정적으로 만들기 위한 torch generator 하나 또는 목록
  • latents (torch.Tensor, 선택 사항) — 이미지 생성의 입력으로 사용할 가우시안 분포에서 샘플링된 사전 생성된 노이즈 latents입니다. 동일한 생성을 다른 프롬프트로 조정하는 데 사용할 수 있습니다. 제공되지 않으면, 제공된 랜덤 generator를 사용하여 샘플링하여 latents 텐서가 생성됩니다.
  • prompt_embeds (torch.Tensor, 선택) — 미리 생성된 텍스트 임베딩입니다. 텍스트 입력을 쉽게 조정하는 데 사용할 수 있으며, 예를 들어 프롬프트 가중치 설정에 활용할 수 있습니다. 제공되지 않으면 prompt 입력 인자로부터 텍스트 임베딩이 생성됩니다.
  • negative_prompt_embeds (torch.Tensor, 선택 사항) — 미리 생성된 negative text embeddings입니다. 텍스트 입력을 쉽게 조정하는 데 사용할 수 있으며, 예를 들어 프롬프트 가중치 설정에 활용할 수 있습니다. 제공되지 않으면 negative_prompt 입력 인자로부터 negative_prompt_embeds가 생성됩니다.
  • output_type (str, 선택 사항, 기본값 "pil") — 이미지 생성의 출력 형식입니다. PIL: PIL.Image.Image 또는 np.array 중 하나를 선택합니다.
  • return_dict (bool, 선택 사항, 기본값 True) — 단순 튜플 대신 ~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput를 반환할지 여부.
  • callback (Callable, 선택 사항) — 추론 중 callback_steps 스텝마다 호출되는 함수입니다. 이 함수는 다음 인수를 받아 호출됩니다: callback(step: int, timestep: int, latents: torch.Tensor).
  • callback_steps (int, 선택 사항, 기본값 1) — callback 함수가 호출되는 주기입니다. 지정하지 않으면 callback은 모든 단계에서 호출됩니다.
  • cross_attention_kwargs (dict, 선택 사항) — 지정된 경우 diffusers.models.attention_processor의 self.processor 아래에서 정의된 AttnProcessor에 전달되는 kwargs 사전입니다.
  • adapter_conditioning_scale (float 또는 list[float], 선택 사항, 기본값 1.0) — adapter의 출력은 원래 unet의 residual에 더해지기 전에 adapter_conditioning_scale로 곱해집니다. init에서 여러 adapter를 지정하는 경우, 해당 scale을 리스트로 설정할 수 있습니다.
  • clip_skip (int, 선택 사항) — 프롬프트 임베딩을 계산할 때 CLIP에서 건너뛸 레이어의 수입니다. 값이 1이면 최종 레이어 바로 이전 레이어의 출력을 프롬프트 임베딩 계산에 사용합니다.

반환값

~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput 또는 tuple

~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput if return_dict is True, otherwise a tuple. When returning a tuple, the first element is a list with the generated images, and the second element is a list of bools denoting whether the corresponding generated image likely represents "not-safe-for-work" (nsfw) content, according to the safety_checker`.

생성을 위해 파이프라인을 호출할 때 호출되는 함수.

예:

>>> from PIL import Image
>>> from diffusers.utils import load_image
>>> import torch
>>> from diffusers import StableDiffusionAdapterPipeline, T2IAdapter

>>> image = load_image(
...     "https://huggingface.co/datasets/diffusers/docs-images/resolve/main/t2i-adapter/color_ref.png"
... )

>>> color_palette = image.resize((8, 8))
>>> color_palette = color_palette.resize((512, 512), resample=Image.Resampling.NEAREST)

>>> adapter = T2IAdapter.from_pretrained("TencentARC/t2iadapter_color_sd14v1", torch_dtype=torch.float16)
>>> pipe = StableDiffusionAdapterPipeline.from_pretrained(
...     "CompVis/stable-diffusion-v1-4",
...     adapter=adapter,
...     torch_dtype=torch.float16,
... )

>>> pipe.to("cuda")

>>> out_image = pipe(
...     "At night, glowing cubes in front of the beach",
...     image=color_palette,
... ).images[0]

enable_attention_slicing

< >

( slice_size: str | int = 'auto' )

매개변수

  • slice_size (str 또는 int, 선택 사항, 기본값 "auto") — "auto"인 경우, attention head에 전달되는 입력을 절반으로 나누어 attention을 두 단계에 걸쳐 계산합니다. "max"인 경우, 한 번에 하나의 slice만 실행하여 최대의 메모리를 절약합니다. 숫자가 제공되면 attention_head_dim // slice_size만큼의 slice를 사용합니다. 이 경우 attention_head_dim 은 slice_size의 배수여야 합니다.

슬라이스된 어텐션 계산을 활성화합니다. 이 옵션이 활성화되면 어텐션 모듈은 입력 텐서를 슬라이스로 나누어 여러 단계에 걸쳐 어텐션을 계산합니다. 어텐션 헤드가 하나 이상인 경우, 각 헤드를 순차적으로 계산합니다. 이는 속도가 약간 감소하는 대신 메모리를 절약하는 데 유용합니다.

> ⚠️ PyTorch > 2.0 또는 xFormers의 scaled_dot_product_attention(SDPA)를 이미 사용 중이라면 attention slicing을 활성화하지 마세요. 이러한 attention 계산은 이미 메모리 효율성이 매우 높아 이 기능을 활성화할 필요가 없습니다. SDPA 또는 xFormers와 함께 attention slicing을 활성화하면 심각한 성능 저하가 발생할 수 있습니다!

예:

>>> import torch
>>> from diffusers import StableDiffusionPipeline

>>> pipe = StableDiffusionPipeline.from_pretrained(
...     "stable-diffusion-v1-5/stable-diffusion-v1-5",
...     dtype=torch.float16,
...     use_safetensors=True,
... )

>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> pipe.enable_attention_slicing()
>>> image = pipe(prompt).images[0]

disable_attention_slicing

< >

( )

슬라이스된 어텐션 계산 기능을 비활성화합니다. enable_attention_slicing가 이전에 호출된 경우, 어텐션은 한 번에 계산됩니다.

enable_xformers_memory_efficient_attention

< >

( attention_op: typing.Optional[typing.Callable] = None )

매개변수

  • attention_op (Callable, 선택 사항) — xFormers의 memory_efficient_attention() 함수의 op 인수로 사용될 None 기본 연산자를 재정의합니다.

xFormers에서 메모리 효율적인 어텐션을 활성화합니다. 이 옵션을 활성화하면 추론 시 GPU 메모리 사용량이 감소하고 속도가 향상될 수 있습니다. 학습 시 속도 향상은 보장되지 않습니다.

> ⚠️ memory efficient attention과 sliced attention이 모두 활성화된 경우, memory efficient attention이 > 우선합니다.

예:

>>> import torch
>>> from diffusers import DiffusionPipeline
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp

>>> pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
>>> # Workaround for not accepting attention shape using VAE for Flash Attention
>>> pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)

disable_xformers_memory_efficient_attention

< >

( )

xFormers에서 메모리 효율적 어텐션을 비활성화합니다.

encode_prompt

< >

( promptdevicenum_images_per_promptdo_classifier_free_guidancenegative_prompt = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )

매개변수

  • prompt (str 또는 list[str], 선택 사항) — 인코딩할 프롬프트
  • device — (torch.device): torch device
  • num_images_per_prompt (int) — 프롬프트당 생성할 이미지 수
  • do_classifier_free_guidance (bool) — classifier free guidance를 사용할지 여부
  • negative_prompt (str 또는 list[str], 선택 사항) — 이미지 생성을 안내하지 않을 프롬프트입니다. 정의되지 않은 경우 negative_prompt_embeds를 대신 전달해야 합니다. 가이던스를 사용하지 않을 때 무시됩니다(즉, guidance_scale이 1보다 작으면 무시됩니다).
  • prompt_embeds (torch.Tensor, 선택) — 미리 생성된 텍스트 임베딩입니다. 텍스트 입력을 쉽게 조정하는 데 사용할 수 있으며, 예를 들어 프롬프트 가중치 설정에 활용할 수 있습니다. 제공되지 않으면 prompt 입력 인자로부터 텍스트 임베딩이 생성됩니다.
  • negative_prompt_embeds (torch.Tensor, 선택 사항) — 미리 생성된 negative text embeddings입니다. 텍스트 입력을 쉽게 조정하는 데 사용할 수 있으며, 예를 들어 프롬프트 가중치 설정에 활용할 수 있습니다. 제공되지 않으면 negative_prompt 입력 인자로부터 negative_prompt_embeds가 생성됩니다.
  • lora_scale (float, 선택 사항) — LoRA 레이어가 로드된 경우 텍스트 인코더의 모든 LoRA 레이어에 적용될 LoRA 스케일입니다.
  • clip_skip (int, 선택 사항) — 프롬프트 임베딩을 계산할 때 CLIP에서 건너뛸 레이어의 수입니다. 값이 1이면 최종 레이어 바로 이전 레이어의 출력을 프롬프트 임베딩 계산에 사용합니다.

프롬프트를 텍스트 인코더의 히든 상태로 인코딩합니다.

get_guidance_scale_embedding

< >

( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor

매개변수

  • w (torch.Tensor) — 지정된 guidance scale로 임베딩 벡터를 생성하여 이후 timestep 임베딩을 풍부하게 만듭니다.
  • embedding_dim (int, 선택 사항, 기본값 512) — 생성할 임베딩의 차원입니다.
  • dtype (torch.dtype, 선택 사항, 기본값 torch.float32) — 생성된 임베딩의 데이터 유형입니다.

반환값

torch.Tensor

(len(w), embedding_dim) 형태의 임베딩 벡터.

https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298를 참조하세요.

StableDiffusionXLAdapterPipeline

클래스 diffusers.StableDiffusionXLAdapterPipeline

< >

( vae: AutoencoderKLtext_encoder: CLIPTextModeltext_encoder_2: CLIPTextModelWithProjectiontokenizer: CLIPTokenizertokenizer_2: CLIPTokenizerunet: UNet2DConditionModeladapter: diffusers.models.adapter.T2IAdapter | diffusers.models.adapter.MultiAdapter | list[diffusers.models.adapter.T2IAdapter]scheduler: KarrasDiffusionSchedulersforce_zeros_for_empty_prompt: bool = Truefeature_extractor: CLIPImageProcessorPil = Noneimage_encoder: CLIPVisionModelWithProjection = None )

매개변수

  • adapter (T2IAdapter 또는 MultiAdapter 또는 list[T2IAdapter]) — denoising 과정에서 unet에 추가적인 conditioning을 제공합니다. 여러 Adapter를 list로 설정하면 각 Adapter의 출력값을 합산하여 하나의 통합된 추가 conditioning을 생성합니다.
  • adapter_weights (list[float], 선택 사항, 기본값 None) — 각 어댑터의 출력을 함께 더하기 전에 곱할 가중치를 나타내는 float 목록입니다.
  • vae (AutoencoderKL) — 이미지를 잠재 표현으로 인코딩하고 디코딩하는 Variational Auto-Encoder (VAE) 모델.
  • text_encoder (CLIPTextModel) — 동결된 텍스트 인코더. Stable Diffusion은 CLIP의 텍스트 부분을 사용하며, 구체적으로는 clip-vit-large-patch14 변형을 사용합니다.
  • tokenizer (CLIPTokenizer) — CLIPTokenizer 클래스의 토크나이저.
  • unet (UNet2DConditionModel) — 인코딩된 이미지 latents의 노이즈를 제거하기 위한 조건부 U-Net 아키텍처.
  • scheduler (SchedulerMixin) — 인코딩된 이미지 잠재를 디노이즈하기 위해 unet와 함께 사용할 스케줄러입니다. DDIMScheduler, LMSDiscreteScheduler, 또는 PNDMScheduler 중 하나일 수 있습니다.
  • safety_checker (StableDiffusionSafetyChecker) — 생성된 이미지가 offensive 또는 harmful로 간주될 수 있는지 추정하는 분류 모듈입니다. 자세한 내용은 model card를 참고하세요.
  • feature_extractor (CLIPImageProcessor) — 생성된 이미지에서 safety_checker의 입력으로 사용할 특징을 추출하는 모델입니다.

T2I-Adapter가 강화된 Stable Diffusion을 사용한 텍스트-이미지 생성을 위한 Pipeline https://huggingface.co/papers/2302.08453

이 모델은 DiffusionPipeline에서 상속됩니다. 라이브러리가 모든 파이프라인에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 특정 디바이스에서 실행 등)에 대해서는 상위 클래스 문서를 확인하세요.

파이프라인은 다음 로딩 메서드도 상속합니다:

__call__

< >

( prompt: str | list[str] = Noneprompt_2: str | list[str] | None = Noneimage: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 50timesteps: list[int] = Nonesigmas: list[float] = Nonedenoising_end: float | None = Noneguidance_scale: float = 5.0negative_prompt: str | list[str] | None = Nonenegative_prompt_2: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Noneip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Noneip_adapter_image_embeds: list[torch.Tensor] | None = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int = 1cross_attention_kwargs: dict[str, typing.Any] | None = Noneguidance_rescale: float = 0.0original_size: tuple[int, int] | None = Nonecrops_coords_top_left: tuple[int, int] = (0, 0)target_size: tuple[int, int] | None = Nonenegative_original_size: tuple[int, int] | None = Nonenegative_crops_coords_top_left: tuple[int, int] = (0, 0)negative_target_size: tuple[int, int] | None = Noneadapter_conditioning_scale: float | list[float] = 1.0adapter_conditioning_factor: float = 1.0clip_skip: int | None = None ) → ~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput or tuple

매개변수

  • prompt (str 또는 list[str], 선택 사항) — 이미지 생성을 안내할 프롬프트입니다. 정의되지 않은 경우 prompt_embeds를 대신 전달해야 합니다.
  • prompt_2 (str 또는 list[str], 선택 사항) — tokenizer_2 및 text_encoder_2에 전송할 프롬프트입니다. 정의되지 않은 경우, prompt가 두 텍스트 인코더 모두에 사용됩니다.
  • image (torch.Tensor, PIL.Image.Image, list[torch.Tensor] 또는 list[PIL.Image.Image] 또는 list[list[PIL.Image.Image]]) — Adapter의 입력 조건입니다. Adapter는 이 입력 조건을 사용하여 Unet에 가이던스를 생성합니다. 타입이 torch.Tensor로 지정된 경우, Adapter에 그대로 전달됩니다. PIL.Image.Image도 이미지로 허용됩니다. 컨트롤 이미지는 출력 이미지에 맞게 자동으로 리사이즈됩니다.
  • height (int, 선택 사항, 기본값 self.unet.config.sample_size * self.vae_scale_factor) — 생성된 이미지의 픽셀 단위 높이입니다. 512픽셀 미만은 stabilityai/stable-diffusion-xl-base-1.0 및 낮은 해상도에 대해 특별히 파인튜닝되지 않은 체크포인트에서 잘 작동하지 않습니다.
  • width (int, 선택 사항, 기본값 self.unet.config.sample_size * self.vae_scale_factor) — 생성된 이미지의 픽셀 단위 너비입니다. 512픽셀 미만은 stabilityai/stable-diffusion-xl-base-1.0 및 낮은 해상도에 대해 특별히 미세 조정되지 않은 체크포인트에서는 잘 작동하지 않습니다.
  • num_inference_steps (int, 선택 사항, 기본값 50) — 디노이징 단계의 수입니다. 디노이징 단계가 많을수록 일반적으로 더 높은 품질의 이미지를 생성하지만, 추론 속도가 느려집니다.
  • timesteps (list[int], 선택 사항) — timesteps 인수를 지원하는 스케줄러의 set_timesteps 메서드에서 디노이징 과정에 사용할 커스텀 timesteps입니다. 정의되지 않은 경우, num_inference_steps가 전달될 때의 기본 동작이 사용됩니다. 내림차순으로 정렬되어 있어야 합니다.
  • sigmas (list[float], 선택 사항) — set_timesteps 메서드에 sigmas 인수를 지원하는 스케줄러의 노이즈 제거 과정에 사용할 커스텀 시그마입니다. 정의되지 않은 경우, num_inference_steps가 전달될 때의 기본 동작이 사용됩니다.
  • denoising_end (float, 선택 사항) — 지정된 경우, 전체 디노이징 과정 중 의도적으로 조기 종료되기 전에 완료될 비율(0.0에서 1.0 사이)을 결정합니다. 그 결과, 반환되는 샘플에는 스케줄러가 선택한 이산 시간 단계에 따라 상당한 양의 노이즈가 여전히 유지됩니다. 이미지 출력 개선에서 자세히 설명된 바와 같이, 이 파이프라인이 “Mixture of Denoisers” 멀티 파이프라인 구성의 일부로 사용되는 경우 denoising_end 매개변수를 사용하는 것이 이상적입니다.
  • guidance_scale (float, 선택 사항, 기본값 5.0) — Classifier-Free Diffusion Guidance에서 정의한 가이던스 스케일입니다. guidance_scale은 Imagen Paper의 방정식 2의 w로 정의됩니다. guidance_scale > 1로 설정하면 가이던스 스케일이 활성화됩니다. 가이던스 스케일이 높을수록 prompt 텍스트와 밀접하게 연결된 이미지를 생성하도록 유도하지만, 일반적으로 이미지 품질이 낮아지는 대가를 치릅니다.
  • negative_prompt (str 또는 list[str], 선택 사항) — 이미지 생성을 안내하지 않을 프롬프트입니다. 정의되지 않은 경우 negative_prompt_embeds를 대신 전달해야 합니다. 가이던스를 사용하지 않을 때 무시됩니다(즉, guidance_scale이 1보다 작으면 무시됩니다).
  • negative_prompt_2 (str 또는 list[str], 선택) — tokenizer_2 및 text_encoder_2에 전송할 이미지 생성을 유도하지 않을 프롬프트입니다. 정의되지 않은 경우, negative_prompt가 두 텍스트 인코더 모두에 사용됩니다.
  • num_images_per_prompt (int, 선택 사항, 기본값 1) — 프롬프트당 생성할 이미지의 수입니다.
  • eta (float, 선택 사항, 기본값 0.0) — DDIM 논문에서 파라미터 eta (η)에 해당합니다: https://huggingface.co/papers/2010.02502. schedulers.DDIMScheduler에만 적용되며, 다른 경우 무시됩니다.
  • generator (torch.Generator 또는 list[torch.Generator], 선택 사항) — 생성을 결정적으로 만들기 위한 torch generator 하나 또는 목록
  • latents (torch.Tensor, 선택 사항) — 이미지 생성의 입력으로 사용할 가우시안 분포에서 샘플링된 사전 생성된 노이즈 latents입니다. 동일한 생성을 다른 프롬프트로 조정하는 데 사용할 수 있습니다. 제공되지 않으면, 제공된 랜덤 generator를 사용하여 샘플링하여 latents 텐서가 생성됩니다.
  • prompt_embeds (torch.Tensor, 선택) — 미리 생성된 텍스트 임베딩입니다. 텍스트 입력을 쉽게 조정하는 데 사용할 수 있으며, 예를 들어 프롬프트 가중치 설정에 활용할 수 있습니다. 제공되지 않으면 prompt 입력 인자로부터 텍스트 임베딩이 생성됩니다.
  • negative_prompt_embeds (torch.Tensor, 선택 사항) — 미리 생성된 negative text embeddings입니다. 텍스트 입력을 쉽게 조정하는 데 사용할 수 있으며, 예를 들어 프롬프트 가중치 설정에 활용할 수 있습니다. 제공되지 않으면 negative_prompt 입력 인자로부터 negative_prompt_embeds가 생성됩니다.
  • pooled_prompt_embeds (torch.Tensor, 선택) — 미리 생성된 풀링된 텍스트 임베딩입니다. 텍스트 입력을 쉽게 조정하는 데 사용할 수 있으며, 예를 들어 프롬프트 가중치 설정에 활용할 수 있습니다. 제공되지 않으면 prompt 입력 인자로부터 풀링된 텍스트 임베딩이 생성됩니다.
  • negative_pooled_prompt_embeds (torch.Tensor, 선택) — 미리 생성된 negative pooled text embeddings입니다. 텍스트 입력을 쉽게 조정하는 데 사용할 수 있으며, 예를 들어 프롬프트 가중치 설정에 활용할 수 있습니다. 제공되지 않으면 negative_prompt 입력 인자로부터 pooled negative_prompt_embeds가 생성됩니다.
  • ip_adapter_image — (PipelineImageInput, 선택): IP Adapters와 함께 사용할 선택적 이미지 입력입니다.
  • ip_adapter_image_embeds (list[torch.Tensor], 선택 사항) — IP-Adapter를 위한 사전 생성된 이미지 임베딩입니다. IP-Adapter의 수와 동일한 길이의 리스트여야 합니다. 각 요소는 (batch_size, num_images, emb_dim) 형태의 텐서여야 합니다. do_classifier_free_guidance가 True로 설정된 경우, 음의 이미지 임베딩을 포함해야 합니다. 제공되지 않으면 ip_adapter_image 입력 인자로부터 임베딩이 계산됩니다.
  • output_type (str, 선택 사항, 기본값 "pil") — 이미지 생성의 출력 형식입니다. PIL: PIL.Image.Image 또는 np.array 중 하나를 선택합니다.
  • return_dict (bool, 선택 사항, 기본값 True) — 단순 튜플 대신 ~pipelines.stable_diffusion_xl.StableDiffusionAdapterPipelineOutput를 반환할지 여부.
  • callback (Callable, 선택 사항) — 추론 중 callback_steps 스텝마다 호출되는 함수입니다. 이 함수는 다음 인수를 받아 호출됩니다: callback(step: int, timestep: int, latents: torch.Tensor).
  • callback_steps (int, 선택 사항, 기본값 1) — callback 함수가 호출되는 주기입니다. 지정하지 않으면 callback은 모든 단계에서 호출됩니다.
  • cross_attention_kwargs (dict, 선택 사항) — 지정된 경우 diffusers.models.attention_processor의 self.processor에서 정의된 AttentionProcessor로 전달되는 kwargs 사전입니다.
  • guidance_rescale (float, optional, defaults to 0.0) — Guidance rescale factor proposed by Common Diffusion Noise Schedules and Sample Steps are Flawed guidance_scale is defined as φ in equation 16. of Common Diffusion Noise Schedules and Sample Steps are Flawed. Guidance rescale factor should fix overexposure when using zero terminal SNR.
  • original_size (tuple[int], 선택 사항, 기본값 (1024, 1024)) — original_size가 target_size와 다르면 이미지가 다운샘플링 또는 업샘플링된 것처럼 보입니다. 지정되지 않으면 original_size의 기본값은 (height, width)입니다. https://huggingface.co/papers/2307.01952의 2.2절에서 설명된 SDXL의 마이크로 컨디션잉(micro-conditioning)의 일부입니다.
  • crops_coords_top_left (tuple[int], 선택 사항, 기본값 (0, 0)) — crops_coords_top_left는 crops_coords_top_left 위치에서 아래쪽으로 “잘라낸” 것처럼 보이는 이미지를 생성하는 데 사용할 수 있습니다. crops_coords_top_left를 (0, 0)으로 설정하면 일반적으로 잘 중앙 정렬된 이미지를 얻을 수 있습니다. https://huggingface.co/papers/2307.01952의 2.2절에서 설명된 SDXL의 micro-conditioning의 일부입니다.
  • target_size (tuple[int], 선택 사항, 기본값 (1024, 1024)) — 대부분의 경우 target_size는 생성된 이미지의 원하는 높이와 너비로 설정해야 합니다. 지정하지 않으면 기본값으로 (height, width)가 사용됩니다. https://huggingface.co/papers/2307.01952의 2.2절에서 설명하는 SDXL의 마이크로 컨디션닝(micro-conditioning)의 일부입니다. https://huggingface.co/papers/2307.01952의 2.2절.
  • negative_original_size (tuple[int], 선택 사항, 기본값 (1024, 1024)) — 특정 이미지 해상도를 기반으로 생성 과정을 부정적으로 조건부화합니다. https://huggingface.co/papers/2307.01952의 2.2절에서 설명된 SDXL의 micro-conditioning의 일부입니다. 자세한 내용은 이 이슈 스레드를 참조하세요: https://github.com/huggingface/diffusers/issues/4208.
  • negative_crops_coords_top_left (tuple[int], 선택 사항, 기본값 (0, 0)) — 특정 crop 좌표를 기반으로 생성 과정을 부정적으로 조건부화합니다. https://huggingface.co/papers/2307.01952의 2.2절에서 설명된 SDXL의 micro-conditioning의 일부입니다. 자세한 내용은 이 이슈 스레드를 참조하세요: https://github.com/huggingface/diffusers/issues/4208.
  • negative_target_size (tuple[int], 선택 사항, 기본값 (1024, 1024)) — 타겟 이미지 해상도를 기반으로 생성 과정을 부정적으로 조건부화합니다. 대부분의 경우 target_size와 동일해야 합니다. https://huggingface.co/papers/2307.01952의 2.2절에서 설명된 SDXL의 마이크로 컨디션잉(micro-conditioning)의 일부입니다. 자세한 내용은 이 이슈 스레드를 참조하세요: https://github.com/huggingface/diffusers/issues/4208.
  • adapter_conditioning_scale (float 또는 list[float], 선택 사항, 기본값 1.0) — adapter의 출력은 원래 unet의 residual에 더해지기 전에 adapter_conditioning_scale로 곱해집니다. init에서 여러 adapter를 지정하는 경우, 해당 scale을 리스트로 설정할 수 있습니다.
  • adapter_conditioning_factor (float, 선택 사항, 기본값 1.0) — adapter가 적용될 timestep의 비율입니다. adapter_conditioning_factor가 0.0이면 adapter가 전혀 적용되지 않습니다. adapter_conditioning_factor가 1.0이면 모든 timestep에 adapter가 적용됩니다. adapter_conditioning_factor가 0.5이면 timestep의 절반에 adapter가 적용됩니다.
  • clip_skip (int, 선택 사항) — 프롬프트 임베딩을 계산할 때 CLIP에서 건너뛸 레이어의 수입니다. 값이 1이면 최종 레이어 바로 이전 레이어의 출력을 프롬프트 임베딩 계산에 사용합니다.

반환값

~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput 또는 tuple

return_dict가 True인 경우 ~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput, 그렇지 않으면 tuple입니다. tuple을 반환할 경우 첫 번째 요소는 생성된 이미지의 목록입니다.

생성을 위해 파이프라인을 호출할 때 호출되는 함수.

예:

>>> import torch
>>> from diffusers import T2IAdapter, StableDiffusionXLAdapterPipeline, DDPMScheduler
>>> from diffusers.utils import load_image

>>> sketch_image = load_image("https://huggingface.co/Adapter/t2iadapter/resolve/main/sketch.png").convert("L")

>>> model_id = "stabilityai/stable-diffusion-xl-base-1.0"

>>> adapter = T2IAdapter.from_pretrained(
...     "Adapter/t2iadapter",
...     subfolder="sketch_sdxl_1.0",
...     torch_dtype=torch.float16,
...     adapter_type="full_adapter_xl",
... )
>>> scheduler = DDPMScheduler.from_pretrained(model_id, subfolder="scheduler")

>>> pipe = StableDiffusionXLAdapterPipeline.from_pretrained(
...     model_id, adapter=adapter, torch_dtype=torch.float16, variant="fp16", scheduler=scheduler
... ).to("cuda")

>>> generator = torch.manual_seed(42)
>>> sketch_image_out = pipe(
...     prompt="a photo of a dog in real world, high quality",
...     negative_prompt="extra digit, fewer digits, cropped, worst quality, low quality",
...     image=sketch_image,
...     generator=generator,
...     guidance_scale=7.5,
... ).images[0]

enable_attention_slicing

< >

( slice_size: str | int = 'auto' )

매개변수

  • slice_size (str 또는 int, 선택 사항, 기본값 "auto") — "auto"인 경우, attention head에 전달되는 입력을 절반으로 나누어 attention을 두 단계에 걸쳐 계산합니다. "max"인 경우, 한 번에 하나의 slice만 실행하여 최대의 메모리를 절약합니다. 숫자가 제공되면 attention_head_dim // slice_size만큼의 slice를 사용합니다. 이 경우 attention_head_dim 은 slice_size의 배수여야 합니다.

슬라이스된 어텐션 계산을 활성화합니다. 이 옵션이 활성화되면 어텐션 모듈은 입력 텐서를 슬라이스로 나누어 여러 단계에 걸쳐 어텐션을 계산합니다. 어텐션 헤드가 하나 이상인 경우, 각 헤드를 순차적으로 계산합니다. 이는 속도가 약간 감소하는 대신 메모리를 절약하는 데 유용합니다.

> ⚠️ PyTorch > 2.0 또는 xFormers의 scaled_dot_product_attention(SDPA)를 이미 사용 중이라면 attention slicing을 활성화하지 마세요. 이러한 attention 계산은 이미 메모리 효율성이 매우 높아 이 기능을 활성화할 필요가 없습니다. SDPA 또는 xFormers와 함께 attention slicing을 활성화하면 심각한 성능 저하가 발생할 수 있습니다!

예:

>>> import torch
>>> from diffusers import StableDiffusionPipeline

>>> pipe = StableDiffusionPipeline.from_pretrained(
...     "stable-diffusion-v1-5/stable-diffusion-v1-5",
...     dtype=torch.float16,
...     use_safetensors=True,
... )

>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> pipe.enable_attention_slicing()
>>> image = pipe(prompt).images[0]

disable_attention_slicing

< >

( )

슬라이스된 어텐션 계산 기능을 비활성화합니다. enable_attention_slicing가 이전에 호출된 경우, 어텐션은 한 번에 계산됩니다.

enable_xformers_memory_efficient_attention

< >

( attention_op: typing.Optional[typing.Callable] = None )

매개변수

  • attention_op (Callable, 선택 사항) — xFormers의 memory_efficient_attention() 함수의 op 인수로 사용될 None 기본 연산자를 재정의합니다.

xFormers에서 메모리 효율적인 어텐션을 활성화합니다. 이 옵션을 활성화하면 추론 시 GPU 메모리 사용량이 감소하고 속도가 향상될 수 있습니다. 학습 시 속도 향상은 보장되지 않습니다.

> ⚠️ memory efficient attention과 sliced attention이 모두 활성화된 경우, memory efficient attention이 > 우선합니다.

예:

>>> import torch
>>> from diffusers import DiffusionPipeline
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp

>>> pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
>>> # Workaround for not accepting attention shape using VAE for Flash Attention
>>> pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)

disable_xformers_memory_efficient_attention

< >

( )

xFormers에서 메모리 효율적 어텐션을 비활성화합니다.

encode_prompt

< >

( prompt: strprompt_2: str | None = Nonedevice: typing.Optional[torch.device] = Nonenum_images_per_prompt: int = 1do_classifier_free_guidance: bool = Truenegative_prompt: str | None = Nonenegative_prompt_2: str | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )

매개변수

  • prompt (str 또는 list[str], 선택 사항) — 인코딩할 프롬프트
  • prompt_2 (str 또는 list[str], 선택 사항) — tokenizer_2 및 text_encoder_2에 전송할 프롬프트입니다. 정의되지 않은 경우, prompt가 두 텍스트 인코더 모두에 사용됩니다.
  • device — (torch.device): torch device
  • num_images_per_prompt (int) — 프롬프트당 생성할 이미지 수
  • do_classifier_free_guidance (bool) — classifier free guidance를 사용할지 여부
  • negative_prompt (str 또는 list[str], 선택 사항) — 이미지 생성을 안내하지 않을 프롬프트입니다. 정의되지 않은 경우 negative_prompt_embeds를 대신 전달해야 합니다. 가이던스를 사용하지 않을 때 무시됩니다(즉, guidance_scale이 1보다 작으면 무시됩니다).
  • negative_prompt_2 (str 또는 list[str], 선택) — tokenizer_2 및 text_encoder_2에 전송할 이미지 생성을 유도하지 않을 프롬프트입니다. 정의되지 않은 경우, negative_prompt가 두 텍스트 인코더 모두에 사용됩니다.
  • prompt_embeds (torch.Tensor, 선택) — 미리 생성된 텍스트 임베딩입니다. 텍스트 입력을 쉽게 조정하는 데 사용할 수 있으며, 예를 들어 프롬프트 가중치 설정에 활용할 수 있습니다. 제공되지 않으면 prompt 입력 인자로부터 텍스트 임베딩이 생성됩니다.
  • negative_prompt_embeds (torch.Tensor, 선택 사항) — 미리 생성된 negative text embeddings입니다. 텍스트 입력을 쉽게 조정하는 데 사용할 수 있으며, 예를 들어 프롬프트 가중치 설정에 활용할 수 있습니다. 제공되지 않으면 negative_prompt 입력 인자로부터 negative_prompt_embeds가 생성됩니다.
  • pooled_prompt_embeds (torch.Tensor, 선택) — 미리 생성된 풀링된 텍스트 임베딩입니다. 텍스트 입력을 쉽게 조정하는 데 사용할 수 있으며, 예를 들어 프롬프트 가중치 설정에 활용할 수 있습니다. 제공되지 않으면 prompt 입력 인자로부터 풀링된 텍스트 임베딩이 생성됩니다.
  • negative_pooled_prompt_embeds (torch.Tensor, 선택) — 미리 생성된 negative pooled text embeddings입니다. 텍스트 입력을 쉽게 조정하는 데 사용할 수 있으며, 예를 들어 프롬프트 가중치 설정에 활용할 수 있습니다. 제공되지 않으면 negative_prompt 입력 인자로부터 pooled negative_prompt_embeds가 생성됩니다.
  • lora_scale (float, 선택 사항) — LoRA 레이어가 로드된 경우 텍스트 인코더의 모든 LoRA 레이어에 적용될 LoRA 스케일입니다.
  • clip_skip (int, 선택 사항) — 프롬프트 임베딩을 계산할 때 CLIP에서 건너뛸 레이어의 수입니다. 값이 1이면 최종 레이어 바로 이전 레이어의 출력을 프롬프트 임베딩 계산에 사용합니다.

프롬프트를 텍스트 인코더의 히든 상태로 인코딩합니다.

get_guidance_scale_embedding

< >

( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor

매개변수

  • w (torch.Tensor) — 지정된 guidance scale로 임베딩 벡터를 생성하여 이후 timestep 임베딩을 풍부하게 만듭니다.
  • embedding_dim (int, 선택 사항, 기본값 512) — 생성할 임베딩의 차원입니다.
  • dtype (torch.dtype, 선택 사항, 기본값 torch.float32) — 생성된 임베딩의 데이터 유형입니다.

반환값

torch.Tensor

(len(w), embedding_dim) 형태의 임베딩 벡터.

https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298를 참조하세요.

Update on GitHub