Diffusers documentation

LEDITS++

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

LEDITS++

LoRA

LEDITS++ được đề xuất trong LEDITS++: Limitless Image Editing using Text-to-Image Models 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 .

Bạn có thể tìm thêm thông tin về LEDITS++ trên trang dự án và thử nghiệm tại demo.

Do một số vấn đề về tương thích ngược với cách triển khai 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 nữa. 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 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

lớp diffusers.LEditsPPPipelineStableDiffusion

< >

( vae: AutoencoderKLtext_encoder: CLIPTextModeltokenizer: CLIPTokenizerunet: UNet2DConditionModelscheduler: diffusers.schedulers.scheduling_ddim.DDIMScheduler | diffusers.schedulers.scheduling_dpmsolver_multistep.DPMSolverMultistepSchedulersafety_checker: StableDiffusionSafetyCheckerfeature_extractor: CLIPImageProcessorPilrequires_safety_checker: bool = True )

Tham số

  • vae (AutoencoderKL) — Mô hình Variational Auto-Encoder (VAE) để mã hóa và giải mã hình ảnh từ và sang các biểu diễn ẩn.
  • text_encoder (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, cụ thể là biến thể clip-vit-large-patch14.
  • tokenizer (CLIPTokenizer) — Tokenizer của lớp CLIPTokenizer.
  • unet (UNet2DConditionModel) — Kiến trúc U-Net có điều kiện để khử nhiễu các latents ảnh đã mã hóa.
  • scheduler (DPMSolverMultistepScheduler hoặc 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 hoặc DDIMScheduler. Nếu một scheduler khác được truyền vào, nó sẽ tự động được đặt thành DPMSolverMultistepScheduler.
  • safety_checker (StableDiffusionSafetyChecker) — Module phân loại ước lượng xem hình ảnh được tạo ra có thể bị coi là khiêu dâm hoặc gây hại hay không. Vui lòng tham khảo model card để biết thêm chi tiết.
  • feature_extractor (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 và được xây dựng dựa trên 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__

< >

( negative_prompt: str | list[str] | None = Nonegenerator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneoutput_type: str | None = 'pil'return_dict: bool = Trueediting_prompt: str | list[str] | None = Noneediting_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonereverse_editing_direction: bool | list[bool] | None = Falseedit_guidance_scale: float | list[float] | None = 5edit_warmup_steps: int | list[int] | None = 0edit_cooldown_steps: int | list[int] | None = Noneedit_threshold: float | list[float] | None = 0.9user_mask: typing.Optional[torch.Tensor] = Nonesem_guidance: list[torch.Tensor] | None = Noneuse_cross_attn_mask: bool = Falseuse_intersect_mask: bool = Trueattn_store_steps: list[int] | None = []store_averaged_over_steps: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Noneguidance_rescale: float = 0.0clip_skip: int | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']**kwargs ) → LEditsPPDiffusionPipelineOutput or tuple

Tham số

  • negative_prompt (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt không dùng để định hướng 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 để đảm bảo quá trình sinh là 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: 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 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 embedding 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 nên được tăng lên hay giảm xuống.
  • edit_guidance_scale (float hoặc list[float], tùy chọn, mặc định là 5) — Thang độ dẫn hướng cho việc tạo hình ả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++.
  • edit_warmup_steps (float hoặc list[float], tùy 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], tùy chọn, mặc định là 0.9) — Ngưỡng che (masking) 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++.
  • user_mask (torch.Tensor, tùy chọn) — 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.
  • sem_guidance (list[torch.Tensor], tùy chọn) — danh sách các vector guidance được tạo trước để áp dụng trong quá trình sinh. Độ dài của danh sách phải khớp 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ạ 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++.
  • use_intersect_mask (bool, mặc định là True) — Xác định xem thuật toán che phủ (masking) có được tính toán dưới dạng giao của các cross-attention mask và các mask suy ra từ ước lượng nhiễu hay không. Cross-attention mask được định nghĩa là ‘M^1’ và các mask suy ra từ ước lượng nhiễu được định nghĩa là ‘M^2’ trong phương trình 12 của bài báo LEDITS++.
  • 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 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 hay không. Nếu False, attention maps 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, nếu được chỉ định, sẽ được truyền đến AttentionProcessor như đã định nghĩa trong self.processor.
  • guidance_rescale (float, tùy chọn, mặc định là 0.0) — Hệ số rescale guidance từ Common Diffusion Noise Schedules and Sample Steps are Flawed. Hệ số rescale guidance nên khắc phục tình trạng phơi sáng quá mức khi sử dụng zero terminal SNR.
  • clip_skip (int, tùy chọn) — Số lượng lớp được bỏ qua từ CLIP khi tính toán các embedding của prompt. Giá trị 1 có nghĩa là đầu ra của lớp trước lớp cuối sẽ được sử dụng để tính toán các embedding của prompt.
  • 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 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 tensor đầu vào 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 hoặc tuple

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 bools 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() 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ụ:

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

đảo ngược

< >

( 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.5num_inversion_steps: int = 30skip: float = 0.15generator: typing.Optional[torch.Generator] = Nonecross_attention_kwargs: dict[str, typing.Any] | None = Noneclip_skip: int | None = Noneheight: int | None = Nonewidth: int | None = Noneresize_mode: str | None = 'default'crops_coords: tuple[int, int, int, int] | None = None ) → LEditsPPInversionPipelineOutput

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ả ảnh đầu vào sẽ được dùng để hướng dẫn trong quá trình đảo ngược. Hướng dẫn sẽ bị tắt nếu source_prompt là "".
  • source_guidance_scale (float, mặc định là 3.5) — Độ mạnh của guidance trong quá trình inversion.
  • 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ác bước ban đầu sẽ bị bỏ qua cho quá trình đảo ngược và sinh ảnh tiếp theo. Giá trị thấp hơn sẽ dẫn đến những thay đổi mạnh hơn đối với ả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 để làm cho phép đảo ngược trở nên tất định.
  • cross_attention_kwargs (dict, tùy chọn) — Một từ điển kwargs, nếu được chỉ định, sẽ được truyền đến AttentionProcessor như đã định nghĩa trong self.processor.
  • clip_skip (int, tùy chọn) — Số lượng lớp được bỏ qua từ CLIP khi tính toán các embedding của prompt. Giá trị 1 có nghĩa là đầu ra của lớp trước lớp cuối sẽ được sử dụng để tính toán các embedding của prompt.
  • height (int, tùy chọn, mặc định là None) — Chiều cao của ảnh đã được 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ế độ resize, có thể là default hoặc fill. Nếu là default, ảnh sẽ được resize để 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, ảnh sẽ được resize để vừa với chiều rộng và chiều cao được chỉ định, giữ nguyên tỷ lệ khung hình, sau đó đặt ảnh ở giữa 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, ảnh sẽ được resize để vừa với chiều rộng và chiều cao được chỉ định, giữ nguyên tỷ lệ khung hình, sau đó đặt ảnh ở giữa 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]], tuỳ 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.

Đầ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++. Nếu scheduler được đặt thành DDIMScheduler, quá trình đảo ngược do edit-friendly DPDM đề xuất sẽ được thực hiện thay thế.

encode_prompt

< >

( devicenum_images_per_promptenable_edit_guidancenegative_prompt = Noneediting_prompt = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneediting_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )

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
  • negative_prompt (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt không dùng để định hướng việc tạo ảnh. Nếu không được định nghĩa, cần 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 embedding văn bản đã được tạo trước. 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 sẽ được tạo từ đối số đầu vào prompt.
  • negative_prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản âm đã được tạo trước. 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, negative_prompt_embeds sẽ được tạo từ đối số đầu vào negative_prompt.
  • lora_scale (float, tùy 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, tùy chọn) — Số lượng lớp được bỏ qua từ CLIP khi tính toán các embedding của prompt. Giá trị 1 có nghĩa là đầu ra của lớp trước lớp cuối sẽ được sử dụng để tính toán các embedding của prompt.

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

LEditsPPPipelineStableDiffusionXL

lớp diffusers.LEditsPPPipelineStableDiffusionXL

< >

( vae: AutoencoderKLtext_encoder: CLIPTextModeltext_encoder_2: CLIPTextModelWithProjectiontokenizer: CLIPTokenizertokenizer_2: CLIPTokenizerunet: UNet2DConditionModelscheduler: diffusers.schedulers.scheduling_dpmsolver_multistep.DPMSolverMultistepScheduler | diffusers.schedulers.scheduling_ddim.DDIMSchedulerimage_encoder: CLIPVisionModelWithProjection = Nonefeature_extractor: CLIPImageProcessorPil = Noneforce_zeros_for_empty_prompt: bool = Trueadd_watermarker: bool | None = None )

Tham số

  • vae (AutoencoderKL) — Mô hình Variational Auto-Encoder (VAE) để mã hóa và giải mã hình ảnh từ và sang 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, cụ thể là biến thể 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, cụ thể là biến thể laion/CLIP-ViT-bigG-14-laion2B-39B-b160k.
  • tokenizer (CLIPTokenizer) — Tokenizer của lớp CLIPTokenizer.
  • tokenizer_2 (CLIPTokenizer) — Tokenizer thứ hai thuộc lớp CLIPTokenizer.
  • unet (UNet2DConditionModel) — Kiến trúc U-Net có điều kiện để khử nhiễu các latents ảnh đã mã hóa.
  • scheduler (DPMSolverMultistepScheduler hoặc 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 hoặc DDIMScheduler. Nếu một scheduler khác được truyền vào, nó sẽ tự động được đặt thành 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 luôn về 0 hay không. Xem thêm cấu hình của stabilityai/stable-diffusion-xl-base-1-0.
  • add_watermarker (bool, tùy chọn) — Có sử dụng invisible_watermark library để đóng dấu mờ lên 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ụ đóng dấu mờ.

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 và được xây dựng dựa trên StableDiffusionXLPipeline. Hãy xem tài liệu của lớp cha để biết về 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:

cũng như các phương pháp lưu trữ sau:

  • LoRA: loaders.StableDiffusionXLPipeline.save_lora_weights

__call__

< >

( denoising_end: float | None = Nonenegative_prompt: str | list[str] | None = Nonenegative_prompt_2: str | list[str] | None = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Noneip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Noneguidance_rescale: float = 0.0crops_coords_top_left: tuple = (0, 0)target_size: tuple[int, int] | None = Noneediting_prompt: str | list[str] | None = Noneediting_prompt_embeddings: typing.Optional[torch.Tensor] = Noneediting_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonereverse_editing_direction: bool | list[bool] | None = Falseedit_guidance_scale: float | list[float] | None = 5edit_warmup_steps: int | list[int] | None = 0edit_cooldown_steps: int | list[int] | None = Noneedit_threshold: float | list[float] | None = 0.9sem_guidance: list[torch.Tensor] | None = Noneuse_cross_attn_mask: bool = Falseuse_intersect_mask: bool = Falseuser_mask: typing.Optional[torch.Tensor] = Noneattn_store_steps: list[int] | None = []store_averaged_over_steps: bool = Trueclip_skip: int | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']**kwargs ) → LEditsPPDiffusionPipelineOutput or tuple

Tham số

  • denoising_end (float, tùy chọn) — Khi được chỉ định, tham số này xác định tỷ lệ (nằm trong khoảng 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 quá trình 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 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 dùng để định hướng việc tạo ảnh. Nếu không được định nghĩa, cần 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 để định hướng 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 embedding văn bản âm đã được tạo trước. 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, 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ể 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, 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: 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, nếu được chỉ định, sẽ được truyền đến AttentionProcessor như đã định nghĩa dưới self.processor trong diffusers.models.attention_processor.
  • guidance_rescale (float, tùy chọn, mặc định là 0.7) — Hệ số rescale guidance được đề xuất trong Common Diffusion Noise Schedules and Sample Steps are Flawed guidance_scale được định nghĩa là φ trong phương trình 16 của Common Diffusion Noise Schedules and Sample Steps are Flawed. Hệ số rescale guidance nên khắc phục tình trạng phơi sáng quá mức khi sử dụng zero terminal SNR.
  • crops_coords_top_left (tuple[int], tuỳ chọn, 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.
  • target_size (tuple[int], tuỳ chọn, 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.
  • 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 tạo trước. 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 nên được tăng lên hay giảm xuống.
  • edit_guidance_scale (float hoặc list[float], tùy chọn, mặc định là 5) — Thang độ dẫn hướng cho việc tạo hình ả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++.
  • edit_warmup_steps (float hoặc list[float], tùy 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], 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], tùy chọn, mặc định là 0.9) — Ngưỡng che (masking) 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++.
  • sem_guidance (list[torch.Tensor], tùy chọn) — danh sách các vector guidance được tạo trước để áp dụng trong quá trình sinh. Độ dài của danh sách phải khớp 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++.
  • use_intersect_mask — Xác định xem thuật toán che phủ (masking) có được tính toán dưới dạng giao của các mask cross-attention và các mask suy ra từ ước lượng nhiễu hay không. Các mask cross-attention được định nghĩa là ‘M^1’ và các mask suy ra từ ước lượng nhiễu được định nghĩa là ‘M^2’ trong phương trình 12 của bài báo LEDITS++.
  • 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à các attention map đượ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 False, các bản đồ chú ý cho từng bước sẽ được lưu trữ riêng biệt. Chỉ phục vụ mục đích trực quan hóa.
  • clip_skip (int, tùy chọn) — Số lượng lớp được bỏ qua từ CLIP khi tính toán các embedding của prompt. Giá trị 1 có nghĩa là đầu ra của lớp trước lớp cuối sẽ được sử dụng để tính toán các embedding của prompt.
  • 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 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 tensor đầu vào 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 hoặc tuple

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() 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ụ:

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

đảo ngược

< >

( 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.5negative_prompt: str = Nonenegative_prompt_2: str = Nonenum_inversion_steps: int = 50skip: float = 0.15generator: typing.Optional[torch.Generator] = Nonecrops_coords_top_left: tuple = (0, 0)num_zero_noise_steps: int = 3cross_attention_kwargs: dict[str, typing.Any] | None = Noneheight: int | None = Nonewidth: int | None = Noneresize_mode: str | None = 'default'crops_coords: tuple[int, int, int, int] | None = None ) → LEditsPPInversionPipelineOutput

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ả ảnh đầu vào sẽ được dùng để hướng dẫn trong quá trình đảo ngược. Hướng dẫn sẽ bị tắt nếu source_prompt là "".
  • source_guidance_scale (float, mặc định là 3.5) — Độ mạnh của guidance trong quá trình inversion.
  • negative_prompt (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt không dùng để định hướng việc tạo ảnh. Nếu không được định nghĩa, cần 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 để định hướng 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ác bước ban đầu sẽ bị bỏ qua cho quá trình đảo ngược và sinh ảnh tiếp theo. Giá trị thấp hơn sẽ dẫn đến những thay đổi mạnh hơn đối với ả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 để làm cho phép đảo ngược trở nên tất định.
  • crops_coords_top_left (tuple[int], tuỳ chọn, 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.
  • 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 về zero, SD-XL khi kết hợp với 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, nếu được chỉ định, sẽ được truyền đến AttentionProcessor như đã định nghĩa dưới self.processor trong diffusers.models.attention_processor.

Đầ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++. Nếu scheduler được đặt thành DDIMScheduler, quá trình đảo ngược do edit-friendly DPDM đề xuất sẽ được thực hiện thay thế.

encode_prompt

< >

( device: typing.Optional[torch.device] = Nonenum_images_per_prompt: int = 1negative_prompt: str | None = Nonenegative_prompt_2: str | None = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = Noneenable_edit_guidance: bool = Trueediting_prompt: str | None = Noneediting_prompt_embeds: typing.Optional[torch.Tensor] = Noneediting_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None )

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 dùng để định hướng việc 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 để định hướng 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 embedding văn bản âm đã được tạo trước. 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, 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ể 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, pooled negative_prompt_embeds sẽ được tạo từ đối số đầu vào negative_prompt.
  • lora_scale (float, tùy chọn) — 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, tùy chọn) — Số lượng lớp được bỏ qua từ CLIP khi tính toán các embedding của prompt. Giá trị 1 có nghĩa là đầu ra của lớp trước lớp cuối sẽ được sử dụng để tính toán các embedding của prompt.
  • enable_edit_guidance (bool) — Có hướng dẫn theo 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ừ tham số đầu vào editing_prompt.
  • editing_pooled_prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản pooled đã chỉnh sửa được tạo trước. Có thể dùng để dễ dàng tinh chỉnh đầ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

< >

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

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, tùy 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

lớp diffusers.pipelines.LEditsPPDiffusionPipelineOutput

< >

( images: list[PIL.Image.Image] | numpy.ndarraynsfw_content_detected: list[bool] | None )

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

lớp diffusers.pipelines.LEditsPPInversionPipelineOutput

< >

( images: list[PIL.Image.Image] | numpy.ndarrayvae_reconstruction_images: list[PIL.Image.Image] | numpy.ndarray )

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ả 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++.

Update on GitHub