Diffusers documentation
Stable Diffusion XL
Stable Diffusion XL
Stable Diffusion XL (SDXL)은 Dustin Podell, Zion English, Kyle Lacey, Andreas Blattmann, Tim Dockhorn, Jonas Müller, Joe Penna, Robin Rombach가 SDXL: Improving Latent Diffusion Models for High-Resolution Image Synthesis에서 제안했습니다.
해당 논문의 초록은 다음과 같습니다:
본문에서는 텍스트-이미지 합성을 위한 잠재 확산 모델인 SDXL을 소개합니다. 이전 버전의 Stable Diffusion과 비교할 때, SDXL은 3배 더 큰 UNet 백본을 활용합니다. 모델 파라미터의 증가는 주로 더 많은 어텐션 블록과 더 큰 크로스-어텐션 컨텍스트에 기인하며, 이는 SDXL이 두 번째 텍스트 인코더를 사용하기 때문입니다. 우리는 여러 가지 새로운 조건화 스킴을 설계하고, 다양한 종횡비로 SDXL을 학습시켰습니다. 또한, 사후 이미지-이미지 기법을 사용하여 SDXL이 생성한 샘플의 시각적 충실도를 향상시키는 데 사용되는 정제 모델을 도입했습니다. SDXL이 이전 버전의 Stable Diffusion에 비해 성능이 크게 향상되었으며, 블랙박스 최첨단 이미지 생성기들과 경쟁할 수 있는 결과를 달성함을 입증했습니다.
팁
- 50 스텝 미만으로 DPM++ 스케줄러와 함께 SDXL을 사용하는 경우 시각적 아티팩트 가 발생할 수 있으며, 이는 솔버가 수치적으로 불안정해지기 때문입니다. 이 문제를 해결하려면 이 PR 을 참고하세요. ODE/SDE 솔버에 대해 다음과 같이 권장합니다:
- 이미지 품질을 개선하려면
use_karras_sigmas=True또는lu_lambdas=True를 설정하세요 euler_at_final=True를 설정하세요. 균일한 스텝 크기를 사용하는 솔버(DPM++2M 또는 DPM++2M SDE)를 사용하는 경우
- 이미지 품질을 개선하려면
- 대부분의 SDXL 체크포인트는 1024x1024 이미지 크기로 가장 좋은 결과를 냅니다. 768x768과 512x512 크기도 지원하지만, 결과 품질이 다소 떨어집니다. 512x512 미만 크기는 권장하지 않으며, stabilityai/stable-diffusion-xl-base-1.0과 같은 기본 체크포인트에서는 특히 권장하지 않습니다.
- SDXL은 학습에 사용된 각 텍스트 인코더에 서로 다른 프롬프트를 전달할 수 있습니다. 동일한 프롬프트의 서로 다른 부분을 텍스트 인코더에 전달하는 것도 가능합니다.
- SDXL 출력 이미지는 이미지-투-이미지 설정에서 리파이너 모델을 활용하여 개선할 수 있습니다.
- SDXL은 이미지 해상도와 크롭 매개변수에 대해 모델에 부정적 조건을 부여하기 위해
negative_original_size,negative_crops_coords_top_left,negative_target_size를 제공합니다.
공식 base 및 refiner 모델 체크포인트는 Stability AI Hub 조직에서 확인해 보세요!
다음 라이브러리가 설치되어 있는지 확인하세요.
# uncomment to install the necessary libraries in Colab
#!pip install -q diffusers transformers accelerate invisible-watermark>=0.2.0생성된 이미지를 식별하는 데 도움이 되는 invisible-watermark 라이브러리 설치를 권장합니다. invisible-watermark 라이브러리가 설치되어 있으면 기본적으로 사용됩니다. 워터마커를 비활성화하려면:
pipeline = StableDiffusionXLPipeline.from_pretrained(..., add_watermarker=False)
모델 체크포인트 로드
모델 가중치가 Hub 또는 로컬에서 별도의 하위 폴더에 저장된 경우, from_pretrained() 메서드를 사용해야 합니다:
from diffusers import StableDiffusionXLPipeline, StableDiffusionXLImg2ImgPipeline
import torch
pipeline = StableDiffusionXLPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda") # or "mps", "xpu", "cpu"
refiner = StableDiffusionXLImg2ImgPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-refiner-1.0", dtype=torch.float16, use_safetensors=True, variant="fp16"
).to("cuda")Hub 또는 로컬에서 단일 파일 형식(.ckpt 또는 .safetensors)으로 저장된 모델 체크포인트를 로드하려면 from_single_file() 메서드를 사용할 수도 있습니다:
from diffusers import StableDiffusionXLPipeline, StableDiffusionXLImg2ImgPipeline
import torch
pipeline = StableDiffusionXLPipeline.from_single_file(
"https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/blob/main/sd_xl_base_1.0.safetensors",
dtype=torch.float16
).to("cuda") # or "mps", "xpu", "cpu"
refiner = StableDiffusionXLImg2ImgPipeline.from_single_file(
"https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0/blob/main/sd_xl_refiner_1.0.safetensors", dtype=torch.float16
).to("cuda")텍스트-이미지
텍스트-이미지 생성의 경우 텍스트 프롬프트를 전달합니다. 기본적으로 SDXL은 최적의 결과를 위해 1024x1024 이미지를 생성합니다. height와 width 매개변수를 768x768 또는 512x512로 설정해 볼 수 있지만, 512x512 미만은 작동하지 않을 가능성이 높습니다.
from diffusers import AutoPipelineForText2Image
import torch
pipeline_text2image = AutoPipelineForText2Image.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda") # or "mps", "xpu", "cpu"
prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
image = pipeline_text2image(prompt=prompt).images[0]
image
이미지-이미지
이미지-이미지 변환의 경우, SDXL은 768x768에서 1024x1024 사이의 이미지 크기로 특히 잘 작동합니다. 초기 이미지와 텍스트 프롬프트를 전달하여 이미지를 조건부로 생성합니다:
from diffusers import AutoPipelineForImage2Image
from diffusers.utils import load_image, make_image_grid
# use from_pipe to avoid consuming additional memory when loading a checkpoint
pipeline = AutoPipelineForImage2Image.from_pipe(pipeline_text2image).to("cuda") # or "mps", "xpu", "cpu"
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/sdxl-text2img.png"
init_image = load_image(url)
prompt = "a dog catching a frisbee in the jungle"
image = pipeline(prompt, image=init_image, strength=0.8, guidance_scale=10.5).images[0]
make_image_grid([init_image, image], rows=1, cols=2)
인페인팅
인페인팅을 수행하려면 원본 이미지와 원본 이미지에서 교체할 영역을 나타내는 마스크가 필요합니다. 마스크 영역을 무엇으로 교체할지 설명하는 프롬프트를 작성하세요.
from diffusers import AutoPipelineForInpainting
from diffusers.utils import load_image, make_image_grid
# use from_pipe to avoid consuming additional memory when loading a checkpoint
pipeline = AutoPipelineForInpainting.from_pipe(pipeline_text2image).to("cuda") # or "mps", "xpu", "cpu"
img_url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/sdxl-text2img.png"
mask_url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/sdxl-inpaint-mask.png"
init_image = load_image(img_url)
mask_image = load_image(mask_url)
prompt = "A deep sea diver floating"
image = pipeline(prompt=prompt, image=init_image, mask_image=mask_image, strength=0.85, guidance_scale=12.5).images[0]
make_image_grid([init_image, mask_image, image], rows=1, cols=3)
이미지 품질 개선
SDXL에는 refiner model이 포함되어 있으며, 이는 base model로부터 더 높은 품질의 이미지를 생성하기 위해 저노이즈 단계의 이미지를 디노이즈하는 데 특화되어 있습니다. refiner를 사용하는 방법은 두 가지가 있습니다:
- base 모델과 refiner 모델을 함께 사용하여 정제된 이미지를 생성합니다
- use를 사용하여 베이스 모델로 이미지를 생성한 후, 리파이너 모델을 사용해 이미지에 더 많은 세부 정보를 추가합니다 (이것이 SDXL이 원래 학습된 방식입니다).
Base + refiner 모델
베이스 모델과 리파이너 모델을 함께 사용하여 이미지를 생성하는 방식을 전문가 디노이저 앙상블이라고 합니다. 전문가 디노이저 앙상블 접근법은 베이스 모델의 출력을 리파이너 모델로 전달하는 방식보다 전체 디노이징 단계가 적으므로, 실행 속도가 훨씬 빠릅니다. 그러나 베이스 모델의 출력을 검사할 수 없으며, 이는 여전히 상당한 양의 노이즈를 포함하고 있기 때문입니다.
전문가 디노이저의 앙상블로서, 베이스 모델은 고노이즈 확산 단계에서 전문가 역할을 하고 리파이너 모델은 저노이즈 확산 단계에서 전문가 역할을 합니다. 베이스 모델과 리파이너 모델을 로드합니다:
from diffusers import DiffusionPipeline
import torch
base = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda") # or "mps", "xpu", "cpu"
refiner = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-refiner-1.0",
text_encoder_2=base.text_encoder_2,
vae=base.vae,
dtype=torch.float16,
use_safetensors=True,
variant="fp16",
).to("cuda")이 접근법을 사용하려면 각 모델이 해당 단계를 수행할 timestep 수를 정의해야 합니다. base 모델의 경우 denoising_end 파라미터로, refiner 모델의 경우 denoising_start 파라미터로 제어됩니다.
denoising_end및denoising_start파라미터는 0과 1 사이의 float 값이어야 합니다. 이러한 파라미터는 스케줄러가 정의한 이산 타임스텝의 비율로 표현됩니다.strength파라미터도 함께 사용하는 경우, 모델이 학습된 이산 타임스텝과 선언된 분수형 컷오프에 의해 디노이징 단계 수가 결정되므로strength는 무시됩니다.
denoising_end=0.8을 설정하여 베이스 모델이 고노이즈 타임스텝의 디노이징을 처음 80% 수행하도록 하고, denoising_start=0.8을 설정하여 리파이너 모델이 저노이즈 타임스텝의 디노이징을 마지막 20% 수행하도록 합니다. 베이스 모델의 출력은 PIL 이미지가 아닌 latent 공간에 있어야 합니다.
prompt = "A majestic lion jumping from a big stone at night"
image = base(
prompt=prompt,
num_inference_steps=40,
denoising_end=0.8,
output_type="latent",
).images
image = refiner(
prompt=prompt,
num_inference_steps=40,
denoising_start=0.8,
image=image,
).images[0]
image
리파이너 모델은 StableDiffusionXLInpaintPipeline에서 인페인팅에도 사용할 수 있습니다:
from diffusers import StableDiffusionXLInpaintPipeline
from diffusers.utils import load_image, make_image_grid
import torch
base = StableDiffusionXLInpaintPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda") # or "mps", "xpu", "cpu"
refiner = StableDiffusionXLInpaintPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-refiner-1.0",
text_encoder_2=base.text_encoder_2,
vae=base.vae,
dtype=torch.float16,
use_safetensors=True,
variant="fp16",
).to("cuda")
img_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo.png"
mask_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo_mask.png"
init_image = load_image(img_url)
mask_image = load_image(mask_url)
prompt = "A majestic tiger sitting on a bench"
num_inference_steps = 75
high_noise_frac = 0.7
image = base(
prompt=prompt,
image=init_image,
mask_image=mask_image,
num_inference_steps=num_inference_steps,
denoising_end=high_noise_frac,
output_type="latent",
).images
image = refiner(
prompt=prompt,
image=image,
mask_image=mask_image,
num_inference_steps=num_inference_steps,
denoising_start=high_noise_frac,
).images[0]
make_image_grid([init_image, mask_image, image.resize((512, 512))], rows=1, cols=3)이 전문가 디노이저 앙상블 방법은 모든 사용 가능한 스케줄러에서 잘 작동합니다!
Base에서 refiner 모델로
SDXL은 이미지-이미지 설정에서 base 모델로부터 완전히 노이즈가 제거된 이미지에 refiner 모델을 사용하여 추가적인 고품질 세부 정보를 추가함으로써 이미지 품질을 향상시킵니다.
base 및 refiner 모델을 로드합니다:
from diffusers import DiffusionPipeline
import torch
base = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda") # or "mps", "xpu", "cpu"
refiner = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-refiner-1.0",
text_encoder_2=base.text_encoder_2,
vae=base.vae,
dtype=torch.float16,
use_safetensors=True,
variant="fp16",
).to("cuda")다른 base model과 함께 SDXL refiner를 사용할 수 있습니다. 예를 들어, Hunyuan-DiT 또는 PixArt-Sigma 파이프라인을 사용하여 프롬프트 준수도가 더 높은 이미지를 생성할 수 있습니다. 이미지를 생성한 후에는 SDXL refiner 모델에 전달하여 최종 생성 품질을 향상시킬 수 있습니다.
기본 모델에서 이미지를 생성하고 모델 출력을 latent 공간으로 설정합니다:
prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
image = base(prompt=prompt, output_type="latent").images[0]생성된 이미지를 refiner 모델에 전달합니다:
image = refiner(prompt=prompt, image=image[None, :]).images[0]
인페인팅을 위해 StableDiffusionXLInpaintPipeline에 base 모델과 refiner 모델을 로드하고, denoising_end 및 denoising_start 매개변수를 제거한 후, refiner에 사용할 추론 스텝 수를 더 작게 선택합니다.
마이크로 조건화
SDXL 학습에는 마이크로 컨디셔닝이라 불리는 여러 추가 컨디셔닝 기법이 포함됩니다. 여기에는 원본 이미지 크기, 대상 이미지 크기, 크롭 매개변수가 있습니다. 이러한 마이크로 컨디셔닝은 추론 시점에 고품질이며 중앙 정렬된 이미지를 생성하는 데 사용할 수 있습니다.
classifier-free guidance를 통해 micro-conditioning과 negative micro-conditioning 매개변수를 모두 사용할 수 있습니다. 이 매개변수는 StableDiffusionXLPipeline, StableDiffusionXLImg2ImgPipeline, StableDiffusionXLInpaintPipeline, StableDiffusionXLControlNetPipeline에서 사용할 수 있습니다.
크기 조건화
크기 조건화에는 두 가지 유형이 있습니다:
original_size조건은 학습 배치의 업스케일된 이미지에서 가져옵니다(전체 학습 데이터의 거의 40%를 차지하는 작은 이미지를 폐기하는 것은 낭비이므로). 이렇게 하면 SDXL은 고해상도 이미지에는 업스케일링 아티팩트가 존재하지 않아야 한다는 것을 학습합니다. 추론 시original_size를 사용하여 원본 이미지 해상도를 지정할 수 있습니다. 기본값인(1024, 1024)를 사용하면 데이터셋의 1024x1024 이미지와 유사한 더 높은 품질의 이미지가 생성됩니다.(256, 256)와 같은 더 낮은 해상도를 선택하더라도 모델은 여전히 1024x1024 이미지를 생성하지만, 데이터셋의 저해상도 이미지(더 단순한 패턴, 흐림)처럼 보입니다.target_size조건부는 SDXL을 다양한 이미지 종횡비 지원에 맞게 파인튜닝한 것에서 유래합니다. 추론 시(1024, 1024)기본값을 사용하면 데이터셋의 정사각형 이미지 구성과 유사한 이미지를 얻게 됩니다.target_size와original_size에 동일한 값을 사용하는 것을 권장하지만, 다른 옵션을 자유롭게 실험해 보시기 바랍니다!
🤗 Diffusers는 이미지의 크기에 대한 부정적 조건을 지정하여 특정 이미지 해상도로의 생성을 방지할 수 있습니다:
from diffusers import StableDiffusionXLPipeline
import torch
pipe = StableDiffusionXLPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda") # or "mps", "xpu", "cpu"
prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
image = pipe(
prompt=prompt,
negative_original_size=(512, 512),
negative_target_size=(1024, 1024),
).images[0]
Crop conditioning
이전 Stable Diffusion 모델로 생성된 이미지가 잘린 것처럼 보일 수 있습니다. 이는 학습 과정에서 배치 내 모든 이미지의 크기를 동일하게 유지하기 위해 실제로 이미지를 크롭하기 때문입니다. 크롭 좌표를 조건으로 사용하여 SDXL은 학습합니다. 크롭이 없음을 의미하는 좌표 (0, 0)은 일반적으로 중앙에 위치한 대상과 완전한 얼굴과 상관관계가 있습니다(이것은 🤗 Diffusers의 기본 값입니다). 중앙이 아닌 구도를 생성하려면 다른 좌표로 실험해 볼 수 있습니다!
from diffusers import StableDiffusionXLPipeline
import torch
pipeline = StableDiffusionXLPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda") # or "mps", "xpu", "cpu"
prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
image = pipeline(prompt=prompt, crops_coords_top_left=(256, 0)).images[0]
image
특정 크롭 파라미터에서 생성을 벗어나게 하려면 음수 크롭 좌표를 지정할 수도 있습니다:
from diffusers import StableDiffusionXLPipeline
import torch
pipe = StableDiffusionXLPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda") # or "mps", "xpu", "cpu"
prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
image = pipe(
prompt=prompt,
negative_original_size=(512, 512),
negative_crops_coords_top_left=(0, 0),
negative_target_size=(1024, 1024),
).images[0]
image각 text-encoder에 다른 프롬프트를 사용
SDXL은 두 개의 text-encoder를 사용하므로 각 text-encoder에 서로 다른 프롬프트를 전달하여 화질을 개선할 수 있습니다. 원래 프롬프트를 prompt에, 두 번째 프롬프트를 prompt_2에 전달하세요 (negative prompt를 사용하는 경우 negative_prompt와 negative_prompt_2를 사용하세요):
from diffusers import StableDiffusionXLPipeline
import torch
pipeline = StableDiffusionXLPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda") # or "mps", "xpu", "cpu"
# prompt is passed to OAI CLIP-ViT/L-14
prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
# prompt_2 is passed to OpenCLIP-ViT/bigG-14
prompt_2 = "Van Gogh painting"
image = pipeline(prompt=prompt, prompt_2=prompt_2).images[0]
image
이중 텍스트 인코더는 텍스트 인버전 가이드에 설명된 대로 별도로 로드해야 하는 텍스트 인버전 임베딩도 지원합니다.
최적화
SDXL은 대형 모델이므로 하드웨어에서 실행하려면 메모리를 최적화해야 할 수 있습니다. 메모리를 절약하고 추론을 가속화하는 몇 가지 팁을 소개합니다.
- 메모리 부족 오류가 발생하는 경우 enable_model_cpu_offload()를 사용하여 모델을 CPU로 오프로드하세요:
- base.to("cuda") # or "mps", "xpu", "cpu"
- refiner.to("cuda")
+ base.enable_model_cpu_offload()
+ refiner.enable_model_cpu_offload()torch.compile을 사용하면 약 20% 속도 향상을 얻을 수 있습니다(torch>=2.0필요):
+ base.unet = torch.compile(base.unet, mode="reduce-overhead", fullgraph=True)
+ refiner.unet = torch.compile(refiner.unet, mode="reduce-overhead", fullgraph=True)torch<2.0인 경우 SDXL을 실행하려면 xFormers를 활성화하세요:
+ base.enable_xformers_memory_efficient_attention()
+ refiner.enable_xformers_memory_efficient_attention()리소스
SDXL에 사용되는 UNet2DConditionModel의 최소 버전으로 실험해 보려면, PyTorch로 작성되어 🤗 Diffusers와 직접 호환되는 minSDXL 구현을 참고해 보세요.
StableDiffusionXLPipeline
class diffusers.StableDiffusionXLPipeline
< source >( vae: AutoencoderKLtext_encoder: CLIPTextModeltext_encoder_2: CLIPTextModelWithProjectiontokenizer: CLIPTokenizertokenizer_2: CLIPTokenizerunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulersimage_encoder: CLIPVisionModelWithProjection = Nonefeature_extractor: CLIPImageProcessorPil = Noneforce_zeros_for_empty_prompt: bool = Trueadd_watermarker: bool | None = None )
매개변수
- vae (AutoencoderKL) — 이미지를 잠재 표현으로 인코딩하고 디코딩하는 Variational Auto-Encoder (VAE) 모델.
- text_encoder (
CLIPTextModel) — 동결된 텍스트 인코더입니다. Stable Diffusion XL은 CLIP의 텍스트 부분을 사용하며, 구체적으로는 clip-vit-large-patch14 변형을 사용합니다. - text_encoder_2 (
CLIPTextModelWithProjection) — 두 번째 고정된 텍스트 인코더입니다. Stable Diffusion XL은 CLIP의 텍스트 및 풀링 부분을 사용하며, 구체적으로는 laion/CLIP-ViT-bigG-14-laion2B-39B-b160k 변형을 사용합니다. - tokenizer (
CLIPTokenizer) — CLIPTokenizer 클래스의 토크나이저. - tokenizer_2 (
CLIPTokenizer) — CLIPTokenizer 클래스의 두 번째 Tokenizer. - unet (UNet2DConditionModel) — 인코딩된 이미지 latents의 노이즈를 제거하기 위한 조건부 U-Net 아키텍처.
- scheduler (SchedulerMixin) —
인코딩된 이미지 잠재를 디노이즈하기 위해
unet와 함께 사용할 스케줄러입니다. DDIMScheduler, LMSDiscreteScheduler, 또는 PNDMScheduler 중 하나일 수 있습니다. - force_zeros_for_empty_prompt (
bool, 선택 사항, 기본값"True") — 음성 프롬프트 임베딩을 항상 0으로 설정할지 여부입니다. 또한stabilityai/stable-diffusion-xl-base-1-0의 설정을 참고하세요. - add_watermarker (
bool, 선택) — invisible_watermark library를 사용하여 출력 이미지에 워터마크를 적용할지 여부입니다. 정의되지 않은 경우, 해당 패키지가 설치되어 있으면 기본값이 True가 되고, 그렇지 않으면 워터마커가 사용되지 않습니다.
Stable Diffusion XL을 사용한 텍스트-이미지 생성을 위한 Pipeline입니다.
이 모델은 DiffusionPipeline에서 상속됩니다. 라이브러리가 모든 파이프라인에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 특정 디바이스에서 실행 등)에 대해서는 상위 클래스 문서를 확인하세요.
파이프라인은 다음 로딩 메서드도 상속합니다:
- 텍스트 인버전 임베딩을 로드하는 load_textual_inversion()
.ckpt파일을 로드하기 위한 from_single_file()- LoRA 가중치를 로드하는 load_lora_weights()
- LoRA 가중치를 저장하는 save_lora_weights()
- IP Adapter를 로드하기 위한 load_ip_adapter()
__call__
< source >( prompt: str | list[str] = Noneprompt_2: str | list[str] | None = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 50timesteps: list = Nonesigmas: list = 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 = Truecross_attention_kwargs: dict[str, typing.Any] | None = Noneguidance_rescale: float = 0.0original_size: tuple[int, int] | None = Nonecrops_coords_top_left: tuple = (0, 0)target_size: tuple[int, int] | None = Nonenegative_original_size: tuple[int, int] | None = Nonenegative_crops_coords_top_left: tuple = (0, 0)negative_target_size: tuple[int, int] | None = Noneclip_skip: int | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']**kwargs ) → ~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput or tuple
매개변수
- prompt (
str또는list[str], 선택 사항) — 이미지 생성을 안내할 프롬프트입니다. 정의되지 않은 경우prompt_embeds를 대신 전달해야 합니다. - prompt_2 (
str또는list[str], 선택 사항) —tokenizer_2및text_encoder_2에 전송할 프롬프트입니다. 정의되지 않은 경우,prompt가 두 텍스트 인코더 모두에 사용됩니다. - height (
int, 선택 사항, 기본값은 self.unet.config.sample_size * self.vae_scale_factor) — 생성된 이미지의 픽셀 단위 높이입니다. 최적의 결과를 위해 기본값은 1024로 설정되어 있습니다. 512픽셀 미만은 stabilityai/stable-diffusion-xl-base-1.0 및 낮은 해상도에 대해 특별히 미세 조정되지 않은 체크포인트에서는 잘 작동하지 않습니다. - width (
int, 선택 사항, 기본값은 self.unet.config.sample_size * self.vae_scale_factor) — 생성된 이미지의 픽셀 단위 너비입니다. 최적의 결과를 위해 기본값은 1024로 설정되어 있습니다. 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.StableDiffusionXLPipelineOutput를 반환할지 여부. - 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 Flawedguidance_scaleis 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의 일부입니다. - 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. - clip_skip (
int, 선택 사항) — 프롬프트 임베딩을 계산할 때 CLIP에서 건너뛸 레이어의 수입니다. 값이 1이면 최종 레이어 바로 이전 레이어의 출력을 프롬프트 임베딩 계산에 사용합니다. - callback_on_step_end (
Callable,PipelineCallback,MultiPipelineCallbacks, 선택 사항) — 추론 중 각 denoising 단계의 끝에서 호출되는 함수 또는PipelineCallback또는MultiPipelineCallbacks의 하위 클래스입니다. 다음 인수를 가집니다:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargs에는callback_on_step_end_tensor_inputs로 지정된 모든 텐서 목록이 포함됩니다. - callback_on_step_end_tensor_inputs (
list, 선택 사항) —callback_on_step_end함수의 텐서 입력 목록입니다. 목록에 지정된 텐서는callback_kwargs인수로 전달됩니다. 파이프라인 클래스의._callback_tensor_inputs속성에 나열된 변수만 포함할 수 있습니다.
반환값
~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput 또는 tuple
return_dict가 True인 경우 ~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput, 그렇지 않으면 tuple입니다. tuple을 반환할 경우 첫 번째 요소는 생성된 이미지의 목록입니다.
생성을 위해 파이프라인을 호출할 때 호출되는 함수.
예:
>>> import torch
>>> from diffusers import StableDiffusionXLPipeline
>>> pipe = StableDiffusionXLPipeline.from_pretrained(
... "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
... )
>>> pipe = pipe.to("cuda")
>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> image = pipe(prompt).images[0]encode_prompt
< source >( 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
< source >( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor
StableDiffusionXLImg2ImgPipeline
클래스 diffusers.StableDiffusionXLImg2ImgPipeline
< source >( vae: AutoencoderKLtext_encoder: CLIPTextModeltext_encoder_2: CLIPTextModelWithProjectiontokenizer: CLIPTokenizertokenizer_2: CLIPTokenizerunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulersimage_encoder: CLIPVisionModelWithProjection = Nonefeature_extractor: CLIPImageProcessorPil = Nonerequires_aesthetics_score: bool = Falseforce_zeros_for_empty_prompt: bool = Trueadd_watermarker: bool | None = None )
매개변수
- vae (AutoencoderKL) — 이미지를 잠재 표현으로 인코딩하고 디코딩하는 Variational Auto-Encoder (VAE) 모델.
- text_encoder (
CLIPTextModel) — 동결된 텍스트 인코더입니다. Stable Diffusion XL은 CLIP의 텍스트 부분을 사용하며, 구체적으로는 clip-vit-large-patch14 변형을 사용합니다. - text_encoder_2 (
CLIPTextModelWithProjection) — 두 번째 고정된 텍스트 인코더입니다. Stable Diffusion XL은 CLIP의 텍스트 및 풀링 부분을 사용하며, 구체적으로는 laion/CLIP-ViT-bigG-14-laion2B-39B-b160k 변형을 사용합니다. - tokenizer (
CLIPTokenizer) — CLIPTokenizer 클래스의 토크나이저. - tokenizer_2 (
CLIPTokenizer) — CLIPTokenizer 클래스의 두 번째 Tokenizer. - unet (UNet2DConditionModel) — 인코딩된 이미지 latents의 노이즈를 제거하기 위한 조건부 U-Net 아키텍처.
- scheduler (SchedulerMixin) —
인코딩된 이미지 잠재를 디노이즈하기 위해
unet와 함께 사용할 스케줄러입니다. DDIMScheduler, LMSDiscreteScheduler, 또는 PNDMScheduler 중 하나일 수 있습니다. - requires_aesthetics_score (
bool, 선택 사항, 기본값"False") —unet가 추론 시aesthetic_score조건을 전달받아야 하는지 여부입니다. 또한stabilityai/stable-diffusion-xl-refiner-1-0의 config를 참고하세요. - force_zeros_for_empty_prompt (
bool, 선택 사항, 기본값"True") — 음성 프롬프트 임베딩을 항상 0으로 설정할지 여부입니다. 또한stabilityai/stable-diffusion-xl-base-1-0의 설정을 참고하세요. - add_watermarker (
bool, 선택) — invisible_watermark library를 사용하여 출력 이미지에 워터마크를 적용할지 여부입니다. 정의되지 않은 경우, 해당 패키지가 설치되어 있으면 기본값이 True가 되고, 그렇지 않으면 워터마커가 사용되지 않습니다.
Stable Diffusion XL을 사용한 텍스트-이미지 생성을 위한 Pipeline입니다.
이 모델은 DiffusionPipeline에서 상속됩니다. 라이브러리가 모든 파이프라인에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 특정 디바이스에서 실행 등)에 대해서는 상위 클래스 문서를 확인하세요.
파이프라인은 다음 로딩 메서드도 상속합니다:
- 텍스트 인버전 임베딩을 로드하는 load_textual_inversion()
.ckpt파일을 로드하기 위한 from_single_file()- LoRA 가중치를 로드하는 load_lora_weights()
- LoRA 가중치를 저장하는 save_lora_weights()
- IP Adapter를 로드하기 위한 load_ip_adapter()
__call__
< source >( 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]] = Nonestrength: float = 0.3num_inference_steps: int = 50timesteps: list = Nonesigmas: list = Nonedenoising_start: float | None = 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 = Truecross_attention_kwargs: dict[str, typing.Any] | None = Noneguidance_rescale: float = 0.0original_size: tuple = Nonecrops_coords_top_left: tuple = (0, 0)target_size: tuple = Nonenegative_original_size: tuple[int, int] | None = Nonenegative_crops_coords_top_left: tuple = (0, 0)negative_target_size: tuple[int, int] | None = Noneaesthetic_score: float = 6.0negative_aesthetic_score: float = 2.5clip_skip: int | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']**kwargs ) → ~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput 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또는np.ndarray또는list[torch.Tensor]또는list[PIL.Image.Image]또는list[np.ndarray]) — 파이프라인으로 수정할 이미지입니다. - strength (
float, 선택 사항, 기본값 0.3) — 개념적으로, 참조image를 얼마나 변환할지를 나타냅니다. 0과 1 사이여야 합니다.image가 시작점으로 사용되며,strength값이 클수록 더 많은 노이즈가 추가됩니다. 디노이징 단계의 수는 초기에 추가된 노이즈의 양에 따라 결정됩니다.strength가 1이면 추가되는 노이즈가 최대가 되며,num_inference_steps에 지정된 전체 반복 횟수만큼 디노이징 프로세스가 실행됩니다. 따라서 1이라는 값은 실질적으로image를 무시하는 것과 같습니다.denoising_start가 정수로 선언된 경우,strength의 값은 무시됩니다. - 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_start (
float, 선택 사항) — 지정된 경우, 전체 디노이징 프로세스의 어느 비율(0.0에서 1.0 사이)을 시작 전에 무시할지를 나타냅니다. 따라서 디노이징 프로세스의 초기 부분이 건너뛰어지고, 전달된image가 부분적으로 디노이징된 이미지라고 가정합니다. 이 값이 지정되면 strength는 무시됩니다.denoising_start매개변수는 이미지 품질 개선에 자세히 설명된 “Mixture of Denoisers” 멀티 파이프라인 구성에 이 파이프라인이 통합될 때 특히 유용합니다. - denoising_end (
float, 선택 사항) — 지정된 경우, 전체 디노이징 프로세스의 비율(0.0에서 1.0 사이)을 결정하며, 해당 비율까지 완료된 후 프로세스가 의도적으로 조기 종료됩니다. 그 결과, 반환되는 샘플에는 상당한 양의 노이즈(대략 최종 20%의 타임스텝에 여전히 필요한 수준)가 남아 있으며,denoising_start가 0.8로 설정되어 스케줄러의 최종 20%만 디노이즈하도록 하는 후속 파이프라인으로 디노이즈되어야 합니다. 이미지 품질 개선에 자세히 설명된 “Mixture of Denoisers” 멀티 파이프라인 구성에서 이 파이프라인이 일부로 사용될 때 denoising_end 매개변수를 사용하는 것이 이상적입니다. - 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를 대신 전달해야 합니다. 가이던스를 사용하지 않을 때 무시됩니다(즉,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.StableDiffusionXLPipelineOutput를 반환할지 여부. - 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 Flawedguidance_scaleis 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의 일부입니다. - 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. - aesthetic_score (
float, 선택 사항, 기본값 6.0) — 긍정적 텍스트 조건에 영향을 주어 생성된 이미지의 미적 점수를 시뮬레이션하는 데 사용됩니다. https://huggingface.co/papers/2307.01952의 2.2절에서 설명된 SDXL의 마이크로 컨디션닝(micro-conditioning)의 일부입니다. - negative_aesthetic_score (
float, 선택 사항, 기본값 2.5) — https://huggingface.co/papers/2307.01952의 2.2절에서 설명된 SDXL의 micro-conditioning의 일부입니다. negative text condition에 영향을 주어 생성된 이미지의 aesthetic score를 시뮬레이션하는 데 사용할 수 있습니다. - clip_skip (
int, 선택 사항) — 프롬프트 임베딩을 계산할 때 CLIP에서 건너뛸 레이어의 수입니다. 값이 1이면 최종 레이어 바로 이전 레이어의 출력을 프롬프트 임베딩 계산에 사용합니다. - callback_on_step_end (
Callable,PipelineCallback,MultiPipelineCallbacks, 선택 사항) — 추론 중 각 denoising 단계의 끝에서 호출되는 함수 또는PipelineCallback또는MultiPipelineCallbacks의 하위 클래스입니다. 다음 인수를 가집니다:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargs에는callback_on_step_end_tensor_inputs로 지정된 모든 텐서 목록이 포함됩니다. - callback_on_step_end_tensor_inputs (
list, 선택 사항) —callback_on_step_end함수의 텐서 입력 목록입니다. 목록에 지정된 텐서는callback_kwargs인수로 전달됩니다. 파이프라인 클래스의._callback_tensor_inputs속성에 나열된 변수만 포함할 수 있습니다.
반환값
~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput 또는 tuple
return_dict가 True인 경우 ~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput, 그렇지 않으면 `tuple`입니다. tuple을 반환할 경우 첫 번째 요소는 생성된 이미지의 목록입니다.
생성을 위해 파이프라인을 호출할 때 호출되는 함수.
예:
>>> import torch
>>> from diffusers import StableDiffusionXLImg2ImgPipeline
>>> from diffusers.utils import load_image
>>> pipe = StableDiffusionXLImg2ImgPipeline.from_pretrained(
... "stabilityai/stable-diffusion-xl-refiner-1.0", torch_dtype=torch.float16
... )
>>> pipe = pipe.to("cuda")
>>> url = "https://huggingface.co/datasets/patrickvonplaten/images/resolve/main/aa_xl/000000009.png"
>>> init_image = load_image(url).convert("RGB")
>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> image = pipe(prompt, image=init_image).images[0]encode_prompt
< source >( 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
< source >( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor
StableDiffusionXLInpaintPipeline
클래스 diffusers.StableDiffusionXLInpaintPipeline
< source >( vae: AutoencoderKLtext_encoder: CLIPTextModeltext_encoder_2: CLIPTextModelWithProjectiontokenizer: CLIPTokenizertokenizer_2: CLIPTokenizerunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulersimage_encoder: CLIPVisionModelWithProjection = Nonefeature_extractor: CLIPImageProcessorPil = Nonerequires_aesthetics_score: bool = Falseforce_zeros_for_empty_prompt: bool = Trueadd_watermarker: bool | None = None )
매개변수
- vae (AutoencoderKL) — 이미지를 잠재 표현으로 인코딩하고 디코딩하는 Variational Auto-Encoder (VAE) 모델.
- text_encoder (
CLIPTextModel) — 동결된 텍스트 인코더입니다. Stable Diffusion XL은 CLIP의 텍스트 부분을 사용하며, 구체적으로는 clip-vit-large-patch14 변형을 사용합니다. - text_encoder_2 (
CLIPTextModelWithProjection) — 두 번째 고정된 텍스트 인코더입니다. Stable Diffusion XL은 CLIP의 텍스트 및 풀링 부분을 사용하며, 구체적으로는 laion/CLIP-ViT-bigG-14-laion2B-39B-b160k 변형을 사용합니다. - tokenizer (
CLIPTokenizer) — CLIPTokenizer 클래스의 토크나이저. - tokenizer_2 (
CLIPTokenizer) — CLIPTokenizer 클래스의 두 번째 Tokenizer. - unet (UNet2DConditionModel) — 인코딩된 이미지 latents의 노이즈를 제거하기 위한 조건부 U-Net 아키텍처.
- scheduler (SchedulerMixin) —
인코딩된 이미지 잠재를 디노이즈하기 위해
unet와 함께 사용할 스케줄러입니다. DDIMScheduler, LMSDiscreteScheduler, 또는 PNDMScheduler 중 하나일 수 있습니다. - requires_aesthetics_score (
bool, 선택 사항, 기본값"False") —unet가 추론 시 aesthetic_score 조건을 전달받아야 하는지 여부입니다.stabilityai/stable-diffusion-xl-refiner-1-0의 config도 참고하세요. - force_zeros_for_empty_prompt (
bool, 선택 사항, 기본값"True") — 음성 프롬프트 임베딩을 항상 0으로 설정할지 여부입니다. 또한stabilityai/stable-diffusion-xl-base-1-0의 설정을 참고하세요. - add_watermarker (
bool, 선택) — invisible_watermark library를 사용하여 출력 이미지에 워터마크를 적용할지 여부입니다. 정의되지 않은 경우, 해당 패키지가 설치되어 있으면 기본값이 True가 되고, 그렇지 않으면 워터마커가 사용되지 않습니다.
Stable Diffusion XL을 사용한 텍스트-이미지 생성을 위한 Pipeline입니다.
이 모델은 DiffusionPipeline에서 상속됩니다. 라이브러리가 모든 파이프라인에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 특정 디바이스에서 실행 등)에 대해서는 상위 클래스 문서를 확인하세요.
파이프라인은 다음 로딩 메서드도 상속합니다:
- 텍스트 인버전 임베딩을 로드하는 load_textual_inversion()
.ckpt파일을 로드하기 위한 from_single_file()- LoRA 가중치를 로드하는 load_lora_weights()
- LoRA 가중치를 저장하는 save_lora_weights()
- IP Adapter를 로드하기 위한 load_ip_adapter()
__call__
< source >( 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]] = Nonemask_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = Nonemasked_image_latents: Tensor = Noneheight: int | None = Nonewidth: int | None = Nonepadding_mask_crop: int | None = Nonestrength: float = 0.9999num_inference_steps: int = 50timesteps: list = Nonesigmas: list = Nonedenoising_start: float | None = Nonedenoising_end: float | None = Noneguidance_scale: float = 7.5negative_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 = Truecross_attention_kwargs: dict[str, typing.Any] | None = Noneguidance_rescale: float = 0.0original_size: tuple = Nonecrops_coords_top_left: tuple = (0, 0)target_size: tuple = Nonenegative_original_size: tuple[int, int] | None = Nonenegative_crops_coords_top_left: tuple = (0, 0)negative_target_size: tuple[int, int] | None = Noneaesthetic_score: float = 6.0negative_aesthetic_score: float = 2.5clip_skip: int | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']**kwargs ) → ~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput or tuple
매개변수
- prompt (
str또는list[str], 선택 사항) — 이미지 생성을 안내할 프롬프트입니다. 정의되지 않은 경우prompt_embeds를 대신 전달해야 합니다. - prompt_2 (
str또는list[str], 선택 사항) —tokenizer_2및text_encoder_2에 전송할 프롬프트입니다. 정의되지 않은 경우,prompt가 두 텍스트 인코더 모두에 사용됩니다. - image (
PIL.Image.Image) — 인페인팅할Image또는 이미지 배치 텐서, i.e. 이미지의 일부가mask_image로 마스킹되고prompt에 따라 다시 채워집니다. - mask_image (
PIL.Image.Image) —Image또는 이미지 배치 텐서로,image에 마스킹할 대상입니다. 마스크의 흰색 픽셀은 다시 채워지고, 검은색 픽셀은 유지됩니다.mask_image가 PIL 이미지인 경우, 사용 전에 단일 채널(휘도)로 변환됩니다. 텐서인 경우 3개 대신 하나의 색상 채널(L)을 포함해야 하므로, 예상되는 형태는(B, H, W, 1)입니다. - masked_image_latents (
torch.Tensor, 선택 사항) — 마스크된 이미지의 사전 인코딩된 잠재 변수(인페인팅용). - height (
int, 선택 사항, 기본값은 self.unet.config.sample_size * self.vae_scale_factor) — 생성된 이미지의 픽셀 단위 높이입니다. 최적의 결과를 위해 기본값은 1024로 설정되어 있습니다. 512픽셀 미만은 stabilityai/stable-diffusion-xl-base-1.0 및 낮은 해상도에 대해 특별히 미세 조정되지 않은 체크포인트에서는 잘 작동하지 않습니다. - width (
int, 선택 사항, 기본값은 self.unet.config.sample_size * self.vae_scale_factor) — 생성된 이미지의 픽셀 단위 너비입니다. 최적의 결과를 위해 기본값은 1024로 설정되어 있습니다. 512픽셀 미만은 stabilityai/stable-diffusion-xl-base-1.0 및 낮은 해상도에 대해 특별히 미세 조정되지 않은 체크포인트에서는 잘 작동하지 않습니다. - padding_mask_crop (
int, 선택 사항, 기본값None) — 이미지와 마스킹에 적용할 크롭의 마진 크기입니다.None인 경우 이미지와 mask_image에 크롭이 적용되지 않습니다.padding_mask_crop이None이 아닌 경우, 먼저 이미지의 종횡비와 동일하고 모든 마스킹 영역을 포함하는 직사각형 영역을 찾은 다음,padding_mask_crop에 기반하여 해당 영역을 확장합니다. 이후 인페인팅을 위해 원래 이미지 크기로 리사이즈하기 전에 확장된 영역을 기준으로 이미지와 mask_image를 크롭합니다. 이는 마스킹 영역이 작고 이미지가 크며 배경과 같이 인페인팅에 관련 없는 정보를 포함하는 경우에 유용합니다. - strength (
float, 선택 사항, 기본값 0.9999) — 개념적으로, 참조image의 마스킹된 부분을 얼마나 변환할지를 나타냅니다. 0과 1 사이여야 합니다.image가 시작점으로 사용되며,strength값이 클수록 더 많은 노이즈가 추가됩니다. 디노이징 단계의 수는 초기에 추가된 노이즈의 양에 따라 결정됩니다.strength가 1이면 추가되는 노이즈가 최대가 되며,num_inference_steps에 지정된 전체 반복 횟수만큼 디노이징 프로세스가 실행됩니다. 따라서 1이라는 값은 기본적으로 참조image의 마스킹된 부분을 무시하는 것과 같습니다.denoising_start가 정수로 선언된 경우,strength의 값은 무시됩니다. - 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_start (
float, 선택 사항) — 지정된 경우, 전체 디노이징 프로세스의 어느 비율(0.0에서 1.0 사이)을 시작 전에 무시할지를 나타냅니다. 따라서 디노이징 프로세스의 초기 부분이 건너뛰어지고, 전달된image가 부분적으로 디노이징된 이미지라고 가정합니다. 이 값이 지정되면 strength는 무시됩니다.denoising_start매개변수는 이미지 출력 개선에 자세히 설명된 “Mixture of Denoisers” 멀티 파이프라인 구성에 이 파이프라인이 통합될 때 특히 유용합니다. - denoising_end (
float, 선택 사항) — 지정된 경우, 전체 디노이징 프로세스의 비율(0.0에서 1.0 사이)을 결정하며, 해당 비율까지 완료된 후 프로세스가 의도적으로 조기 종료됩니다. 그 결과, 반환되는 샘플에는 상당한 양의 노이즈(대략 최종 20%의 타임스텝에 해당하는 노이즈)가 여전히 남아 있으며,denoising_start가 0.8로 설정된 후속 파이프라인을 통해 디노이징되어야 합니다. 이렇게 하면 스케줄러의 최종 20%만 디노이징됩니다. 이미지 출력 개선에서 자세히 설명된 바와 같이, 이 파이프라인이 “Mixture of Denoisers” 멀티 파이프라인 구성의 일부로 사용되는 경우 denoising_end 매개변수를 사용하는 것이 이상적입니다. - 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를 대신 전달해야 합니다. 가이던스를 사용하지 않을 때 무시됩니다(즉,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가 생성됩니다. - 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입력 인자로부터 임베딩이 계산됩니다. - num_images_per_prompt (
int, 선택 사항, 기본값 1) — 프롬프트당 생성할 이미지의 수입니다. - eta (
float, 선택 사항, 기본값 0.0) — DDIM 논문에서 파라미터 eta (η)에 해당합니다: https://huggingface.co/papers/2010.02502. schedulers.DDIMScheduler에만 적용되며, 다른 경우 무시됩니다. - generator (
torch.Generator, 선택 사항) — 생성을 결정적으로 만들기 위한 torch generator 하나 또는 목록 - latents (
torch.Tensor, 선택 사항) — 이미지 생성의 입력으로 사용할 가우시안 분포에서 샘플링된 사전 생성된 노이즈 latents입니다. 동일한 생성을 다른 프롬프트로 조정하는 데 사용할 수 있습니다. 제공되지 않으면, 제공된 랜덤generator를 사용하여 샘플링하여 latents 텐서가 생성됩니다. - output_type (
str, 선택 사항, 기본값"pil") — 이미지 생성의 출력 형식입니다. PIL:PIL.Image.Image또는np.array중 하나를 선택합니다. - return_dict (
bool, 선택 사항, 기본값True) — 일반 튜플 대신 StableDiffusionPipelineOutput를 반환할지 여부. - cross_attention_kwargs (
dict, 선택 사항) — 지정된 경우 diffusers.models.attention_processor의self.processor에서 정의된AttentionProcessor로 전달되는 kwargs 사전입니다. - 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의 일부입니다. - 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. - aesthetic_score (
float, 선택 사항, 기본값 6.0) — 긍정적 텍스트 조건에 영향을 주어 생성된 이미지의 미적 점수를 시뮬레이션하는 데 사용됩니다. https://huggingface.co/papers/2307.01952의 2.2절에서 설명된 SDXL의 마이크로 컨디션닝(micro-conditioning)의 일부입니다. - negative_aesthetic_score (
float, 선택 사항, 기본값 2.5) — https://huggingface.co/papers/2307.01952의 2.2절에서 설명된 SDXL의 micro-conditioning의 일부입니다. negative text condition에 영향을 주어 생성된 이미지의 aesthetic score를 시뮬레이션하는 데 사용할 수 있습니다. - guidance_rescale (
float, 선택 사항, 기본값 0.0) — 일반적인 확산 노이즈 스케줄과 샘플 단계는 결함이 있다에서 가져온 guidance rescale 계수입니다. - clip_skip (
int, 선택 사항) — 프롬프트 임베딩을 계산할 때 CLIP에서 건너뛸 레이어의 수입니다. 값이 1이면 최종 레이어 바로 이전 레이어의 출력을 프롬프트 임베딩 계산에 사용합니다. - callback_on_step_end (
Callable,PipelineCallback,MultiPipelineCallbacks, 선택 사항) — 추론 중 각 denoising 단계의 끝에서 호출되는 함수 또는PipelineCallback또는MultiPipelineCallbacks의 하위 클래스입니다. 다음 인수를 가집니다:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargs에는callback_on_step_end_tensor_inputs로 지정된 모든 텐서 목록이 포함됩니다. - callback_on_step_end_tensor_inputs (
list, 선택 사항) —callback_on_step_end함수의 텐서 입력 목록입니다. 목록에 지정된 텐서는callback_kwargs인수로 전달됩니다. 파이프라인 클래스의._callback_tensor_inputs속성에 나열된 변수만 포함할 수 있습니다.
반환값
~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput 또는 tuple
return_dict가 True인 경우 ~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput, 그렇지 않으면 tuple. tuple입니다. tuple을 반환할 경우 첫 번째 요소는 생성된 이미지의 목록입니다.
생성을 위해 파이프라인을 호출할 때 호출되는 함수.
예:
>>> import torch
>>> from diffusers import StableDiffusionXLInpaintPipeline
>>> from diffusers.utils import load_image
>>> pipe = StableDiffusionXLInpaintPipeline.from_pretrained(
... "stabilityai/stable-diffusion-xl-base-1.0",
... torch_dtype=torch.float16,
... variant="fp16",
... use_safetensors=True,
... )
>>> pipe.to("cuda")
>>> img_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo.png"
>>> mask_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo_mask.png"
>>> init_image = load_image(img_url).convert("RGB")
>>> mask_image = load_image(mask_url).convert("RGB")
>>> prompt = "A majestic tiger sitting on a bench"
>>> image = pipe(
... prompt=prompt, image=init_image, mask_image=mask_image, num_inference_steps=50, strength=0.80
... ).images[0]encode_prompt
< source >( 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
< source >( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor