AWS Trainium & Inferentia 文件

ControlNet

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

ControlNet

ControlNet 透過附加輸入影像來調節穩定擴散模型。在 Optimum Neuron 中,我們支援將一個或多個 ControlNet 與穩定擴散檢查點一起編譯。然後,您可以使用編譯後的工件生成風格化影像。

匯出到 Neuron

我們可以透過 Optimum CLI 或透過傳遞 `controlnet_ids` 的 `NeuronStableDiffusionControlNetPipeline` 類以程式設計方式編譯一個或多個 ControlNet。

選項 1:CLI

optimum-cli export neuron -m stable-diffusion-v1-5/stable-diffusion-v1-5 --batch_size 1 --height 512 --width 512 --controlnet_ids lllyasviel/sd-controlnet-canny --num_images_per_prompt 1 sd_neuron_controlnet/

選項 2:Python API

from optimum.neuron import NeuronStableDiffusionControlNetPipeline

model_id = "stable-diffusion-v1-5/stable-diffusion-v1-5"
controlnet_id = "lllyasviel/sd-controlnet-canny"

# [Neuron] pipeline
input_shapes = {"batch_size": 1, "height": 512, "width": 512, "num_images_per_prompt": 1}
compiler_args = {"auto_cast": "matmul", "auto_cast_type": "bf16"}
pipe = NeuronStableDiffusionControlNetPipeline.from_pretrained(
    model_id,
    controlnet_ids=controlnet_id,
    export=True,
    **input_shapes,
    **compiler_args,
)
pipe.save_pretrained("sd_neuron_controlnet")

文字到影像

對於文字到影像,我們可以指定一個額外的條件輸入。

這是一個帶邊緣影像的示例,即影像在黑色背景上的白色輪廓。ControlNet 將使用邊緣影像作為控制,引導模型生成具有相同輪廓的影像。

import cv2
import numpy as np
from diffusers import UniPCMultistepScheduler
from diffusers.utils import load_image, make_image_grid
from PIL import Image

from optimum.neuron import NeuronStableDiffusionControlNetPipeline


# prepare canny image
original_image = load_image(
    "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/input_image_vermeer.png"
)

image = np.array(original_image)

low_threshold = 100
high_threshold = 200

image = cv2.Canny(image, low_threshold, high_threshold)
image = image[:, :, None]
image = np.concatenate([image, image, image], axis=2)
canny_image = Image.fromarray(image)

# load pre-compiled neuron model
pipe = NeuronStableDiffusionControlNetPipeline.from_pretrained("sd_neuron_controlnet")
pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config)

# inference
output = pipe("the mona lisa", image=canny_image).images[0]
compare = make_image_grid([original_image, canny_image, output], rows=1, cols=3)
compare.save("compare.png")
stable diffusion 1.5 generated image with controlnet.

多 ControlNet

使用 Optimum Neuron,您還可以從不同的影像輸入中組合多個 ControlNet 條件

  • 為 SD1.5 編譯多個 ControlNet
optimum-cli export neuron --inline-weights-neff --model jyoung105/stable-diffusion-v1-5 --task stable-diffusion --auto_cast matmul --auto_cast_type bf16 --batch_size 1 --num_images_per_prompt 1 --controlnet_ids lllyasviel/control_v11p_sd15_openpose lllyasviel/control_v11f1p_sd15_depth --height 512 --width 512 sd15-512x512-bf16-openpose-depth
  • 使用 OpenPose 和深度條件執行 SD1.5
import numpy as np
import torch
from PIL import Image

from controlnet_aux import OpenposeDetector
from transformers import pipeline
from diffusers import UniPCMultistepScheduler
from diffusers.utils import load_image
from optimum.neuron import NeuronStableDiffusionControlNetPipeline


# OpenPose+Depth ControlNet
model_id = "sd15-512x512-bf16-openpose-depth"

# Load ControlNet images

# 1. openpose
image = load_image("https://huggingface.co/lllyasviel/control_v11p_sd15_openpose/resolve/main/images/input.png")
processor = OpenposeDetector.from_pretrained('lllyasviel/ControlNet')
openpose_image = processor(image)

# 2. depth
image = load_image("https://huggingface.co/lllyasviel/control_v11p_sd15_depth/resolve/main/images/input.png")
depth_estimator = pipeline('depth-estimation')
image = depth_estimator(image)['depth']
image = np.array(image)
image = image[:, :, None]
image = np.concatenate([image, image, image], axis=2)
depth_image = Image.fromarray(image)

images = [openpose_image.resize((512, 512)), depth_image.resize((512, 512))]

# 3. inference
pipe = NeuronStableDiffusionControlNetPipeline.from_pretrained(model_id)
pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config)
prompt = "a giant in a fantasy landscape, best quality"
negative_prompt = "monochrome, lowres, bad anatomy, worst quality, low quality"

image = pipe(prompt=prompt, image=images).images[0]
image.save('out.png')
stable diffusion 1.5 generated image with OpenPose and Depth controlnet.

ControlNet 與 Stable Diffusion XL

匯出到 Neuron

optimum-cli export neuron -m stabilityai/stable-diffusion-xl-base-1.0 --task stable-diffusion-xl --batch_size 1 --height 1024 --width 1024 --controlnet_ids diffusers/controlnet-canny-sdxl-1.0-small --num_images_per_prompt 1 sdxl_neuron_controlnet/

文字到影像

import cv2
import numpy as np
from diffusers.utils import load_image
from PIL import Image
from optimum.neuron import NeuronStableDiffusionXLControlNetPipeline

# Inputs
prompt = "aerial view, a futuristic research complex in a bright foggy jungle, hard lighting"
negative_prompt = "low quality, bad quality, sketches"

image = load_image(
    "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/sd_controlnet/hf-logo.png"
)
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)

controlnet_conditioning_scale = 0.5  # recommended for good generalization

pipe = NeuronStableDiffusionXLControlNetPipeline.from_pretrained("sdxl_neuron_controlnet")

images = pipe(
    prompt,
    negative_prompt=negative_prompt,
    image=image,
    controlnet_conditioning_scale=controlnet_conditioning_scale,
).images
images[0].save("hug_lab.png")
stable diffusion xl generated image with controlnet.

NeuronStableDiffusionControlNetPipeline

optimum.neuron.NeuronStableDiffusionControlNetPipeline

< >

( config: dict[str, typing.Any] configs: dict[str, 'PretrainedConfig'] neuron_configs: dict[str, 'NeuronDefaultConfig'] data_parallel_mode: typing.Literal['none', 'unet', 'transformer', 'all'] scheduler: diffusers.schedulers.scheduling_utils.SchedulerMixin | None vae_decoder: torch.jit._script.ScriptModule | NeuronModelVaeDecoder text_encoder: torch.jit._script.ScriptModule | NeuronModelTextEncoder | None = None text_encoder_2: torch.jit._script.ScriptModule | NeuronModelTextEncoder | None = None unet: torch.jit._script.ScriptModule | NeuronModelUnet | None = None transformer: torch.jit._script.ScriptModule | NeuronModelTransformer | None = None vae_encoder: torch.jit._script.ScriptModule | NeuronModelVaeEncoder | None = None image_encoder: torch.jit._script.ScriptModule | None = None safety_checker: torch.jit._script.ScriptModule | None = None tokenizer: transformers.models.clip.tokenization_clip.CLIPTokenizer | transformers.models.t5.tokenization_t5.T5Tokenizer | None = None tokenizer_2: transformers.models.clip.tokenization_clip.CLIPTokenizer | None = None feature_extractor: transformers.models.clip.feature_extraction_clip.CLIPFeatureExtractor | None = None controlnet: torch.jit._script.ScriptModule | list[torch.jit._script.ScriptModule]| NeuronControlNetModel | NeuronMultiControlNetModel | None = None requires_aesthetics_score: bool = False force_zeros_for_empty_prompt: bool = True add_watermarker: bool | None = None model_save_dir: str | pathlib.Path | tempfile.TemporaryDirectory | None = None model_and_config_save_paths: dict[str, tuple[str, pathlib.Path]] | None = None )

__call__

< >

( prompt: str | list[str] | None = None image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, typing.List[PIL.Image.Image], typing.List[numpy.ndarray], typing.List[torch.Tensor]] = None num_inference_steps: int = 50 timesteps: list[int] | None = None sigmas: list[float] | None = None guidance_scale: float = 7.5 negative_prompt: str | list[str] | None = None num_images_per_prompt: int | None = 1 eta: float = 0.0 generator: torch._C.Generator | list[torch._C.Generator] | None = None latents: torch.Tensor | None = None prompt_embeds: torch.Tensor | None = None negative_prompt_embeds: torch.Tensor | None = None ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, typing.List[PIL.Image.Image], typing.List[numpy.ndarray], typing.List[torch.Tensor], NoneType] = None ip_adapter_image_embeds: list[torch.Tensor] | None = None output_type: str = '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 clip_skip: int | None = None callback_on_step_end: typing.Union[typing.Callable[[int, int, dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None callback_on_step_end_tensor_inputs: list[str] = ['latents'] **kwargs ) diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutputtuple

引數

  • prompt (str | list[str] | None, 預設為 None) — 用於引導影像生成的提示或提示列表。如果未定義,需要傳遞 prompt_embeds
  • image ("PipelineImageInput" | None, 預設為 None) — ControlNet 輸入條件,用於為 unet 的生成提供引導。如果型別指定為 torch.Tensor,則直接傳遞給 ControlNet。PIL.Image.Image 也可以作為影像接受。輸出影像的尺寸預設為 image 的尺寸。如果傳遞了 height 和/或 width,則 image 會相應地調整大小。如果在 init 中指定了多個 ControlNet,則影像必須作為列表傳遞,以便列表的每個元素都可以正確批處理以輸入到單個 ControlNet。當 prompt 是一個列表時,如果為單個 ControlNet 傳遞了影像列表,則每個影像將與 prompt 列表中的每個提示配對。這也適用於多個 ControlNet,其中可以傳遞影像列表的列表,以批處理每個提示和每個 ControlNet。
  • num_inference_steps (int, 預設為 50) — 去噪步數。更多去噪步數通常會帶來更高質量的影像,但推理速度較慢。
  • timesteps (list[int] | None, 預設為 None) — 自定義時間步長,用於支援 set_timesteps 方法中 timesteps 引數的排程器進行去噪過程。如果未定義,將使用傳遞 num_inference_steps 時的預設行為。必須按降序排列。
  • sigmas (list[int] | None, 預設為 None) — 自定義 sigma,用於支援 set_timesteps 方法中 sigmas 引數的排程器進行去噪過程。如果未定義,將使用傳遞 num_inference_steps 時的預設行為。
  • guidance_scale (float, 預設為 7.5) — 較高的引導比例值會促使模型生成與文字 prompt 緊密相關的影像,但影像質量較低。當 guidance_scale > 1 時啟用引導比例。
  • negative_prompt (str | list[str] | None, 預設為 None) — 用於引導影像生成中不包含內容的提示或提示列表。如果未定義,則需要傳遞 negative_prompt_embeds。當不使用引導時 (guidance_scale < 1) 忽略。
  • num_images_per_prompt (int, 預設為 1) — 每個提示生成的影像數量。如果與編譯時使用的批處理大小不同,則會被 neuron 的靜態批處理大小覆蓋(動態批處理除外)。
  • eta (float, 預設為 0.0) — 對應於 DDIM 論文中的引數 eta (η)。僅適用於 diffusers.schedulers.DDIMScheduler,在其他排程器中忽略。
  • generator (torch.Generator | list[torch.Generator] | None, 預設為 None) — 一個 torch.Generator,用於使生成確定化。
  • latents (torch.Tensor | None, 預設為 None) — 從高斯分佈中取樣的預生成噪聲潛在變數,用作影像生成的輸入。可用於使用不同的提示調整相同的生成。如果未提供,則使用提供的隨機 generator 取樣生成潛在張量。
  • prompt_embeds (torch.Tensor | None, 預設為 None) — 預生成的文字嵌入。可用於輕鬆調整文字輸入(提示權重)。如果未提供,則從 prompt 輸入引數生成文字嵌入。
  • negative_prompt_embeds (torch.Tensor | None, 預設為 None) — 預生成的負文字嵌入。可用於輕鬆調整文字輸入(提示權重)。如果未提供,則從 negative_prompt 輸入引數生成 negative_prompt_embeds
  • ip_adapter_image — (PipelineImageInput | None, 預設為 None): 可選的影像輸入,用於與 IP 介面卡配合使用。
  • ip_adapter_image_embeds (list[torch.Tensor] | None, 預設為 None) — 用於 IP-Adapter 的預生成影像嵌入。它應該是一個長度與 IP 介面卡數量相同的列表。每個元素應該是一個形狀為 (batch_size, num_images, emb_dim) 的張量。如果 do_classifier_free_guidance 設定為 True,它應該包含負影像嵌入。如果未提供,則從 ip_adapter_image 輸入引數計算嵌入。
  • output_type (str, 預設為 "pil") — 生成影像的輸出格式。選擇 PIL.Imagenp.array
  • return_dict (bool, 預設為 True) — 是否返回 diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput 而不是普通元組。
  • cross_attention_kwargs (dict[str, Any] | None, 預設為 None) — 如果指定,則將 kwargs 字典傳遞給 self.processor 中定義的 AttentionProcessor
  • controlnet_conditioning_scale (float | list[float], 預設為 1.0) — ControlNet 的輸出在新增到原始 unet 中的殘差之前,乘以 controlnet_conditioning_scale。如果 init 中指定了多個 ControlNet,可以將相應的比例設定為列表。
  • guess_mode (bool, 預設為 False) — ControlNet 編碼器即使您刪除所有提示也會嘗試識別輸入影像的內容。建議 guidance_scale 值在 3.0 到 5.0 之間。
  • control_guidance_start (float | list[float], 預設為 0.0) — ControlNet 開始應用的步驟總數的百分比。
  • control_guidance_end (float | list[float], 可選, 預設為 1.0) — ControlNet 停止應用的步驟總數的百分比。
  • clip_skip (int | None, 預設為 None) — 在計算提示嵌入時,從 CLIP 跳過的層數。值為 1 表示將使用預最終層的輸出計算提示嵌入。
  • callback_on_step_end (Callable[[int, int, dict], None] | PipelineCallback | MultiPipelineCallbacks | None, 預設為 None) — 一個函式或 PipelineCallbackMultiPipelineCallbacks 的子類,在推理期間每個去噪步驟結束時呼叫,引數如下:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: dict)callback_kwargs 將包含 callback_on_step_end_tensor_inputs 指定的所有張量列表。
  • callback_on_step_end_tensor_inputs (list[str], 預設為 ["latents"]) — callback_on_step_end 函式的張量輸入列表。列表中指定的張量將作為 callback_kwargs 引數傳遞。您只能包含管道類 ._callback_tensor_inputs 屬性中列出的變數。

返回

diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutputtuple

如果 `return_dict` 為 `True`,則返回 `diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput`,否則返回一個 `tuple`,其中第一個元素是生成的影像列表,第二個元素是一個 `bool` 列表,指示相應的生成影像是否包含“不適合工作”(nsfw) 內容。

用於生成的管道的呼叫函式。

NeuronStableDiffusionXLControlNetPipeline

optimum.neuron.NeuronStableDiffusionXLControlNetPipeline

< >

( config: dict[str, typing.Any] configs: dict[str, 'PretrainedConfig'] neuron_configs: dict[str, 'NeuronDefaultConfig'] data_parallel_mode: typing.Literal['none', 'unet', 'transformer', 'all'] scheduler: diffusers.schedulers.scheduling_utils.SchedulerMixin | None vae_decoder: torch.jit._script.ScriptModule | NeuronModelVaeDecoder text_encoder: torch.jit._script.ScriptModule | NeuronModelTextEncoder | None = None text_encoder_2: torch.jit._script.ScriptModule | NeuronModelTextEncoder | None = None unet: torch.jit._script.ScriptModule | NeuronModelUnet | None = None transformer: torch.jit._script.ScriptModule | NeuronModelTransformer | None = None vae_encoder: torch.jit._script.ScriptModule | NeuronModelVaeEncoder | None = None image_encoder: torch.jit._script.ScriptModule | None = None safety_checker: torch.jit._script.ScriptModule | None = None tokenizer: transformers.models.clip.tokenization_clip.CLIPTokenizer | transformers.models.t5.tokenization_t5.T5Tokenizer | None = None tokenizer_2: transformers.models.clip.tokenization_clip.CLIPTokenizer | None = None feature_extractor: transformers.models.clip.feature_extraction_clip.CLIPFeatureExtractor | None = None controlnet: torch.jit._script.ScriptModule | list[torch.jit._script.ScriptModule]| NeuronControlNetModel | NeuronMultiControlNetModel | None = None requires_aesthetics_score: bool = False force_zeros_for_empty_prompt: bool = True add_watermarker: bool | None = None model_save_dir: str | pathlib.Path | tempfile.TemporaryDirectory | None = None model_and_config_save_paths: dict[str, tuple[str, pathlib.Path]] | None = None )

__call__

< >

( prompt: str | list[str] | None = None prompt_2: str | list[str] | None = None image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, typing.List[PIL.Image.Image], typing.List[numpy.ndarray], typing.List[torch.Tensor], NoneType] = None num_inference_steps: int = 50 timesteps: list[int] | None = None sigmas: list[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: torch._C.Generator | list[torch._C.Generator] | None = None latents: torch.Tensor | None = None prompt_embeds: torch.Tensor | None = None negative_prompt_embeds: torch.Tensor | None = None pooled_prompt_embeds: torch.Tensor | None = None negative_pooled_prompt_embeds: torch.Tensor | None = None ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, typing.List[PIL.Image.Image], typing.List[numpy.ndarray], typing.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 = None crops_coords_top_left: tuple[int, int] = (0, 0) target_size: tuple[int, int] | None = None negative_original_size: tuple[int, int] | None = None negative_crops_coords_top_left: tuple[int, int] = (0, 0) negative_target_size: tuple[int, int] | None = None clip_skip: int | None = None callback_on_step_end: typing.Union[typing.Callable[[int, int, dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None callback_on_step_end_tensor_inputs: list[str] = ['latents'] **kwargs ) diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutputtuple

引數

  • prompt (str | list[str], 預設為 None) — 用於指導影像生成的提示詞或提示詞列表。如果未定義,則需要傳遞 prompt_embeds
  • prompt_2 (str | list[str], 預設為 None) — 傳送到 tokenizer_2text_encoder_2 的提示詞或提示詞列表。如果未定義,prompt 將用於兩個文字編碼器。
  • image (PipelineImageInput | None, 預設為 None) — ControlNet 輸入條件,用於為 unet 生成提供指導。如果型別指定為 torch.Tensor,則直接將其傳遞給 ControlNet。PIL.Image.Image 也可以作為影像接受。輸出影像的尺寸預設為 image 的尺寸。如果傳遞了高度和/或寬度,則 image 將相應地調整大小。如果在 init 中指定了多個 ControlNet,則影像必須作為列表傳遞,以便列表的每個元素都可以正確地批處理以輸入到單個 ControlNet。
  • num_inference_steps (int, 預設為 50) — 去噪步數。更多的去噪步數通常會帶來更高質量的影像,但推理速度會變慢。
  • timesteps (list[int] | None, 預設為 None) — 用於支援 timesteps 引數的排程器的去噪過程的自定義時間步。如果未定義,將使用傳遞 num_inference_steps 時的預設行為。必須按降序排列。
  • sigmas (list[float] | None, 預設為 None) — 用於支援 sigmas 引數的排程器的去噪過程的自定義 sigma 值。如果未定義,將使用傳遞 num_inference_steps 時的預設行為。
  • denoising_end (float | None, 預設為 None) — 指定時,確定在有意提前終止之前要完成的總去噪過程的分數(介於 0.0 和 1.0 之間)。因此,返回的樣本將根據排程器選擇的離散時間步保留大量噪聲。denoising_end 引數理想情況下應在管道構成“去噪器混合”多管道設定的一部分時使用,如最佳化影像輸出中所詳述。
  • guidance_scale (float, 預設為 5.0) — 較高的指導比例值會鼓勵模型生成與文字 prompt 緊密相關的影像,但會犧牲影像質量。當 guidance_scale > 1 時,啟用指導比例。
  • negative_prompt (str | list[str] | None, 預設為 None) — 用於指導影像生成中不包含內容的提示詞或提示詞列表。如果未定義,則需要傳遞 negative_prompt_embeds。當不使用指導時 (guidance_scale < 1) 忽略。
  • negative_prompt_2 (str | list[str] | None, 預設為 None) — 用於指導影像生成中不包含內容的提示詞或提示詞列表。這將被髮送到 tokenizer_2text_encoder_2。如果未定義,negative_prompt 將用於兩個文字編碼器。
  • num_images_per_prompt (int, 預設為 1) — 每個提示詞生成的影像數量。
  • eta (float, 預設為 0.0) — 對應於 DDIM 論文中的引數 eta (η)。僅適用於 diffusers.schedulers.DDIMScheduler,在其他排程器中被忽略。
  • generator (torch.Generator | list[torch.Generator] | None, 預設為 None) — 用於使生成具有確定性的 torch.Generator
  • latents (torch.Tensor | None, 預設為 None) — 從高斯分佈中取樣的預生成噪聲潛在變數,用作影像生成的輸入。可用於使用不同的提示詞調整相同的生成。如果未提供,則使用提供的隨機 generator 進行取樣生成一個潛在張量。
  • prompt_embeds (torch.Tensor | None, 預設為 None) — 預生成的文字嵌入。可用於輕鬆調整文字輸入(提示詞權重)。如果未提供,文字嵌入將從 prompt 輸入引數生成。
  • negative_prompt_embeds (torch.Tensor | None, 預設為 None) — 預生成的負文字嵌入。可用於輕鬆調整文字輸入(提示詞權重)。如果未提供,negative_prompt_embeds 將從 negative_prompt 輸入引數生成。
  • pooled_prompt_embeds (torch.Tensor | None, 預設為 None) — 預生成的池化文字嵌入。可用於輕鬆調整文字輸入(提示詞權重)。如果未提供,池化文字嵌入將從 prompt 輸入引數生成。
  • negative_pooled_prompt_embeds (torch.Tensor | None, 預設為 None) — 預生成的負池化文字嵌入。可用於輕鬆調整文字輸入(提示詞權重)。如果未提供,池化 negative_prompt_embeds 將從 negative_prompt 輸入引數生成。
  • ip_adapter_image (PipelineImageInput | None, 預設為 None) — 可選的影像輸入,用於與 IP 介面卡配合使用。
  • ip_adapter_image_embeds (list[torch.Tensor] | None, 預設為 None) — IP-Adapter 的預生成影像嵌入。它應該是一個列表,長度與 IP 介面卡數量相同。每個元素都應該是一個形狀為 (batch_size, num_images, emb_dim) 的張量。如果 do_classifier_free_guidance 設定為 True,它應該包含負影像嵌入。如果未提供,嵌入將從 ip_adapter_image 輸入引數計算。
  • output_type (str | None, 預設為 "pil") — 生成影像的輸出格式。選擇 PIL.Imagenp.array
  • return_dict (bool, 預設為 True) — 是否返回 ~pipelines.stable_diffusion.StableDiffusionPipelineOutput 而不是普通元組。
  • cross_attention_kwargs (dict[str, Any] | None, 預設為 None) — 如果指定,則作為 kwargs 字典傳遞給 self.processor 中定義的 AttentionProcessor
  • controlnet_conditioning_scale (float | list[float], 預設為 1.0) — ControlNet 的輸出在新增到原始 unet 中的殘差之前乘以 controlnet_conditioning_scale。如果在 init 中指定了多個 ControlNet,則可以將相應的比例設定為列表。
  • guess_mode (bool, 預設為 False) — 即使您刪除所有提示詞,ControlNet 編碼器也會嘗試識別輸入影像的內容。建議 guidance_scale 值在 3.0 到 5.0 之間。
  • control_guidance_start (float | list[float], 預設為 0.0) — ControlNet 開始應用的步數總百分比。
  • control_guidance_end (float | list[float], 預設為 1.0) — ControlNet 停止應用的步數總百分比。
  • original_size (tuple[int, int] | None, 預設為 (1024, 1024)) — 如果 original_sizetarget_size 不相同,則影像將顯示為縮小或放大。如果未指定,original_size 預設為 (height, width)。SDXL 微條件的一部分,如 https://huggingface.co/papers/2307.01952 第 2.2 節所述。
  • crops_coords_top_left (tuple[int, int], 預設為 (0, 0)) — crops_coords_top_left 可用於生成一個看起來像是從 crops_coords_top_left 位置向下“裁剪”的影像。通常透過將 crops_coords_top_left 設定為 (0, 0) 來獲得效果良好、居中的影像。SDXL 微條件的一部分,如 https://huggingface.co/papers/2307.01952 第 2.2 節所述。
  • target_size (tuple[int, int] | None, 預設為 None) — 在大多數情況下,target_size 應設定為生成影像所需的寬度和高度。如果未指定,它將預設為 (height, width)。SDXL 微條件的一部分,如 https://huggingface.co/papers/2307.01952 第 2.2 節所述。
  • negative_original_size (tuple[int, int] | None, 預設為 None) — 用於根據特定影像解析度對生成過程進行負面條件化。SDXL 微條件的一部分,如 https://huggingface.co/papers/2307.01952 第 2.2 節所述。有關更多資訊,請參閱此問題討論串:https://github.com/huggingface/diffusers/issues/4208
  • negative_crops_coords_top_left (tuple[int, int], 預設為 (0, 0)) — 用於根據特定裁剪座標對生成過程進行負面條件化。SDXL 微條件的一部分,如 https://huggingface.co/papers/2307.01952 第 2.2 節所述。有關更多資訊,請參閱此問題討論串:https://github.com/huggingface/diffusers/issues/4208
  • negative_target_size (tuple[int, int] | None, 預設為 None) — 用於根據目標影像解析度對生成過程進行負面條件化。在大多數情況下,它應該與 target_size 相同。SDXL 微條件的一部分,如 https://huggingface.co/papers/2307.01952 第 2.2 節所述。有關更多資訊,請參閱此問題討論串:https://github.com/huggingface/diffusers/issues/4208
  • clip_skip (int | None, 預設為 None) — 在計算提示詞嵌入時,從 CLIP 跳過的層數。值為 1 表示將使用倒數第二層的輸出計算提示詞嵌入。
  • callback_on_step_end (Callable[[int, int, dict], None] | PipelineCallback | MultiPipelineCallbacks | None, 預設為 None) — 在推理期間,每個去噪步驟結束時呼叫的函式或 PipelineCallbackMultiPipelineCallbacks 的子類,引數如下:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: dict)callback_kwargs 將包含 callback_on_step_end_tensor_inputs 中指定的所有張量列表。
  • callback_on_step_end_tensor_inputs (list[str], 預設為 ["latents"]) — 用於 callback_on_step_end 函式的張量輸入列表。列表中指定的張量將作為 callback_kwargs 引數傳遞。您只能包含管道類的 ._callback_tensor_inputs 屬性中列出的變數。

返回

diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutputtuple

如果 return_dictTrue,則返回 diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput,否則返回包含輸出影像的 tuple

用於生成的管道的呼叫函式。

示例

還有其他擴散功能是您希望我們在 🤗Optimum-neuron 中支援的嗎?請在 Optimum-neuron Github repo 上提交問題或在 HuggingFace 社群論壇上與我們討論,祝好 🤗!

© . This site is unofficial and not affiliated with Hugging Face, Inc.