Diffusers documentation

ControlNetUnion

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

ControlNetUnion

LoRA

ControlNetUnionModel là một triển khai của ControlNet cho Stable Diffusion XL.

Mô hình ControlNet được giới thiệu trong ControlNetPlus bởi xinsir6. Nó hỗ trợ nhiều đầu vào điều kiện mà không làm tăng lượng tính toán.

Chúng tôi thiết kế một kiến trúc mới có thể hỗ trợ hơn 10 loại điều khiển trong tạo ảnh từ văn bản có điều kiện và có thể tạo ra các hình ảnh độ phân giải cao tương đương về mặt thị giác với midjourney. Mạng dựa trên kiến trúc ControlNet gốc, chúng tôi đề xuất hai module mới để: 1 Mở rộng ControlNet gốc để hỗ trợ các điều kiện ảnh khác nhau bằng cùng một tham số mạng. 2 Hỗ trợ đầu vào nhiều điều kiện mà không làm tăng chi phí tính toán, điều này đặc biệt quan trọng đối với các nhà thiết kế muốn chỉnh sửa ảnh chi tiết, các điều kiện khác nhau sử dụng cùng một bộ mã hóa điều kiện, không thêm tính toán hoặc tham số bổ sung.

StableDiffusionXLControlNetUnionPipeline

lớp diffusers.StableDiffusionXLControlNetUnionPipeline

< >

( vae: AutoencoderKLtext_encoder: CLIPTextModeltext_encoder_2: CLIPTextModelWithProjectiontokenizer: CLIPTokenizertokenizer_2: CLIPTokenizerunet: UNet2DConditionModelcontrolnet: diffusers.models.controlnets.controlnet_union.ControlNetUnionModel | list[diffusers.models.controlnets.controlnet_union.ControlNetUnionModel] | tuple[diffusers.models.controlnets.controlnet_union.ControlNetUnionModel] | diffusers.models.controlnets.multicontrolnet_union.MultiControlNetUnionModelscheduler: KarrasDiffusionSchedulersforce_zeros_for_empty_prompt: bool = Trueadd_watermarker: bool | None = Nonefeature_extractor: CLIPImageProcessorPil = Noneimage_encoder: CLIPVisionModelWithProjection = 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 (clip-vit-large-patch14).
  • text_encoder_2 (CLIPTextModelWithProjection) — Bộ mã hóa văn bản đóng băng thứ hai (laion/CLIP-ViT-bigG-14-laion2B-39B-b160k).
  • tokenizer (CLIPTokenizer) — Một CLIPTokenizer để tách token cho văn bản.
  • tokenizer_2 (CLIPTokenizer) — Một CLIPTokenizer để tách token cho văn bản.
  • unet (UNet2DConditionModel) — Một UNet2DConditionModel để khử nhiễu các latents ảnh đã mã hóa.
  • controlnet (ControlNetUnionModel) -- Provides additional conditioning to the unet` during the denoising process.
  • scheduler (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, LMSDiscreteScheduler, hoặc 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ó luôn được đặt thành 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 thư viện invisible_watermark để đó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 là True nếu gói đã được cài đặt; nếu không, sẽ không sử dụng công cụ đóng dấu mờ.

Pipeline để tạo ảnh từ văn bản sử dụng Stable Diffusion XL với sự dẫn dắt của ControlNet.

Mô hình này kế thừa từ DiffusionPipeline. 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.).

Pipeline cũng kế thừa các phương thức nạp sau:

__call__

< >

( prompt: str | list[str] = Noneprompt_2: str | list[str] | None = Nonecontrol_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], list[typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]]] = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 50timesteps: list = Nonesigmas: list = Nonedenoising_end: float | None = Noneguidance_scale: float = 5.0negative_prompt: str | list[str] | None = Nonenegative_prompt_2: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Noneip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Noneip_adapter_image_embeds: list[torch.Tensor] | None = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Nonecontrolnet_conditioning_scale: float | list[float] = 1.0guess_mode: bool = Falsecontrol_guidance_start: float | list[float] = 0.0control_guidance_end: float | list[float] = 1.0control_mode: int | list[int] | list[list[int]] | None = Noneoriginal_size: tuple = Nonecrops_coords_top_left: tuple = (0, 0)target_size: tuple = Nonenegative_original_size: tuple[int, int] | None = Nonenegative_crops_coords_top_left: tuple = (0, 0)negative_target_size: tuple[int, int] | None = Noneclip_skip: int | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list = ['latents'] ) → StableDiffusionPipelineOutput or tuple

Tham số

  • prompt (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt để định hướng việc tạo ảnh. Nếu không được định nghĩa, bạn cần truyền prompt_embeds.
  • prompt_2 (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt sẽ đượ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.
  • control_image (PipelineImageInput hoặc list[PipelineImageInput], tùy chọn) — Điều kiện đầu vào của ControlNet để cung cấp hướng dẫn cho unet trong quá trình tạo ảnh. Nếu kiểu được chỉ định là torch.Tensor, nó sẽ được truyền nguyên vẹn vào ControlNet. PIL.Image.Image cũng có thể được chấp nhận dưới dạng ảnh. Kích thước của ảnh đầu ra mặc định là kích thước của image. Nếu chiều cao và/hoặc chiều rộng được truyền vào, image sẽ được thay đổi kích thước cho phù hợp. Nếu nhiều ControlNet được chỉ định trong init, các ảnh phải được truyền dưới dạng danh sách sao cho mỗi phần tử trong danh sách có thể được nhóm (batch) chính xác để làm đầu vào cho một ControlNet duy nhất.
  • height (int, tùy chọn, mặc định là self.unet.config.sample_size * self.vae_scale_factor) — Chiều cao của hình ảnh được tạo ra, tính bằng pixel. 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 và các checkpoint không được tinh chỉnh cụ thể cho độ phân giải thấp.
  • width (int, tùy chọn, mặc định là self.unet.config.sample_size * self.vae_scale_factor) — Chiều rộng của hình ảnh được tạo ra, tính bằng pixel. 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 và các checkpoint không được tinh chỉnh cụ thể cho độ phân giải thấp.
  • num_inference_steps (int, tùy chọn, 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 chi phí là suy luận chậm hơn.
  • timesteps (list[int], tùy chọn) — Các bước thời gian 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ợ đối 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], tùy chọn) — 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ợ đối 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 sẽ được sử dụng.
  • denoising_end (float, tùy chọn) — Khi được chỉ định, tham số này 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 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
  • guidance_scale (float, tùy chọn, mặc định là 5.0) — Giá trị guidance scale cao hơn khuyến khích mô hình tạo ra các hình ảnh gắn kết chặt chẽ với prompt văn bản, với cái giá là chất lượng hình ảnh thấp hơn. Guidance scale được kích hoạt khi guidance_scale > 1.
  • negative_prompt (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt để hướng dẫn những gì không nên bao gồm trong quá trình tạo ảnh. Nếu không được định nghĩa, bạn cần truyền negative_prompt_embeds thay thế. Bỏ qua khi không sử dụng guidance (guidance_scale < 1).
  • negative_prompt_2 (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt để hướng dẫn những gì không nên bao gồm trong quá trình tạo ảnh. Nội dung này đượ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, tùy chọn, mặc định là 1) — Số lượng hình ảnh cần tạo cho mỗi prompt.
  • eta (float, tùy chọn, mặc định là 0.0) — Tương ứng với tham số eta (η) trong bài báo DDIM. Chỉ áp dụng cho DDIMScheduler và bị bỏ qua ở các scheduler khác.
  • generator (torch.Generator hoặc list[torch.Generator], tùy chọn) — Một torch.Generator để làm cho quá trình sinh ra kết quả xác định.
  • latents (torch.Tensor, tùy chọn) — Các latents nhiễu đã được tạo trướ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ể 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 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 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 (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ể đượ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.
  • pooled_prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản đã được gộp sẵn. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản (trọng số prompt). Nếu không được cung cấp, các embedding văn bản gộp 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ể dùng để dễ dàng điều chỉnh đầu vào văn bản (trọng số prompt). Nếu không được cung cấp, các negative_prompt_embeds pooled 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 hình ảnh được 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 hình ả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 ra. Chọn giữa PIL.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 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 trong self.processor.
  • controlnet_conditioning_scale (float hoặc list[float], tùy chọn, mặc định là 1.0) — Đầu ra của ControlNet được nhân với controlnet_conditioning_scale trước khi được cộng vào phần dư trong unet gốc. Nếu nhiều ControlNet được chỉ định trong init, bạn có thể đặt thang tương ứng dưới dạng một danh sách.
  • guess_mode (bool, tùy chọn, mặc định là False) — Bộ mã hóa ControlNet sẽ cố gắng nhận diện nội dung của hình ảnh đầu vào ngay cả khi bạn xóa tất cả các prompt. Khuyến nghị sử dụng giá trị guidance_scale nằm trong khoảng từ 3.0 đến 5.0.
  • control_guidance_start (float hoặc list[float], tùy chọn, mặc định là 0.0) — Tỷ lệ phần trăm tổng số bước mà tại đó ControlNet bắt đầu áp dụng.
  • control_guidance_end (float hoặc list[float], tùy chọn, mặc định là 1.0) — Tỷ lệ phần trăm tổng số bước mà tại đó ControlNet ngừng áp dụng.
  • control_mode (int or list[int] or list[list[int]], *optional*) -- The control condition types for the ControlNet. See the ControlNet's model card forinformation on the available control modes. If multiple ControlNets are specified in init`, control_mode should be a list where each ControlNet should have its corresponding control mode list. Should reflect the order of conditions in control_image.
  • original_size (tuple[int], tuỳ chọn, mặc định là (1024, 1024)) — Nếu original_size không giống với target_size, hình ảnh sẽ có vẻ bị 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.
  • 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à (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.
  • negative_original_size (tuple[int], tuỳ chọn, 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. Để 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], tuỳ chọn, 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. Để 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], tuỳ chọn, mặc định là (1024, 1024)) — Điều kiện âm cho quá trình tạo dựa trên độ phân giải của ảnh đích. Trong hầu hết các trường hợp, giá trị này 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. Để 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, 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, PipelineCallback, MultiPipelineCallbacks, tùy chọn) — 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 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ề

StableDiffusionPipelineOutput hoặc tuple

Nếu return_dict là True, StableDiffusionPipelineOutput sẽ được trả về, ngoài ra một tuple chứa các hình ảnh đầu ra sẽ được trả về.

Hàm gọi call của pipeline để tạo nội dung.

Ví dụ:

>>> # !pip install controlnet_aux
>>> from controlnet_aux import LineartAnimeDetector
>>> from diffusers import StableDiffusionXLControlNetUnionPipeline, ControlNetUnionModel, AutoencoderKL
>>> from diffusers.utils import load_image
>>> import torch

>>> prompt = "A cat"
>>> # download an image
>>> image = load_image(
...     "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/kandinsky/cat.png"
... ).resize((1024, 1024))
>>> # initialize the models and pipeline
>>> controlnet = ControlNetUnionModel.from_pretrained(
...     "xinsir/controlnet-union-sdxl-1.0", torch_dtype=torch.float16
... )
>>> vae = AutoencoderKL.from_pretrained("madebyollin/sdxl-vae-fp16-fix", torch_dtype=torch.float16)
>>> pipe = StableDiffusionXLControlNetUnionPipeline.from_pretrained(
...     "stabilityai/stable-diffusion-xl-base-1.0",
...     controlnet=controlnet,
...     vae=vae,
...     torch_dtype=torch.float16,
...     variant="fp16",
... )
>>> pipe.enable_model_cpu_offload()
>>> # prepare image
>>> processor = LineartAnimeDetector.from_pretrained("lllyasviel/Annotators")
>>> controlnet_img = processor(image, output_type="pil")
>>> # generate image
>>> image = pipe(prompt, control_image=[controlnet_img], control_mode=[3], height=1024, width=1024).images[0]

encode_prompt

< >

( prompt: strprompt_2: str | None = Nonedevice: typing.Optional[torch.device] = Nonenum_images_per_prompt: int = 1do_classifier_free_guidance: bool = Truenegative_prompt: str | None = Nonenegative_prompt_2: str | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )

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 sẽ đượ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 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
  • 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.
  • pooled_prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản đã được gộp (pooled) 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 đã gộp 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ể 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.

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

StableDiffusionXLControlNetUnionImg2ImgPipeline

lớp diffusers.StableDiffusionXLControlNetUnionImg2ImgPipeline

< >

( vae: AutoencoderKLtext_encoder: CLIPTextModeltext_encoder_2: CLIPTextModelWithProjectiontokenizer: CLIPTokenizertokenizer_2: CLIPTokenizerunet: UNet2DConditionModelcontrolnet: diffusers.models.controlnets.controlnet_union.ControlNetUnionModel | list[diffusers.models.controlnets.controlnet_union.ControlNetUnionModel] | tuple[diffusers.models.controlnets.controlnet_union.ControlNetUnionModel] | diffusers.models.controlnets.multicontrolnet_union.MultiControlNetUnionModelscheduler: KarrasDiffusionSchedulersrequires_aesthetics_score: bool = Falseforce_zeros_for_empty_prompt: bool = Trueadd_watermarker: bool | None = Nonefeature_extractor: CLIPImageProcessorPil = Noneimage_encoder: CLIPVisionModelWithProjection = 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 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.
  • controlnet (ControlNetUnionModel) — Cung cấp điều kiện bổ sung cho unet trong quá trình khử nhiễu.
  • scheduler (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, LMSDiscreteScheduler, hoặc PNDMScheduler.
  • requires_aesthetics_score (bool, tùy chọn, mặc định là "False") — Liệu 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 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ờ.
  • feature_extractor (CLIPImageProcessor) — Một CLIPImageProcessor để trích xuất đặc trưng từ các hình ảnh được tạo ra; được dùng làm đầu vào cho safety_checker.

Pipeline để tạo ảnh từ ảnh sử dụng Stable Diffusion XL với sự dẫn dắt của ControlNet.

Mô hình này kế thừa từ 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:

__call__

< >

( prompt: str | list[str] = Noneprompt_2: str | list[str] | None = Noneimage: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = Nonecontrol_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], list[typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]]] = Noneheight: int | None = Nonewidth: int | None = Nonestrength: float = 0.8num_inference_steps: int = 50guidance_scale: float = 5.0negative_prompt: str | list[str] | None = Nonenegative_prompt_2: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Noneip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Noneip_adapter_image_embeds: list[torch.Tensor] | None = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Nonecontrolnet_conditioning_scale: float | list[float] = 0.8guess_mode: bool = Falsecontrol_guidance_start: float | list[float] = 0.0control_guidance_end: float | list[float] = 1.0control_mode: int | list[int] | list[list[int]] | None = Noneoriginal_size: tuple = Nonecrops_coords_top_left: tuple = (0, 0)target_size: tuple = Nonenegative_original_size: tuple[int, int] | None = Nonenegative_crops_coords_top_left: tuple = (0, 0)negative_target_size: tuple[int, int] | None = Noneaesthetic_score: float = 6.0negative_aesthetic_score: float = 2.5clip_skip: int | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']**kwargs ) → StableDiffusionPipelineOutput or tuple

Tham số

  • prompt (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt để định hướng 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 sẽ đượ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, PIL.Image.Image, np.ndarray, list[torch.Tensor], list[PIL.Image.Image], list[np.ndarray], — list[list[torch.Tensor]], list[list[np.ndarray]] hoặc list[list[PIL.Image.Image]]): Hình ảnh ban đầu sẽ được sử dụng làm điểm khởi đầu cho quá trình tạo hình ảnh. Cũng có thể nhận các latent của hình ảnh dưới dạng image, nếu truyền trực tiếp các latent, chúng sẽ không được mã hóa lại.
  • control_image (PipelineImageInput hoặc list[PipelineImageInput], tùy chọn) — Điều kiện đầu vào của ControlNet để cung cấp hướng dẫn cho unet trong quá trình tạo ảnh. Nếu kiểu được chỉ định là torch.Tensor, nó sẽ được truyền nguyên vẹn vào ControlNet. PIL.Image.Image cũng có thể được chấp nhận dưới dạng ảnh. Kích thước của ảnh đầu ra mặc định là kích thước của image. Nếu chiều cao và/hoặc chiều rộng được truyền vào, image sẽ được thay đổi kích thước cho phù hợp. Nếu nhiều ControlNet được chỉ định trong init, các ảnh phải được truyền dưới dạng danh sách sao cho mỗi phần tử trong danh sách có thể được nhóm (batch) chính xác để làm đầu vào cho một ControlNet duy nhất.
  • height (int, tùy chọn, mặc định là kích thước của control_image) — Chiều cao của ảnh được tạo ra, tính bằng pixel. 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 và các checkpoint không được tinh chỉnh cụ thể cho độ phân giải thấp.
  • width (int, tùy chọn, mặc định là kích thước của control_image) — Chiều rộng tính bằng pixel của hình ảnh được tạo ra. 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 và các checkpoint không được tinh chỉnh cụ thể cho độ phân giải thấp.
  • strength (float, tùy chọn, mặc định là 0.8) — Chỉ ra mức độ biến đổi ảnh tham chiếu image. Phải nằm trong khoảng từ 0 đến 1. image được dùng làm điểm khởi đầu và càng nhiều nhiễu được thêm vào khi strength càng cao. 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 là tối đa và quá trình khử nhiễu chạy đủ số lần lặp được chỉ định trong num_inference_steps. Giá trị 1 về cơ bản sẽ bỏ qua image.
  • num_inference_steps (int, tùy chọn, 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 chi phí là suy luận chậm hơn.
  • guidance_scale (float, tùy chọn, mặc định là 7.5) — Thang độ dẫn hướng như được định nghĩa trong Classifier-Free Diffusion Guidance. guidance_scale được định nghĩa là w của phương trình 2. trong Imagen Paper. 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 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_images_per_prompt (int, tùy chọn, mặc định là 1) — Số lượng hình ảnh cần tạo cho mỗi prompt.
  • eta (float, tùy chọn, 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, sẽ bị bỏ qua với các scheduler khác.
  • generator (torch.Generator hoặc list[torch.Generator], tuỳ chọn) — Một hoặc một danh sách torch generator để đả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, 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ể 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 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 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.
  • pooled_prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản đã được gộp (pooled) 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 đã gộp 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ể 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.
  • ip_adapter_image_embeds (list[torch.Tensor], tùy chọn) — Các embedding hình ảnh được 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 hình ả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: 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 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.
  • controlnet_conditioning_scale (float hoặc list[float], tùy chọn, mặc định là 1.0) — Đầu ra của ControlNet được nhân với controlnet_conditioning_scale trước khi được cộng vào phần dư trong unet gốc. Nếu nhiều ControlNet được chỉ định trong init, bạn có thể đặt thang tương ứng dưới dạng một danh sách.
  • guess_mode (bool, tùy chọn, mặc định là False) — Ở chế độ này, bộ mã hóa ControlNet sẽ cố gắng hết sức để nhận diện nội dung của hình ảnh đầu vào ngay cả khi bạn xóa tất cả các prompt. Khuyến nghị sử dụng guidance_scale trong khoảng từ 3.0 đến 5.0.
  • control_guidance_start (float hoặc list[float], tùy chọn, mặc định là 0.0) — Tỷ lệ phần trăm tổng số bước mà tại đó ControlNet bắt đầu áp dụng.
  • control_guidance_end (float hoặc list[float], tùy chọn, mặc định là 1.0) — Tỷ lệ phần trăm tổng số bước mà tại đó ControlNet ngừng áp dụng.
  • control_mode (int or list[int] or list[list[int]], *optional*) -- The control condition types for the ControlNet. See the ControlNet's model card forinformation on the available control modes. If multiple ControlNets are specified in init`, control_mode should be a list where each ControlNet should have its corresponding control mode list. Should reflect the order of conditions in control_image
  • original_size (tuple[int], tuỳ chọn, mặc định là (1024, 1024)) — Nếu original_size không giống với target_size, hình ảnh sẽ có vẻ bị 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.
  • 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à (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.
  • negative_original_size (tuple[int], tuỳ chọn, 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. Để 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], tuỳ chọn, 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. Để 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], tuỳ chọn, mặc định là (1024, 1024)) — Điều kiện âm cho quá trình tạo dựa trên độ phân giải của ảnh đích. Trong hầu hết các trường hợp, giá trị này 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. Để 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, tùy chọn, mặc định là 6.0) — Đượ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 tích cực. 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.
  • negative_aesthetic_score (float, tùy chọn, mặc định là 2.5) — 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. 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, 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, PipelineCallback, MultiPipelineCallbacks, tùy chọn) — 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 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ề

StableDiffusionPipelineOutput hoặc tuple

StableDiffusionPipelineOutput nếu return_dict là True, ngược lại là một tuple chứa các hình ảnh đầu ra.

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

Ví dụ:

# !pip install controlnet_aux
from diffusers import (
    StableDiffusionXLControlNetUnionImg2ImgPipeline,
    ControlNetUnionModel,
    AutoencoderKL,
)
from diffusers.utils import load_image
import torch
from PIL import Image
import numpy as np

prompt = "A cat"
# download an image
image = load_image(
    "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/kandinsky/cat.png"
)
# initialize the models and pipeline
controlnet = ControlNetUnionModel.from_pretrained(
    "brad-twinkl/controlnet-union-sdxl-1.0-promax", torch_dtype=torch.float16
)
vae = AutoencoderKL.from_pretrained("madebyollin/sdxl-vae-fp16-fix", torch_dtype=torch.float16)
pipe = StableDiffusionXLControlNetUnionImg2ImgPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    controlnet=controlnet,
    vae=vae,
    torch_dtype=torch.float16,
    variant="fp16",
).to("cuda")
# `enable_model_cpu_offload` is not recommended due to multiple generations
height = image.height
width = image.width
ratio = np.sqrt(1024.0 * 1024.0 / (width * height))
# 3 * 3 upscale correspond to 16 * 3 multiply, 2 * 2 correspond to 16 * 2 multiply and so on.
scale_image_factor = 3
base_factor = 16
factor = scale_image_factor * base_factor
W, H = int(width * ratio) // factor * factor, int(height * ratio) // factor * factor
image = image.resize((W, H))
target_width = W // scale_image_factor
target_height = H // scale_image_factor
images = []
crops_coords_list = [
    (0, 0),
    (0, width // 2),
    (height // 2, 0),
    (width // 2, height // 2),
    0,
    0,
    0,
    0,
    0,
]
for i in range(scale_image_factor):
    for j in range(scale_image_factor):
        left = j * target_width
        top = i * target_height
        right = left + target_width
        bottom = top + target_height
        cropped_image = image.crop((left, top, right, bottom))
        cropped_image = cropped_image.resize((W, H))
        images.append(cropped_image)
# set ControlNetUnion input
result_images = []
for sub_img, crops_coords in zip(images, crops_coords_list):
    new_width, new_height = W, H
    out = pipe(
        prompt=[prompt] * 1,
        image=sub_img,
        control_image=[sub_img],
        control_mode=[6],
        width=new_width,
        height=new_height,
        num_inference_steps=30,
        crops_coords_top_left=(W, H),
        target_size=(W, H),
        original_size=(W * 2, H * 2),
    )
    result_images.append(out.images[0])
new_im = Image.new("RGB", (new_width * scale_image_factor, new_height * scale_image_factor))
new_im.paste(result_images[0], (0, 0))
new_im.paste(result_images[1], (new_width, 0))
new_im.paste(result_images[2], (new_width * 2, 0))
new_im.paste(result_images[3], (0, new_height))
new_im.paste(result_images[4], (new_width, new_height))
new_im.paste(result_images[5], (new_width * 2, new_height))
new_im.paste(result_images[6], (0, new_height * 2))
new_im.paste(result_images[7], (new_width, new_height * 2))
new_im.paste(result_images[8], (new_width * 2, new_height * 2))

encode_prompt

< >

( prompt: strprompt_2: str | None = Nonedevice: typing.Optional[torch.device] = Nonenum_images_per_prompt: int = 1do_classifier_free_guidance: bool = Truenegative_prompt: str | None = Nonenegative_prompt_2: str | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )

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 sẽ đượ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 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
  • 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.
  • pooled_prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản đã được gộp (pooled) 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 đã gộp 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ể 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.

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

StableDiffusionXLControlNetUnionInpaintPipeline

lớp diffusers.StableDiffusionXLControlNetUnionInpaintPipeline

< >

( vae: AutoencoderKLtext_encoder: CLIPTextModeltext_encoder_2: CLIPTextModelWithProjectiontokenizer: CLIPTokenizertokenizer_2: CLIPTokenizerunet: UNet2DConditionModelcontrolnet: diffusers.models.controlnets.controlnet_union.ControlNetUnionModel | list[diffusers.models.controlnets.controlnet_union.ControlNetUnionModel] | tuple[diffusers.models.controlnets.controlnet_union.ControlNetUnionModel] | diffusers.models.controlnets.multicontrolnet_union.MultiControlNetUnionModelscheduler: KarrasDiffusionSchedulersrequires_aesthetics_score: bool = Falseforce_zeros_for_empty_prompt: bool = Trueadd_watermarker: bool | None = Nonefeature_extractor: transformers.models.clip.image_processing_pil_clip.CLIPImageProcessorPil | None = Noneimage_encoder: transformers.models.clip.modeling_clip.CLIPVisionModelWithProjection | 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 (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, LMSDiscreteScheduler, hoặc PNDMScheduler.

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

__call__

< >

( prompt: str | list[str] = Noneprompt_2: str | list[str] | None = Noneimage: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = Nonemask_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = Nonecontrol_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], list[typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]]] = Noneheight: int | None = Nonewidth: int | None = Nonepadding_mask_crop: int | None = Nonestrength: float = 0.9999num_inference_steps: int = 50denoising_start: float | None = Nonedenoising_end: float | None = Noneguidance_scale: float = 5.0negative_prompt: str | list[str] | None = Nonenegative_prompt_2: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Noneip_adapter_image_embeds: list[torch.Tensor] | None = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Nonecontrolnet_conditioning_scale: float | list[float] = 1.0guess_mode: bool = Falsecontrol_guidance_start: float | list[float] = 0.0control_guidance_end: float | list[float] = 1.0control_mode: int | list[int] | list[list[int]] | None = Noneguidance_rescale: float = 0.0original_size: tuple = Nonecrops_coords_top_left: tuple = (0, 0)target_size: tuple = Noneaesthetic_score: float = 6.0negative_aesthetic_score: float = 2.5clip_skip: int | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']**kwargs ) → ~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput or tuple

Tham số

  • prompt (str hoặc list[str], tùy chọn) — Prompt hoặc các prompt để định hướng 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 sẽ đượ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 tô lại theo prompt.
  • mask_image (PIL.Image.Image) — Image, hoặc tensor đại diện cho một batch ảnh, dùng để che image. Các pixel trắng trong mask sẽ được vẽ 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 sang một kênh duy nhất (độ sáng) trước khi sử dụng. Nếu là tensor, nó nên 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).
  • control_image (PipelineImageInput hoặc list[PipelineImageInput], tùy chọn) — Điều kiện đầu vào của ControlNet để cung cấp hướng dẫn cho unet trong quá trình tạo ảnh. Nếu kiểu được chỉ định là torch.Tensor, nó sẽ được truyền nguyên vẹn vào ControlNet. PIL.Image.Image cũng có thể được chấp nhận dưới dạng ảnh. Kích thước của ảnh đầu ra mặc định là kích thước của image. Nếu chiều cao và/hoặc chiều rộng được truyền vào, image sẽ được thay đổi kích thước cho phù hợp. Nếu nhiều ControlNet được chỉ định trong init, các ảnh phải được truyền dưới dạng danh sách sao cho mỗi phần tử trong danh sách có thể được nhóm (batch) chính xác để làm đầu vào cho một ControlNet duy nhất.
  • height (int, tùy chọn, mặc định là self.unet.config.sample_size * self.vae_scale_factor) — Chiều cao của hình ảnh được tạo ra, tính bằng pixel.
  • width (int, tùy chọn, mặc định là self.unet.config.sample_size * self.vae_scale_factor) — Chiều rộng của hình ảnh được tạo ra, tính bằng pixel.
  • padding_mask_crop (int, tùy chọn, mặc định là None) — Kích thước của phần lề trong vùng crop sẽ được áp dụng cho ảnh và mask. Nếu None, không có crop nào được áp dụng cho image và mask_image. Nếu padding_mask_crop không phải None, trước tiên sẽ 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ị mask, sau đó mở rộng vùng đó dựa trên padding_mask_crop. Ảnh và mask_image sau đó sẽ được crop dựa trên vùng đã mở rộng trước khi resize về kích thước ảnh gốc để inpainting. Điều này hữu ích khi vùng bị mask 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, tùy chọn, 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. 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 lớn. 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 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à một số nguyên, giá trị của strength sẽ bị bỏ qua.
  • num_inference_steps (int, tùy chọn, 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 chi phí là suy luận chậm hơn.
  • denoising_start (float, tùy chọn) — 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ả trong Refining the Image Output.
  • denoising_end (float, tùy chọn) — Khi được chỉ định, tham số này 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 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 nên được sử dụng một cách lý tưở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.
  • guidance_scale (float, tùy chọn, mặc định là 7.5) — Thang độ dẫn hướng như được định nghĩa trong Classifier-Free Diffusion Guidance. guidance_scale được định nghĩa là w của phương trình 2. trong Imagen Paper. 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 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
  • 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.
  • 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 hình ảnh được 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 hình ả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.
  • pooled_prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản đã được gộp (pooled) 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 đã gộp 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ể 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.
  • num_images_per_prompt (int, tùy chọn, mặc định là 1) — Số lượng hình ảnh cần tạo cho mỗi prompt.
  • eta (float, tùy chọn, 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, sẽ bị bỏ qua với các scheduler khác.
  • 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.
  • latents (torch.Tensor, tùy chọn) — Các latents nhiễu đã được tạo trướ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ể 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 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: 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 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.
  • controlnet_conditioning_scale (float hoặc list[float], tùy chọn, mặc định là 1.0) — Đầu ra của ControlNet được nhân với controlnet_conditioning_scale trước khi được cộng vào phần dư trong unet gốc. Nếu nhiều ControlNet được chỉ định trong init, bạn có thể đặt thang tương ứng dưới dạng một danh sách.
  • guess_mode (bool, tùy chọn, mặc định là False) — Bộ mã hóa ControlNet sẽ cố gắng nhận diện nội dung của hình ảnh đầu vào ngay cả khi bạn xóa tất cả các prompt. Khuyến nghị sử dụng giá trị guidance_scale nằm trong khoảng từ 3.0 đến 5.0.
  • control_guidance_start (float hoặc list[float], tùy chọn, mặc định là 0.0) — Tỷ lệ phần trăm tổng số bước mà tại đó ControlNet bắt đầu áp dụng.
  • control_guidance_end (float hoặc list[float], tùy chọn, mặc định là 1.0) — Tỷ lệ phần trăm tổng số bước mà tại đó ControlNet ngừng áp dụng.
  • control_mode (int or list[int] or list[list[int]], *optional*) -- The control condition types for the ControlNet. See the ControlNet's model card forinformation on the available control modes. If multiple ControlNets are specified in init`, control_mode should be a list where each ControlNet should have its corresponding control mode list. Should reflect the order of conditions in control_image.
  • 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.
  • original_size (tuple[int], tuỳ chọn, mặc định là (1024, 1024)) — Nếu original_size không giống với target_size, hình ảnh sẽ có vẻ bị giảm hoặc tăng mẫu. original_size mặc định là (width, height) 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.
  • 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.
  • aesthetic_score (float, tùy chọn, mặc định là 6.0) — Đượ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 tích cực. 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.
  • negative_aesthetic_score (float, tùy chọn, mặc định là 2.5) — 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. 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, 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, PipelineCallback, MultiPipelineCallbacks, tùy chọn) — 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 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ề

~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 đã được tạo.

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

Ví dụ:

from diffusers import StableDiffusionXLControlNetUnionInpaintPipeline, ControlNetUnionModel, AutoencoderKL
from diffusers.utils import load_image
import torch
import numpy as np
from PIL import Image

prompt = "A cat"
# download an image
image = load_image(
    "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/in_paint/overture-creations-5sI6fQgYIuo.png"
).resize((1024, 1024))
mask = load_image(
    "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/in_paint/overture-creations-5sI6fQgYIuo_mask.png"
).resize((1024, 1024))
# initialize the models and pipeline
controlnet = ControlNetUnionModel.from_pretrained(
    "brad-twinkl/controlnet-union-sdxl-1.0-promax", torch_dtype=torch.float16
)
vae = AutoencoderKL.from_pretrained("madebyollin/sdxl-vae-fp16-fix", torch_dtype=torch.float16)
pipe = StableDiffusionXLControlNetUnionInpaintPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    controlnet=controlnet,
    vae=vae,
    torch_dtype=torch.float16,
    variant="fp16",
)
pipe.enable_model_cpu_offload()
controlnet_img = image.copy()
controlnet_img_np = np.array(controlnet_img)
mask_np = np.array(mask)
controlnet_img_np[mask_np > 0] = 0
controlnet_img = Image.fromarray(controlnet_img_np)
# generate image
image = pipe(prompt, image=image, mask_image=mask, control_image=[controlnet_img], control_mode=[7]).images[0]
image.save("inpaint.png")

encode_prompt

< >

( prompt: strprompt_2: str | None = Nonedevice: typing.Optional[torch.device] = Nonenum_images_per_prompt: int = 1do_classifier_free_guidance: bool = Truenegative_prompt: str | None = Nonenegative_prompt_2: str | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )

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 sẽ đượ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 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
  • 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.
  • pooled_prompt_embeds (torch.Tensor, tùy chọn) — Các embedding văn bản đã được gộp (pooled) 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 đã gộp 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ể 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.

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

Update on GitHub