# LEDITS++

  

LEDITS++ được đề xuất trong [LEDITS++: Limitless Image Editing using Text-to-Image Models](https://huggingface.co/papers/2311.16711) bởi Manuel Brack, Felix Friedrich, Katharina Kornmeier, Linoy Tsaban, Patrick Schramowski, Kristian Kersting, Apolinário Passos.

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

*Các mô hình khuếch tán từ văn bản sang hình ảnh gần đây ngày càng thu hút sự quan tâm nhờ khả năng đáng kinh ngạc trong việc tạo ra các hình ảnh có độ trung thực cao chỉ từ đầu vào văn bản. Các nỗ lực nghiên cứu tiếp theo nhằm khai thác và ứng dụng khả năng của chúng vào việc chỉnh sửa hình ảnh thực tế. Tuy nhiên, các phương pháp từ hình ảnh sang hình ảnh hiện có thường kém hiệu quả, thiếu chính xác và có tính linh hoạt hạn chế. Chúng hoặc đòi hỏi quá trình tinh chỉnh tốn thời gian, hoặc lệch khỏi hình ảnh đầu vào một cách không cần thiết, và/hoặc thiếu hỗ trợ cho nhiều chỉnh sửa đồng thời. Để giải quyết những vấn đề này, chúng tôi giới thiệu LEDITS++, một kỹ thuật thao tác hình ảnh bằng văn bản hiệu quả nhưng linh hoạt và chính xác. Phương pháp đảo ngược mới của LEDITS++ không yêu cầu tinh chỉnh hay tối ưu hóa và tạo ra kết quả có độ trung thực cao chỉ với một vài bước khuếch tán. Thứ hai, phương pháp luận của chúng tôi hỗ trợ nhiều chỉnh sửa đồng thời và không phụ thuộc vào kiến trúc. Thứ ba, chúng tôi sử dụng một kỹ thuật che mờ ẩn mới để hạn chế các thay đổi trong các vùng hình ảnh liên quan. Chúng tôi đề xuất bộ chuẩn đánh giá TEdBench++ mới như một phần của quá trình đánh giá toàn diện của mình. Kết quả của chúng tôi chứng minh khả năng của LEDITS++ và những cải tiến của nó so với các phương pháp trước đó. Trang dự án có sẵn tại https://leditsplusplus-project.static.hf.space .*

> [!TIP]
> Bạn có thể tìm thêm thông tin về LEDITS++ trên [trang dự án](https://leditsplusplus-project.static.hf.space/index.html) và thử nghiệm tại [demo](https://huggingface.co/spaces/editing-images/leditsplusplus).

> [!WARNING]
> Do một số vấn đề về tương thích ngược với cách triển khai [DPMSolverMultistepScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler) hiện tại của diffusers, cách triển khai LEdits++ này không còn có thể đảm bảo đảo ngược hoàn hảo. Vấn đề này khó có khả năng gây ra bất kỳ tác động đáng chú ý nào trong các trường hợp sử dụng thực tế. Tuy nhiên, chúng tôi cung cấp một cách triển khai thay thế đảm bảo đảo ngược hoàn hảo trong một [repo GitHub](https://github.com/ml-research/ledits_pp) riêng.

Chúng tôi cung cấp hai pipeline riêng biệt dựa trên các mô hình được huấn luyện trước khác nhau.

## LEditsPPPipelineStableDiffusion[[diffusers.LEditsPPPipelineStableDiffusion]]

#### diffusers.LEditsPPPipelineStableDiffusion[[diffusers.LEditsPPPipelineStableDiffusion]]

```python
diffusers.LEditsPPPipelineStableDiffusion(vae: AutoencoderKL, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, unet: UNet2DConditionModel, scheduler: diffusers.schedulers.scheduling_ddim.DDIMScheduler | diffusers.schedulers.scheduling_dpmsolver_multistep.DPMSolverMultistepScheduler, safety_checker: StableDiffusionSafetyChecker, feature_extractor: CLIPImageProcessorPil, requires_safety_checker: bool = True)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/ledits_pp/pipeline_leditspp_stable_diffusion.py#L269)

**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](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/clip#transformers.CLIPTextModel)) : Bộ mã hóa văn bản đóng băng. Stable Diffusion 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).

tokenizer ([CLIPTokenizer](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/clip#transformers.CLIPTokenizer)) : Tokenizer của 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 ([DPMSolverMultistepScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler) hoặc [DDIMScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/ddim#diffusers.DDIMScheduler)) : 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à [DPMSolverMultistepScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler) hoặc [DDIMScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/ddim#diffusers.DDIMScheduler). Nếu một scheduler khác được truyền vào, nó sẽ tự động được đặt thành [DPMSolverMultistepScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler).

safety_checker (`StableDiffusionSafetyChecker`) : Module phân loại ước tính xem hình ảnh được tạo ra có thể bị coi là khiêu khích hoặc gây hại hay không. Vui lòng tham khảo [model card](https://huggingface.co/CompVis/stable-diffusion-v1-4) để biết thêm chi tiết.

feature_extractor ([CLIPImageProcessor](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/clip#transformers.CLIPImageProcessor)) : Mô hình trích xuất đặc trưng từ các hình ảnh được tạo ra để sử dụng làm đầu vào cho `safety_checker`.

Pipeline để chỉnh sửa ảnh văn bản sử dụng LEDits++ với Stable Diffusion.

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

#### __call__[[diffusers.LEditsPPPipelineStableDiffusion.__call__]]

```python
__call__(negative_prompt: str | list[str] | None = None, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, output_type: str | None = 'pil', return_dict: bool = True, editing_prompt: str | list[str] | None = None, editing_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, reverse_editing_direction: bool | list[bool] | None = False, edit_guidance_scale: float | list[float] | None = 5, edit_warmup_steps: int | list[int] | None = 0, edit_cooldown_steps: int | list[int] | None = None, edit_threshold: float | list[float] | None = 0.9, user_mask: typing.Optional[torch.Tensor] = None, sem_guidance: list[torch.Tensor] | None = None, use_cross_attn_mask: bool = False, use_intersect_mask: bool = True, attn_store_steps: list[int] | None = [], store_averaged_over_steps: bool = True, cross_attention_kwargs: dict[str, typing.Any] | None = None, guidance_rescale: float = 0.0, clip_skip: int | None = None, callback_on_step_end: typing.Optional[typing.Callable[[int, int], 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/ledits_pp/pipeline_leditspp_stable_diffusion.py#L720)

**Tham số:**

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. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu `guidance_scale` nhỏ hơn `1`).

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.

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 [LEditsPPDiffusionPipelineOutput](/docs/diffusers/v0.43.0/vi/api/pipelines/ledits_pp#diffusers.pipelines.LEditsPPDiffusionPipelineOutput) thay vì một tuple thông thường hay không.

editing_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. Ảnh được tái tạo bằng cách đặt `editing_prompt = None`. Hướng dẫn của prompt nên được chỉ định thông qua `reverse_editing_direction`.

editing_prompt_embeds (`torch.Tensor>`, *tùy chọn*) : Các embedding đã tính trước để sử dụng cho việc hướng dẫn tạo ảnh. Hướng dẫn của embedding nên được chỉ định thông qua `reverse_editing_direction`.

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 (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`.

reverse_editing_direction (`bool` hoặc `list[bool]`, *tùy chọn*, mặc định là `False`) : Xác định xem prompt tương ứng trong `editing_prompt` có nên được tăng lên hay giảm xuống không.

edit_guidance_scale (`float` hoặc `list[float]`, *tuỳ chọn*, mặc định là 5) : Thang độ dẫn hướng cho việc tạo ảnh. Nếu được cung cấp dưới dạng danh sách, các giá trị phải tương ứng với `editing_prompt`. `edit_guidance_scale` được định nghĩa là `s_e` của phương trình 12 trong [Bài báo LEDITS++](https://huggingface.co/papers/2301.12247).

edit_warmup_steps (`float` hoặc `list[float]`, *tuỳ chọn*, mặc định là 10) : Số bước khuếch tán (cho mỗi prompt) mà hướng dẫn sẽ không được áp dụng.

edit_cooldown_steps (`float` hoặc `list[float]`, *tùy chọn*, mặc định là `None`) : Số bước khuếch tán (cho mỗi prompt) sau đó hướng dẫn sẽ không còn được áp dụng nữa.

edit_threshold (`float` hoặc `list[float]`, *tuỳ chọn*, mặc định là 0.9) : Ngưỡng che phủ của guidance. Ngưỡng này nên tỷ lệ thuận với vùng ảnh bị thay đổi. 'edit_threshold' được định nghĩa là 'λ' của phương trình 12 trong [Bài báo LEDITS++](https://huggingface.co/papers/2301.12247).

user_mask (`torch.Tensor`, *tùy chọn*) : Mặt nạ do người dùng cung cấp để kiểm soát quá trình chỉnh sửa tốt hơn. Điều này hữu ích khi các mặt nạ ẩn của LEDITS++ không đáp ứng được sở thích của người dùng.

sem_guidance (`list[torch.Tensor]`, *tùy chọn*) : danh sách các vector hướng dẫn đã được tạo trước để áp dụng trong quá trình sinh. Độ dài của danh sách phải tương ứng với `num_inference_steps`.

use_cross_attn_mask (`bool`, mặc định là `False`) : Xác định có sử dụng mặt nạ chú ý chéo (cross-attention masks) hay không. Mặt nạ chú ý chéo luôn được sử dụng khi use_intersect_mask được đặt thành true. Mặt nạ chú ý chéo được định nghĩa là 'M^1' của phương trình 12 trong [bài báo LEDITS++](https://huggingface.co/papers/2311.16711).

use_intersect_mask (`bool`, mặc định là `True`) : Xác định xem thuật ngữ che mặt nạ có được tính toán dưới dạng giao của các mặt nạ chú ý chéo và các mặt nạ suy ra từ ước lượng nhiễu hay không. Mặt nạ chú ý chéo được định nghĩa là 'M^1' và các mặt nạ suy ra từ ước lượng nhiễu được định nghĩa là 'M^2' của phương trình 12 trong [bài báo LEDITS++](https://huggingface.co/papers/2311.16711).

attn_store_steps (`list[int]`, *tùy chọn*) : Các bước mà bản đồ chú ý được lưu trữ trong AttentionStore. Chỉ dùng cho mục đích trực quan hóa.

store_averaged_over_steps (`bool`, mặc định là `True`) : Xác định xem các bản đồ chú ý (attention maps) cho 'attn_store_steps' có được lưu trữ dưới dạng trung bình trên các bước khuếch tán (diffusion steps) hay không. Nếu là False, các bản đồ chú ý cho từng bước sẽ được lưu trữ riêng biệt. Chỉ dùng cho mục đích trực quan hóa.

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 trong [`self.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 từ [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.

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`, *tùy chọn*) : Một hàm được gọi vào cuối mỗi bước khử nhiễu trong quá trình suy luận. Hàm này được gọi 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ề:** [LEditsPPDiffusionPipelineOutput](/docs/diffusers/v0.43.0/vi/api/pipelines/ledits_pp#diffusers.pipelines.LEditsPPDiffusionPipelineOutput) hoặc `tuple`

[LEditsPPDiffusionPipelineOutput](/docs/diffusers/v0.43.0/vi/api/pipelines/ledits_pp#diffusers.pipelines.LEditsPPDiffusionPipelineOutput) if `return_dict` is True, otherwise a `tuple. When returning a tuple, the first element is a list with the generated images, and the second element is a list of `bool`s denoting whether the corresponding generated image likely represents "not-safe-for-work" (nsfw) content, according to the `safety_checker`.

Hàm gọi pipeline để chỉnh sửa. Phương thức [invert()](/docs/diffusers/v0.43.0/vi/api/pipelines/ledits_pp#diffusers.LEditsPPPipelineStableDiffusion.invert) phải được gọi trước đó. Các chỉnh sửa sẽ luôn được thực hiện cho hình ảnh đã đảo ngược gần nhất.

Ví dụ:
```py
>>> import torch

>>> from diffusers import LEditsPPPipelineStableDiffusion
>>> from diffusers.utils import load_image

>>> pipe = LEditsPPPipelineStableDiffusion.from_pretrained(
...     "stable-diffusion-v1-5/stable-diffusion-v1-5", variant="fp16", torch_dtype=torch.float16
... )
>>> pipe.vae.enable_tiling()
>>> pipe = pipe.to("cuda")

>>> img_url = "https://www.aiml.informatik.tu-darmstadt.de/people/mbrack/cherry_blossom.png"
>>> image = load_image(img_url).resize((512, 512))

>>> _ = pipe.invert(image=image, num_inversion_steps=50, skip=0.1)

>>> edited_image = pipe(
...     editing_prompt=["cherry blossom"], edit_guidance_scale=10.0, edit_threshold=0.75
... ).images[0]
```

#### invert[[diffusers.LEditsPPPipelineStableDiffusion.invert]]

```python
invert(image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]], source_prompt: str = '', source_guidance_scale: float = 3.5, num_inversion_steps: int = 30, skip: float = 0.15, generator: typing.Optional[torch.Generator] = None, cross_attention_kwargs: dict[str, typing.Any] | None = None, clip_skip: int | None = None, height: int | None = None, width: int | None = None, resize_mode: str | None = 'default', crops_coords: tuple[int, int, int, int] | None = None)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/ledits_pp/pipeline_leditspp_stable_diffusion.py#L1223)

**Tham số:**

image (`PipelineImageInput`) : Đầu vào cho hình ảnh cần chỉnh sửa. Nhiều hình ảnh đầu vào phải có cùng tỷ lệ khung hình.

source_prompt (`str`, mặc định là `""`) : Prompt mô tả hình ảnh đầu vào sẽ được sử dụng để hướng dẫn trong quá trình đảo ngược. Việc hướng dẫn sẽ bị vô hiệu hóa nếu `source_prompt` là `""`.

source_guidance_scale (`float`, mặc định là `3.5`) : Độ mạnh của hướng dẫn trong quá trình đảo ngược.

num_inversion_steps (`int`, mặc định là `30`) : Tổng số bước đảo ngược được thực hiện sau khi loại bỏ `skip` bước ban đầu.

skip (`float`, mặc định là `0.15`) : Phần của các bước ban đầu sẽ bị bỏ qua cho quá trình đảo ngược và tạo sinh tiếp theo. Các giá trị thấp hơn sẽ dẫn đến những thay đổi mạnh hơn đối với hình ảnh đầu vào. `skip` phải nằm trong khoảng từ `0` đến `1`.

generator (`torch.Generator`, *tùy chọn*) : Một [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html) để làm cho phép đảo ngược mang tính tất định.

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 trong [`self.processor`](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).

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.

height (`int`, *tuỳ chọn*, mặc định là `None`) : Chiều cao của ảnh đã tiền xử lý. Nếu là `None`, sẽ sử dụng `get_default_height_width()` để lấy chiều cao mặc định.

width (`int`, *optional*`, defaults to `None`) : The width in preprocessed. If `None`, will use get_default_height_width()` to get the default width.

resize_mode (`str`, *tùy chọn*, mặc định là `default`) : Chế độ thay đổi kích thước, có thể là `default` hoặc `fill`. Nếu là `default`, sẽ thay đổi kích thước ảnh để vừa với chiều rộng và chiều cao được chỉ định, và có thể không giữ nguyên tỷ lệ khung hình gốc. Nếu là `fill`, sẽ thay đổi kích thước ảnh để vừa với chiều rộng và chiều cao được chỉ định, giữ nguyên tỷ lệ khung hình, sau đó căn giữa ảnh trong các kích thước đó, lấp đầy phần trống bằng dữ liệu từ ảnh. Nếu là `crop`, sẽ thay đổi kích thước ảnh để vừa với chiều rộng và chiều cao được chỉ định, giữ nguyên tỷ lệ khung hình, sau đó căn giữa ảnh trong các kích thước đó, cắt bỏ phần thừa. Lưu ý rằng resize_mode `fill` và `crop` chỉ được hỗ trợ cho đầu vào ảnh PIL.

crops_coords (`list[tuple[int, int, int, int]]`, *tùy chọn*, mặc định là `None`) : Tọa độ cắt cho từng hình ảnh trong lô. Nếu là `None`, sẽ không cắt hình ảnh.

**Trả về:** [LEditsPPInversionPipelineOutput](/docs/diffusers/v0.43.0/vi/api/pipelines/ledits_pp#diffusers.pipelines.LEditsPPInversionPipelineOutput)

Đầu ra sẽ chứa ảnh đầu vào đã được thay đổi kích thước và kết quả tái tạo VAE tương ứng.

Hàm cho pipeline đảo ngược hình ảnh như được mô tả trong [Bài báo LEDITS++](https://huggingface.co/papers/2301.12247). Nếu scheduler được đặt thành [DDIMScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/ddim#diffusers.DDIMScheduler), quá trình đảo ngược do [edit-friendly DPDM](https://huggingface.co/papers/2304.06140) đề xuất sẽ được thực hiện thay thế.

#### encode_prompt[[diffusers.LEditsPPPipelineStableDiffusion.encode_prompt]]

```python
encode_prompt(device, num_images_per_prompt, enable_edit_guidance, negative_prompt = None, editing_prompt = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, editing_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/ledits_pp/pipeline_leditspp_stable_diffusion.py#L521)

**Tham số:**

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

enable_edit_guidance (`bool`) : có thực hiện chỉnh sửa hay tái tạo lại ảnh đầu vào 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`).

editing_prompt (`str` hoặc `list[str]`, *tùy chọn*) : Prompt chỉnh sửa cần được mã hóa. Nếu không được định nghĩa, bạn phải truyền `editing_prompt_embeds` thay thế.

editing_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`.

lora_scale (`float`, *tuỳ chọn*) : Thang 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.

## LEditsPPPipelineStableDiffusionXL[[diffusers.LEditsPPPipelineStableDiffusionXL]]

#### diffusers.LEditsPPPipelineStableDiffusionXL[[diffusers.LEditsPPPipelineStableDiffusionXL]]

```python
diffusers.LEditsPPPipelineStableDiffusionXL(vae: AutoencoderKL, text_encoder: CLIPTextModel, text_encoder_2: CLIPTextModelWithProjection, tokenizer: CLIPTokenizer, tokenizer_2: CLIPTokenizer, unet: UNet2DConditionModel, scheduler: diffusers.schedulers.scheduling_dpmsolver_multistep.DPMSolverMultistepScheduler | diffusers.schedulers.scheduling_ddim.DDIMScheduler, 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/ledits_pp/pipeline_leditspp_stable_diffusion_xl.py#L273)

**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](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/clip#transformers.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](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/clip#transformers.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](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/clip#transformers.CLIPTokenizer)) : Tokenizer của lớp [CLIPTokenizer](https://huggingface.co/docs/transformers/v4.21.0/en/model_doc/clip#transformers.CLIPTokenizer).

tokenizer_2 ([CLIPTokenizer](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/clip#transformers.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 ([DPMSolverMultistepScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler) hoặc [DDIMScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/ddim#diffusers.DDIMScheduler)) : 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à [DPMSolverMultistepScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler) hoặc [DDIMScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/ddim#diffusers.DDIMScheduler). Nếu một scheduler khác được truyền vào, nó sẽ tự động được đặt thành [DPMSolverMultistepScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler).

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 để chỉnh sửa hình ảnh từ văn bản sử dụng LEDits++ với Stable Diffusion XL.

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

Ngoài ra, pipeline kế thừa các phương thức nạp sau:
- *LoRA*: [LEditsPPPipelineStableDiffusionXL.load_lora_weights()](/docs/diffusers/v0.43.0/vi/api/loaders/lora#diffusers.loaders.StableDiffusionXLLoraLoaderMixin.load_lora_weights)
- *Ckpt*: [loaders.FromSingleFileMixin.from_single_file()](/docs/diffusers/v0.43.0/vi/api/loaders/single_file#diffusers.loaders.FromSingleFileMixin.from_single_file)

cũng như các phương pháp lưu trữ sau:
- *LoRA*: `loaders.StableDiffusionXLPipeline.save_lora_weights`

#### __call__[[diffusers.LEditsPPPipelineStableDiffusionXL.__call__]]

```python
__call__(denoising_end: float | None = None, negative_prompt: str | list[str] | None = None, negative_prompt_2: str | list[str] | None = None, negative_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, output_type: str | None = 'pil', return_dict: bool = True, cross_attention_kwargs: dict[str, typing.Any] | None = None, guidance_rescale: float = 0.0, crops_coords_top_left: tuple[int, int] = (0, 0), target_size: tuple[int, int] | None = None, editing_prompt: str | list[str] | None = None, editing_prompt_embeddings: typing.Optional[torch.Tensor] = None, editing_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, reverse_editing_direction: bool | list[bool] | None = False, edit_guidance_scale: float | list[float] | None = 5, edit_warmup_steps: int | list[int] | None = 0, edit_cooldown_steps: int | list[int] | None = None, edit_threshold: float | list[float] | None = 0.9, sem_guidance: list[torch.Tensor] | None = None, use_cross_attn_mask: bool = False, use_intersect_mask: bool = False, user_mask: typing.Optional[torch.Tensor] = None, attn_store_steps: list[int] | None = [], store_averaged_over_steps: bool = True, clip_skip: int | None = None, callback_on_step_end: typing.Optional[typing.Callable[[int, int], 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/ledits_pp/pipeline_leditspp_stable_diffusion_xl.py#L782)

**Tham số:**

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 (scheduler) 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ư đã được trình bày chi tiết trong [**Refining the Image

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

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

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.

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.7) : 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.

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 ra. Nếu không được chỉ định, giá trị mặc định sẽ là `(width, height)`. Đâ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).

editing_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. Ảnh được tái tạo bằng cách đặt `editing_prompt = None`. Hướng dẫn của prompt nên được chỉ định thông qua `reverse_editing_direction`.

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

editing_pooled_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các embedding văn bản edit đã được pool sẵn. Có thể 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, editing_prompt_embeddings sẽ được tạo từ đối số đầu vào `editing_prompt`.

reverse_editing_direction (`bool` hoặc `list[bool]`, *tùy chọn*, mặc định là `False`) : Xác định xem prompt tương ứng trong `editing_prompt` có nên được tăng lên hay giảm xuống không.

edit_guidance_scale (`float` hoặc `list[float]`, *tuỳ chọn*, mặc định là 5) : Thang độ dẫn hướng cho việc tạo ảnh. Nếu được cung cấp dưới dạng danh sách, các giá trị phải tương ứng với `editing_prompt`. `edit_guidance_scale` được định nghĩa là `s_e` của phương trình 12 trong [Bài báo LEDITS++](https://huggingface.co/papers/2301.12247).

edit_warmup_steps (`float` hoặc `list[float]`, *tuỳ chọn*, mặc định là 10) : Số bước khuếch tán (cho mỗi prompt) mà không áp dụng hướng dẫn.

edit_cooldown_steps (`float` hoặc `list[float]`, *tuỳ chọn*, mặc định là `None`) : Số bước khuếch tán (cho mỗi prompt) sau đó hướng dẫn không còn được áp dụng nữa.

edit_threshold (`float` hoặc `list[float]`, *tuỳ chọn*, mặc định là 0.9) : Ngưỡng che phủ của guidance. Ngưỡng này nên tỷ lệ thuận với vùng ảnh bị thay đổi. 'edit_threshold' được định nghĩa là 'λ' của phương trình 12 trong [Bài báo LEDITS++](https://huggingface.co/papers/2301.12247).

sem_guidance (`list[torch.Tensor]`, *tùy chọn*) : danh sách các vector hướng dẫn đã được tạo trước để áp dụng trong quá trình sinh. Độ dài của danh sách phải tương ứng với `num_inference_steps`.

use_cross_attn_mask : Xác định có sử dụng mặt nạ cross-attention hay không. Mặt nạ cross-attention luôn được sử dụng khi use_intersect_mask được đặt thành true. Mặt nạ cross-attention được định nghĩa là 'M^1' của phương trình 12 trong [bài báo LEDITS++](https://huggingface.co/papers/2311.16711).

use_intersect_mask : Xác định xem thuật toán che mặt (masking term) có được tính toán dưới dạng giao của các mặt nạ chú ý chéo (cross-attention masks) và các mặt nạ suy ra từ ước lượng nhiễu hay không. Các mặt nạ chú ý chéo được định nghĩa là 'M^1' và các mặt nạ suy ra từ ước lượng nhiễu được định nghĩa là 'M^2' của phương trình 12 trong [bài báo LEDITS++](https://huggingface.co/papers/2311.16711).

user_mask : Mặt nạ do người dùng cung cấp để kiểm soát tốt hơn quá trình chỉnh sửa. Điều này hữu ích khi các mặt nạ ẩn của LEDITS++ không đáp ứng được sở thích của người dùng.

attn_store_steps : Các bước mà bản đồ chú ý được lưu trữ trong AttentionStore. Chỉ dùng cho mục đích trực quan hóa.

store_averaged_over_steps : Xác định xem các bản đồ chú ý cho 'attn_store_steps' có được lưu trữ dưới dạng trung bình trên các bước khuếch tán hay không. Nếu là False, các bản đồ chú ý cho từng bước sẽ được lưu trữ riêng biệt. Chỉ dùng cho mục đích trực quan hóa.

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`, *tùy chọn*) : Một hàm được gọi vào cuối mỗi bước khử nhiễu trong quá trình suy luận. Hàm này được gọi 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ề:** [LEditsPPDiffusionPipelineOutput](/docs/diffusers/v0.43.0/vi/api/pipelines/ledits_pp#diffusers.pipelines.LEditsPPDiffusionPipelineOutput) hoặc `tuple`

[LEditsPPDiffusionPipelineOutput](/docs/diffusers/v0.43.0/vi/api/pipelines/ledits_pp#diffusers.pipelines.LEditsPPDiffusionPipelineOutput) 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 gọi pipeline để chỉnh sửa. Phương thức [invert()](/docs/diffusers/v0.43.0/vi/api/pipelines/ledits_pp#diffusers.LEditsPPPipelineStableDiffusionXL.invert) phải được gọi trước đó. Các chỉnh sửa sẽ luôn được thực hiện cho hình ảnh đã đảo ngược gần nhất.

Ví dụ:
```py
>>> import torch

>>> from diffusers import LEditsPPPipelineStableDiffusionXL
>>> from diffusers.utils import load_image

>>> pipe = LEditsPPPipelineStableDiffusionXL.from_pretrained(
...     "stabilityai/stable-diffusion-xl-base-1.0", variant="fp16", torch_dtype=torch.float16
... )
>>> pipe.vae.enable_tiling()
>>> pipe = pipe.to("cuda")

>>> img_url = "https://www.aiml.informatik.tu-darmstadt.de/people/mbrack/tennis.jpg"
>>> image = load_image(img_url).resize((1024, 1024))

>>> _ = pipe.invert(image=image, num_inversion_steps=50, skip=0.2)

>>> edited_image = pipe(
...     editing_prompt=["tennis ball", "tomato"],
...     reverse_editing_direction=[True, False],
...     edit_guidance_scale=[5.0, 10.0],
...     edit_threshold=[0.9, 0.85],
... ).images[0]
```

#### invert[[diffusers.LEditsPPPipelineStableDiffusionXL.invert]]

```python
invert(image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]], source_prompt: str = '', source_guidance_scale = 3.5, negative_prompt: str = None, negative_prompt_2: str = None, num_inversion_steps: int = 50, skip: float = 0.15, generator: typing.Optional[torch.Generator] = None, crops_coords_top_left: tuple[int, int] = (0, 0), num_zero_noise_steps: int = 3, cross_attention_kwargs: dict[str, typing.Any] | None = None, height: int | None = None, width: int | None = None, resize_mode: str | None = 'default', crops_coords: tuple[int, int, int, int] | None = None)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/ledits_pp/pipeline_leditspp_stable_diffusion_xl.py#L1414)

**Tham số:**

image (`PipelineImageInput`) : Đầu vào cho hình ảnh cần chỉnh sửa. Nhiều hình ảnh đầu vào phải có cùng tỷ lệ khung hình.

source_prompt (`str`, mặc định là `""`) : Prompt mô tả hình ảnh đầu vào sẽ được sử dụng để hướng dẫn trong quá trình đảo ngược. Việc hướng dẫn sẽ bị vô hiệu hóa nếu `source_prompt` là `""`.

source_guidance_scale (`float`, mặc định là `3.5`) : Độ mạnh của hướng dẫn trong quá trình đảo ngược.

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_inversion_steps (`int`, mặc định là `50`) : Tổng số bước đảo ngược được thực hiện sau khi loại bỏ `skip` bước ban đầu.

skip (`float`, mặc định là `0.15`) : Phần của các bước ban đầu sẽ bị bỏ qua cho quá trình đảo ngược và tạo sinh tiếp theo. Các giá trị thấp hơn sẽ dẫn đến những thay đổi mạnh hơn đối với hình ảnh đầu vào. `skip` phải nằm trong khoảng từ `0` đến `1`.

generator (`torch.Generator`, *tùy chọn*) : Một [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html) để làm cho phép đảo ngược mang tính tất định.

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).

num_zero_noise_steps (`int`, mặc định là `3`) : Số bước khuếch tán cuối cùng sẽ không tái tạo nhiễu cho hình ảnh hiện tại. Nếu không có bước nào được đặt bằng không, SD-XL kết hợp với [DPMSolverMultistepScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler) sẽ tạo ra các lỗi nhiễu.

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).

**Trả về:** [LEditsPPInversionPipelineOutput](/docs/diffusers/v0.43.0/vi/api/pipelines/ledits_pp#diffusers.pipelines.LEditsPPInversionPipelineOutput)

Đầu ra sẽ chứa ảnh đầu vào đã được thay đổi kích thước và kết quả tái tạo VAE tương ứng.

Hàm cho pipeline đảo ngược hình ảnh như được mô tả trong [Bài báo LEDITS++](https://huggingface.co/papers/2301.12247). Nếu scheduler được đặt thành [DDIMScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/ddim#diffusers.DDIMScheduler), quá trình đảo ngược do [edit-friendly DPDM](https://huggingface.co/papers/2304.06140) đề xuất sẽ được thực hiện thay thế.

#### encode_prompt[[diffusers.LEditsPPPipelineStableDiffusionXL.encode_prompt]]

```python
encode_prompt(device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, negative_prompt: str | None = None, negative_prompt_2: str | None = None, negative_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, enable_edit_guidance: bool = True, editing_prompt: str | None = None, editing_prompt_embeds: typing.Optional[torch.Tensor] = None, editing_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/ledits_pp/pipeline_leditspp_stable_diffusion_xl.py#L399)

**Tham số:**

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

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 tạo ảnh. Nếu không được định nghĩa, bạn phải truyền `negative_prompt_embeds` thay thế.

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

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

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.

enable_edit_guidance (`bool`) : Có hướng dẫn theo một prompt chỉnh sửa hay không.

editing_prompt (`str` hoặc `list[str]`, *tùy chọn*) : Prompt chỉnh sửa cần được mã hóa. Nếu không được định nghĩa và 'enable_edit_guidance' là True, bạn phải truyền `editing_prompt_embeds` thay thế.

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

editing_pooled_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các embedding văn bản pooled đã được tạo trước cho chỉnh sửa. Có thể được sử dụng để dễ dàng tinh 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 editing_pooled_prompt_embeds sẽ được tạo từ đối số đầu vào `editing_prompt`.

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

#### get_guidance_scale_embedding[[diffusers.LEditsPPPipelineStableDiffusionXL.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/ledits_pp/pipeline_leditspp_stable_diffusion_xl.py#L696)

**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

## LEditsPPDiffusionPipelineOutput[[diffusers.pipelines.LEditsPPDiffusionPipelineOutput]]

#### diffusers.pipelines.LEditsPPDiffusionPipelineOutput[[diffusers.pipelines.LEditsPPDiffusionPipelineOutput]]

```python
diffusers.pipelines.LEditsPPDiffusionPipelineOutput(images: list[PIL.Image.Image] | numpy.ndarray, nsfw_content_detected: list[bool] | None)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/ledits_pp/pipeline_output.py#L10)

**Tham số:**

images (`list[PIL.Image.Image]` hoặc `np.ndarray`) : danh sách các hình ảnh PIL đã khử nhiễu có độ dài `batch_size` hoặc mảng NumPy có hình dạng `(batch_size, height, width, num_channels)`.

nsfw_content_detected (`list[bool]`) : danh sách cho biết hình ảnh tương ứng có chứa nội dung “không an toàn” (nsfw) hay không, hoặc `None` nếu không thể thực hiện kiểm tra an toàn.

Lớp đầu ra cho các pipeline khuếch tán LEdits++.

## LEditsPPInversionPipelineOutput[[diffusers.pipelines.LEditsPPInversionPipelineOutput]]

#### diffusers.pipelines.LEditsPPInversionPipelineOutput[[diffusers.pipelines.LEditsPPInversionPipelineOutput]]

```python
diffusers.pipelines.LEditsPPInversionPipelineOutput(images: list[PIL.Image.Image] | numpy.ndarray, vae_reconstruction_images: list[PIL.Image.Image] | numpy.ndarray)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/ledits_pp/pipeline_output.py#L28)

**Tham số:**

input_images (`list[PIL.Image.Image]` hoặc `np.ndarray`) : danh sách các ảnh đầu vào đã được cắt và thay đổi kích thước dưới dạng ảnh PIL có độ dài `batch_size` hoặc mảng NumPy có hình dạng ` (batch_size, height, width, num_channels)`.

vae_reconstruction_images (`list[PIL.Image.Image]` hoặc `np.ndarray`) : danh sách các hình ảnh tái tạo VAE của tất cả các hình ảnh đầu vào dưới dạng hình ảnh PIL có độ dài `batch_size` hoặc mảng NumPy có hình dạng ` (batch_size, height, width, num_channels)`.

Lớp đầu ra cho các pipeline khuếch tán LEdits++.

