AWS Trainium & Inferentia 文件
ControlNet
並獲得增強的文件體驗
開始使用
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")

多 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')

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

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.StableDiffusionPipelineOutput
或 tuple
引數
- 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.Image
或np.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
) — 一個函式或PipelineCallback
或MultiPipelineCallbacks
的子類,在推理期間每個去噪步驟結束時呼叫,引數如下: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.StableDiffusionPipelineOutput
或 tuple
如果 `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.StableDiffusionPipelineOutput
或 tuple
引數
- prompt (
str | list[str]
, 預設為None
) — 用於指導影像生成的提示詞或提示詞列表。如果未定義,則需要傳遞prompt_embeds
。 - prompt_2 (
str | list[str]
, 預設為None
) — 傳送到tokenizer_2
和text_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_2
和text_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.Image
或np.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_size
與target_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
) — 在推理期間,每個去噪步驟結束時呼叫的函式或PipelineCallback
或MultiPipelineCallbacks
的子類,引數如下: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.StableDiffusionPipelineOutput
或 tuple
如果 return_dict
為 True
,則返回 diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput
,否則返回包含輸出影像的 tuple
。
用於生成的管道的呼叫函式。
示例
還有其他擴散功能是您希望我們在 🤗Optimum-neuron
中支援的嗎?請在 Optimum-neuron
Github repo 上提交問題或在 HuggingFace 社群論壇上與我們討論,祝好 🤗!