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.ac.cn/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.ac.cn/papers/2307.01952 第 2.2 节所述。 - target_size (
tuple[int, int] | None
, 默认为None
) — 在大多数情况下,target_size
应设置为生成图像所需的宽度和高度。如果未指定,它将默认为(height, width)
。SDXL 微条件的一部分,如 https://huggingface.ac.cn/papers/2307.01952 第 2.2 节所述。 - negative_original_size (
tuple[int, int] | None
, 默认为None
) — 用于根据特定图像分辨率对生成过程进行负面条件化。SDXL 微条件的一部分,如 https://huggingface.ac.cn/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.ac.cn/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.ac.cn/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 社区论坛上与我们讨论,祝好 🤗!