Buckets:

hf-doc-build/doc / diffusers /main /fr /api /pipelines /controlnet_flux.md
mishig's picture
|
download
raw
21.6 kB

ControlNet avec Flux.1

FluxControlNetPipeline est une implémentation de ControlNet pour Flux.1.

ControlNet a été introduit dans Adding Conditional Control to Text-to-Image Diffusion Models par Lvmin Zhang, Anyi Rao et Maneesh Agrawala.

Avec un modèle ControlNet, vous pouvez fournir une image de contrôle supplémentaire pour conditionner et contrôler la génération de Stable Diffusion. Par exemple, si vous fournissez une carte de profondeur, le modèle ControlNet génère une image qui préserve les informations spatiales de la carte de profondeur. C'est une méthode plus flexible et plus précise pour contrôler le processus de génération d'images.

L'abstract de l'article est :

Nous présentons ControlNet, une architecture de réseau de neurones permettant d’ajouter des contrôles de conditionnement spatial à de grands modèles de diffusion texte-vers-image pré-entraînés. ControlNet verrouille les grands modèles de diffusion prêts pour la production et réutilise leurs couches d’encodage profondes et robustes, pré-entraînées sur des milliards d’images, comme un socle solide pour apprendre un ensemble varié de contrôles conditionnels. L’architecture neuronale est connectée par des « zéro convolutions » (couches de convolution initialisées à zéro) qui font progressivement croître les paramètres depuis zéro et garantissent qu’aucun bruit nuisible ne puisse affecter l’ajustement fin. Nous testons divers contrôles de conditionnement, par exemple les contours, la profondeur, la segmentation, la pose humaine, etc., avec Stable Diffusion, en utilisant une ou plusieurs conditions, avec ou sans prompts. Nous montrons que l’entraînement des ControlNets est robuste avec des jeux de données petits (<50k) et grands (>1m). Des résultats étendus montrent que ControlNet peut faciliter des applications plus larges pour contrôler les modèles de diffusion d’images.

Ce code de ControlNet est implémenté par The InstantX Team. Vous pouvez trouver des points de contrôle pré-entraînés pour Flux-ControlNet dans le tableau ci-dessous :

Type de ControlNet Développeur Lien
Canny L'équipe InstantX Lien
Profondeur L'équipe InstantX Lien
Union L'équipe InstantX Lien

Les ControlNets de XLabs sont également pris en charge, une contribution de l'équipe XLabs.

Type de ControlNet Développeur Lien
Canny L’équipe XLabs Lien
Profondeur L’équipe XLabs Lien
HED L’équipe XLabs Lien

Pensez à consulter le guide des Schedulers pour apprendre à explorer le compromis entre la vitesse et la qualité du scheduler, et à consulter la section réutilisation des composants entre les pipelines pour apprendre à charger efficacement les mêmes composants dans plusieurs pipelines.

FluxControlNetPipeline[[diffusers.FluxControlNetPipeline]]

diffusers.FluxControlNetPipeline[[diffusers.FluxControlNetPipeline]]

diffusers.FluxControlNetPipeline(scheduler: FlowMatchEulerDiscreteScheduler, vae: AutoencoderKL, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, text_encoder_2: T5EncoderModel, tokenizer_2: T5Tokenizer, transformer: FluxTransformer2DModel, controlnet: diffusers.models.controlnets.controlnet_flux.FluxControlNetModel | list[diffusers.models.controlnets.controlnet_flux.FluxControlNetModel] | tuple[diffusers.models.controlnets.controlnet_flux.FluxControlNetModel] | diffusers.models.controlnets.controlnet_flux.FluxMultiControlNetModel, image_encoder: CLIPVisionModelWithProjection = None, feature_extractor: CLIPImageProcessorPil = None)

Source

Paramètres :

transformer (FluxTransformer2DModel) : architecture Transformer conditionnelle (MMDiT) pour le débruitage des latents d'image encodés.

scheduler (FlowMatchEulerDiscreteScheduler) : un planificateur à utiliser en combinaison avec transformer pour débruyer les latents d'image encodés.

vae (AutoencoderKL) : Modèle de Variational Auto-Encoder (VAE) pour encoder et décoder des images vers et depuis des représentations latentes.

text_encoder (CLIPTextModel) : CLIP, plus précisément la variante clip-vit-large-patch14.

text_encoder_2 (T5EncoderModel) : T5, plus précisément la variante google/t5-v1_1-xxl.

tokenizer (CLIPTokenizer) : Tokenizer de la classe CLIPTokenizer.

tokenizer_2 (T5TokenizerFast) : Second Tokenizer de la classe T5TokenizerFast.

Le pipeline Flux pour la génération d'images à partir de texte.

Référence : https://blackforestlabs.ai/announcing-black-forest-labs/

appel[[diffusers.FluxControlNetPipeline.call]]

__call__(prompt: str | list[str] = None, prompt_2: str | list[str] | None = None, negative_prompt: str | list[str] = None, negative_prompt_2: str | list[str] | None = None, true_cfg_scale: float = 1.0, height: int | None = None, width: int | None = None, num_inference_steps: int = 28, sigmas: list[float] | None = None, guidance_scale: float = 7.0, control_guidance_start: float | list[float] = 0.0, control_guidance_end: float | list[float] = 1.0, control_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, control_mode: int | list[int] | None = None, controlnet_conditioning_scale: float | list[float] = 1.0, num_images_per_prompt: int | None = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.FloatTensor] = None, prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = 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, negative_ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, negative_ip_adapter_image_embeds: list[torch.Tensor] | None = None, negative_prompt_embeds: typing.Optional[torch.FloatTensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, output_type: str | None = 'pil', return_dict: bool = True, joint_attention_kwargs: dict[str, typing.Any] | None = None, callback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], max_sequence_length: int = 512)

Source

Paramètres :

prompt (str ou list[str], facultatif) : Le prompt ou les prompts pour guider la génération d’image. S’il n’est pas défini, il faut passer prompt_embeds à la place.

prompt_2 (str ou list[str], facultatif) : Le prompt ou les prompts à envoyer à tokenizer_2 et text_encoder_2. S'il n'est pas défini, prompt sera utilisé à la place

negative_prompt (str ou list[str], facultatif) : Le prompt ou les prompts à ne pas utiliser pour guider la génération de l'image. S'il n'est pas défini, il faut passer negative_prompt_embeds à la place. Ignoré lorsque le guidage n'est pas utilisé (c'est-à-dire ignoré si true_cfg_scale n'est pas supérieur à 1).

negative_prompt_2 (str ou list[str], facultatif) : Le prompt ou les prompts à ne pas utiliser pour guider la génération d’image, à envoyer à tokenizer_2 et text_encoder_2. S’il n’est pas défini, negative_prompt est utilisé dans tous les encodeurs de texte.

true_cfg_scale (float, facultatif, valeur par défaut 1.0) : le guidance sans classifieur (échelle de guidance) est activé lorsque true_cfg_scale > 1 et que negative_prompt est fourni.

height (int, facultatif, par défaut self.unet.config.sample_size * self.vae_scale_factor) : La hauteur en pixels de l'image générée. Cette valeur est fixée à 1024 par défaut pour obtenir les meilleurs résultats.

width (int, facultatif, par défaut self.unet.config.sample_size * self.vae_scale_factor) : La largeur en pixels de l'image générée. Cette valeur est fixée à 1024 par défaut pour obtenir les meilleurs résultats.

num_inference_steps (int, facultatif, valeur par défaut 50) : Le nombre d'étapes de débruitage. Un plus grand nombre d'étapes de débruitage conduit généralement à une image de meilleure qualité, au prix d'une inférence plus lente.

sigmas (list[float], facultatif) : Sigmas personnalisés à utiliser pour le processus de débruitage avec les planificateurs qui prennent en charge un argument sigmas dans leur méthode set_timesteps. S'ils ne sont pas définis, le comportement par défaut lorsque num_inference_steps est passé sera utilisé.

guidance_scale (float, facultatif, valeur par défaut 7.0) : Échelle de guidage telle que définie dans Classifier-Free Diffusion Guidance. guidance_scale est défini comme w de l'équation 2. de Imagen Paper. L'échelle de guidage est activée en définissant guidance_scale > 1. Une échelle de guidage plus élevée encourage la génération d'images étroitement liées au prompt texte, généralement au détriment de la qualité de l'image.

control_guidance_start (float ou list[float], facultatif, valeur par défaut 0.0) : Le pourcentage des étapes totales à partir duquel le ControlNet commence à s'appliquer.

control_guidance_end (float ou list[float], facultatif, par défaut 1.0) : Le pourcentage des étapes totales auquel le ControlNet cesse d’appliquer son effet.

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]] ou list[list[PIL.Image.Image]]) : La condition d’entrée ControlNet à fournir pour guider le unet lors de la génération. Si le type est spécifié comme torch.Tensor, il est transmis à ControlNet tel quel. PIL.Image.Image peut également être accepté en tant qu’image. Les dimensions de l’image de sortie sont par défaut celles de image. Si la hauteur et/ou la largeur sont passées, image est redimensionnée en conséquence. Si plusieurs ControlNets sont spécifiés dans init, les images doivent être passées sous forme de liste afin que chaque élément de la liste puisse être correctement groupé (batching) pour l’entrée d’un seul ControlNet.

controlnet_conditioning_scale (float ou list[float], facultatif, valeur par défaut 1.0) : Les sorties du ControlNet sont multipliées par controlnet_conditioning_scale avant d’être ajoutées au résidu dans le unet d’origine. Si plusieurs ControlNets sont spécifiés dans init, vous pouvez définir l’échelle correspondante sous forme de liste.

control_mode (int ou list[int],, facultatif, par défaut None) : Le mode de contrôle lors de l'application de ControlNet-Union.

num_images_per_prompt (int, facultatif, valeur par défaut 1) : Le nombre d'images à générer par invite.

generator (torch.Generator ou list[torch.Generator], facultatif) : Un ou une liste de générateurs torch pour rendre la génération déterministe.

latents (torch.FloatTensor, facultatif) : Latents bruités pré-générés, échantillonnés à partir d'une distribution gaussienne, à utiliser comme entrées pour la génération d'images. Peut être utilisé pour ajuster la même génération avec des prompts différents. S'il n'est pas fourni, un tenseur de latents sera généré par échantillonnage à l'aide du generator aléatoire fourni.

prompt_embeds (torch.FloatTensor, facultatif) : Incrustations de texte pré-générées. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. pondération des prompts. Si non fourni, les incrustations de texte seront générées à partir de l'argument d'entrée prompt.

pooled_prompt_embeds (torch.FloatTensor, facultatif) : Embeddings de texte pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, les embeddings de texte seront générés à partir de l'argument d'entrée prompt.

negative_prompt_embeds (torch.FloatTensor, facultatif) : Incrustations de texte négatif pré-générées. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. Si non fourni, negative_prompt_embeds sera généré à partir de l'argument d'entrée negative_prompt.

negative_pooled_prompt_embeds (torch.FloatTensor, facultatif) : Embeddings de texte négatifs pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par exemple le pondération des prompts. S'il n'est pas fourni, les pooled negative_prompt_embeds seront générés à partir de l'argument d'entrée negative_prompt.

ip_adapter_image : (PipelineImageInput, facultatif) : Entrée d'image facultative pour travailler avec les IP Adapters.

ip_adapter_image_embeds (list[torch.Tensor], facultatif) : Embeddings d'images pré-générés pour IP-Adapter. Il doit s'agir d'une liste dont la longueur est égale au nombre d'IP-adapters. Chaque élément doit être un tenseur de forme (batch_size, num_images, emb_dim). S'il n'est pas fourni, les embeddings sont calculés à partir de l'argument d'entrée ip_adapter_image.

negative_ip_adapter_image : (PipelineImageInput, facultatif) : Entrée d'image facultative pour travailler avec les IP Adapters.

negative_ip_adapter_image_embeds (list[torch.Tensor], facultatif) : Embeddings d'images pré-générés pour IP-Adapter. Il doit s'agir d'une liste dont la longueur est égale au nombre d'IP-adapters. Chaque élément doit être un tenseur de forme (batch_size, num_images, emb_dim). S'il n'est pas fourni, les embeddings sont calculés à partir de l'argument d'entrée ip_adapter_image.

output_type (str, facultatif, par défaut "pil") : Le format de sortie de l'image générée. Choisissez entre PIL : PIL.Image.Image ou np.array.

return_dict (bool, facultatif, valeur par défaut True) : Indique s'il faut retourner un ~pipelines.flux.FluxPipelineOutput plutôt qu'un simple tuple.

joint_attention_kwargs (dict, facultatif) : Un dictionnaire de kwargs qui, s'il est spécifié, est transmis à l'AttentionProcessor tel que défini sous self.processor dans diffusers.models.attention_processor.

callback_on_step_end (Callable, facultatif) : une fonction appelée à la fin de chaque étape de débruitage pendant l’inférence. La fonction est appelée avec les arguments suivants : callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs contiendra une liste de tous les tenseurs, tels que spécifiés par callback_on_step_end_tensor_inputs.

callback_on_step_end_tensor_inputs (list, facultatif) : La liste des entrées tensorielles pour la fonction callback_on_step_end. Les tenseurs spécifiés dans la liste seront passés en tant qu'argument callback_kwargs. Vous ne pourrez inclure que les variables listées dans l'attribut ._callback_tensor_inputs de votre classe de pipeline.

max_sequence_length (int par défaut 512) : Longueur maximale de la séquence à utiliser avec le prompt.

Retourne : ~pipelines.flux.FluxPipelineOutput ou tuple

~pipelines.flux.FluxPipelineOutput si return_dict est True, sinon un tuple. En cas de retour d'un tuple, le premier élément est une liste contenant les images générées.

Fonction appelée lors de l'appel du pipeline pour la génération.

Exemples :

>>> import torch
>>> from diffusers.utils import load_image
>>> from diffusers import FluxControlNetPipeline
>>> from diffusers import FluxControlNetModel

>>> base_model = "black-forest-labs/FLUX.1-dev"
>>> controlnet_model = "InstantX/FLUX.1-dev-controlnet-canny"
>>> controlnet = FluxControlNetModel.from_pretrained(controlnet_model, torch_dtype=torch.bfloat16)
>>> pipe = FluxControlNetPipeline.from_pretrained(
...     base_model, controlnet=controlnet, torch_dtype=torch.bfloat16
... )
>>> pipe.to("cuda")
>>> control_image = load_image("https://huggingface.co/InstantX/SD3-Controlnet-Canny/resolve/main/canny.jpg")
>>> prompt = "A girl in city, 25 years old, cool, futuristic"
>>> image = pipe(
...     prompt,
...     control_image=control_image,
...     control_guidance_start=0.2,
...     control_guidance_end=0.8,
...     controlnet_conditioning_scale=1.0,
...     num_inference_steps=28,
...     guidance_scale=3.5,
... ).images[0]
>>> image.save("flux.png")

encode_prompt[[diffusers.FluxControlNetPipeline.encode_prompt]]

encode_prompt(prompt: str | list[str], prompt_2: str | list[str] | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, max_sequence_length: int = 512, lora_scale: float | None = None)

Source

Paramètres :

prompt (str ou list[str], facultatif) : invite à encoder

prompt_2 (str ou list[str], facultatif) : Le prompt ou les prompts à envoyer au tokenizer_2 et au text_encoder_2. S'il n'est pas défini, prompt est utilisé dans tous les encodeurs de texte

device : (torch.device) : appareil torch

num_images_per_prompt (int) : nombre d'images à générer par invite

prompt_embeds (torch.FloatTensor, facultatif) : Incrustations de texte pré-générées. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. pondération des prompts. Si non fourni, les incrustations de texte seront générées à partir de l'argument d'entrée prompt.

pooled_prompt_embeds (torch.FloatTensor, facultatif) : Embeddings de texte pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, les embeddings de texte seront générés à partir de l'argument d'entrée prompt.

lora_scale (float, facultatif) : Échelle LoRA appliquée à toutes les couches LoRA de l'encodeur de texte si des couches LoRA sont chargées.

FluxPipelineOutput[[diffusers.pipelines.flux.pipeline_output.FluxPipelineOutput]]

diffusers.pipelines.flux.pipeline_output.FluxPipelineOutput[[diffusers.pipelines.flux.pipeline_output.FluxPipelineOutput]]

diffusers.pipelines.flux.pipeline_output.FluxPipelineOutput(images: list[PIL.Image.Image] | numpy.ndarray)

Source

Paramètres :

images (list[PIL.Image.Image] ou torch.Tensor ou np.ndarray) : liste d’images PIL débruitées de longueur batch_size, ou tableau numpy, ou tenseur torch de forme (batch_size, height, width, num_channels). Les images PIL ou le tableau numpy présentent les images débruitées du pipeline de diffusion. Les tenseurs torch peuvent représenter soit les images débruitées, soit les latents intermédiaires prêts à être transmis au décodeur.

Classe de sortie pour les pipelines de génération d’images Flux.

Xet Storage Details

Size:
21.6 kB
·
Xet hash:
200fbe905a68a333b1a54864931d1a549b36fd599b9d30520906948792b7a2d9

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.