# Stable Diffusion XL

  
  

Stable Diffusion XL (SDXL) được đề xuất trong [SDXL: Improving Latent Diffusion Models for High-Resolution Image Synthesis](https://huggingface.co/papers/2307.01952) bởi Dustin Podell, Zion English, Kyle Lacey, Andreas Blattmann, Tim Dockhorn, Jonas Müller, Joe Penna và Robin Rombach.

Tóm tắt từ bài báo là:

*Chúng tôi giới thiệu SDXL, một mô hình khuếch tán tiềm ẩn (latent diffusion model) cho tổng hợp hình ảnh từ văn bản. So với các phiên bản Stable Diffusion trước đó, SDXL sử dụng bộ khung UNet lớn gấp ba lần: sự gia tăng số tham số mô hình chủ yếu là do có nhiều khối chú ý (attention blocks) hơn và ngữ cảnh chú ý chéo (cross-attention context) lớn hơn, vì SDXL sử dụng một trình mã hóa văn bản thứ hai. Chúng tôi thiết kế nhiều phương án điều kiện (conditioning schemes) mới và huấn luyện SDXL trên nhiều tỷ lệ khung hình khác nhau. Chúng tôi cũng giới thiệu một mô hình tinh chỉnh (refinement model) được sử dụng để cải thiện độ trung thực thị giác của các mẫu do SDXL tạo ra bằng kỹ thuật hình ảnh-đến-hình ảnh (image-to-image) sau xử lý. Chúng tôi chứng minh rằng SDXL cho thấy hiệu suất cải thiện đáng kể so với các phiên bản Stable Diffusion trước đó và đạt được kết quả cạnh tranh với các trình tạo hình ảnh tiên tiến (state-of-the-art) dạng hộp đen (black-box).*

## Mẹo

- Việc sử dụng SDXL với trình lập lịch DPM++ cho ít hơn 50 bước được biết là tạo ra [các lỗi hình ảnh](https://github.com/huggingface/diffusers/issues/5433) vì bộ giải trở nên không ổn định về mặt số học. Để khắc phục vấn đề này, hãy xem [PR](https://github.com/huggingface/diffusers/pull/5541) này, trong đó khuyến nghị đối với các bộ giải ODE/SDE:
	- Đặt `use_karras_sigmas=True` hoặc `lu_lambdas=True` để cải thiện chất lượng hình ảnh
	- Đặt `euler_at_final=True` nếu bạn đang sử dụng bộ giải có kích thước bước đồng đều (DPM++2M hoặc DPM++2M SDE)
- Hầu hết các checkpoint SDXL hoạt động tốt nhất với kích thước ảnh 1024x1024. Các kích thước 768x768 và 512x512 cũng được hỗ trợ, nhưng kết quả không tốt bằng. Không khuyến nghị sử dụng kích thước nhỏ hơn 512x512 và có thể sẽ không phù hợp với các checkpoint mặc định như [stabilityai/stable-diffusion-xl-base-1.0](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0).
- SDXL có thể truyền một prompt khác nhau cho từng text encoder mà nó được huấn luyện. Chúng ta thậm chí có thể truyền các phần khác nhau của cùng một prompt đến các text encoder.
- Hình ảnh đầu ra của SDXL có thể được cải thiện bằng cách sử dụng một mô hình tinh chỉnh (refiner) trong cấu hình ảnh-đến-ảnh (image-to-image).
- SDXL cung cấp `negative_original_size`, `negative_crops_coords_top_left` và `negative_target_size` để điều kiện hóa mô hình theo chiều âm đối với các tham số độ phân giải và cắt ảnh.

> [!TIP]
> Hãy xem tổ chức [Stability AI](https://huggingface.co/stabilityai) trên Hub để biết các checkpoint mô hình base và refiner chính thức!

Hãy đảm bảo bạn đã cài đặt các thư viện sau.

```py
# uncomment to install the necessary libraries in Colab
#!pip install -q diffusers transformers accelerate invisible-watermark>=0.2.0
```

> [!WARNING]
> Chúng tôi khuyến nghị cài đặt thư viện [invisible-watermark](https://pypi.org/project/invisible-watermark/) để hỗ trợ nhận diện các hình ảnh được tạo ra. Nếu thư viện invisible-watermark đã được cài đặt, nó sẽ được sử dụng theo mặc định. Để tắt bộ đánh dấu mờ:
>
> ```py
> pipeline = StableDiffusionXLPipeline.from_pretrained(..., add_watermarker=False)
> ```

## Tải các điểm kiểm tra của mô hình

Trọng số mô hình có thể được lưu trong các thư mục con riêng biệt trên Hub hoặc cục bộ, trong trường hợp đó, bạn nên sử dụng phương thức [from_pretrained()](/docs/diffusers/v0.43.0/vi/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained):

```py
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")
```

Bạn cũng có thể sử dụng phương thức [from_single_file()](/docs/diffusers/v0.43.0/vi/api/loaders/single_file#diffusers.loaders.FromSingleFileMixin.from_single_file) để tải checkpoint của mô hình được lưu trữ ở định dạng tệp đơn (`.ckpt` hoặc `.safetensors`) từ Hub hoặc cục bộ:

```py
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")
```

## Văn bản sang hình ảnh

Đối với text-to-image, hãy truyền một text prompt. Mặc định, SDXL tạo ra hình ảnh 1024x1024 để đạt kết quả tốt nhất. Bạn có thể thử đặt các tham số `height` và `width` thành 768x768 hoặc 512x512, nhưng kích thước nhỏ hơn 512x512 có khả năng không hoạt động.

```py
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
```

    

## Ảnh sang ảnh

Đối với image-to-image, SDXL hoạt động đặc biệt tốt với kích thước ảnh từ 768x768 đến 1024x1024. Truyền vào một ảnh ban đầu và một text prompt để điều kiện hóa ảnh bằng cách:

```py
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)
```

    

## Inpainting

Đối với inpainting, bạn sẽ cần hình ảnh gốc và một mask (mặt nạ) chỉ ra phần bạn muốn thay thế trong hình ảnh gốc. Tạo một prompt (câu lệnh) để mô tả nội dung bạn muốn thay thế vào vùng bị mask.

```py
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)
```

    

## Tinh chỉnh chất lượng hình ảnh

SDXL bao gồm một [mô hình tinh chỉnh](https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0) chuyên biệt cho việc khử nhiễu các hình ảnh ở giai đoạn nhiễu thấp để tạo ra hình ảnh có chất lượng cao hơn từ mô hình cơ sở. Có hai cách để sử dụng mô hình tinh chỉnh:

1. sử dụng các mô hình base và refiner cùng nhau để tạo ra một hình ảnh được tinh chỉnh
2. sử dụng mô hình cơ sở để tạo ra một hình ảnh, sau đó sử dụng mô hình tinh chỉnh để thêm nhiều chi tiết hơn vào hình ảnh (đây là cách SDXL được huấn luyện ban đầu)

### Mô hình cơ bản + mô hình tinh chỉnh

Khi bạn sử dụng mô hình base và refiner cùng nhau để tạo ảnh, điều này được gọi là [*ensemble của các denoiser chuyên gia*](https://research.nvidia.com/labs/dir/eDiff-I/). Phương pháp ensemble của các denoiser chuyên gia yêu cầu ít bước denoising tổng thể hơn so với việc truyền đầu ra của mô hình base sang mô hình refiner, do đó nó nên chạy nhanh hơn đáng kể. Tuy nhiên, bạn sẽ không thể kiểm tra đầu ra của mô hình base vì nó vẫn chứa một lượng lớn nhiễu.

Với vai trò là một tập hợp các chuyên gia khử nhiễu, mô hình cơ bản đóng vai trò chuyên gia trong giai đoạn khuếch tán nhiễu cao và mô hình tinh chỉnh đóng vai trò chuyên gia trong giai đoạn khuếch tán nhiễu thấp. Tải mô hình cơ bản và mô hình tinh chỉnh:

```py
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")
```

Để sử dụng cách tiếp cận này, bạn cần xác định số bước thời gian (timesteps) để mỗi mô hình chạy qua các giai đoạn tương ứng của chúng. Đối với mô hình cơ sở, điều này được kiểm soát bởi tham số [`denoising_end`](https://huggingface.co/docs/diffusers/main/en/api/pipelines/stable_diffusion/stable_diffusion_xl#diffusers.StableDiffusionXLPipeline.__call__.denoising_end), còn đối với mô hình tinh chỉnh (refiner), nó được kiểm soát bởi tham số [`denoising_start`](https://huggingface.co/docs/diffusers/main/en/api/pipelines/stable_diffusion/stable_diffusion_xl#diffusers.StableDiffusionXLImg2ImgPipeline.__call__.denoising_start).

> [!TIP]
> Các tham số `denoising_end` và `denoising_start` phải là một số float nằm trong khoảng từ 0 đến 1. Các tham số này được biểu diễn dưới dạng tỷ lệ của các bước thời gian rời rạc như đã được định nghĩa bởi trình lập lịch. Nếu bạn cũng đang sử dụng tham số `strength`, tham số này sẽ bị bỏ qua vì số bước khử nhiễu được xác định bởi các bước thời gian rời rạc mà mô hình được huấn luyện và điểm cắt phân số đã khai báo.

Hãy đặt `denoising_end=0.8` để mô hình cơ sở thực hiện 80% đầu tiên của quá trình khử nhiễu ở các bước thời gian **nhiễu cao** và đặt `denoising_start=0.8` để mô hình tinh chỉnh thực hiện 20% cuối cùng của quá trình khử nhiễu ở các bước thời gian **nhiễu thấp**. Đầu ra của mô hình cơ sở nên ở không gian **latent** thay vì một hình ảnh PIL.

```py
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
```

  
    
    mô hình cơ sở mặc định
  
  
    
    tập hợp các bộ khử nhiễu chuyên gia
  

Mô hình refiner cũng có thể được sử dụng để inpainting trong [StableDiffusionXLInpaintPipeline](/docs/diffusers/v0.43.0/vi/api/pipelines/stable_diffusion/stable_diffusion_xl#diffusers.StableDiffusionXLInpaintPipeline):

```py
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)
```

Phương pháp tập hợp các chuyên gia khử nhiễu này hoạt động tốt với tất cả các trình lập lịch có sẵn!

### Mô hình cơ bản đến mô hình tinh chỉnh

SDXL được tăng cường chất lượng hình ảnh bằng cách sử dụng mô hình refiner để thêm các chi tiết chất lượng cao bổ sung vào hình ảnh đã khử nhiễu hoàn toàn từ mô hình cơ bản, trong cấu hình image-to-image.

Tải các mô hình base và refiner:

```py
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")
```

> [!WARNING]
> Bạn có thể sử dụng SDXL refiner với một base model khác. Ví dụ, bạn có thể sử dụng các pipeline [Hunyuan-DiT](../hunyuandit) hoặc [PixArt-Sigma](../pixart_sigma) để tạo ảnh với độ bám sát prompt tốt hơn. Sau khi đã tạo ra một ảnh, bạn có thể truyền nó vào mô hình SDXL refiner để nâng cao chất lượng của kết quả cuối cùng.

Tạo một hình ảnh từ mô hình cơ sở và đặt đầu ra của mô hình ở không gian **latent**:

```py
prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"

image = base(prompt=prompt, output_type="latent").images[0]
```

Truyền ảnh đã tạo vào mô hình tinh chỉnh:

```py
image = refiner(prompt=prompt, image=image[None, :]).images[0]
```

  
    
    mô hình cơ sở
  
  
    
    mô hình cơ sở + mô hình tinh chỉnh
  

Để inpainting, hãy tải mô hình base và mô hình refiner vào [StableDiffusionXLInpaintPipeline](/docs/diffusers/v0.43.0/vi/api/pipelines/stable_diffusion/stable_diffusion_xl#diffusers.StableDiffusionXLInpaintPipeline), bỏ các tham số `denoising_end` và `denoising_start`, và chọn số bước suy luận nhỏ hơn cho refiner.

## Điều kiện vi mô

Quá trình huấn luyện SDXL bao gồm một số kỹ thuật điều kiện bổ sung, được gọi là *micro-conditioning*. Chúng bao gồm kích thước ảnh gốc, kích thước ảnh đích và các tham số cắt. Các micro-conditioning có thể được sử dụng ở thời điểm suy luận để tạo ra các hình ảnh chất lượng cao, được căn giữa.

> [!TIP]
> Bạn có thể sử dụng cả các tham số micro-conditioning và negative micro-conditioning nhờ vào classifier-free guidance. Chúng có sẵn trong [StableDiffusionXLPipeline](/docs/diffusers/v0.43.0/vi/api/pipelines/stable_diffusion/stable_diffusion_xl#diffusers.StableDiffusionXLPipeline), [StableDiffusionXLImg2ImgPipeline](/docs/diffusers/v0.43.0/vi/api/pipelines/stable_diffusion/stable_diffusion_xl#diffusers.StableDiffusionXLImg2ImgPipeline), [StableDiffusionXLInpaintPipeline](/docs/diffusers/v0.43.0/vi/api/pipelines/stable_diffusion/stable_diffusion_xl#diffusers.StableDiffusionXLInpaintPipeline) và [StableDiffusionXLControlNetPipeline](/docs/diffusers/v0.43.0/vi/api/pipelines/controlnet_sdxl#diffusers.StableDiffusionXLControlNetPipeline).

### Điều kiện kích thước

Có hai loại điều kiện kích thước:

- [`original_size`](https://huggingface.co/docs/diffusers/main/en/api/pipelines/stable_diffusion/stable_diffusion_xl#diffusers.StableDiffusionXLPipeline.__call__.original_size) conditioning đến từ các ảnh đã được phóng to trong batch huấn luyện (vì sẽ lãng phí nếu loại bỏ các ảnh nhỏ hơn, vốn chiếm gần 40% tổng dữ liệu huấn luyện). Bằng cách này, SDXL học được rằng các lỗi do phóng to không nên xuất hiện trong các ảnh độ phân giải cao. Trong quá trình suy luận, bạn có thể sử dụng `original_size` để chỉ định độ phân giải gốc của ảnh. Việc sử dụng giá trị mặc định `(1024, 1024)` sẽ tạo ra các ảnh chất lượng cao hơn, tương tự các ảnh 1024x1024 trong tập dữ liệu. Nếu bạn chọn sử dụng độ phân giải thấp hơn, chẳng hạn như `(256, 256)`, mô hình vẫn tạo ra các ảnh 1024x1024, nhưng chúng sẽ trông giống các ảnh độ phân giải thấp (các mẫu đơn giản hơn, bị mờ) trong tập dữ liệu.

- [`target_size`](https://huggingface.co/docs/diffusers/main/en/api/pipelines/stable_diffusion/stable_diffusion_xl#diffusers.StableDiffusionXLPipeline.__call__.target_size) conditioning bắt nguồn từ việc finetuning SDXL để hỗ trợ các tỷ lệ khung hình khác nhau. Trong quá trình inference, nếu bạn sử dụng giá trị mặc định `(1024, 1024)`, bạn sẽ nhận được một hình ảnh có bố cục tương tự như các hình vuông trong dataset. Chúng tôi khuyến nghị sử dụng cùng một giá trị cho `target_size` và `original_size`, nhưng bạn hoàn toàn có thể thử nghiệm với các tùy chọn khác!

🤗 Diffusers cũng cho phép bạn chỉ định các điều kiện âm về kích thước của hình ảnh để điều hướng quá trình tạo hình ảnh tránh xa một số độ phân giải nhất định:

```py
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]
```

  
  Các hình ảnh được điều kiện âm với độ phân giải hình ảnh là (128, 128), (256, 256) và (512, 512).

### Điều kiện cắt

Các hình ảnh được tạo ra bởi các mô hình Stable Diffusion trước đó đôi khi có thể trông như bị cắt xén. Điều này là do các hình ảnh thực sự bị cắt xén trong quá trình huấn luyện để tất cả các hình ảnh trong một batch có cùng kích thước. Bằng cách điều kiện hóa theo tọa độ cắt, SDXL *học được* rằng việc không cắt xén - tọa độ `(0, 0)` - thường tương quan với các chủ thể được đặt ở giữa và khuôn mặt hoàn chỉnh (đây là giá trị mặc định trong 🤗 Diffusers). Bạn có thể thử nghiệm với các tọa độ khác nếu muốn tạo ra các bố cục không đặt ở giữa!

```py
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
```

    

Bạn cũng có thể chỉ định các tọa độ cắt tiêu cực để điều hướng quá trình tạo ra xa khỏi một số tham số cắt nhất định:

```py
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
```

## Sử dụng một prompt khác nhau cho mỗi text-encoder

SDXL sử dụng hai text-encoder, do đó bạn có thể truyền một prompt khác nhau cho mỗi text-encoder, điều này có thể [cải thiện chất lượng](https://github.com/huggingface/diffusers/issues/4004#issuecomment-1627764201). Hãy truyền prompt gốc của bạn vào `prompt` và prompt thứ hai vào `prompt_2` (sử dụng `negative_prompt` và `negative_prompt_2` nếu bạn đang dùng negative prompt):

```py
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
```

    

Các text-encoder kép cũng hỗ trợ các textual inversion embeddings cần được tải riêng biệt như đã mô tả trong hướng dẫn [textual inversion](../../../using-diffusers/legacy_adapters#textual-inversion).

## Tối ưu hóa

SDXL là một mô hình lớn, và bạn có thể cần tối ưu hóa bộ nhớ để chạy nó trên phần cứng của mình. Dưới đây là một số mẹo để tiết kiệm bộ nhớ và tăng tốc suy luận.

1. Chuyển mô hình sang CPU bằng [enable_model_cpu_offload()](/docs/diffusers/v0.43.0/vi/api/pipelines/overview#diffusers.DiffusionPipeline.enable_model_cpu_offload) để xử lý lỗi hết bộ nhớ:

```diff
- base.to("cuda")  # or "mps", "xpu", "cpu"
- refiner.to("cuda")
+ base.enable_model_cpu_offload()
+ refiner.enable_model_cpu_offload()
```

2. Sử dụng `torch.compile` để tăng tốc độ ~20% (bạn cần `torch>=2.0`):

```diff
+ base.unet = torch.compile(base.unet, mode="reduce-overhead", fullgraph=True)
+ refiner.unet = torch.compile(refiner.unet, mode="reduce-overhead", fullgraph=True)
```

3. Bật [xFormers](../../../optimization/attention_backends) để chạy SDXL nếu `torch<2.0`:

```diff
+ base.enable_xformers_memory_efficient_attention()
+ refiner.enable_xformers_memory_efficient_attention()
```

## Tài nguyên

Nếu bạn quan tâm đến việc thử nghiệm với một phiên bản tối giản của [UNet2DConditionModel](/docs/diffusers/v0.43.0/vi/api/models/unet2d-cond#diffusers.UNet2DConditionModel) được sử dụng trong SDXL, hãy xem qua triển khai [minSDXL](https://github.com/cloneofsimo/minSDXL) được viết bằng PyTorch và tương thích trực tiếp với 🤗 Diffusers.

## StableDiffusionXLPipeline[[diffusers.StableDiffusionXLPipeline]]

#### diffusers.StableDiffusionXLPipeline[[diffusers.StableDiffusionXLPipeline]]

```python
diffusers.StableDiffusionXLPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, text_encoder_2: CLIPTextModelWithProjection, tokenizer: CLIPTokenizer, tokenizer_2: CLIPTokenizer, unet: UNet2DConditionModel, scheduler: KarrasDiffusionSchedulers, image_encoder: CLIPVisionModelWithProjection = None, feature_extractor: CLIPImageProcessorPil = None, force_zeros_for_empty_prompt: bool = True, add_watermarker: bool | None = None)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl.py#L170)

**Tham số:**

vae ([AutoencoderKL](/docs/diffusers/v0.43.0/vi/api/models/autoencoderkl#diffusers.AutoencoderKL)) : Mô hình Variational Auto-Encoder (VAE) để mã hóa và giải mã hình ảnh sang và từ các biểu diễn ẩn.

text_encoder (`CLIPTextModel`) : Bộ mã hóa văn bản đóng băng. Stable Diffusion XL sử dụng phần văn bản của [CLIP](https://huggingface.co/docs/transformers/model_doc/clip#transformers.CLIPTextModel), cụ thể là biến thể [clip-vit-large-patch14](https://huggingface.co/openai/clip-vit-large-patch14).

text_encoder_2 (` CLIPTextModelWithProjection`) : Bộ mã hóa văn bản đóng băng thứ hai. Stable Diffusion XL sử dụng phần văn bản và pool của [CLIP](https://huggingface.co/docs/transformers/model_doc/clip#transformers.CLIPTextModelWithProjection), cụ thể là biến thể [laion/CLIP-ViT-bigG-14-laion2B-39B-b160k](https://huggingface.co/laion/CLIP-ViT-bigG-14-laion2B-39B-b160k).

tokenizer (`CLIPTokenizer`) : Tokenizer của lớp [CLIPTokenizer](https://huggingface.co/docs/transformers/v4.21.0/en/model_doc/clip#transformers.CLIPTokenizer).

tokenizer_2 (`CLIPTokenizer`) : Tokenizer thứ hai thuộc lớp [CLIPTokenizer](https://huggingface.co/docs/transformers/v4.21.0/en/model_doc/clip#transformers.CLIPTokenizer).

unet ([UNet2DConditionModel](/docs/diffusers/v0.43.0/vi/api/models/unet2d-cond#diffusers.UNet2DConditionModel)) : Kiến trúc U-Net có điều kiện để khử nhiễu các ẩn (latents) của ảnh đã mã hóa.

scheduler ([SchedulerMixin](/docs/diffusers/v0.43.0/vi/api/schedulers/overview#diffusers.SchedulerMixin)) : Một scheduler được sử dụng kết hợp với `unet` để khử nhiễu các latents của ảnh đã mã hóa. Có thể là một trong [DDIMScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/ddim#diffusers.DDIMScheduler), [LMSDiscreteScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/lms_discrete#diffusers.LMSDiscreteScheduler), hoặc [PNDMScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/pndm#diffusers.PNDMScheduler).

force_zeros_for_empty_prompt (`bool`, *tùy chọn*, mặc định là `"True"`) : Xác định xem các embedding của prompt tiêu cực có nên được ép buộc luôn đặt về 0 hay không. Xem thêm cấu hình của `stabilityai/stable-diffusion-xl-base-1-0`.

add_watermarker (`bool`, *tuỳ chọn*) : Có sử dụng [invisible_watermark library](https://github.com/ShieldMnt/invisible-watermark/) để thêm watermark cho các hình ảnh đầu ra hay không. Nếu không được định nghĩa, giá trị mặc định sẽ là True nếu gói đã được cài đặt, ngược lại sẽ không sử dụng công cụ watermark.

Pipeline để tạo ảnh từ văn bản sử dụng Stable Diffusion XL.

Mô hình này kế thừa từ [DiffusionPipeline](/docs/diffusers/v0.43.0/vi/api/pipelines/overview#diffusers.DiffusionPipeline). Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các pipeline (chẳng hạn như tải xuống hoặc lưu, chạy trên một thiết bị cụ thể, v.v.)

Pipeline cũng kế thừa các phương thức nạp sau:
- [load_textual_inversion()](/docs/diffusers/v0.43.0/vi/api/loaders/textual_inversion#diffusers.loaders.TextualInversionLoaderMixin.load_textual_inversion) để nạp các embedding textual inversion
- [from_single_file()](/docs/diffusers/v0.43.0/vi/api/loaders/single_file#diffusers.loaders.FromSingleFileMixin.from_single_file) để tải các tệp `.ckpt`
- [load_lora_weights()](/docs/diffusers/v0.43.0/vi/api/loaders/lora#diffusers.loaders.StableDiffusionXLLoraLoaderMixin.load_lora_weights) để nạp trọng số LoRA
- [save_lora_weights()](/docs/diffusers/v0.43.0/vi/api/loaders/lora#diffusers.loaders.StableDiffusionXLLoraLoaderMixin.save_lora_weights) để lưu trọng số LoRA
- [load_ip_adapter()](/docs/diffusers/v0.43.0/vi/api/loaders/ip_adapter#diffusers.loaders.IPAdapterMixin.load_ip_adapter) để nạp IP Adapters

#### __call__[[diffusers.StableDiffusionXLPipeline.__call__]]

```python
__call__(prompt: str | list[str] = None, prompt_2: str | list[str] | None = 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, 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, clip_skip: int | None = None, callback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], **kwargs)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl.py#L823)

**Tham số:**

prompt (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt để hướng dẫn việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền `prompt_embeds` thay thế.

prompt_2 (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt cần được gửi đến `tokenizer_2` và `text_encoder_2`. Nếu không được định nghĩa, `prompt` sẽ được sử dụng cho cả hai text-encoder

height (`int`, *tuỳ chọn*, mặc định là self.unet.config.sample_size * self.vae_scale_factor) : Chiều cao tính bằng pixel của hình ảnh được tạo ra. Mặc định được đặt là 1024 để đạt kết quả tốt nhất. Bất kỳ giá trị nào dưới 512 pixel sẽ không hoạt động tốt với [stabilityai/stable-diffusion-xl-base-1.0](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0) và các checkpoint không được tinh chỉnh đặc biệt cho độ phân giải thấp.

width (`int`, *tuỳ chọn*, mặc định là self.unet.config.sample_size * self.vae_scale_factor) : Độ rộng tính bằng pixel của hình ảnh được tạo ra. Mặc định được đặt là 1024 để đạt kết quả tốt nhất. Bất kỳ giá trị nào dưới 512 pixel sẽ không hoạt động tốt với [stabilityai/stable-diffusion-xl-base-1.0](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0) và các checkpoint không được tinh chỉnh đặc biệt cho độ phân giải thấp.

num_inference_steps (`int`, *optional*, mặc định là 50) : Số bước khử nhiễu. Số bước khử nhiễu nhiều hơn thường dẫn đến hình ảnh có chất lượng cao hơn, với cái giá là suy luận chậm hơn.

timesteps (`list[int]`, *optional*) : Các bước thời gian (timesteps) tùy chỉnh để sử dụng cho quá trình khử nhiễu với các trình lập lịch (scheduler) hỗ trợ tham số `timesteps` trong phương thức `set_timesteps` của chúng. Nếu không được định nghĩa, hành vi mặc định khi `num_inference_steps` được truyền vào sẽ được sử dụng. Phải được sắp xếp theo thứ tự giảm dần.

sigmas (`list[float]`, *optional*) : Các sigma tùy chỉnh để sử dụng cho quá trình khử nhiễu với các trình lập lịch hỗ trợ tham số `sigmas` trong phương thức `set_timesteps` của chúng. Nếu không được định nghĩa, hành vi mặc định khi `num_inference_steps` được truyền vào sẽ được sử dụng.

denoising_end (`float`, *optional*) : Khi được chỉ định, xác định tỷ lệ (từ 0.0 đến 1.0) của toàn bộ quá trình khử nhiễu cần hoàn thành trước khi bị kết thúc sớm một cách có chủ đích. Kết quả là, mẫu được trả về vẫn sẽ giữ lại một lượng nhiễu đáng kể, được xác định bởi các bước thời gian rời rạc do trình lập lịch chọn. Tham số denoising_end lý tưởng nhất nên được sử dụng khi pipeline này là một phần của cấu hình đa pipeline "Mixture of Denoisers", như đã mô tả chi tiết trong [**Refining the Image Output**](https://huggingface.co/docs/diffusers/api/pipelines/stable_diffusion/stable_diffusion_xl#refining-the-image-output)

guidance_scale (`float`, *optional*, mặc định là 5.0) : Thang độ dẫn hướng như được định nghĩa trong [Classifier-Free Diffusion Guidance](https://huggingface.co/papers/2207.12598). `guidance_scale` được định nghĩa là `w` của phương trình 2. trong [Imagen Paper](https://huggingface.co/papers/2205.11487). Thang độ dẫn hướng được kích hoạt bằng cách đặt `guidance_scale > 1`. Thang độ dẫn hướng cao hơn khuyến khích tạo ra các hình ảnh gắn kết chặt chẽ với `prompt` văn bản, thường phải đánh đổi bằng chất lượng hình ảnh thấp hơn.

negative_prompt (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt không được dùng để hướng dẫn việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền `negative_prompt_embeds` thay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu `guidance_scale` nhỏ hơn `1`).

negative_prompt_2 (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt không dùng để hướng dẫn tạo ảnh, sẽ được gửi đến `tokenizer_2` và `text_encoder_2`. Nếu không được định nghĩa, `negative_prompt` sẽ được sử dụng cho cả hai text-encoder

num_images_per_prompt (`int`, *tuỳ chọn*, mặc định là 1) : Số lượng hình ảnh cần tạo cho mỗi prompt.

eta (`float`, *optional*, mặc định là 0.0) : Tương ứng với tham số eta (η) trong bài báo DDIM: https://huggingface.co/papers/2010.02502. Chỉ áp dụng cho [schedulers.DDIMScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/ddim#diffusers.DDIMScheduler), sẽ bị bỏ qua với các trình lập lịch khác.

generator (`torch.Generator` hoặc `list[torch.Generator]`, *tùy chọn*) : Một hoặc một danh sách [torch generator](https://pytorch.org/docs/stable/generated/torch.Generator.html) để đảm bảo quá trình sinh là tất định.

latents (`torch.Tensor`, *tùy chọn*) : Các latents nhiễu đã được tạo trước, được lấy mẫu từ phân phối Gaussian, dùng làm đầu vào cho việc tạo ảnh. Có thể được sử dụng để tinh chỉnh cùng một quá trình tạo với các prompt khác nhau. Nếu không được cung cấp, một tensor latents sẽ được tạo ra bằng cách lấy mẫu sử dụng `generator` ngẫu nhiên được cung cấp.

prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các vector nhúng văn bản đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, các vector nhúng văn bản sẽ được tạo từ đối số đầu vào `prompt`.

negative_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các vector nhúng văn bản âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vào `negative_prompt`.

pooled_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các embedding văn bản đã được pool sẵn. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, các embedding văn bản đã pool sẽ được tạo từ đối số đầu vào `prompt`.

negative_pooled_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các embedding văn bản pooled âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, pooled negative_prompt_embeds sẽ được tạo từ đối số đầu vào `negative_prompt`.

ip_adapter_image : (`PipelineImageInput`, *tùy chọn*): Đầu vào hình ảnh tùy chọn để làm việc với IP Adapters.

ip_adapter_image_embeds (`list[torch.Tensor]`, *tùy chọn*) : Các embedding ảnh đã tạo trước cho IP-Adapter. Nó phải là một danh sách có độ dài bằng với số lượng IP-adapter. Mỗi phần tử phải là một tensor có hình dạng `(batch_size, num_images, emb_dim)`. Nó phải chứa embedding ảnh âm nếu `do_classifier_free_guidance` được đặt thành `True`. Nếu không được cung cấp, các embedding sẽ được tính toán từ đối số đầu vào `ip_adapter_image`.

output_type (`str`, *tùy chọn*, mặc định là `"pil"`) : Định dạng đầu ra của hình ảnh được tạo. Chọn giữa [PIL](https://pillow.readthedocs.io/en/stable/): `PIL.Image.Image` hoặc `np.array`.

return_dict (`bool`, *tùy chọn*, mặc định là `True`) : Có nên trả về một `~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput` thay vì một tuple thông thường hay không.

cross_attention_kwargs (`dict`, *tùy chọn*) : Một từ điển kwargs mà nếu được chỉ định sẽ được truyền đến `AttentionProcessor` như đã định nghĩa dưới `self.processor` trong [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).

guidance_rescale (`float`, *tuỳ chọn*, mặc định là 0.0) : Hệ số rescale guidance được đề xuất bởi [Common Diffusion Noise Schedules and Sample Steps are Flawed](https://huggingface.co/papers/2305.08891) `guidance_scale` được định nghĩa là `φ` trong phương trình 16. của [Common Diffusion Noise Schedules and Sample Steps are Flawed](https://huggingface.co/papers/2305.08891). Hệ số rescale guidance nên khắc phục hiện tượng phơi sáng quá mức khi sử dụng zero terminal SNR.

original_size (`tuple[int]`, *optional*, mặc định là (1024, 1024)) : Nếu `original_size` không giống với `target_size`, hình ảnh sẽ có vẻ được giảm hoặc tăng mẫu. `original_size` mặc định là `(height, width)` nếu không được chỉ định. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952).

crops_coords_top_left (`tuple[int]`, *optional*, mặc định là (0, 0)) : `crops_coords_top_left` có thể được dùng để tạo ra một hình ảnh trông như đã được "cắt" từ vị trí `crops_coords_top_left` trở xuống. Các hình ảnh đẹp, được căn giữa tốt thường đạt được bằng cách đặt `crops_coords_top_left` thành (0, 0). Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952).

target_size (`tuple[int]`, *optional*, mặc định là (1024, 1024)) : Trong hầu hết các trường hợp, `target_size` nên được đặt thành chiều cao và chiều rộng mong muốn của hình ảnh được tạo. Nếu không được chỉ định, giá trị mặc định sẽ là `(height, width)`. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952).

negative_original_size (`tuple[int]`, *optional*, mặc định là (1024, 1024)) : Để điều kiện âm quá trình tạo dựa trên độ phân giải hình ảnh cụ thể. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952). Để biết thêm thông tin, hãy tham khảo luồng vấn đề này: https://github.com/huggingface/diffusers/issues/4208.

negative_crops_coords_top_left (`tuple[int]`, *optional*, mặc định là (0, 0)) : Để điều kiện âm quá trình tạo dựa trên tọa độ cắt cụ thể. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952). Để biết thêm thông tin, hãy tham khảo luồng vấn đề này: https://github.com/huggingface/diffusers/issues/4208.

negative_target_size (`tuple[int]`, *optional*, mặc định là (1024, 1024)) : Để điều kiện âm quá trình tạo dựa trên độ phân giải ảnh mục tiêu. Trong hầu hết các trường hợp, nó nên giống với `target_size`. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952). Để biết thêm thông tin, hãy tham khảo luồng issue này: https://github.com/huggingface/diffusers/issues/4208.

clip_skip (`int`, *optional*) : Số lượng lớp cần bỏ qua từ CLIP khi tính toán các prompt embeddings. Giá trị 1 có nghĩa là đầu ra của lớp trước lớp cuối cùng sẽ được sử dụng để tính toán các prompt embeddings.

callback_on_step_end (`Callable`, `PipelineCallback`, `MultiPipelineCallbacks`, *optional*) : Một hàm hoặc một lớp con của `PipelineCallback` hoặc `MultiPipelineCallbacks` được gọi vào cuối mỗi bước khử nhiễu trong quá trình suy luận, với các đối số sau: `callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict)`. `callback_kwargs` sẽ bao gồm một danh sách tất cả các tensor như được chỉ định bởi `callback_on_step_end_tensor_inputs`.

callback_on_step_end_tensor_inputs (`list`, *optional*) : Danh sách các đầu vào tensor cho hàm `callback_on_step_end`. Các tensor được chỉ định trong danh sách sẽ được truyền dưới dạng tham số `callback_kwargs`. Bạn chỉ có thể bao gồm các biến được liệt kê trong thuộc tính `._callback_tensor_inputs` của lớp pipeline của bạn.

**Trả về:** `~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput` hoặc `tuple`

`~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput` nếu `return_dict` là True, ngược lại là một `tuple`. Khi trả về tuple, phần tử đầu tiên là một danh sách chứa các hình ảnh đã tạo.

Hàm được gọi khi gọi pipeline cho việc sinh.

Ví dụ:
```py
>>> 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[[diffusers.StableDiffusionXLPipeline.encode_prompt]]

```python
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)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl.py#L283)

**Tham số:**

prompt (`str` hoặc `list[str]`, *tùy chọn*) : prompt cần được mã hóa

prompt_2 (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt cần được gửi đến `tokenizer_2` và `text_encoder_2`. Nếu không được định nghĩa, `prompt` sẽ được sử dụng cho cả hai text-encoder

device : (`torch.device`): thiết bị torch

num_images_per_prompt (`int`) : số lượng hình ảnh cần được tạo cho mỗi prompt

do_classifier_free_guidance (`bool`) : có sử dụng classifier free guidance hay không

negative_prompt (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt không được dùng để hướng dẫn việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền `negative_prompt_embeds` thay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu `guidance_scale` nhỏ hơn `1`).

negative_prompt_2 (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt không dùng để hướng dẫn tạo ảnh, sẽ được gửi đến `tokenizer_2` và `text_encoder_2`. Nếu không được định nghĩa, `negative_prompt` sẽ được sử dụng cho cả hai text-encoder

prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các vector nhúng văn bản đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, các vector nhúng văn bản sẽ được tạo từ đối số đầu vào `prompt`.

negative_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các vector nhúng văn bản âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vào `negative_prompt`.

pooled_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các embedding văn bản đã được pool sẵn. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, các embedding văn bản đã pool sẽ được tạo từ đối số đầu vào `prompt`.

negative_pooled_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các embedding văn bản pooled âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, pooled negative_prompt_embeds sẽ được tạo từ đối số đầu vào `negative_prompt`.

lora_scale (`float`, *tuỳ chọn*) : Một hệ số lora sẽ được áp dụng cho tất cả các lớp LoRA của text encoder nếu các lớp LoRA được nạp.

clip_skip (`int`, *optional*) : Số lượng lớp cần bỏ qua từ CLIP khi tính toán các prompt embeddings. Giá trị 1 có nghĩa là đầu ra của lớp trước lớp cuối cùng sẽ được sử dụng để tính toán các prompt embeddings.

Mã hóa prompt thành các trạng thái ẩn của text encoder.

#### get_guidance_scale_embedding[[diffusers.StableDiffusionXLPipeline.get_guidance_scale_embedding]]

```python
get_guidance_scale_embedding(w: Tensor, embedding_dim: int = 512, dtype: dtype = torch.float32)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl.py#L758)

**Tham số:**

w (`torch.Tensor`) : Tạo các vector nhúng với thang độ dẫn hướng được chỉ định để sau đó làm phong phú các nhúng bước thời gian.

embedding_dim (`int`, *tuỳ chọn*, mặc định là 512) : Kích thước của các embedding cần tạo.

dtype (`torch.dtype`, *tùy chọn*, mặc định là `torch.float32`) : Kiểu dữ liệu của các embedding được tạo ra.

**Trả về:** `torch.Tensor`

Các vector nhúng có hình dạng `(len(w), embedding_dim)`.

Xem https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298

## StableDiffusionXLImg2ImgPipeline[[diffusers.StableDiffusionXLImg2ImgPipeline]]

#### diffusers.StableDiffusionXLImg2ImgPipeline[[diffusers.StableDiffusionXLImg2ImgPipeline]]

```python
diffusers.StableDiffusionXLImg2ImgPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, text_encoder_2: CLIPTextModelWithProjection, tokenizer: CLIPTokenizer, tokenizer_2: CLIPTokenizer, unet: UNet2DConditionModel, scheduler: KarrasDiffusionSchedulers, image_encoder: CLIPVisionModelWithProjection = None, feature_extractor: CLIPImageProcessorPil = None, requires_aesthetics_score: bool = False, force_zeros_for_empty_prompt: bool = True, add_watermarker: bool | None = None)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py#L188)

**Tham số:**

vae ([AutoencoderKL](/docs/diffusers/v0.43.0/vi/api/models/autoencoderkl#diffusers.AutoencoderKL)) : Mô hình Variational Auto-Encoder (VAE) để mã hóa và giải mã hình ảnh sang và từ các biểu diễn ẩn.

text_encoder (`CLIPTextModel`) : Bộ mã hóa văn bản đóng băng. Stable Diffusion XL sử dụng phần văn bản của [CLIP](https://huggingface.co/docs/transformers/model_doc/clip#transformers.CLIPTextModel), cụ thể là biến thể [clip-vit-large-patch14](https://huggingface.co/openai/clip-vit-large-patch14).

text_encoder_2 (` CLIPTextModelWithProjection`) : Bộ mã hóa văn bản đóng băng thứ hai. Stable Diffusion XL sử dụng phần văn bản và pool của [CLIP](https://huggingface.co/docs/transformers/model_doc/clip#transformers.CLIPTextModelWithProjection), cụ thể là biến thể [laion/CLIP-ViT-bigG-14-laion2B-39B-b160k](https://huggingface.co/laion/CLIP-ViT-bigG-14-laion2B-39B-b160k).

tokenizer (`CLIPTokenizer`) : Tokenizer của lớp [CLIPTokenizer](https://huggingface.co/docs/transformers/v4.21.0/en/model_doc/clip#transformers.CLIPTokenizer).

tokenizer_2 (`CLIPTokenizer`) : Tokenizer thứ hai thuộc lớp [CLIPTokenizer](https://huggingface.co/docs/transformers/v4.21.0/en/model_doc/clip#transformers.CLIPTokenizer).

unet ([UNet2DConditionModel](/docs/diffusers/v0.43.0/vi/api/models/unet2d-cond#diffusers.UNet2DConditionModel)) : Kiến trúc U-Net có điều kiện để khử nhiễu các ẩn (latents) của ảnh đã mã hóa.

scheduler ([SchedulerMixin](/docs/diffusers/v0.43.0/vi/api/schedulers/overview#diffusers.SchedulerMixin)) : Một scheduler được sử dụng kết hợp với `unet` để khử nhiễu các latents của ảnh đã mã hóa. Có thể là một trong [DDIMScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/ddim#diffusers.DDIMScheduler), [LMSDiscreteScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/lms_discrete#diffusers.LMSDiscreteScheduler), hoặc [PNDMScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/pndm#diffusers.PNDMScheduler).

requires_aesthetics_score (`bool`, *tùy chọn*, mặc định là `"False"`) : Xác định xem `unet` có yêu cầu điều kiện `aesthetic_score` được truyền vào trong quá trình suy luận hay không. Xem thêm cấu hình của `stabilityai/stable-diffusion-xl-refiner-1-0`.

force_zeros_for_empty_prompt (`bool`, *tùy chọn*, mặc định là `"True"`) : Xác định xem các embedding của prompt tiêu cực có nên được ép buộc luôn đặt về 0 hay không. Xem thêm cấu hình của `stabilityai/stable-diffusion-xl-base-1-0`.

add_watermarker (`bool`, *tuỳ chọn*) : Có sử dụng [invisible_watermark library](https://github.com/ShieldMnt/invisible-watermark/) để thêm watermark cho các hình ảnh đầu ra hay không. Nếu không được định nghĩa, giá trị mặc định sẽ là True nếu gói đã được cài đặt, ngược lại sẽ không sử dụng công cụ watermark.

Pipeline để tạo ảnh từ văn bản sử dụng Stable Diffusion XL.

Mô hình này kế thừa từ [DiffusionPipeline](/docs/diffusers/v0.43.0/vi/api/pipelines/overview#diffusers.DiffusionPipeline). Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các pipeline (chẳng hạn như tải xuống hoặc lưu, chạy trên một thiết bị cụ thể, v.v.)

Pipeline cũng kế thừa các phương thức nạp sau:
- [load_textual_inversion()](/docs/diffusers/v0.43.0/vi/api/loaders/textual_inversion#diffusers.loaders.TextualInversionLoaderMixin.load_textual_inversion) để nạp các embedding textual inversion
- [from_single_file()](/docs/diffusers/v0.43.0/vi/api/loaders/single_file#diffusers.loaders.FromSingleFileMixin.from_single_file) để tải các tệp `.ckpt`
- [load_lora_weights()](/docs/diffusers/v0.43.0/vi/api/loaders/lora#diffusers.loaders.StableDiffusionXLLoraLoaderMixin.load_lora_weights) để nạp trọng số LoRA
- [save_lora_weights()](/docs/diffusers/v0.43.0/vi/api/loaders/lora#diffusers.loaders.StableDiffusionXLLoraLoaderMixin.save_lora_weights) để lưu trọng số LoRA
- [load_ip_adapter()](/docs/diffusers/v0.43.0/vi/api/loaders/ip_adapter#diffusers.loaders.IPAdapterMixin.load_ip_adapter) để nạp IP Adapters

#### __call__[[diffusers.StableDiffusionXLImg2ImgPipeline.__call__]]

```python
__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, strength: float = 0.3, num_inference_steps: int = 50, timesteps: list[int] = None, sigmas: list[float] = None, denoising_start: float | None = 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, cross_attention_kwargs: dict[str, typing.Any] | None = None, guidance_rescale: float = 0.0, original_size: tuple[int, int] = None, crops_coords_top_left: tuple[int, int] = (0, 0), target_size: tuple[int, int] = 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, aesthetic_score: float = 6.0, negative_aesthetic_score: float = 2.5, clip_skip: int | None = None, callback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], **kwargs)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py#L975)

**Tham số:**

prompt (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt để hướng dẫn việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền `prompt_embeds` thay thế.

prompt_2 (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt cần được gửi đến `tokenizer_2` và `text_encoder_2`. Nếu không được định nghĩa, `prompt` sẽ được sử dụng cho cả hai text-encoder

image (`torch.Tensor` hoặc `PIL.Image.Image` hoặc `np.ndarray` hoặc `list[torch.Tensor]` hoặc `list[PIL.Image.Image]` hoặc `list[np.ndarray]`) : Ảnh cần chỉnh sửa bằng pipeline.

strength (`float`, *optional*, mặc định là 0.3) : Về mặt khái niệm, chỉ ra mức độ biến đổi hình ảnh tham chiếu `image`. Giá trị phải nằm trong khoảng từ 0 đến 1. `image` sẽ được dùng làm điểm khởi đầu, với lượng nhiễu được thêm vào càng lớn khi `strength` càng cao. Số bước khử nhiễu phụ thuộc vào lượng nhiễu được thêm vào ban đầu. Khi `strength` bằng 1, lượng nhiễu thêm vào sẽ đạt mức tối đa và quá trình khử nhiễu sẽ chạy đủ số lần lặp được chỉ định trong `num_inference_steps`. Do đó, giá trị 1 về cơ bản sẽ bỏ qua `image`. Lưu ý rằng trong trường hợp `denoising_start` được khai báo là số nguyên, giá trị của `strength` sẽ bị bỏ qua.

num_inference_steps (`int`, *optional*, mặc định là 50) : Số bước khử nhiễu. Số bước khử nhiễu nhiều hơn thường dẫn đến hình ảnh có chất lượng cao hơn, với cái giá là suy luận chậm hơn.

timesteps (`list[int]`, *optional*) : Các bước thời gian (timesteps) tùy chỉnh để sử dụng cho quá trình khử nhiễu với các trình lập lịch (scheduler) hỗ trợ tham số `timesteps` trong phương thức `set_timesteps` của chúng. Nếu không được định nghĩa, hành vi mặc định khi `num_inference_steps` được truyền vào sẽ được sử dụng. Phải được sắp xếp theo thứ tự giảm dần.

sigmas (`list[float]`, *optional*) : Các sigma tùy chỉnh để sử dụng cho quá trình khử nhiễu với các trình lập lịch hỗ trợ tham số `sigmas` trong phương thức `set_timesteps` của chúng. Nếu không được định nghĩa, hành vi mặc định khi `num_inference_steps` được truyền vào sẽ được sử dụng.

denoising_start (`float`, *optional*) : Khi được chỉ định, tham số này cho biết tỷ lệ (từ 0.0 đến 1.0) của toàn bộ quá trình khử nhiễu sẽ bị bỏ qua trước khi quá trình bắt đầu. Do đó, phần đầu của quá trình khử nhiễu sẽ bị bỏ qua và hình ảnh `image` được truyền vào được giả định là một hình ảnh đã được khử nhiễu một phần. Lưu ý rằng khi tham số này được chỉ định, strength sẽ bị bỏ qua. Tham số `denoising_start` đặc biệt hữu ích khi pipeline này được tích hợp vào cấu hình đa pipeline "Mixture of Denoisers", như được mô tả chi tiết trong [**Nâng cao chất lượng hình ảnh**](https://huggingface.co/docs/diffusers/using-diffusers/sdxl#refine-image-quality).

denoising_end (`float`, *optional*) : Khi được chỉ định, xác định tỷ lệ (từ 0.0 đến 1.0) của toàn bộ quá trình khử nhiễu cần hoàn thành trước khi bị kết thúc sớm một cách có chủ đích. Kết quả là, mẫu được trả về vẫn sẽ giữ lại một lượng nhiễu đáng kể (khoảng 20% các bước thời gian cuối cùng vẫn cần thiết) và nên được khử nhiễu bởi một pipeline kế tiếp có `denoising_start` được đặt thành 0.8 để chỉ khử nhiễu 20% cuối cùng của trình lập lịch. Tham số denoising_end lý tưởng nhất nên được sử dụng khi pipeline này là một phần của cấu hình đa pipeline "Mixture of Denoisers", như đã mô tả chi tiết trong [**Nâng cao chất lượng hình ảnh**](https://huggingface.co/docs/diffusers/using-diffusers/sdxl#refine-image-quality).

guidance_scale (`float`, *optional*, mặc định là 7.5) : Thang độ dẫn hướng như được định nghĩa trong [Classifier-Free Diffusion Guidance](https://huggingface.co/papers/2207.12598). `guidance_scale` được định nghĩa là `w` của phương trình 2. trong [Imagen Paper](https://huggingface.co/papers/2205.11487). Thang độ dẫn hướng được kích hoạt bằng cách đặt `guidance_scale > 1`. Thang độ dẫn hướng cao hơn khuyến khích tạo ra các hình ảnh gắn kết chặt chẽ với `prompt` văn bản, thường phải đánh đổi bằng chất lượng hình ảnh thấp hơn.

negative_prompt (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt không được dùng để hướng dẫn việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền `negative_prompt_embeds` thay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu `guidance_scale` nhỏ hơn `1`).

negative_prompt_2 (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt không dùng để hướng dẫn tạo ảnh, sẽ được gửi đến `tokenizer_2` và `text_encoder_2`. Nếu không được định nghĩa, `negative_prompt` sẽ được sử dụng cho cả hai text-encoder

num_images_per_prompt (`int`, *tuỳ chọn*, mặc định là 1) : Số lượng hình ảnh cần tạo cho mỗi prompt.

eta (`float`, *optional*, mặc định là 0.0) : Tương ứng với tham số eta (η) trong bài báo DDIM: https://huggingface.co/papers/2010.02502. Chỉ áp dụng cho [schedulers.DDIMScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/ddim#diffusers.DDIMScheduler), sẽ bị bỏ qua với các trình lập lịch khác.

generator (`torch.Generator` hoặc `list[torch.Generator]`, *tùy chọn*) : Một hoặc một danh sách [torch generator](https://pytorch.org/docs/stable/generated/torch.Generator.html) để đảm bảo quá trình sinh là tất định.

latents (`torch.Tensor`, *tùy chọn*) : Các latents nhiễu đã được tạo trước, được lấy mẫu từ phân phối Gaussian, dùng làm đầu vào cho việc tạo ảnh. Có thể được sử dụng để tinh chỉnh cùng một quá trình tạo với các prompt khác nhau. Nếu không được cung cấp, một tensor latents sẽ được tạo ra bằng cách lấy mẫu sử dụng `generator` ngẫu nhiên được cung cấp.

prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các vector nhúng văn bản đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, các vector nhúng văn bản sẽ được tạo từ đối số đầu vào `prompt`.

negative_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các vector nhúng văn bản âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vào `negative_prompt`.

pooled_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các embedding văn bản đã được pool sẵn. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, các embedding văn bản đã pool sẽ được tạo từ đối số đầu vào `prompt`.

negative_pooled_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các embedding văn bản pooled âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, pooled negative_prompt_embeds sẽ được tạo từ đối số đầu vào `negative_prompt`.

ip_adapter_image : (`PipelineImageInput`, *tùy chọn*): Đầu vào hình ảnh tùy chọn để làm việc với IP Adapters.

ip_adapter_image_embeds (`list[torch.Tensor]`, *tùy chọn*) : Các embedding ảnh đã tạo trước cho IP-Adapter. Nó phải là một danh sách có độ dài bằng với số lượng IP-adapter. Mỗi phần tử phải là một tensor có hình dạng `(batch_size, num_images, emb_dim)`. Nó phải chứa embedding ảnh âm nếu `do_classifier_free_guidance` được đặt thành `True`. Nếu không được cung cấp, các embedding sẽ được tính toán từ đối số đầu vào `ip_adapter_image`.

output_type (`str`, *tùy chọn*, mặc định là `"pil"`) : Định dạng đầu ra của hình ảnh được tạo. Chọn giữa [PIL](https://pillow.readthedocs.io/en/stable/): `PIL.Image.Image` hoặc `np.array`.

return_dict (`bool`, *tùy chọn*, mặc định là `True`) : Có nên trả về một `~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput` thay vì một tuple thông thường hay không.

cross_attention_kwargs (`dict`, *tùy chọn*) : Một từ điển kwargs mà nếu được chỉ định sẽ được truyền đến `AttentionProcessor` như đã định nghĩa dưới `self.processor` trong [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).

guidance_rescale (`float`, *tuỳ chọn*, mặc định là 0.0) : Hệ số rescale guidance được đề xuất bởi [Common Diffusion Noise Schedules and Sample Steps are Flawed](https://huggingface.co/papers/2305.08891) `guidance_scale` được định nghĩa là `φ` trong phương trình 16. của [Common Diffusion Noise Schedules and Sample Steps are Flawed](https://huggingface.co/papers/2305.08891). Hệ số rescale guidance nên khắc phục hiện tượng phơi sáng quá mức khi sử dụng zero terminal SNR.

original_size (`tuple[int]`, *optional*, mặc định là (1024, 1024)) : Nếu `original_size` không giống với `target_size`, hình ảnh sẽ có vẻ được giảm hoặc tăng mẫu. `original_size` mặc định là `(height, width)` nếu không được chỉ định. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952).

crops_coords_top_left (`tuple[int]`, *optional*, mặc định là (0, 0)) : `crops_coords_top_left` có thể được dùng để tạo ra một hình ảnh trông như đã được "cắt" từ vị trí `crops_coords_top_left` trở xuống. Các hình ảnh đẹp, được căn giữa tốt thường đạt được bằng cách đặt `crops_coords_top_left` thành (0, 0). Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952).

target_size (`tuple[int]`, *optional*, mặc định là (1024, 1024)) : Trong hầu hết các trường hợp, `target_size` nên được đặt thành chiều cao và chiều rộng mong muốn của hình ảnh được tạo. Nếu không được chỉ định, giá trị mặc định sẽ là `(height, width)`. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952).

negative_original_size (`tuple[int]`, *optional*, mặc định là (1024, 1024)) : Để điều kiện âm quá trình tạo dựa trên độ phân giải hình ảnh cụ thể. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952). Để biết thêm thông tin, hãy tham khảo luồng vấn đề này: https://github.com/huggingface/diffusers/issues/4208.

negative_crops_coords_top_left (`tuple[int]`, *optional*, mặc định là (0, 0)) : Để điều kiện âm quá trình tạo dựa trên tọa độ cắt cụ thể. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952). Để biết thêm thông tin, hãy tham khảo luồng vấn đề này: https://github.com/huggingface/diffusers/issues/4208.

negative_target_size (`tuple[int]`, *optional*, mặc định là (1024, 1024)) : Để điều kiện âm quá trình tạo dựa trên độ phân giải ảnh mục tiêu. Trong hầu hết các trường hợp, nó nên giống với `target_size`. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952). Để biết thêm thông tin, hãy tham khảo luồng issue này: https://github.com/huggingface/diffusers/issues/4208.

aesthetic_score (`float`, *tuỳ chọn*, mặc định là 6.0) : Được dùng để mô phỏng điểm thẩm mỹ của hình ảnh được tạo ra bằng cách ảnh hưởng đến điều kiện văn bản tích cực. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952).

negative_aesthetic_score (`float`, *tuỳ chọn*, mặc định là 2.5) : Một phần của micro-conditioning trong SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952). Có thể được sử dụng để mô phỏng điểm thẩm mỹ của hình ảnh được tạo ra bằng cách ảnh hưởng đến điều kiện văn bản âm.

clip_skip (`int`, *optional*) : Số lượng lớp cần bỏ qua từ CLIP khi tính toán các prompt embeddings. Giá trị 1 có nghĩa là đầu ra của lớp trước lớp cuối cùng sẽ được sử dụng để tính toán các prompt embeddings.

callback_on_step_end (`Callable`, `PipelineCallback`, `MultiPipelineCallbacks`, *optional*) : Một hàm hoặc một lớp con của `PipelineCallback` hoặc `MultiPipelineCallbacks` được gọi vào cuối mỗi bước khử nhiễu trong quá trình suy luận, với các đối số sau: `callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict)`. `callback_kwargs` sẽ bao gồm một danh sách tất cả các tensor như được chỉ định bởi `callback_on_step_end_tensor_inputs`.

callback_on_step_end_tensor_inputs (`list`, *optional*) : Danh sách các đầu vào tensor cho hàm `callback_on_step_end`. Các tensor được chỉ định trong danh sách sẽ được truyền dưới dạng tham số `callback_kwargs`. Bạn chỉ có thể bao gồm các biến được liệt kê trong thuộc tính `._callback_tensor_inputs` của lớp pipeline của bạn.

**Trả về:** `~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput` hoặc `tuple`

`~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput` nếu `return_dict` là True, ngược lại là một `tuple. Khi trả về tuple, phần tử đầu tiên là một danh sách chứa các hình ảnh đã tạo.

Hàm được gọi khi gọi pipeline cho việc sinh.

Ví dụ:
```py
>>> 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[[diffusers.StableDiffusionXLImg2ImgPipeline.encode_prompt]]

```python
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)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py#L301)

**Tham số:**

prompt (`str` hoặc `list[str]`, *tùy chọn*) : prompt cần được mã hóa

prompt_2 (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt cần được gửi đến `tokenizer_2` và `text_encoder_2`. Nếu không được định nghĩa, `prompt` sẽ được sử dụng cho cả hai text-encoder

device : (`torch.device`): thiết bị torch

num_images_per_prompt (`int`) : số lượng hình ảnh cần được tạo cho mỗi prompt

do_classifier_free_guidance (`bool`) : có sử dụng classifier free guidance hay không

negative_prompt (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt không được dùng để hướng dẫn việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền `negative_prompt_embeds` thay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu `guidance_scale` nhỏ hơn `1`).

negative_prompt_2 (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt không dùng để hướng dẫn tạo ảnh, sẽ được gửi đến `tokenizer_2` và `text_encoder_2`. Nếu không được định nghĩa, `negative_prompt` sẽ được sử dụng cho cả hai text-encoder

prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các vector nhúng văn bản đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, các vector nhúng văn bản sẽ được tạo từ đối số đầu vào `prompt`.

negative_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các vector nhúng văn bản âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vào `negative_prompt`.

pooled_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các embedding văn bản đã được pool sẵn. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, các embedding văn bản đã pool sẽ được tạo từ đối số đầu vào `prompt`.

negative_pooled_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các embedding văn bản pooled âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, pooled negative_prompt_embeds sẽ được tạo từ đối số đầu vào `negative_prompt`.

lora_scale (`float`, *tuỳ chọn*) : Một hệ số lora sẽ được áp dụng cho tất cả các lớp LoRA của text encoder nếu các lớp LoRA được nạp.

clip_skip (`int`, *optional*) : Số lượng lớp cần bỏ qua từ CLIP khi tính toán các prompt embeddings. Giá trị 1 có nghĩa là đầu ra của lớp trước lớp cuối cùng sẽ được sử dụng để tính toán các prompt embeddings.

Mã hóa prompt thành các trạng thái ẩn của text encoder.

#### get_guidance_scale_embedding[[diffusers.StableDiffusionXLImg2ImgPipeline.get_guidance_scale_embedding]]

```python
get_guidance_scale_embedding(w: Tensor, embedding_dim: int = 512, dtype: dtype = torch.float32)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py#L906)

**Tham số:**

w (`torch.Tensor`) : Tạo các vector nhúng với thang độ dẫn hướng được chỉ định để sau đó làm phong phú các nhúng bước thời gian.

embedding_dim (`int`, *tuỳ chọn*, mặc định là 512) : Kích thước của các embedding cần tạo.

dtype (`torch.dtype`, *tùy chọn*, mặc định là `torch.float32`) : Kiểu dữ liệu của các embedding được tạo ra.

**Trả về:** `torch.Tensor`

Các vector nhúng có hình dạng `(len(w), embedding_dim)`.

Xem https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298

## StableDiffusionXLInpaintPipeline[[diffusers.StableDiffusionXLInpaintPipeline]]

#### diffusers.StableDiffusionXLInpaintPipeline[[diffusers.StableDiffusionXLInpaintPipeline]]

```python
diffusers.StableDiffusionXLInpaintPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, text_encoder_2: CLIPTextModelWithProjection, tokenizer: CLIPTokenizer, tokenizer_2: CLIPTokenizer, unet: UNet2DConditionModel, scheduler: KarrasDiffusionSchedulers, image_encoder: CLIPVisionModelWithProjection = None, feature_extractor: CLIPImageProcessorPil = None, requires_aesthetics_score: bool = False, force_zeros_for_empty_prompt: bool = True, add_watermarker: bool | None = None)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_inpaint.py#L215)

**Tham số:**

vae ([AutoencoderKL](/docs/diffusers/v0.43.0/vi/api/models/autoencoderkl#diffusers.AutoencoderKL)) : Mô hình Variational Auto-Encoder (VAE) để mã hóa và giải mã hình ảnh sang và từ các biểu diễn ẩn.

text_encoder (`CLIPTextModel`) : Bộ mã hóa văn bản đóng băng. Stable Diffusion XL sử dụng phần văn bản của [CLIP](https://huggingface.co/docs/transformers/model_doc/clip#transformers.CLIPTextModel), cụ thể là biến thể [clip-vit-large-patch14](https://huggingface.co/openai/clip-vit-large-patch14).

text_encoder_2 (` CLIPTextModelWithProjection`) : Bộ mã hóa văn bản đóng băng thứ hai. Stable Diffusion XL sử dụng phần văn bản và pool của [CLIP](https://huggingface.co/docs/transformers/model_doc/clip#transformers.CLIPTextModelWithProjection), cụ thể là biến thể [laion/CLIP-ViT-bigG-14-laion2B-39B-b160k](https://huggingface.co/laion/CLIP-ViT-bigG-14-laion2B-39B-b160k).

tokenizer (`CLIPTokenizer`) : Tokenizer của lớp [CLIPTokenizer](https://huggingface.co/docs/transformers/v4.21.0/en/model_doc/clip#transformers.CLIPTokenizer).

tokenizer_2 (`CLIPTokenizer`) : Tokenizer thứ hai thuộc lớp [CLIPTokenizer](https://huggingface.co/docs/transformers/v4.21.0/en/model_doc/clip#transformers.CLIPTokenizer).

unet ([UNet2DConditionModel](/docs/diffusers/v0.43.0/vi/api/models/unet2d-cond#diffusers.UNet2DConditionModel)) : Kiến trúc U-Net có điều kiện để khử nhiễu các ẩn (latents) của ảnh đã mã hóa.

scheduler ([SchedulerMixin](/docs/diffusers/v0.43.0/vi/api/schedulers/overview#diffusers.SchedulerMixin)) : Một scheduler được sử dụng kết hợp với `unet` để khử nhiễu các latents của ảnh đã mã hóa. Có thể là một trong [DDIMScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/ddim#diffusers.DDIMScheduler), [LMSDiscreteScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/lms_discrete#diffusers.LMSDiscreteScheduler), hoặc [PNDMScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/pndm#diffusers.PNDMScheduler).

requires_aesthetics_score (`bool`, *tùy chọn*, mặc định là `"False"`) : Xác định xem `unet` có yêu cầu điều kiện aesthetic_score được truyền vào trong quá trình suy luận hay không. Xem thêm cấu hình của `stabilityai/stable-diffusion-xl-refiner-1-0`.

force_zeros_for_empty_prompt (`bool`, *tùy chọn*, mặc định là `"True"`) : Xác định xem các embedding của prompt tiêu cực có nên được ép buộc luôn đặt về 0 hay không. Xem thêm cấu hình của `stabilityai/stable-diffusion-xl-base-1-0`.

add_watermarker (`bool`, *tuỳ chọn*) : Có sử dụng [invisible_watermark library](https://github.com/ShieldMnt/invisible-watermark/) để thêm watermark cho các hình ảnh đầu ra hay không. Nếu không được định nghĩa, giá trị mặc định sẽ là True nếu gói đã được cài đặt, ngược lại sẽ không sử dụng công cụ watermark.

Pipeline để tạo ảnh từ văn bản sử dụng Stable Diffusion XL.

Mô hình này kế thừa từ [DiffusionPipeline](/docs/diffusers/v0.43.0/vi/api/pipelines/overview#diffusers.DiffusionPipeline). Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các pipeline (chẳng hạn như tải xuống hoặc lưu, chạy trên một thiết bị cụ thể, v.v.)

Pipeline cũng kế thừa các phương thức nạp sau:
- [load_textual_inversion()](/docs/diffusers/v0.43.0/vi/api/loaders/textual_inversion#diffusers.loaders.TextualInversionLoaderMixin.load_textual_inversion) để nạp các embedding textual inversion
- [from_single_file()](/docs/diffusers/v0.43.0/vi/api/loaders/single_file#diffusers.loaders.FromSingleFileMixin.from_single_file) để tải các tệp `.ckpt`
- [load_lora_weights()](/docs/diffusers/v0.43.0/vi/api/loaders/lora#diffusers.loaders.StableDiffusionXLLoraLoaderMixin.load_lora_weights) để nạp trọng số LoRA
- [save_lora_weights()](/docs/diffusers/v0.43.0/vi/api/loaders/lora#diffusers.loaders.StableDiffusionXLLoraLoaderMixin.save_lora_weights) để lưu trọng số LoRA
- [load_ip_adapter()](/docs/diffusers/v0.43.0/vi/api/loaders/ip_adapter#diffusers.loaders.IPAdapterMixin.load_ip_adapter) để nạp IP Adapters

#### __call__[[diffusers.StableDiffusionXLInpaintPipeline.__call__]]

```python
__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, mask_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, masked_image_latents: Tensor = None, height: int | None = None, width: int | None = None, padding_mask_crop: int | None = None, strength: float = 0.9999, num_inference_steps: int = 50, timesteps: list[int] = None, sigmas: list[float] = None, denoising_start: float | None = None, denoising_end: float | None = None, guidance_scale: float = 7.5, 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, cross_attention_kwargs: dict[str, typing.Any] | None = None, guidance_rescale: float = 0.0, original_size: tuple[int, int] = None, crops_coords_top_left: tuple[int, int] = (0, 0), target_size: tuple[int, int] = 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, aesthetic_score: float = 6.0, negative_aesthetic_score: float = 2.5, clip_skip: int | None = None, callback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], **kwargs)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_inpaint.py#L1080)

**Tham số:**

prompt (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt để hướng dẫn việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền `prompt_embeds` thay thế.

prompt_2 (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt cần được gửi đến `tokenizer_2` và `text_encoder_2`. Nếu không được định nghĩa, `prompt` sẽ được sử dụng cho cả hai text-encoder

image (`PIL.Image.Image`) : `Image`, hoặc tensor đại diện cho một lô ảnh sẽ được inpaint, *tức là* một phần của ảnh sẽ bị che đi bằng `mask_image` và được vẽ lại theo `prompt`.

mask_image (`PIL.Image.Image`) : `Image`, hoặc tensor đại diện cho một lô ảnh, dùng để tạo mặt nạ cho `image`. Các pixel trắng trong mặt nạ sẽ được tô lại, trong khi các pixel đen sẽ được giữ nguyên. Nếu `mask_image` là ảnh PIL, nó sẽ được chuyển đổi thành một kênh duy nhất (độ sáng) trước khi sử dụng. Nếu là tensor, nó phải chứa một kênh màu (L) thay vì 3, do đó hình dạng mong đợi sẽ là `(B, H, W, 1)`.

masked_image_latents (`torch.Tensor`, *tùy chọn*) : Latent đã mã hóa trước của hình ảnh bị che (cho inpainting).

height (`int`, *tuỳ chọn*, mặc định là self.unet.config.sample_size * self.vae_scale_factor) : Chiều cao tính bằng pixel của hình ảnh được tạo ra. Mặc định được đặt là 1024 để đạt kết quả tốt nhất. Bất kỳ giá trị nào dưới 512 pixel sẽ không hoạt động tốt với [stabilityai/stable-diffusion-xl-base-1.0](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0) và các checkpoint không được tinh chỉnh đặc biệt cho độ phân giải thấp.

width (`int`, *tuỳ chọn*, mặc định là self.unet.config.sample_size * self.vae_scale_factor) : Độ rộng tính bằng pixel của hình ảnh được tạo ra. Mặc định được đặt là 1024 để đạt kết quả tốt nhất. Bất kỳ giá trị nào dưới 512 pixel sẽ không hoạt động tốt với [stabilityai/stable-diffusion-xl-base-1.0](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0) và các checkpoint không được tinh chỉnh đặc biệt cho độ phân giải thấp.

padding_mask_crop (`int`, *optional*, mặc định là `None`) : Kích thước của phần lề (margin) trong vùng cắt (crop) sẽ được áp dụng cho ảnh và mặt nạ. Nếu là `None`, sẽ không áp dụng cắt cho image và mask_image. Nếu `padding_mask_crop` không phải `None`, hệ thống sẽ trước tiên tìm một vùng hình chữ nhật có cùng tỷ lệ khung hình với ảnh và chứa toàn bộ vùng bị che, sau đó mở rộng vùng đó dựa trên `padding_mask_crop`. Ảnh và mask_image sẽ được cắt dựa trên vùng đã mở rộng trước khi được điều chỉnh kích thước về kích thước ảnh gốc để phục vụ inpainting. Điều này hữu ích khi vùng bị che nhỏ trong khi ảnh lớn và chứa thông tin không liên quan đến inpainting, chẳng hạn như nền.

strength (`float`, *optional*, mặc định là 0.9999) : Về mặt khái niệm, chỉ ra mức độ biến đổi phần bị che khuất của `image` tham chiếu. Phải nằm trong khoảng từ 0 đến 1. `image` sẽ được dùng làm điểm khởi đầu, thêm nhiều nhiễu hơn khi `strength` càng lớn. Số bước khử nhiễu phụ thuộc vào lượng nhiễu ban đầu được thêm vào. Khi `strength` là 1, nhiễu được thêm vào sẽ ở mức tối đa và quá trình khử nhiễu sẽ chạy đủ số lần lặp được chỉ định trong `num_inference_steps`. Do đó, giá trị 1 về cơ bản sẽ bỏ qua phần bị che khuất của `image` tham chiếu. Lưu ý rằng trong trường hợp `denoising_start` được khai báo là số nguyên, giá trị của `strength` sẽ bị bỏ qua.

num_inference_steps (`int`, *optional*, mặc định là 50) : Số bước khử nhiễu. Số bước khử nhiễu nhiều hơn thường dẫn đến hình ảnh có chất lượng cao hơn, với cái giá là suy luận chậm hơn.

timesteps (`list[int]`, *optional*) : Các bước thời gian (timesteps) tùy chỉnh để sử dụng cho quá trình khử nhiễu với các trình lập lịch (scheduler) hỗ trợ tham số `timesteps` trong phương thức `set_timesteps` của chúng. Nếu không được định nghĩa, hành vi mặc định khi `num_inference_steps` được truyền vào sẽ được sử dụng. Phải được sắp xếp theo thứ tự giảm dần.

sigmas (`list[float]`, *optional*) : Các sigma tùy chỉnh để sử dụng cho quá trình khử nhiễu với các trình lập lịch hỗ trợ tham số `sigmas` trong phương thức `set_timesteps` của chúng. Nếu không được định nghĩa, hành vi mặc định khi `num_inference_steps` được truyền vào sẽ được sử dụng.

denoising_start (`float`, *optional*) : Khi được chỉ định, cho biết tỷ lệ (từ 0.0 đến 1.0) của toàn bộ quá trình khử nhiễu sẽ bị bỏ qua trước khi bắt đầu. Do đó, phần đầu của quá trình khử nhiễu sẽ bị bỏ qua và `image` được truyền vào được giả định là một hình ảnh đã được khử nhiễu một phần. Lưu ý rằng khi tham số này được chỉ định, strength sẽ bị bỏ qua. Tham số `denoising_start` đặc biệt hữu ích khi pipeline này được tích hợp vào cấu hình đa pipeline "Mixture of Denoisers", như được mô tả chi tiết trong [**Refining the Image Output**](https://huggingface.co/docs/diffusers/api/pipelines/stable_diffusion/stable_diffusion_xl#refining-the-image-output).

denoising_end (`float`, *optional*) : Khi được chỉ định, xác định tỷ lệ (từ 0.0 đến 1.0) của toàn bộ quá trình khử nhiễu cần hoàn thành trước khi bị kết thúc sớm một cách có chủ đích. Kết quả là, mẫu được trả về vẫn sẽ giữ lại một lượng nhiễu đáng kể (khoảng 20% các bước thời gian cuối cùng vẫn cần thiết) và nên được khử nhiễu bởi một pipeline kế tiếp có `denoising_start` được đặt thành 0.8 để chỉ khử nhiễu 20% cuối cùng của trình lập lịch. Tham số denoising_end lý tưởng nhất nên được sử dụng khi pipeline này là một phần của cấu hình đa pipeline "Mixture of Denoisers", như đã mô tả chi tiết trong [**Refining the Image Output**](https://huggingface.co/docs/diffusers/api/pipelines/stable_diffusion/stable_diffusion_xl#refining-the-image-output).

guidance_scale (`float`, *optional*, mặc định là 7.5) : Thang độ dẫn hướng như được định nghĩa trong [Classifier-Free Diffusion Guidance](https://huggingface.co/papers/2207.12598). `guidance_scale` được định nghĩa là `w` của phương trình 2. trong [Imagen Paper](https://huggingface.co/papers/2205.11487). Thang độ dẫn hướng được kích hoạt bằng cách đặt `guidance_scale > 1`. Thang độ dẫn hướng cao hơn khuyến khích tạo ra các hình ảnh gắn kết chặt chẽ với `prompt` văn bản, thường phải đánh đổi bằng chất lượng hình ảnh thấp hơn.

negative_prompt (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt không được dùng để hướng dẫn việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền `negative_prompt_embeds` thay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu `guidance_scale` nhỏ hơn `1`).

negative_prompt_2 (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt không dùng để hướng dẫn tạo ảnh, sẽ được gửi đến `tokenizer_2` và `text_encoder_2`. Nếu không được định nghĩa, `negative_prompt` sẽ được sử dụng cho cả hai text-encoder

prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các vector nhúng văn bản đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, các vector nhúng văn bản sẽ được tạo từ đối số đầu vào `prompt`.

negative_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các vector nhúng văn bản âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vào `negative_prompt`.

pooled_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các embedding văn bản đã được pool sẵn. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, các embedding văn bản đã pool sẽ được tạo từ đối số đầu vào `prompt`.

negative_pooled_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các embedding văn bản pooled âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, pooled negative_prompt_embeds sẽ được tạo từ đối số đầu vào `negative_prompt`.

ip_adapter_image : (`PipelineImageInput`, *tùy chọn*): Đầu vào hình ảnh tùy chọn để làm việc với IP Adapters.

ip_adapter_image_embeds (`list[torch.Tensor]`, *tùy chọn*) : Các embedding ảnh đã tạo trước cho IP-Adapter. Nó phải là một danh sách có độ dài bằng với số lượng IP-adapter. Mỗi phần tử phải là một tensor có hình dạng `(batch_size, num_images, emb_dim)`. Nó phải chứa embedding ảnh âm nếu `do_classifier_free_guidance` được đặt thành `True`. Nếu không được cung cấp, các embedding sẽ được tính toán từ đối số đầu vào `ip_adapter_image`.

num_images_per_prompt (`int`, *tuỳ chọn*, mặc định là 1) : Số lượng hình ảnh cần tạo cho mỗi prompt.

eta (`float`, *optional*, mặc định là 0.0) : Tương ứng với tham số eta (η) trong bài báo DDIM: https://huggingface.co/papers/2010.02502. Chỉ áp dụng cho [schedulers.DDIMScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/ddim#diffusers.DDIMScheduler), sẽ bị bỏ qua với các trình lập lịch khác.

generator (`torch.Generator`, *tùy chọn*) : Một hoặc một danh sách [torch generator(s)](https://pytorch.org/docs/stable/generated/torch.Generator.html) để làm cho quá trình sinh trở nên tất định.

latents (`torch.Tensor`, *tùy chọn*) : Các latents nhiễu đã được tạo trước, được lấy mẫu từ phân phối Gaussian, dùng làm đầu vào cho việc tạo ảnh. Có thể được sử dụng để tinh chỉnh cùng một quá trình tạo với các prompt khác nhau. Nếu không được cung cấp, một tensor latents sẽ được tạo ra bằng cách lấy mẫu sử dụng `generator` ngẫu nhiên được cung cấp.

output_type (`str`, *tùy chọn*, mặc định là `"pil"`) : Định dạng đầu ra của hình ảnh được tạo. Chọn giữa [PIL](https://pillow.readthedocs.io/en/stable/): `PIL.Image.Image` hoặc `np.array`.

return_dict (`bool`, *tùy chọn*, mặc định là `True`) : Có nên trả về một [StableDiffusionPipelineOutput](/docs/diffusers/v0.43.0/vi/api/pipelines/stable_diffusion/img2img#diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput) thay vì một tuple thông thường hay không.

cross_attention_kwargs (`dict`, *tùy chọn*) : Một từ điển kwargs mà nếu được chỉ định sẽ được truyền đến `AttentionProcessor` như đã định nghĩa dưới `self.processor` trong [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).

original_size (`tuple[int]`, *optional*, mặc định là (1024, 1024)) : Nếu `original_size` không giống với `target_size`, hình ảnh sẽ có vẻ được giảm hoặc tăng mẫu. `original_size` mặc định là `(height, width)` nếu không được chỉ định. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952).

crops_coords_top_left (`tuple[int]`, *optional*, mặc định là (0, 0)) : `crops_coords_top_left` có thể được dùng để tạo ra một hình ảnh trông như đã được "cắt" từ vị trí `crops_coords_top_left` trở xuống. Các hình ảnh đẹp, được căn giữa tốt thường đạt được bằng cách đặt `crops_coords_top_left` thành (0, 0). Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952).

target_size (`tuple[int]`, *optional*, mặc định là (1024, 1024)) : Trong hầu hết các trường hợp, `target_size` nên được đặt thành chiều cao và chiều rộng mong muốn của hình ảnh được tạo. Nếu không được chỉ định, giá trị mặc định sẽ là `(height, width)`. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952).

negative_original_size (`tuple[int]`, *optional*, mặc định là (1024, 1024)) : Để điều kiện âm quá trình tạo dựa trên độ phân giải hình ảnh cụ thể. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952). Để biết thêm thông tin, hãy tham khảo luồng vấn đề này: https://github.com/huggingface/diffusers/issues/4208.

negative_crops_coords_top_left (`tuple[int]`, *optional*, mặc định là (0, 0)) : Để điều kiện âm quá trình tạo dựa trên tọa độ cắt cụ thể. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952). Để biết thêm thông tin, hãy tham khảo luồng vấn đề này: https://github.com/huggingface/diffusers/issues/4208.

negative_target_size (`tuple[int]`, *optional*, mặc định là (1024, 1024)) : Để điều kiện âm quá trình tạo dựa trên độ phân giải ảnh mục tiêu. Trong hầu hết các trường hợp, nó nên giống với `target_size`. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952). Để biết thêm thông tin, hãy tham khảo luồng issue này: https://github.com/huggingface/diffusers/issues/4208.

aesthetic_score (`float`, *tuỳ chọn*, mặc định là 6.0) : Được dùng để mô phỏng điểm thẩm mỹ của hình ảnh được tạo ra bằng cách ảnh hưởng đến điều kiện văn bản tích cực. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952).

negative_aesthetic_score (`float`, *tuỳ chọn*, mặc định là 2.5) : Một phần của micro-conditioning trong SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952). Có thể được sử dụng để mô phỏng điểm thẩm mỹ của hình ảnh được tạo ra bằng cách ảnh hưởng đến điều kiện văn bản âm.

guidance_rescale (`float`, *tuỳ chọn*, mặc định là 0.0) : Hệ số rescale guidance từ [Common Diffusion Noise Schedules and Sample Steps are Flawed](https://arxiv.org/pdf/2305.08891.pdf).

clip_skip (`int`, *optional*) : Số lượng lớp cần bỏ qua từ CLIP khi tính toán các prompt embeddings. Giá trị 1 có nghĩa là đầu ra của lớp trước lớp cuối cùng sẽ được sử dụng để tính toán các prompt embeddings.

callback_on_step_end (`Callable`, `PipelineCallback`, `MultiPipelineCallbacks`, *optional*) : Một hàm hoặc một lớp con của `PipelineCallback` hoặc `MultiPipelineCallbacks` được gọi vào cuối mỗi bước khử nhiễu trong quá trình suy luận, với các đối số sau: `callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict)`. `callback_kwargs` sẽ bao gồm một danh sách tất cả các tensor như được chỉ định bởi `callback_on_step_end_tensor_inputs`.

callback_on_step_end_tensor_inputs (`list`, *optional*) : Danh sách các đầu vào tensor cho hàm `callback_on_step_end`. Các tensor được chỉ định trong danh sách sẽ được truyền dưới dạng tham số `callback_kwargs`. Bạn chỉ có thể bao gồm các biến được liệt kê trong thuộc tính `._callback_tensor_inputs` của lớp pipeline của bạn.

**Trả về:** `~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput` hoặc `tuple`

`~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput` nếu `return_dict` là True, ngược lại là một `tuple. `tuple. Khi trả về một tuple, phần tử đầu tiên là một danh sách chứa các hình ảnh đã tạo.

Hàm được gọi khi gọi pipeline cho việc sinh.

Ví dụ:
```py
>>> 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[[diffusers.StableDiffusionXLInpaintPipeline.encode_prompt]]

```python
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)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_inpaint.py#L405)

**Tham số:**

prompt (`str` hoặc `list[str]`, *tùy chọn*) : prompt cần được mã hóa

prompt_2 (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt cần được gửi đến `tokenizer_2` và `text_encoder_2`. Nếu không được định nghĩa, `prompt` sẽ được sử dụng cho cả hai text-encoder

device : (`torch.device`): thiết bị torch

num_images_per_prompt (`int`) : số lượng hình ảnh cần được tạo cho mỗi prompt

do_classifier_free_guidance (`bool`) : có sử dụng classifier free guidance hay không

negative_prompt (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt không được dùng để hướng dẫn việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền `negative_prompt_embeds` thay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu `guidance_scale` nhỏ hơn `1`).

negative_prompt_2 (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt không dùng để hướng dẫn tạo ảnh, sẽ được gửi đến `tokenizer_2` và `text_encoder_2`. Nếu không được định nghĩa, `negative_prompt` sẽ được sử dụng cho cả hai text-encoder

prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các vector nhúng văn bản đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, các vector nhúng văn bản sẽ được tạo từ đối số đầu vào `prompt`.

negative_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các vector nhúng văn bản âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vào `negative_prompt`.

pooled_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các embedding văn bản đã được pool sẵn. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, các embedding văn bản đã pool sẽ được tạo từ đối số đầu vào `prompt`.

negative_pooled_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các embedding văn bản pooled âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, pooled negative_prompt_embeds sẽ được tạo từ đối số đầu vào `negative_prompt`.

lora_scale (`float`, *tuỳ chọn*) : Một hệ số lora sẽ được áp dụng cho tất cả các lớp LoRA của text encoder nếu các lớp LoRA được nạp.

clip_skip (`int`, *optional*) : Số lượng lớp cần bỏ qua từ CLIP khi tính toán các prompt embeddings. Giá trị 1 có nghĩa là đầu ra của lớp trước lớp cuối cùng sẽ được sử dụng để tính toán các prompt embeddings.

Mã hóa prompt thành các trạng thái ẩn của text encoder.

#### get_guidance_scale_embedding[[diffusers.StableDiffusionXLInpaintPipeline.get_guidance_scale_embedding]]

```python
get_guidance_scale_embedding(w: Tensor, embedding_dim: int = 512, dtype: dtype = torch.float32)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_inpaint.py#L1011)

**Tham số:**

w (`torch.Tensor`) : Tạo các vector nhúng với thang độ dẫn hướng được chỉ định để sau đó làm phong phú các nhúng bước thời gian.

embedding_dim (`int`, *tuỳ chọn*, mặc định là 512) : Kích thước của các embedding cần tạo.

dtype (`torch.dtype`, *tùy chọn*, mặc định là `torch.float32`) : Kiểu dữ liệu của các embedding được tạo ra.

**Trả về:** `torch.Tensor`

Các vector nhúng có hình dạng `(len(w), embedding_dim)`.

Xem https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298

