Buckets:
ControlNet
ControlNet was introduced in Adding Conditional Control to Text-to-Image Diffusion Models by Lvmin Zhang, Anyi Rao, and Maneesh Agrawala.
With a ControlNet model, you can provide an additional control image to condition and control Stable Diffusion generation. For example, if you provide a depth map, the ControlNet model generates an image that'll preserve the spatial information from the depth map. It is a more flexible and accurate way to control the image generation process.
The abstract from the paper is:
We present ControlNet, a neural network architecture to add spatial conditioning controls to large, pretrained text-to-image diffusion models. ControlNet locks the production-ready large diffusion models, and reuses their deep and robust encoding layers pretrained with billions of images as a strong backbone to learn a diverse set of conditional controls. The neural architecture is connected with "zero convolutions" (zero-initialized convolution layers) that progressively grow the parameters from zero and ensure that no harmful noise could affect the finetuning. We test various conditioning controls, eg, edges, depth, segmentation, human pose, etc, with Stable Diffusion, using single or multiple conditions, with or without prompts. We show that the training of ControlNets is robust with small (<50k) and large (>1m) datasets. Extensive results show that ControlNet may facilitate wider applications to control image diffusion models.
This pipeline was contributed by ishan24. ❤️ The original codebase can be found at NVlabs/Sana, and you can find official ControlNet checkpoints on Efficient-Large-Model's Hub profile.
SanaControlNetPipeline[[diffusers.SanaControlNetPipeline]]
class diffusers.SanaControlNetPipelinediffusers.SanaControlNetPipeline
Pipeline for text-to-image generation using Sana.
calldiffusers.SanaControlNetPipeline.callstr or List[str], optional) --
The prompt or prompts to guide the image generation. If not defined, one has to pass prompt_embeds.
instead.
- negative_prompt (
strorList[str], optional) -- The prompt or prompts not to guide the image generation. If not defined, one has to passnegative_prompt_embedsinstead. Ignored when not using guidance (i.e., ignored ifguidance_scaleis less than1). - num_inference_steps (
int, optional, defaults to 20) -- The number of denoising steps. More denoising steps usually lead to a higher quality image at the expense of slower inference. - timesteps (
List[int], optional) -- Custom timesteps to use for the denoising process with schedulers which support atimestepsargument in theirset_timestepsmethod. If not defined, the default behavior whennum_inference_stepsis passed will be used. Must be in descending order. - sigmas (
List[float], optional) -- Custom sigmas to use for the denoising process with schedulers which support asigmasargument in theirset_timestepsmethod. If not defined, the default behavior whennum_inference_stepsis passed will be used. - guidance_scale (
float, optional, defaults to 4.5) -- Guidance scale as defined in Classifier-Free Diffusion Guidance.guidance_scaleis defined aswof equation 2. of Imagen Paper. Guidance scale is enabled by settingguidance_scale > 1. Higher guidance scale encourages to generate images that are closely linked to the textprompt, usually at the expense of lower image quality. - 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]]orList[List[PIL.Image.Image]]): The ControlNet input condition to provide guidance to theunetfor generation. If the type is specified astorch.Tensor, it is passed to ControlNet as is.PIL.Image.Imagecan also be accepted as an image. The dimensions of the output image defaults toimage's dimensions. If height and/or width are passed,imageis resized accordingly. If multiple ControlNets are specified ininit, images must be passed as a list such that each element of the list can be correctly batched for input to a single ControlNet. - controlnet_conditioning_scale (
floatorList[float], optional, defaults to 1.0) -- The outputs of the ControlNet are multiplied bycontrolnet_conditioning_scalebefore they are added to the residual in the originalunet. If multiple ControlNets are specified ininit, you can set the corresponding scale as a list. - num_images_per_prompt (
int, optional, defaults to 1) -- The number of images to generate per prompt. - height (
int, optional, defaults to self.unet.config.sample_size) -- The height in pixels of the generated image. - width (
int, optional, defaults to self.unet.config.sample_size) -- The width in pixels of the generated image. - eta (
float, optional, defaults to 0.0) -- Corresponds to parameter eta (η) in the DDIM paper: https://huggingface.co/papers/2010.02502. Only applies to schedulers.DDIMScheduler, will be ignored for others. - generator (
torch.GeneratororList[torch.Generator], optional) -- One or a list of torch generator(s) to make generation deterministic. - latents (
torch.Tensor, optional) -- Pre-generated noisy latents, sampled from a Gaussian distribution, to be used as inputs for image generation. Can be used to tweak the same generation with different prompts. If not provided, a latents tensor will be generated by sampling using the supplied randomgenerator. - prompt_embeds (
torch.Tensor, optional) -- Pre-generated text embeddings. Can be used to easily tweak text inputs, e.g. prompt weighting. If not provided, text embeddings will be generated frompromptinput argument. - prompt_attention_mask (
torch.Tensor, optional) -- Pre-generated attention mask for text embeddings. - negative_prompt_embeds (
torch.Tensor, optional) -- Pre-generated negative text embeddings. For PixArt-Sigma this negative prompt should be "". If not provided, negative_prompt_embeds will be generated fromnegative_promptinput argument. - negative_prompt_attention_mask (
torch.Tensor, optional) -- Pre-generated attention mask for negative text embeddings. - output_type (
str, optional, defaults to"pil") -- The output format of the generate image. Choose between PIL:PIL.Image.Imageornp.array. - return_dict (
bool, optional, defaults toTrue) -- Whether or not to return a~pipelines.stable_diffusion.IFPipelineOutputinstead of a plain tuple. - attention_kwargs --
A kwargs dictionary that if specified is passed along to the
AttentionProcessoras defined underself.processorin diffusers.models.attention_processor. - clean_caption (
bool, optional, defaults toTrue) -- Whether or not to clean the caption before creating embeddings. Requiresbeautifulsoup4andftfyto be installed. If the dependencies are not installed, the embeddings will be created from the raw prompt. - use_resolution_binning (
booldefaults toTrue) -- If set toTrue, the requested height and width are first mapped to the closest resolutions usingASPECT_RATIO_1024_BIN. After the produced latents are decoded into images, they are resized back to the requested resolution. Useful for generating non-square images. - callback_on_step_end (
Callable, optional) -- A function that calls at the end of each denoising steps during the inference. The function is called with the following arguments:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargswill include a list of all tensors as specified bycallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
List, optional) -- The list of tensor inputs for thecallback_on_step_endfunction. The tensors specified in the list will be passed ascallback_kwargsargument. You will only be able to include variables listed in the._callback_tensor_inputsattribute of your pipeline class. - max_sequence_length (
intdefaults to300) -- Maximum sequence length to use with theprompt. - complex_human_instruction (
List[str], optional) -- Instructions for complex human attention: https://github.com/NVlabs/Sana/blob/main/configs/sana_app_config/Sana_1600M_app.yaml#L55.0SanaPipelineOutput ortupleIfreturn_dictisTrue, SanaPipelineOutput is returned, otherwise atupleis returned where the first element is a list with the generated images
Function invoked when calling the pipeline for generation.
Examples:
>>> import torch
>>> from diffusers import SanaControlNetPipeline
>>> from diffusers.utils import load_image
>>> pipe = SanaControlNetPipeline.from_pretrained(
... "ishan24/Sana_600M_1024px_ControlNetPlus_diffusers",
... variant="fp16",
... torch_dtype={"default": torch.bfloat16, "controlnet": torch.float16, "transformer": torch.float16},
... device_map="balanced",
... )
>>> cond_image = load_image(
... "https://huggingface.co/ishan24/Sana_600M_1024px_ControlNet_diffusers/resolve/main/hed_example.png"
... )
>>> prompt = 'a cat with a neon sign that says "Sana"'
>>> image = pipe(
... prompt,
... control_image=cond_image,
... ).images[0]
>>> image.save("output.png")
disable_vae_slicingdiffusers.SanaControlNetPipeline.disable_vae_slicing
Disable sliced VAE decoding. If enable_vae_slicing was previously enabled, this method will go back to
computing decoding in one step.
disable_vae_tilingdiffusers.SanaControlNetPipeline.disable_vae_tiling
Disable tiled VAE decoding. If enable_vae_tiling was previously enabled, this method will go back to
computing decoding in one step.
enable_vae_slicingdiffusers.SanaControlNetPipeline.enable_vae_slicing
Enable sliced VAE decoding. When this option is enabled, the VAE will split the input tensor in slices to compute decoding in several steps. This is useful to save some memory and allow larger batch sizes.
enable_vae_tilingdiffusers.SanaControlNetPipeline.enable_vae_tiling
Enable tiled VAE decoding. When this option is enabled, the VAE will split the input tensor into tiles to compute decoding and encoding in several steps. This is useful for saving a large amount of memory and to allow processing larger images.
encode_promptdiffusers.SanaControlNetPipeline.encode_promptstr or List[str], optional) --
prompt to be encoded
- negative_prompt (
strorList[str], optional) -- The prompt not to guide the image generation. If not defined, one has to passnegative_prompt_embedsinstead. Ignored when not using guidance (i.e., ignored ifguidance_scaleis less than1). For PixArt-Alpha, this should be "". - do_classifier_free_guidance (
bool, optional, defaults toTrue) -- whether to use classifier free guidance or not - num_images_per_prompt (
int, optional, defaults to 1) -- number of images that should be generated per prompt - device -- (
torch.device, optional): torch device to place the resulting embeddings on - prompt_embeds (
torch.Tensor, optional) -- Pre-generated text embeddings. Can be used to easily tweak text inputs, e.g. prompt weighting. If not provided, text embeddings will be generated frompromptinput argument. - negative_prompt_embeds (
torch.Tensor, optional) -- Pre-generated negative text embeddings. For Sana, it's should be the embeddings of the "" string. - clean_caption (
bool, defaults toFalse) -- IfTrue, the function will preprocess and clean the provided caption before encoding. - max_sequence_length (
int, defaults to 300) -- Maximum sequence length to use for the prompt. - complex_human_instruction (
list[str], defaults tocomplex_human_instruction) -- Ifcomplex_human_instructionis not empty, the function will use the complex Human instruction for the prompt.0
Encodes the prompt into text encoder hidden states.
SanaPipelineOutput[[diffusers.pipelines.sana.pipeline_output.SanaPipelineOutput]]
class diffusers.pipelines.sana.pipeline_output.SanaPipelineOutputdiffusers.pipelines.sana.pipeline_output.SanaPipelineOutputList[PIL.Image.Image] or np.ndarray) --
List of denoised PIL images of length batch_size or numpy array of shape (batch_size, height, width, num_channels). PIL images or numpy array present the denoised images of the diffusion pipeline.0
Output class for Sana pipelines.
Xet Storage Details
- Size:
- 21.2 kB
- Xet hash:
- 160c4f4cce75d5adbe1d33bacf12c1398d4f1fbd7633585c26330a84e9fdec8b
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.