Buckets:
ControlNet với Stable Diffusion XL
ControlNet được giới thiệu trong Adding Conditional Control to Text-to-Image Diffusion Models bởi Lvmin Zhang, Anyi Rao và Maneesh Agrawala.
Với một mô hình ControlNet, bạn có thể cung cấp một hình ảnh điều khiển bổ sung để điều kiện hóa và kiểm soát quá trình tạo hình ảnh của Stable Diffusion. Ví dụ, nếu bạn cung cấp một bản đồ độ sâu, mô hình ControlNet sẽ tạo ra một hình ảnh giữ lại thông tin không gian từ bản đồ độ sâu. Đây là một cách linh hoạt và chính xác hơn để kiểm soát quá trình tạo hình ảnh.
Tóm tắt từ bài báo là:
Chúng tôi giới thiệu ControlNet, một kiến trúc mạng nơ-ron để thêm các điều khiển điều kiện không gian vào các mô hình khuếch tán từ văn bản sang ảnh lớn, được huấn luyện trước. ControlNet khóa các mô hình khuếch tán lớn sẵn sàng cho sản xuất, và tái sử dụng các lớp mã hóa sâu và mạnh mẽ của chúng, được huấn luyện trước với hàng tỷ hình ảnh, làm xương sống vững chắc để học một tập hợp đa dạng các điều khiển có điều kiện. Kiến trúc mạng nơ-ron được kết nối bằng các "cuộn không" (các lớp tích chập khởi tạo bằng không) giúp tăng dần số tham số từ không và đảm bảo rằng không có nhiễu có hại nào có thể ảnh hưởng đến quá trình tinh chỉnh. Chúng tôi kiểm tra các điều khiển điều kiện khác nhau, ví dụ như cạnh, độ sâu, phân đoạn, tư thế con người, v.v., với Stable Diffusion, sử dụng một hoặc nhiều điều kiện, có hoặc không có lời nhắc. Chúng tôi cho thấy rằng việc huấn luyện ControlNet là mạnh mẽ với các bộ dữ liệu nhỏ (<50k) và lớn (>1m). Các kết quả mở rộng cho thấy ControlNet có thể thúc đẩy các ứng dụng rộng hơn để kiểm soát các mô hình khuếch tán ảnh.
Bạn có thể tìm thấy các checkpoint ControlNet Stable Diffusion XL (SDXL) nhỏ hơn từ tổ chức 🤗 Diffusers trên Hub.
🧪 Nhiều checkpoint SDXL ControlNet mang tính thử nghiệm và còn nhiều dư địa để cải thiện. Hãy thoải mái mở một Issue và gửi cho chúng tôi phản hồi về cách chúng tôi có thể cải thiện!
Nếu bạn không thấy checkpoint nào bạn quan tâm, bạn có thể tự huấn luyện SDXL ControlNet của riêng mình bằng script huấn luyện của chúng tôi.
Hãy chắc chắn xem qua hướng dẫn về Schedulers để tìm hiểu cách khám phá sự đánh đổi giữa tốc độ và chất lượng của scheduler, và xem phần tái sử dụng các thành phần giữa các pipeline để tìm hiểu cách nạp các thành phần giống nhau vào nhiều pipeline một cách hiệu quả.
StableDiffusionXLControlNetPipeline[[diffusers.StableDiffusionXLControlNetPipeline]]
diffusers.StableDiffusionXLControlNetPipeline[[diffusers.StableDiffusionXLControlNetPipeline]]
diffusers.StableDiffusionXLControlNetPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, text_encoder_2: CLIPTextModelWithProjection, tokenizer: CLIPTokenizer, tokenizer_2: CLIPTokenizer, unet: UNet2DConditionModel, controlnet: diffusers.models.controlnets.controlnet.ControlNetModel | list[diffusers.models.controlnets.controlnet.ControlNetModel] | tuple[diffusers.models.controlnets.controlnet.ControlNetModel] | diffusers.models.controlnets.multicontrolnet.MultiControlNetModel, scheduler: KarrasDiffusionSchedulers, force_zeros_for_empty_prompt: bool = True, add_watermarker: bool | None = None, feature_extractor: CLIPImageProcessorPil = None, image_encoder: CLIPVisionModelWithProjection = None)
Tham số:
vae (AutoencoderKL) : Mô hình Variational Auto-Encoder (VAE) để mã hóa và giải mã hình ảnh sang và từ các biểu diễn ẩn.
text_encoder (CLIPTextModel) : Bộ mã hóa văn bản đóng băng (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 để phân tách văn bản.
tokenizer_2 (CLIPTokenizer) : Một CLIPTokenizer để phân tách văn bản.
unet (UNet2DConditionModel) : Một UNet2DConditionModel để khử nhiễu các latents ảnh đã mã hóa.
controlnet (ControlNetModel hoặc list[ControlNetModel]) : Cung cấp điều kiện bổ sung cho unet trong quá trình khử nhiễu. Nếu bạn đặt nhiều ControlNet dưới dạng danh sách, đầu ra từ mỗi ControlNet sẽ được cộng lại với nhau để tạo thành một điều kiện bổ sung kết hợp.
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, optional) : Có sử dụng thư viện invisible_watermark để thêm watermark cho các hình ảnh đầu ra hay không. Nếu không được định nghĩa, giá trị mặc định là True nếu gói đã được cài đặt; nếu không, sẽ không sử dụng công cụ watermark.
Pipeline để tạo ảnh từ văn bản sử dụng Stable Diffusion XL 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:
- load_textual_inversion() để nạp các embedding textual inversion
- load_lora_weights() để nạp trọng số LoRA
- save_lora_weights() để lưu trọng số LoRA
- from_single_file() để tải các tệp
.ckpt - load_ip_adapter() để nạp IP Adapters
call[[diffusers.StableDiffusionXLControlNetPipeline.call]]
__call__(prompt: str | list[str] = None, prompt_2: str | list[str] | None = None, image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, height: int | None = None, width: int | None = None, num_inference_steps: int = 50, timesteps: list[int] = None, sigmas: list[float] = None, denoising_end: float | None = None, guidance_scale: float = 5.0, negative_prompt: str | list[str] | None = None, negative_prompt_2: str | list[str] | None = None, num_images_per_prompt: int | None = 1, eta: float = 0.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, ip_adapter_image_embeds: list[torch.Tensor] | None = None, output_type: str | None = 'pil', return_dict: bool = True, cross_attention_kwargs: dict[str, typing.Any] | None = None, controlnet_conditioning_scale: float | list[float] = 1.0, guess_mode: bool = False, control_guidance_start: float | list[float] = 0.0, control_guidance_end: float | list[float] = 1.0, original_size: tuple[int, int] = None, crops_coords_top_left: tuple[int, int] = (0, 0), target_size: tuple[int, int] = None, negative_original_size: tuple[int, int] | None = None, negative_crops_coords_top_left: tuple[int, int] = (0, 0), negative_target_size: tuple[int, int] | None = None, clip_skip: int | None = None, callback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], **kwargs)
Tham số:
prompt (str hoặc list[str], tùy chọn) : Prompt hoặc các prompt để hướng dẫn 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 cần 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]]): Đ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 vào ControlNet nguyên vẹn. 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ử của 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, tuỳ 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, tuỳ chọn, mặc định là self.unet.config.sample_size * self.vae_scale_factor) : Độ rộng tính bằng pixel của hình ảnh được tạo ra. 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, optional, mặc định là 50) : Số bước khử nhiễu. Số bước khử nhiễu nhiều hơn thường dẫn đến hình ảnh có chất lượng cao hơn, với cái giá là suy luận chậm hơn.
timesteps (list[int], optional) : Các bước thời gian (timesteps) tùy chỉnh để sử dụng cho quá trình khử nhiễu với các trình lập lịch (scheduler) hỗ trợ tham số timesteps trong phương thức set_timesteps của chúng. Nếu không được định nghĩa, hành vi mặc định khi num_inference_steps được truyền vào sẽ được sử dụng. Phải được sắp xếp theo thứ tự giảm dần.
sigmas (list[float], optional) : Các sigma tùy chỉnh để sử dụng cho quá trình khử nhiễu với các trình lập lịch hỗ trợ tham số sigmas trong phương thức set_timesteps của chúng. Nếu không được định nghĩa, hành vi mặc định khi num_inference_steps được truyền vào sẽ được sử dụng.
denoising_end (float, optional) : Khi được chỉ định, xác định tỷ lệ (từ 0.0 đến 1.0) của toàn bộ quá trình khử nhiễu cần hoàn thành trước khi bị kết thúc sớm một cách có chủ đích. Kết quả là, mẫu được trả về vẫn sẽ giữ lại một lượng nhiễu đáng kể, được xác định bởi các bước thời gian rời rạc do trình lập lịch chọn. Tham số denoising_end lý tưởng nhất nên được sử dụng khi pipeline này là một phần của cấu hình đa pipeline "Mixture of Denoisers", như đã mô tả chi tiết trong Refining the Image Output
guidance_scale (float, optional, 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, tuỳ chọn, mặc định là 1) : Số lượng hình ảnh cần tạo cho mỗi prompt.
eta (float, tuỳ 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 trình lập lịch khác.
generator (torch.Generator hoặc list[torch.Generator], tùy chọn) : Một 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 vector nhúng văn bản đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản (trọng số prompt). Nếu không được cung cấp, các vector nhúng văn bản sẽ được tạo từ đối số đầu vào prompt.
negative_prompt_embeds (torch.Tensor, tùy chọn) : Các vector nhúng văn bản âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản (trọng số prompt). Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vào negative_prompt.
pooled_prompt_embeds (torch.Tensor, tùy chọn) : Các embedding văn bản đã được pool sẵn. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản (trọng số prompt). Nếu không được cung cấp, các embedding văn bản đã pool sẽ được tạo từ đối số đầu vào prompt.
negative_pooled_prompt_embeds (torch.Tensor, tùy chọn) : Các embedding văn bản pooled âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản (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 ảnh đã tạo trước cho IP-Adapter. Nó phải là một danh sách có độ dài bằng với số lượng IP-adapter. Mỗi phần tử phải là một tensor có hình dạng (batch_size, num_images, emb_dim). Nó phải chứa embedding ảnh âm nếu do_classifier_free_guidance được đặt thành True. Nếu không được cung cấp, các embedding sẽ được tính toán từ đối số đầu vào ip_adapter_image.
output_type (str, tùy chọn, mặc định là "pil") : Định dạng đầu ra của hình ảnh được tạo 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 mà 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], tuỳ 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 đo tương ứng dưới dạng danh sách.
guess_mode (bool, tùy chọn, mặc định là False) : Bộ mã hóa ControlNet 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 từ 3.0 đến 5.0.
control_guidance_start (float hoặc list[float], tuỳ chọn, mặc định là 0.0) : Tỷ lệ phần trăm của tổng số bước mà tại đó ControlNet bắt đầu áp dụng.
control_guidance_end (float hoặc list[float], tuỳ 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.
original_size (tuple[int], optional, mặc định là (1024, 1024)) : Nếu original_size không giống với target_size, hình ảnh sẽ có vẻ được giảm hoặc tăng mẫu. original_size mặc định là (height, width) nếu không được chỉ định. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của https://huggingface.co/papers/2307.01952.
crops_coords_top_left (tuple[int], optional, mặc định là (0, 0)) : crops_coords_top_left có thể được dùng để tạo ra một hình ảnh trông như đã được "cắt" từ vị trí crops_coords_top_left trở xuống. Các hình ảnh đẹp, được căn giữa tốt thường đạt được bằng cách đặt crops_coords_top_left thành (0, 0). Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của https://huggingface.co/papers/2307.01952.
target_size (tuple[int], optional, mặc định là (1024, 1024)) : Trong hầu hết các trường hợp, target_size nên được đặt thành chiều cao và chiều rộng mong muốn của hình ảnh được tạo. Nếu không được chỉ định, giá trị mặc định sẽ là (height, width). Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của https://huggingface.co/papers/2307.01952.
negative_original_size (tuple[int], optional, mặc định là (1024, 1024)) : Để điều kiện âm quá trình tạo dựa trên độ phân giải hình ảnh cụ thể. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của https://huggingface.co/papers/2307.01952. Để biết thêm thông tin, hãy tham khảo luồng vấn đề này: https://github.com/huggingface/diffusers/issues/4208.
negative_crops_coords_top_left (tuple[int], optional, mặc định là (0, 0)) : Để điều kiện âm quá trình tạo dựa trên tọa độ cắt cụ thể. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của https://huggingface.co/papers/2307.01952. Để biết thêm thông tin, hãy tham khảo luồng vấn đề này: https://github.com/huggingface/diffusers/issues/4208.
negative_target_size (tuple[int], optional, mặc định là (1024, 1024)) : Để điều kiện âm quá trình tạo dựa trên độ phân giải ảnh mục tiêu. Trong hầu hết các trường hợp, nó nên giống với target_size. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của https://huggingface.co/papers/2307.01952. Để biết thêm thông tin, hãy tham khảo luồng issue này: https://github.com/huggingface/diffusers/issues/4208.
clip_skip (int, optional) : Số lượng lớp cần bỏ qua từ CLIP khi tính toán các prompt embeddings. Giá trị 1 có nghĩa là đầu ra của lớp trước lớp cuối cùng sẽ được sử dụng để tính toán các prompt embeddings.
callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, optional) : Một hàm hoặc một lớp con của PipelineCallback hoặc MultiPipelineCallbacks được gọi vào cuối mỗi bước khử nhiễu trong quá trình suy luận, với các đối số sau: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs sẽ bao gồm một danh sách tất cả các tensor như được chỉ định bởi callback_on_step_end_tensor_inputs.
callback_on_step_end_tensor_inputs (list, optional) : Danh sách các đầu vào tensor cho hàm callback_on_step_end. Các tensor được chỉ định trong danh sách sẽ được truyền dưới dạng tham số callback_kwargs. Bạn chỉ có thể bao gồm các biến được liệt kê trong thuộc tính ._callback_tensor_inputs của lớp pipeline của bạn.
Trả về: StableDiffusionPipelineOutput hoặc tuple
Nếu return_dict là True, StableDiffusionPipelineOutput sẽ được trả về, ngược lại 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 opencv-python transformers accelerate
>>> from diffusers import StableDiffusionXLControlNetPipeline, ControlNetModel, AutoencoderKL
>>> from diffusers.utils import load_image
>>> import numpy as np
>>> import torch
>>> import cv2
>>> from PIL import Image
>>> prompt = "aerial view, a futuristic research complex in a bright foggy jungle, hard lighting"
>>> negative_prompt = "low quality, bad quality, sketches"
>>> # download an image
>>> image = load_image(
... "https://hf.co/datasets/hf-internal-testing/diffusers-images/resolve/main/sd_controlnet/hf-logo.png"
... )
>>> # initialize the models and pipeline
>>> controlnet_conditioning_scale = 0.5 # recommended for good generalization
>>> controlnet = ControlNetModel.from_pretrained(
... "diffusers/controlnet-canny-sdxl-1.0", torch_dtype=torch.float16
... )
>>> vae = AutoencoderKL.from_pretrained("madebyollin/sdxl-vae-fp16-fix", torch_dtype=torch.float16)
>>> pipe = StableDiffusionXLControlNetPipeline.from_pretrained(
... "stabilityai/stable-diffusion-xl-base-1.0", controlnet=controlnet, vae=vae, torch_dtype=torch.float16
... )
>>> pipe.enable_model_cpu_offload()
>>> # get canny image
>>> image = np.array(image)
>>> image = cv2.Canny(image, 100, 200)
>>> image = image[:, :, None]
>>> image = np.concatenate([image, image, image], axis=2)
>>> canny_image = Image.fromarray(image)
>>> # generate image
>>> image = pipe(
... prompt, controlnet_conditioning_scale=controlnet_conditioning_scale, image=canny_image
... ).images[0]
encode_prompt[[diffusers.StableDiffusionXLControlNetPipeline.encode_prompt]]
encode_prompt(prompt: str, prompt_2: str | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, do_classifier_free_guidance: bool = True, negative_prompt: str | None = None, negative_prompt_2: str | None = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, lora_scale: float | None = None, clip_skip: int | None = None)
Tham số:
prompt (str hoặc list[str], tùy chọn) : prompt cần được mã hóa
prompt_2 (str hoặc list[str], tùy chọn) : Prompt hoặc các prompt cần được gửi đến tokenizer_2 và text_encoder_2. Nếu không được định nghĩa, prompt sẽ được sử dụng cho cả hai text-encoder
device : (torch.device): thiết bị torch
num_images_per_prompt (int) : số lượng hình ảnh cần được tạo cho mỗi prompt
do_classifier_free_guidance (bool) : có sử dụng classifier free guidance hay không
negative_prompt (str hoặc list[str], tùy chọn) : Prompt hoặc các prompt không được dùng để hướng dẫn việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền negative_prompt_embeds thay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu guidance_scale nhỏ hơn 1).
negative_prompt_2 (str hoặc list[str], tùy chọn) : Prompt hoặc các prompt không dùng để hướng dẫn tạo ảnh, sẽ được gửi đến tokenizer_2 và text_encoder_2. Nếu không được định nghĩa, negative_prompt sẽ được sử dụng cho cả hai text-encoder
prompt_embeds (torch.Tensor, tùy chọn) : Các vector nhúng văn bản đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, các vector nhúng văn bản sẽ được tạo từ đối số đầu vào prompt.
negative_prompt_embeds (torch.Tensor, tùy chọn) : Các vector nhúng văn bản âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vào negative_prompt.
pooled_prompt_embeds (torch.Tensor, tùy chọn) : Các embedding văn bản đã được pool sẵn. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, các embedding văn bản đã pool sẽ được tạo từ đối số đầu vào prompt.
negative_pooled_prompt_embeds (torch.Tensor, tùy chọn) : Các embedding văn bản pooled âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, pooled negative_prompt_embeds sẽ được tạo từ đối số đầu vào negative_prompt.
lora_scale (float, tuỳ chọn) : Một hệ số lora sẽ được áp dụng cho tất cả các lớp LoRA của text encoder nếu các lớp LoRA được nạp.
clip_skip (int, optional) : Số lượng lớp cần bỏ qua từ CLIP khi tính toán các prompt embeddings. Giá trị 1 có nghĩa là đầu ra của lớp trước lớp cuối cùng sẽ được sử dụng để tính toán các prompt embeddings.
Mã hóa prompt thành các trạng thái ẩn của text encoder.
get_guidance_scale_embedding[[diffusers.StableDiffusionXLControlNetPipeline.get_guidance_scale_embedding]]
get_guidance_scale_embedding(w: Tensor, embedding_dim: int = 512, dtype: dtype = torch.float32)
Tham số:
w (torch.Tensor) : Tạo các vector nhúng với thang độ dẫn hướng được chỉ định để sau đó làm phong phú các nhúng bước thời gian.
embedding_dim (int, tuỳ chọn, mặc định là 512) : Kích thước của các embedding cần tạo.
dtype (torch.dtype, tùy chọn, mặc định là torch.float32) : Kiểu dữ liệu của các embedding được tạo ra.
Trả về: torch.Tensor
Các vector nhúng có hình dạng (len(w), embedding_dim).
StableDiffusionXLControlNetImg2ImgPipeline[[diffusers.StableDiffusionXLControlNetImg2ImgPipeline]]
diffusers.StableDiffusionXLControlNetImg2ImgPipeline[[diffusers.StableDiffusionXLControlNetImg2ImgPipeline]]
diffusers.StableDiffusionXLControlNetImg2ImgPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, text_encoder_2: CLIPTextModelWithProjection, tokenizer: CLIPTokenizer, tokenizer_2: CLIPTokenizer, unet: UNet2DConditionModel, controlnet: diffusers.models.controlnets.controlnet.ControlNetModel | list[diffusers.models.controlnets.controlnet.ControlNetModel] | tuple[diffusers.models.controlnets.controlnet.ControlNetModel] | diffusers.models.controlnets.multicontrolnet.MultiControlNetModel, scheduler: KarrasDiffusionSchedulers, requires_aesthetics_score: bool = False, force_zeros_for_empty_prompt: bool = True, add_watermarker: bool | None = None, feature_extractor: CLIPImageProcessorPil = None, image_encoder: CLIPVisionModelWithProjection = None)
Tham số:
vae (AutoencoderKL) : Mô hình Variational Auto-Encoder (VAE) để mã hóa và giải mã hình ảnh sang và từ các biểu diễn ẩn.
text_encoder (CLIPTextModel) : Bộ mã hóa văn bản đóng băng. Stable Diffusion 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 ẩn (latents) của ảnh đã mã hóa.
controlnet (ControlNetModel hoặc list[ControlNetModel]) : Cung cấp điều kiện bổ sung cho unet trong quá trình khử nhiễu. Nếu bạn đặt nhiều ControlNet dưới dạng danh sách, các đầu ra từ mỗi ControlNet sẽ được cộng lại với nhau để tạo thành một điều kiện bổ sung kết hợp.
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") : Xác định xem unet có yêu cầu điều kiện aesthetic_score được truyền vào trong quá trình suy luận hay không. Xem thêm cấu hình của stabilityai/stable-diffusion-xl-refiner-1-0.
force_zeros_for_empty_prompt (bool, tùy chọn, mặc định là "True") : Xác định xem các embedding của prompt tiêu cực có nên được ép buộc luôn đặt về 0 hay không. Xem thêm cấu hình của stabilityai/stable-diffusion-xl-base-1-0.
add_watermarker (bool, tuỳ chọn) : Có sử dụng invisible_watermark library để thêm watermark cho các hình ảnh đầu ra hay không. Nếu không được định nghĩa, giá trị mặc định sẽ là True nếu gói đã được cài đặt, ngược lại sẽ không sử dụng công cụ watermark.
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:
- load_textual_inversion() để nạp các embedding textual inversion
- load_lora_weights() để nạp trọng số LoRA
- save_lora_weights() để lưu trọng số LoRA
- load_ip_adapter() để nạp IP Adapters
call[[diffusers.StableDiffusionXLControlNetImg2ImgPipeline.call]]
__call__(prompt: str | list[str] = None, prompt_2: str | list[str] | None = None, image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, control_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, height: int | None = None, width: int | None = None, strength: float = 0.8, num_inference_steps: int = 50, guidance_scale: float = 5.0, negative_prompt: str | list[str] | None = None, negative_prompt_2: str | list[str] | None = None, num_images_per_prompt: int | None = 1, eta: float = 0.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, ip_adapter_image_embeds: list[torch.Tensor] | None = None, output_type: str | None = 'pil', return_dict: bool = True, cross_attention_kwargs: dict[str, typing.Any] | None = None, controlnet_conditioning_scale: float | list[float] = 0.8, guess_mode: bool = False, control_guidance_start: float | list[float] = 0.0, control_guidance_end: float | list[float] = 1.0, original_size: tuple[int, int] = None, crops_coords_top_left: tuple[int, int] = (0, 0), target_size: tuple[int, int] = None, negative_original_size: tuple[int, int] | None = None, negative_crops_coords_top_left: tuple[int, int] = (0, 0), negative_target_size: tuple[int, int] | None = None, aesthetic_score: float = 6.0, negative_aesthetic_score: float = 2.5, clip_skip: int | None = None, callback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], **kwargs)
Tham số:
prompt (str hoặc list[str], tùy chọn) : Prompt hoặc các prompt để hướng dẫn việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền prompt_embeds thay thế.
prompt_2 (str hoặc list[str], tùy chọn) : Prompt hoặc các prompt cần được gửi đến tokenizer_2 và text_encoder_2. Nếu không được định nghĩa, prompt sẽ được sử dụng cho cả hai text-encoder
image (torch.Tensor, 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]]): Ảnh ban đầu sẽ được sử dụng làm điểm khởi đầu cho quá trình tạo ảnh. Cũng có thể nhận các latent của ả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 (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]]): Điều kiện đầu vào của ControlNet. ControlNet sử dụng điều kiện đầu vào này để tạo ra sự dẫn hướng cho Unet. Nếu kiểu được chỉ định là torch.Tensor, nó sẽ được truyền vào ControlNet nguyên vẹn. PIL.Image.Image cũng có thể được chấp nhận như một hình ảnh. Kích thước của hình ả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 theo chúng. Nếu nhiều ControlNet được chỉ định trong init, các hình ảnh phải được truyền dưới dạng một danh sách sao cho mỗi phần tử của danh sách có thể được batch đúng cách để làm đầu vào cho một controlnet đơn lẻ.
height (int, tuỳ chọn, mặc định là kích thước của control_image) : Chiều cao 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 biệt cho độ phân giải thấp.
width (int, tuỳ chọn, mặc định là kích thước của control_image) : Độ 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 biệt cho độ phân giải thấp.
strength (float, optional, mặc định là 0.8) : Chỉ định mức độ biến đổi ảnh tham chiếu image. Giá trị 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 thêm nhiều nhiễu 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, optional, mặc định là 50) : Số bước khử nhiễu. Số bước khử nhiễu nhiều hơn thường dẫn đến hình ảnh có chất lượng cao hơn, với cái giá là suy luận chậm hơn.
guidance_scale (float, optional, mặc định là 7.5) : Thang độ dẫn hướng như được định nghĩa trong Classifier-Free Diffusion Guidance. 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 được dùng để hướng dẫn việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền negative_prompt_embeds thay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu guidance_scale nhỏ hơn 1).
negative_prompt_2 (str hoặc list[str], tùy chọn) : Prompt hoặc các prompt không dùng để hướng dẫn tạo ảnh, sẽ được gửi đến tokenizer_2 và text_encoder_2. Nếu không được định nghĩa, negative_prompt sẽ được sử dụng cho cả hai text-encoder
num_images_per_prompt (int, tuỳ chọn, mặc định là 1) : Số lượng hình ảnh cần tạo cho mỗi prompt.
eta (float, optional, mặc định là 0.0) : Tương ứng với tham số eta (η) trong bài báo DDIM: https://huggingface.co/papers/2010.02502. Chỉ áp dụng cho schedulers.DDIMScheduler, sẽ bị bỏ qua với các trình lập lịch khác.
generator (torch.Generator hoặc list[torch.Generator], tùy chọn) : Một hoặc một danh sách torch generator để đảm bảo quá trình sinh là tất định.
latents (torch.Tensor, tùy chọn) : Các latents nhiễu đã được tạo trước, được lấy mẫu từ phân phối Gaussian, dùng làm đầu vào cho việc tạo ảnh. Có thể được sử dụng để tinh chỉnh cùng một quá trình tạo với các prompt khác nhau. Nếu không được cung cấp, một tensor latents sẽ được tạo ra bằng cách lấy mẫu sử dụng generator ngẫu nhiên được cung cấp.
prompt_embeds (torch.Tensor, tùy chọn) : Các vector nhúng văn bản đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, các vector nhúng văn bản sẽ được tạo từ đối số đầu vào prompt.
negative_prompt_embeds (torch.Tensor, tùy chọn) : Các vector nhúng văn bản âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vào negative_prompt.
pooled_prompt_embeds (torch.Tensor, tùy chọn) : Các embedding văn bản đã được pool sẵn. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, các embedding văn bản đã pool sẽ được tạo từ đối số đầu vào prompt.
negative_pooled_prompt_embeds (torch.Tensor, tùy chọn) : Các embedding văn bản pooled âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, pooled negative_prompt_embeds sẽ được tạo từ đối số đầu vào negative_prompt.
ip_adapter_image : (PipelineImageInput, tùy chọn): Đầu vào hình ảnh tùy chọn để làm việc với IP Adapters.
ip_adapter_image_embeds (list[torch.Tensor], tùy chọn) : Các embedding ảnh đã tạo trước cho IP-Adapter. Nó phải là một danh sách có độ dài bằng với số lượng IP-adapter. Mỗi phần tử phải là một tensor có hình dạng (batch_size, num_images, emb_dim). Nó phải chứa embedding ảnh âm nếu do_classifier_free_guidance được đặt thành True. Nếu không được cung cấp, các embedding sẽ được tính toán từ đối số đầu vào ip_adapter_image.
output_type (str, tùy chọn, mặc định là "pil") : Định dạng đầu ra của hình ảnh được tạo. Chọn giữa PIL: 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 mà nếu được chỉ định sẽ được truyền đến AttentionProcessor như đã định nghĩa dưới self.processor trong diffusers.models.attention_processor.
controlnet_conditioning_scale (float hoặc list[float], không bắt buộc, 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 scale 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], tuỳ 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], tuỳ 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.
original_size (tuple[int], optional, mặc định là (1024, 1024)) : Nếu original_size không giống với target_size, hình ảnh sẽ có vẻ được giảm hoặc tăng mẫu. original_size mặc định là (height, width) nếu không được chỉ định. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của https://huggingface.co/papers/2307.01952.
crops_coords_top_left (tuple[int], optional, mặc định là (0, 0)) : crops_coords_top_left có thể được dùng để tạo ra một hình ảnh trông như đã được "cắt" từ vị trí crops_coords_top_left trở xuống. Các hình ảnh đẹp, được căn giữa tốt thường đạt được bằng cách đặt crops_coords_top_left thành (0, 0). Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của https://huggingface.co/papers/2307.01952.
target_size (tuple[int], optional, mặc định là (1024, 1024)) : Trong hầu hết các trường hợp, target_size nên được đặt thành chiều cao và chiều rộng mong muốn của hình ảnh được tạo. Nếu không được chỉ định, giá trị mặc định sẽ là (height, width). Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của https://huggingface.co/papers/2307.01952.
negative_original_size (tuple[int], optional, mặc định là (1024, 1024)) : Để điều kiện âm quá trình tạo dựa trên độ phân giải hình ảnh cụ thể. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của https://huggingface.co/papers/2307.01952. Để biết thêm thông tin, hãy tham khảo luồng vấn đề này: https://github.com/huggingface/diffusers/issues/4208.
negative_crops_coords_top_left (tuple[int], optional, mặc định là (0, 0)) : Để điều kiện âm quá trình tạo dựa trên tọa độ cắt cụ thể. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của https://huggingface.co/papers/2307.01952. Để biết thêm thông tin, hãy tham khảo luồng vấn đề này: https://github.com/huggingface/diffusers/issues/4208.
negative_target_size (tuple[int], optional, mặc định là (1024, 1024)) : Để điều kiện âm quá trình tạo dựa trên độ phân giải ảnh mục tiêu. Trong hầu hết các trường hợp, nó nên giống với target_size. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của https://huggingface.co/papers/2307.01952. Để biết thêm thông tin, hãy tham khảo luồng issue này: https://github.com/huggingface/diffusers/issues/4208.
aesthetic_score (float, tuỳ chọn, mặc định là 6.0) : Được dùng để mô phỏng điểm thẩm mỹ của hình ảnh được tạo ra bằng cách ảnh hưởng đến điều kiện văn bản tích cực. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của https://huggingface.co/papers/2307.01952.
negative_aesthetic_score (float, tuỳ chọn, mặc định là 2.5) : Một phần của micro-conditioning trong SDXL như được giải thích trong mục 2.2 của https://huggingface.co/papers/2307.01952. Có thể được sử dụng để mô phỏng điểm thẩm mỹ của hình ảnh được tạo ra bằng cách ảnh hưởng đến điều kiện văn bản âm.
clip_skip (int, optional) : Số lượng lớp cần bỏ qua từ CLIP khi tính toán các prompt embeddings. Giá trị 1 có nghĩa là đầu ra của lớp trước lớp cuối cùng sẽ được sử dụng để tính toán các prompt embeddings.
callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, optional) : Một hàm hoặc một lớp con của PipelineCallback hoặc MultiPipelineCallbacks được gọi vào cuối mỗi bước khử nhiễu trong quá trình suy luận, với các đối số sau: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs sẽ bao gồm một danh sách tất cả các tensor như được chỉ định bởi callback_on_step_end_tensor_inputs.
callback_on_step_end_tensor_inputs (list, optional) : Danh sách các đầu vào tensor cho hàm callback_on_step_end. Các tensor được chỉ định trong danh sách sẽ được truyền dưới dạng tham số callback_kwargs. Bạn chỉ có thể bao gồm các biến được liệt kê trong thuộc tính ._callback_tensor_inputs của lớp pipeline của bạn.
Trả về: 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 accelerate transformers safetensors diffusers
>>> import torch
>>> import numpy as np
>>> from PIL import Image
>>> from transformers import DPTImageProcessor, DPTForDepthEstimation
>>> from diffusers import ControlNetModel, StableDiffusionXLControlNetImg2ImgPipeline, AutoencoderKL
>>> from diffusers.utils import load_image
>>> depth_estimator = DPTForDepthEstimation.from_pretrained("Intel/dpt-hybrid-midas").to("cuda")
>>> feature_extractor = DPTImageProcessor.from_pretrained("Intel/dpt-hybrid-midas")
>>> controlnet = ControlNetModel.from_pretrained(
... "diffusers/controlnet-depth-sdxl-1.0-small",
... variant="fp16",
... use_safetensors=True,
... torch_dtype=torch.float16,
... )
>>> vae = AutoencoderKL.from_pretrained("madebyollin/sdxl-vae-fp16-fix", torch_dtype=torch.float16)
>>> pipe = StableDiffusionXLControlNetImg2ImgPipeline.from_pretrained(
... "stabilityai/stable-diffusion-xl-base-1.0",
... controlnet=controlnet,
... vae=vae,
... variant="fp16",
... use_safetensors=True,
... torch_dtype=torch.float16,
... )
>>> pipe.enable_model_cpu_offload()
>>> def get_depth_map(image):
... image = feature_extractor(images=image, return_tensors="pt").pixel_values.to("cuda")
... with torch.no_grad(), torch.autocast("cuda"):
... depth_map = depth_estimator(image).predicted_depth
... depth_map = torch.nn.functional.interpolate(
... depth_map.unsqueeze(1),
... size=(1024, 1024),
... mode="bicubic",
... align_corners=False,
... )
... depth_min = torch.amin(depth_map, dim=[1, 2, 3], keepdim=True)
... depth_max = torch.amax(depth_map, dim=[1, 2, 3], keepdim=True)
... depth_map = (depth_map - depth_min) / (depth_max - depth_min)
... image = torch.cat([depth_map] * 3, dim=1)
... image = image.permute(0, 2, 3, 1).cpu().numpy()[0]
... image = Image.fromarray((image * 255.0).clip(0, 255).astype(np.uint8))
... return image
>>> prompt = "A robot, 4k photo"
>>> image = load_image(
... "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/kandinsky/cat.png"
... ).resize((1024, 1024))
>>> controlnet_conditioning_scale = 0.5 # recommended for good generalization
>>> depth_image = get_depth_map(image)
>>> images = pipe(
... prompt,
... image=image,
... control_image=depth_image,
... strength=0.99,
... num_inference_steps=50,
... controlnet_conditioning_scale=controlnet_conditioning_scale,
... ).images
>>> images[0].save(f"robot_cat.png")
encode_prompt[[diffusers.StableDiffusionXLControlNetImg2ImgPipeline.encode_prompt]]
encode_prompt(prompt: str, prompt_2: str | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, do_classifier_free_guidance: bool = True, negative_prompt: str | None = None, negative_prompt_2: str | None = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, lora_scale: float | None = None, clip_skip: int | None = None)
Tham số:
prompt (str hoặc list[str], tùy chọn) : prompt cần được mã hóa
prompt_2 (str hoặc list[str], tùy chọn) : Prompt hoặc các prompt cần được gửi đến tokenizer_2 và text_encoder_2. Nếu không được định nghĩa, prompt sẽ được sử dụng cho cả hai text-encoder
device : (torch.device): thiết bị torch
num_images_per_prompt (int) : số lượng hình ảnh cần được tạo cho mỗi prompt
do_classifier_free_guidance (bool) : có sử dụng classifier free guidance hay không
negative_prompt (str hoặc list[str], tùy chọn) : Prompt hoặc các prompt không được dùng để hướng dẫn việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền negative_prompt_embeds thay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu guidance_scale nhỏ hơn 1).
negative_prompt_2 (str hoặc list[str], tùy chọn) : Prompt hoặc các prompt không dùng để hướng dẫn tạo ảnh, sẽ được gửi đến tokenizer_2 và text_encoder_2. Nếu không được định nghĩa, negative_prompt sẽ được sử dụng cho cả hai text-encoder
prompt_embeds (torch.Tensor, tùy chọn) : Các vector nhúng văn bản đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, các vector nhúng văn bản sẽ được tạo từ đối số đầu vào prompt.
negative_prompt_embeds (torch.Tensor, tùy chọn) : Các vector nhúng văn bản âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vào negative_prompt.
pooled_prompt_embeds (torch.Tensor, tùy chọn) : Các embedding văn bản đã được pool sẵn. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, các embedding văn bản đã pool sẽ được tạo từ đối số đầu vào prompt.
negative_pooled_prompt_embeds (torch.Tensor, tùy chọn) : Các embedding văn bản pooled âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, pooled negative_prompt_embeds sẽ được tạo từ đối số đầu vào negative_prompt.
lora_scale (float, tuỳ chọn) : Một hệ số lora sẽ được áp dụng cho tất cả các lớp LoRA của text encoder nếu các lớp LoRA được nạp.
clip_skip (int, optional) : Số lượng lớp cần bỏ qua từ CLIP khi tính toán các prompt embeddings. Giá trị 1 có nghĩa là đầu ra của lớp trước lớp cuối cùng sẽ được sử dụng để tính toán các prompt embeddings.
Mã hóa prompt thành các trạng thái ẩn của text encoder.
StableDiffusionXLControlNetInpaintPipeline[[diffusers.StableDiffusionXLControlNetInpaintPipeline]]
diffusers.StableDiffusionXLControlNetInpaintPipeline[[diffusers.StableDiffusionXLControlNetInpaintPipeline]]
diffusers.StableDiffusionXLControlNetInpaintPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, text_encoder_2: CLIPTextModelWithProjection, tokenizer: CLIPTokenizer, tokenizer_2: CLIPTokenizer, unet: UNet2DConditionModel, controlnet: diffusers.models.controlnets.controlnet.ControlNetModel | list[diffusers.models.controlnets.controlnet.ControlNetModel] | tuple[diffusers.models.controlnets.controlnet.ControlNetModel] | diffusers.models.controlnets.multicontrolnet.MultiControlNetModel, scheduler: KarrasDiffusionSchedulers, requires_aesthetics_score: bool = False, force_zeros_for_empty_prompt: bool = True, add_watermarker: bool | None = None, feature_extractor: transformers.models.clip.image_processing_pil_clip.CLIPImageProcessorPil | None = None, image_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 sang và từ các biểu diễn ẩn.
text_encoder (CLIPTextModel) : Bộ mã hóa văn bản đóng băng. Stable Diffusion XL sử dụng phần văn bản của CLIP, 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 ẩn (latents) của ả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:
- load_textual_inversion() để nạp các embedding textual inversion
- load_lora_weights() để nạp trọng số LoRA
- save_lora_weights() để lưu trọng số LoRA
- from_single_file() để tải các tệp
.ckpt - load_ip_adapter() để nạp IP Adapters
call[[diffusers.StableDiffusionXLControlNetInpaintPipeline.call]]
__call__(prompt: str | list[str] = None, prompt_2: str | list[str] | None = None, image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, mask_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, control_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]]]] = None, height: int | None = None, width: int | None = None, padding_mask_crop: int | None = None, strength: float = 0.9999, num_inference_steps: int = 50, denoising_start: float | None = None, denoising_end: float | None = None, guidance_scale: float = 5.0, negative_prompt: str | list[str] | None = None, negative_prompt_2: str | list[str] | None = None, num_images_per_prompt: int | None = 1, eta: float = 0.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, ip_adapter_image_embeds: list[torch.Tensor] | None = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, output_type: str | None = 'pil', return_dict: bool = True, cross_attention_kwargs: dict[str, typing.Any] | None = None, controlnet_conditioning_scale: float | list[float] = 1.0, guess_mode: bool = False, control_guidance_start: float | list[float] = 0.0, control_guidance_end: float | list[float] = 1.0, guidance_rescale: float = 0.0, original_size: tuple[int, int] = None, crops_coords_top_left: tuple[int, int] = (0, 0), target_size: tuple[int, int] = None, aesthetic_score: float = 6.0, negative_aesthetic_score: float = 2.5, clip_skip: int | None = None, callback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], **kwargs)
Tham số:
prompt (str hoặc list[str], tùy chọn) : Prompt hoặc các prompt để hướng dẫn việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền prompt_embeds thay thế.
prompt_2 (str hoặc list[str], tùy chọn) : Prompt hoặc các prompt cần được gửi đến tokenizer_2 và text_encoder_2. Nếu không được định nghĩa, prompt sẽ được sử dụng cho cả hai text-encoder
image (PIL.Image.Image) : Image, hoặc tensor đại diện cho một lô ảnh sẽ được inpaint, tức là một phần của ảnh sẽ bị che đi bằng mask_image và được vẽ lại theo prompt.
mask_image (PIL.Image.Image) : Image, hoặc tensor đại diện cho một lô ảnh, dùng để tạo mặt nạ cho image. Các pixel trắng trong mặt nạ sẽ được tô lại, trong khi các pixel đen sẽ được giữ nguyên. Nếu mask_image là ảnh PIL, nó sẽ được chuyển đổi thành một kênh duy nhất (độ sáng) trước khi sử dụng. Nếu là tensor, nó phải chứa một kênh màu (L) thay vì 3, do đó hình dạng mong đợi sẽ là (B, H, W, 1).
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. Nếu kiểu được chỉ định là torch.Tensor, nó sẽ được truyền nguyên vẹn cho ControlNet. PIL.Image.Image cũng có thể được chấp nhận dưới dạng hình ảnh. Kích thước của hình ả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 hình ảnh phải được truyền dưới dạng danh sách sao cho mỗi phần tử của 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, tuỳ 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, tuỳ chọn, mặc định là self.unet.config.sample_size * self.vae_scale_factor) : Độ rộng tính bằng pixel của hình ảnh được tạo ra.
padding_mask_crop (int, optional, mặc định là None) : Kích thước của phần lề (margin) trong vùng cắt (crop) sẽ được áp dụng cho ảnh và mặt nạ. Nếu là None, sẽ không áp dụng cắt cho image và mask_image. Nếu padding_mask_crop không phải None, hệ thống sẽ trước tiên tìm một vùng hình chữ nhật có cùng tỷ lệ khung hình với ảnh và chứa toàn bộ vùng bị che, sau đó mở rộng vùng đó dựa trên padding_mask_crop. Ảnh và mask_image sẽ được cắt dựa trên vùng đã mở rộng trước khi được điều chỉnh kích thước về kích thước ảnh gốc để phục vụ inpainting. Điều này hữu ích khi vùng bị che nhỏ trong khi ảnh lớn và chứa thông tin không liên quan đến inpainting, chẳng hạn như nền.
strength (float, optional, mặc định là 0.9999) : Về mặt khái niệm, chỉ ra mức độ biến đổi phần bị che khuất của image tham chiếu. Phải nằm trong khoảng từ 0 đến 1. image sẽ được dùng làm điểm khởi đầu, thêm nhiều nhiễu hơn khi strength càng lớn. Số bước khử nhiễu phụ thuộc vào lượng nhiễu ban đầu được thêm vào. Khi strength là 1, nhiễu được thêm vào sẽ ở mức tối đa và quá trình khử nhiễu sẽ chạy đủ số lần lặp được chỉ định trong num_inference_steps. Do đó, giá trị 1 về cơ bản sẽ bỏ qua phần bị che khuất của image tham chiếu. Lưu ý rằng trong trường hợp denoising_start được khai báo là số nguyên, giá trị của strength sẽ bị bỏ qua.
num_inference_steps (int, optional, mặc định là 50) : Số bước khử nhiễu. Số bước khử nhiễu nhiều hơn thường dẫn đến hình ảnh có chất lượng cao hơn, với cái giá là suy luận chậm hơn.
denoising_start (float, optional) : Khi được chỉ định, cho biết tỷ lệ (từ 0.0 đến 1.0) của toàn bộ quá trình khử nhiễu sẽ bị bỏ qua trước khi bắt đầu. Do đó, phần đầu của quá trình khử nhiễu sẽ bị bỏ qua và image được truyền vào được giả định là một hình ảnh đã được khử nhiễu một phần. Lưu ý rằng khi tham số này được chỉ định, strength sẽ bị bỏ qua. Tham số denoising_start đặc biệt hữu ích khi pipeline này được tích hợp vào cấu hình đa pipeline "Mixture of Denoisers", như được mô tả chi tiết trong Refining the Image Output.
denoising_end (float, optional) : Khi được chỉ định, xác định tỷ lệ (từ 0.0 đến 1.0) của toàn bộ quá trình khử nhiễu cần hoàn thành trước khi bị kết thúc sớm một cách có chủ đích. Kết quả là, mẫu được trả về vẫn sẽ giữ lại một lượng nhiễu đáng kể (khoảng 20% các bước thời gian cuối cùng vẫn cần thiết) và nên được khử nhiễu bởi một pipeline kế tiếp có denoising_start được đặt thành 0.8 để chỉ khử nhiễu 20% cuối cùng của trình lập lịch. Tham số denoising_end lý tưởng nhất nên được sử dụng khi pipeline này là một phần của cấu hình đa pipeline "Mixture of Denoisers", như đã mô tả chi tiết trong Refining the Image Output.
guidance_scale (float, optional, mặc định là 7.5) : Thang độ dẫn hướng như được định nghĩa trong Classifier-Free Diffusion Guidance. 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 được dùng để hướng dẫn việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền negative_prompt_embeds thay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu guidance_scale nhỏ hơn 1).
negative_prompt_2 (str hoặc list[str], tùy chọn) : Prompt hoặc các prompt không dùng để hướng dẫn tạo ảnh, sẽ được gửi đến tokenizer_2 và text_encoder_2. Nếu không được định nghĩa, negative_prompt sẽ được sử dụng cho cả hai text-encoder
prompt_embeds (torch.Tensor, tùy chọn) : Các vector nhúng văn bản đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, các vector nhúng văn bản sẽ được tạo từ đối số đầu vào prompt.
negative_prompt_embeds (torch.Tensor, tùy chọn) : Các vector nhúng văn bản âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vào negative_prompt.
ip_adapter_image : (PipelineImageInput, tùy chọn): Đầu vào hình ảnh tùy chọn để làm việc với IP Adapters.
ip_adapter_image_embeds (list[torch.Tensor], tùy chọn) : Các embedding ảnh đã tạo trước cho IP-Adapter. Nó phải là một danh sách có độ dài bằng với số lượng IP-adapter. Mỗi phần tử phải là một tensor có hình dạng (batch_size, num_images, emb_dim). Nó phải chứa embedding ảnh âm nếu do_classifier_free_guidance được đặt thành True. Nếu không được cung cấp, các embedding sẽ được tính toán từ đối số đầu vào ip_adapter_image.
pooled_prompt_embeds (torch.Tensor, tùy chọn) : Các embedding văn bản đã được pool sẵn. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, các embedding văn bản đã pool sẽ được tạo từ đối số đầu vào prompt.
negative_pooled_prompt_embeds (torch.Tensor, tùy chọn) : Các embedding văn bản pooled âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, pooled negative_prompt_embeds sẽ được tạo từ đối số đầu vào negative_prompt.
num_images_per_prompt (int, tuỳ chọn, mặc định là 1) : Số lượng hình ảnh cần tạo cho mỗi prompt.
eta (float, optional, mặc định là 0.0) : Tương ứng với tham số eta (η) trong bài báo DDIM: https://huggingface.co/papers/2010.02502. Chỉ áp dụng cho schedulers.DDIMScheduler, sẽ bị bỏ qua với các trình lập lịch khác.
generator (torch.Generator, tùy chọn) : Một hoặc một danh sách torch generator(s) để làm cho quá trình sinh trở nên tất định.
latents (torch.Tensor, tùy chọn) : Các latents nhiễu đã được tạo trước, được lấy mẫu từ phân phối Gaussian, dùng làm đầu vào cho việc tạo ảnh. Có thể được sử dụng để tinh chỉnh cùng một quá trình tạo với các prompt khác nhau. Nếu không được cung cấp, một tensor latents sẽ được tạo ra bằng cách lấy mẫu sử dụng generator ngẫu nhiên được cung cấp.
output_type (str, tùy chọn, mặc định là "pil") : Định dạng đầu ra của hình ảnh được tạo. Chọn giữa PIL: 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 mà nếu được chỉ định sẽ được truyền đến AttentionProcessor như đã định nghĩa dưới self.processor trong diffusers.models.attention_processor.
controlnet_conditioning_scale (float hoặc list[float], tuỳ 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 đo tương ứng dưới dạng danh sách.
guess_mode (bool, tùy chọn, mặc định là False) : Bộ mã hóa ControlNet 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 từ 3.0 đến 5.0.
control_guidance_start (float hoặc list[float], tuỳ chọn, mặc định là 0.0) : Tỷ lệ phần trăm của tổng số bước mà tại đó ControlNet bắt đầu áp dụng.
control_guidance_end (float hoặc list[float], tuỳ 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.
guidance_rescale (float, tuỳ chọn, mặc định là 0.0) : Hệ số rescale guidance từ Common Diffusion Noise Schedules and Sample Steps are Flawed.
original_size (tuple[int], optional, mặc định là (1024, 1024)) : Nếu original_size không giống với target_size, hình ảnh sẽ có vẻ 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], optional, mặc định là (0, 0)) : crops_coords_top_left có thể được dùng để tạo ra một hình ảnh trông như đã được "cắt" từ vị trí crops_coords_top_left trở xuống. Các hình ảnh đẹp, được căn giữa tốt thường đạt được bằng cách đặt crops_coords_top_left thành (0, 0). Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của https://huggingface.co/papers/2307.01952.
target_size (tuple[int], optional, mặc định là (1024, 1024)) : Trong hầu hết các trường hợp, target_size nên được đặt thành chiều cao và chiều rộng mong muốn của hình ảnh được tạo ra. Nếu không được chỉ định, giá trị mặc định sẽ là (width, height). Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của https://huggingface.co/papers/2307.01952.
aesthetic_score (float, tuỳ chọn, mặc định là 6.0) : Được dùng để mô phỏng điểm thẩm mỹ của hình ảnh được tạo ra bằng cách ảnh hưởng đến điều kiện văn bản tích cực. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của https://huggingface.co/papers/2307.01952.
negative_aesthetic_score (float, tuỳ chọn, mặc định là 2.5) : Một phần của micro-conditioning trong SDXL như được giải thích trong mục 2.2 của https://huggingface.co/papers/2307.01952. Có thể được sử dụng để mô phỏng điểm thẩm mỹ của hình ảnh được tạo ra bằng cách ảnh hưởng đến điều kiện văn bản âm.
clip_skip (int, optional) : Số lượng lớp cần bỏ qua từ CLIP khi tính toán các prompt embeddings. Giá trị 1 có nghĩa là đầu ra của lớp trước lớp cuối cùng sẽ được sử dụng để tính toán các prompt embeddings.
callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, optional) : Một hàm hoặc một lớp con của PipelineCallback hoặc MultiPipelineCallbacks được gọi vào cuối mỗi bước khử nhiễu trong quá trình suy luận, với các đối số sau: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs sẽ bao gồm một danh sách tất cả các tensor như được chỉ định bởi callback_on_step_end_tensor_inputs.
callback_on_step_end_tensor_inputs (list, optional) : Danh sách các đầu vào tensor cho hàm callback_on_step_end. Các tensor được chỉ định trong danh sách sẽ được truyền dưới dạng tham số callback_kwargs. Bạn chỉ có thể bao gồm các biến được liệt kê trong thuộc tính ._callback_tensor_inputs của lớp pipeline của bạn.
Trả về: ~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput hoặc tuple
~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput nếu return_dict là True, ngược lại là một tuple. tuple. Khi trả về một tuple, phần tử đầu tiên là một danh sách chứa các hình ảnh đã tạo.
Hàm được gọi khi gọi pipeline cho việc sinh.
Ví dụ:
>>> # !pip install transformers accelerate
>>> from diffusers import StableDiffusionXLControlNetInpaintPipeline, ControlNetModel, DDIMScheduler
>>> from diffusers.utils import load_image
>>> from PIL import Image
>>> import numpy as np
>>> import torch
>>> init_image = load_image(
... "https://huggingface.co/datasets/diffusers/test-arrays/resolve/main/stable_diffusion_inpaint/boy.png"
... )
>>> init_image = init_image.resize((1024, 1024))
>>> generator = torch.Generator(device="cpu").manual_seed(1)
>>> mask_image = load_image(
... "https://huggingface.co/datasets/diffusers/test-arrays/resolve/main/stable_diffusion_inpaint/boy_mask.png"
... )
>>> mask_image = mask_image.resize((1024, 1024))
>>> def make_canny_condition(image):
... image = np.array(image)
... image = cv2.Canny(image, 100, 200)
... image = image[:, :, None]
... image = np.concatenate([image, image, image], axis=2)
... image = Image.fromarray(image)
... return image
>>> control_image = make_canny_condition(init_image)
>>> controlnet = ControlNetModel.from_pretrained(
... "diffusers/controlnet-canny-sdxl-1.0", torch_dtype=torch.float16
... )
>>> pipe = StableDiffusionXLControlNetInpaintPipeline.from_pretrained(
... "stabilityai/stable-diffusion-xl-base-1.0", controlnet=controlnet, torch_dtype=torch.float16
... )
>>> pipe.enable_model_cpu_offload()
>>> # generate image
>>> image = pipe(
... "a handsome man with ray-ban sunglasses",
... num_inference_steps=20,
... generator=generator,
... eta=1.0,
... image=init_image,
... mask_image=mask_image,
... control_image=control_image,
... ).images[0]
encode_prompt[[diffusers.StableDiffusionXLControlNetInpaintPipeline.encode_prompt]]
encode_prompt(prompt: str, prompt_2: str | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, do_classifier_free_guidance: bool = True, negative_prompt: str | None = None, negative_prompt_2: str | None = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, lora_scale: float | None = None, clip_skip: int | None = None)
Tham số:
prompt (str hoặc list[str], tùy chọn) : prompt cần được mã hóa
prompt_2 (str hoặc list[str], tùy chọn) : Prompt hoặc các prompt cần được gửi đến tokenizer_2 và text_encoder_2. Nếu không được định nghĩa, prompt sẽ được sử dụng cho cả hai text-encoder
device : (torch.device): thiết bị torch
num_images_per_prompt (int) : số lượng hình ảnh cần được tạo cho mỗi prompt
do_classifier_free_guidance (bool) : có sử dụng classifier free guidance hay không
negative_prompt (str hoặc list[str], tùy chọn) : Prompt hoặc các prompt không được dùng để hướng dẫn việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền negative_prompt_embeds thay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu guidance_scale nhỏ hơn 1).
negative_prompt_2 (str hoặc list[str], tùy chọn) : Prompt hoặc các prompt không dùng để hướng dẫn tạo ảnh, sẽ được gửi đến tokenizer_2 và text_encoder_2. Nếu không được định nghĩa, negative_prompt sẽ được sử dụng cho cả hai text-encoder
prompt_embeds (torch.Tensor, tùy chọn) : Các vector nhúng văn bản đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, các vector nhúng văn bản sẽ được tạo từ đối số đầu vào prompt.
negative_prompt_embeds (torch.Tensor, tùy chọn) : Các vector nhúng văn bản âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vào negative_prompt.
pooled_prompt_embeds (torch.Tensor, tùy chọn) : Các embedding văn bản đã được pool sẵn. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, các embedding văn bản đã pool sẽ được tạo từ đối số đầu vào prompt.
negative_pooled_prompt_embeds (torch.Tensor, tùy chọn) : Các embedding văn bản pooled âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, pooled negative_prompt_embeds sẽ được tạo từ đối số đầu vào negative_prompt.
lora_scale (float, tuỳ chọn) : Một hệ số lora sẽ được áp dụng cho tất cả các lớp LoRA của text encoder nếu các lớp LoRA được nạp.
clip_skip (int, optional) : Số lượng lớp cần bỏ qua từ CLIP khi tính toán các prompt embeddings. Giá trị 1 có nghĩa là đầu ra của lớp trước lớp cuối cùng sẽ được sử dụng để tính toán các prompt embeddings.
Mã hóa prompt thành các trạng thái ẩn của text encoder.
StableDiffusionPipelineOutput[[diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput]]
diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput[[diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput]]
diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput(images: list[PIL.Image.Image] | numpy.ndarray, nsfw_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 cho công việc" (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 Stable Diffusion.
Xet Storage Details
- Size:
- 94.6 kB
- Xet hash:
- 9197c4a31719e7adc5165d121d36f2fb5facbfc24ba36fdc3211f47535260a54
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.