Buckets:
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]]
diffusers.StableDiffusionAdapterPipeline[[diffusers.StableDiffusionAdapterPipeline]]
diffusers.StableDiffusionAdapterPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, unet: UNet2DConditionModel, adapter: diffusers.models.adapter.T2IAdapter | diffusers.models.adapter.MultiAdapter | list[diffusers.models.adapter.T2IAdapter], scheduler: KarrasDiffusionSchedulers, safety_checker: StableDiffusionSafetyChecker, feature_extractor: CLIPImageProcessorPil, requires_safety_checker: bool = True)
매개변수:
adapter (T2IAdapter 또는 MultiAdapter 또는 list[T2IAdapter]) : 노이즈 제거 과정에서 unet에 추가 조건을 제공합니다. 여러 Adapter를 리스트로 설정하면 각 Adapter의 출력을 합산하여 하나의 결합된 추가 조건을 생성합니다.
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) : 인코딩된 이미지 레이턴트를 디노이즈하기 위한 조건부 U-Net 아키텍처.
scheduler (SchedulerMixin) : unet와 함께 사용되어 인코딩된 이미지 latents의 노이즈를 제거하는 스케줄러입니다. 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에서 상속됩니다. 라이브러리가 모든 파이프라인에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 특정 디바이스에서 실행 등)에 대해서는 상위 클래스 문서를 확인하세요.
호출[[diffusers.StableDiffusionAdapterPipeline.call]]
__call__(prompt: str | list[str] = None, image: typing.Union[torch.Tensor, PIL.Image.Image, list[PIL.Image.Image]] = None, height: int | None = None, width: int | None = None, num_inference_steps: int = 50, timesteps: list[int] = None, sigmas: list[float] = None, guidance_scale: float = 7.5, negative_prompt: str | list[str] | None = None, num_images_per_prompt: int | None = 1, eta: float = 0.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, output_type: str | None = 'pil', return_dict: bool = True, callback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = None, callback_steps: int = 1, cross_attention_kwargs: dict[str, typing.Any] | None = None, adapter_conditioning_scale: float | list[float] = 1.0, clip_skip: int | None = None)
매개변수:
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], 선택 사항) : 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 논문(https://huggingface.co/papers/2010.02502)의 파라미터 eta (η)에 해당합니다. 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_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) : 어댑터의 출력은 원래 unet의 잔차에 더해지기 전에 adapter_conditioning_scale과 곱해집니다. init에서 여러 어댑터를 지정하는 경우, 해당 스케일을 리스트로 설정할 수 있습니다.
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[[diffusers.StableDiffusionAdapterPipeline.enable_attention_slicing]]
enable_attention_slicing(slice_size: str | int = 'auto')
매개변수:
slice_size (str 또는 int, 선택 사항, 기본값 "auto") : "auto"인 경우 attention heads에 전달되는 입력을 절반으로 줄여 attention을 두 단계로 계산합니다. "max"인 경우 한 번에 하나의 슬라이스만 실행하여 최대의 메모리를 절약합니다. 숫자가 제공되면 attention_head_dim // slice_size만큼의 슬라이스를 사용합니다. 이 경우 attention_head_dim은 slice_size의 배수여야 합니다.
슬라이스된 어텐션 계산을 활성화합니다. 이 옵션이 활성화되면 어텐션 모듈은 입력 텐서를 슬라이스로 분할하여 여러 단계에 걸쳐 어텐션을 계산합니다. 어텐션 헤드 하나가 넘는 경우, 각 헤드를 순차적으로 계산합니다. 이는 속도가 약간 감소하는 대신 메모리를 절약하는 데 유용합니다.
> ⚠️ 이미
scaled_dot_product_attention(SDPA)를 사용 중이라면 attention slicing을 활성화하지 마세요 from PyTorch > 2.0 or xFormers. 이러한 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[[diffusers.StableDiffusionAdapterPipeline.disable_attention_slicing]]
disable_attention_slicing()
슬라이스된 어텐션 계산 기능을 비활성화합니다. enable_attention_slicing가 이전에 호출된 경우, 어텐션은 한 번에 계산됩니다.
enable_xformers_memory_efficient_attention[[diffusers.StableDiffusionAdapterPipeline.enable_xformers_memory_efficient_attention]]
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[[diffusers.StableDiffusionAdapterPipeline.disable_xformers_memory_efficient_attention]]
disable_xformers_memory_efficient_attention()
xFormers에서 메모리 효율적 어텐션을 비활성화합니다.
encode_prompt[[diffusers.StableDiffusionAdapterPipeline.encode_prompt]]
encode_prompt(prompt, device, num_images_per_prompt, do_classifier_free_guidance, negative_prompt = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, lora_scale: float | None = None, clip_skip: int | None = None)
매개변수:
prompt (str 또는 list[str], 선택 사항) : 인코딩할 프롬프트
device : (torch.device): torch 디바이스
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_prompt 입력 인수에서 negative_prompt_embeds가 생성됩니다.
lora_scale (float, 선택 사항) : LoRA 레이어가 로드된 경우 텍스트 인코더의 모든 LoRA 레이어에 적용될 LoRA 스케일입니다.
clip_skip (int, 선택 사항) : 프롬프트 임베딩을 계산할 때 CLIP에서 건너뛸 레이어 수. 값이 1이면 최종 레이어 바로 이전 레이어의 출력을 프롬프트 임베딩 계산에 사용합니다.
프롬프트를 텍스트 인코더의 히든 상태로 인코딩합니다.
get_guidance_scale_embedding[[diffusers.StableDiffusionAdapterPipeline.get_guidance_scale_embedding]]
get_guidance_scale_embedding(w: Tensor, embedding_dim: int = 512, dtype: dtype = torch.float32)
매개변수:
w (torch.Tensor) : 지정된 guidance scale을 사용하여 임베딩 벡터를 생성하고, 이를 통해 timestep 임베딩을 풍부하게 만듭니다.
embedding_dim (int, 선택 사항, 기본값 512) : 생성할 임베딩의 차원.
dtype (torch.dtype, 선택 사항, 기본값 torch.float32) : 생성된 임베딩의 데이터 유형입니다.
반환값: torch.Tensor
(len(w), embedding_dim) 형태의 임베딩 벡터.
StableDiffusionXLAdapterPipeline[[diffusers.StableDiffusionXLAdapterPipeline]]
diffusers.StableDiffusionXLAdapterPipeline[[diffusers.StableDiffusionXLAdapterPipeline]]
diffusers.StableDiffusionXLAdapterPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, text_encoder_2: CLIPTextModelWithProjection, tokenizer: CLIPTokenizer, tokenizer_2: CLIPTokenizer, unet: UNet2DConditionModel, adapter: diffusers.models.adapter.T2IAdapter | diffusers.models.adapter.MultiAdapter | list[diffusers.models.adapter.T2IAdapter], scheduler: KarrasDiffusionSchedulers, force_zeros_for_empty_prompt: bool = True, feature_extractor: CLIPImageProcessorPil = None, image_encoder: CLIPVisionModelWithProjection = None)
매개변수:
adapter (T2IAdapter 또는 MultiAdapter 또는 list[T2IAdapter]) : 노이즈 제거 과정에서 unet에 추가 조건을 제공합니다. 여러 Adapter를 리스트로 설정하면 각 Adapter의 출력을 합산하여 하나의 결합된 추가 조건을 생성합니다.
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) : 인코딩된 이미지 레이턴트를 디노이즈하기 위한 조건부 U-Net 아키텍처.
scheduler (SchedulerMixin) : unet와 함께 사용되어 인코딩된 이미지 latents의 노이즈를 제거하는 스케줄러입니다. 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에서 상속됩니다. 라이브러리가 모든 파이프라인에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 특정 디바이스에서 실행 등)에 대해서는 상위 클래스 문서를 확인하세요.
파이프라인은 다음 로딩 메서드도 상속합니다:
- 텍스트 인버전 임베딩을 로드하는 load_textual_inversion()
.ckpt파일을 로드하기 위한 from_single_file()- LoRA 가중치를 로드하는 load_lora_weights()
- LoRA 가중치를 저장하는 save_lora_weights()
- IP Adapter를 로드하기 위한 load_ip_adapter()
호출[[diffusers.StableDiffusionXLAdapterPipeline.call]]
__call__(prompt: str | list[str] = None, prompt_2: str | list[str] | None = None, image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, height: int | None = None, width: int | None = None, num_inference_steps: int = 50, timesteps: list[int] = None, sigmas: list[float] = None, denoising_end: float | None = None, guidance_scale: float = 5.0, negative_prompt: str | list[str] | None = None, negative_prompt_2: str | list[str] | None = None, num_images_per_prompt: int | None = 1, eta: float = 0.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, ip_adapter_image_embeds: list[torch.Tensor] | None = None, output_type: str | None = 'pil', return_dict: bool = True, callback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = None, callback_steps: int = 1, cross_attention_kwargs: dict[str, typing.Any] | None = None, guidance_rescale: float = 0.0, original_size: tuple[int, int] | None = None, crops_coords_top_left: tuple[int, int] = (0, 0), target_size: tuple[int, int] | None = None, negative_original_size: tuple[int, int] | None = None, negative_crops_coords_top_left: tuple[int, int] = (0, 0), negative_target_size: tuple[int, int] | None = None, adapter_conditioning_scale: float | list[float] = 1.0, adapter_conditioning_factor: float = 1.0, clip_skip: int | None = None)
매개변수:
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], 선택 사항) : 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 논문(https://huggingface.co/papers/2010.02502)의 파라미터 eta (η)에 해당합니다. 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_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, 선택 사항, 기본값 0.0) : Common Diffusion Noise Schedules and Sample Steps are Flawed에서 제안한 Guidance rescale factor입니다. guidance_scale은 Common Diffusion Noise Schedules and Sample Steps are Flawed의 16번 식에서 φ로 정의됩니다. Guidance rescale factor는 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 위치에서 아래쪽으로 "잘린" 것처럼 보이는 이미지를 생성할 수 있습니다. (0, 0)으로 crops_coords_top_left를 설정하면 일반적으로 잘 중앙 정렬된 이미지를 얻을 수 있습니다. 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) : 어댑터의 출력은 원래 unet의 잔차에 더해지기 전에 adapter_conditioning_scale과 곱해집니다. init에서 여러 어댑터를 지정하는 경우, 해당 스케일을 리스트로 설정할 수 있습니다.
adapter_conditioning_factor (float, 선택 사항, 기본값 1.0) : adapter가 적용될 timestep의 비율입니다. adapter_conditioning_factor가 0.0이면 adapter가 전혀 적용되지 않습니다. adapter_conditioning_factor가 1.0이면 adapter가 모든 timestep에 적용됩니다. adapter_conditioning_factor가 0.5이면 adapter가 timestep의 절반에 적용됩니다.
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[[diffusers.StableDiffusionXLAdapterPipeline.enable_attention_slicing]]
enable_attention_slicing(slice_size: str | int = 'auto')
매개변수:
slice_size (str 또는 int, 선택 사항, 기본값 "auto") : "auto"인 경우 attention heads에 전달되는 입력을 절반으로 줄여 attention을 두 단계로 계산합니다. "max"인 경우 한 번에 하나의 슬라이스만 실행하여 최대의 메모리를 절약합니다. 숫자가 제공되면 attention_head_dim // slice_size만큼의 슬라이스를 사용합니다. 이 경우 attention_head_dim은 slice_size의 배수여야 합니다.
슬라이스된 어텐션 계산을 활성화합니다. 이 옵션이 활성화되면 어텐션 모듈은 입력 텐서를 슬라이스로 분할하여 여러 단계에 걸쳐 어텐션을 계산합니다. 어텐션 헤드 하나가 넘는 경우, 각 헤드를 순차적으로 계산합니다. 이는 속도가 약간 감소하는 대신 메모리를 절약하는 데 유용합니다.
> ⚠️ 이미
scaled_dot_product_attention(SDPA)를 사용 중이라면 attention slicing을 활성화하지 마세요 from PyTorch > 2.0 or xFormers. 이러한 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[[diffusers.StableDiffusionXLAdapterPipeline.disable_attention_slicing]]
disable_attention_slicing()
슬라이스된 어텐션 계산 기능을 비활성화합니다. enable_attention_slicing가 이전에 호출된 경우, 어텐션은 한 번에 계산됩니다.
enable_xformers_memory_efficient_attention[[diffusers.StableDiffusionXLAdapterPipeline.enable_xformers_memory_efficient_attention]]
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[[diffusers.StableDiffusionXLAdapterPipeline.disable_xformers_memory_efficient_attention]]
disable_xformers_memory_efficient_attention()
xFormers에서 메모리 효율적 어텐션을 비활성화합니다.
encode_prompt[[diffusers.StableDiffusionXLAdapterPipeline.encode_prompt]]
encode_prompt(prompt: str, prompt_2: str | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, do_classifier_free_guidance: bool = True, negative_prompt: str | None = None, negative_prompt_2: str | None = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, lora_scale: float | None = None, clip_skip: int | None = None)
매개변수:
prompt (str 또는 list[str], 선택 사항) : 인코딩할 프롬프트
prompt_2 (str 또는 list[str], 선택 사항) : tokenizer_2 및 text_encoder_2에 전송할 프롬프트입니다. 정의되지 않은 경우, 두 텍스트 인코더 모두에 prompt가 사용됩니다.
device : (torch.device): torch 디바이스
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_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[[diffusers.StableDiffusionXLAdapterPipeline.get_guidance_scale_embedding]]
get_guidance_scale_embedding(w: Tensor, embedding_dim: int = 512, dtype: dtype = torch.float32)
매개변수:
w (torch.Tensor) : 지정된 guidance scale을 사용하여 임베딩 벡터를 생성하고, 이를 통해 timestep 임베딩을 풍부하게 만듭니다.
embedding_dim (int, 선택 사항, 기본값 512) : 생성할 임베딩의 차원.
dtype (torch.dtype, 선택 사항, 기본값 torch.float32) : 생성된 임베딩의 데이터 유형입니다.
반환값: torch.Tensor
(len(w), embedding_dim) 형태의 임베딩 벡터.
Xet Storage Details
- Size:
- 53 kB
- Xet hash:
- 7088c8629c5dfa5801f0d6a7690aca2eb8d6375641c48e615cab5878904f4bde
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.