Diffusers documentation
SD3ControlNetModel
SD3ControlNetModel
SD3ControlNetModel é uma implementação do ControlNet para o Stable Diffusion 3.
O modelo ControlNet foi introduzido em Adding Conditional Control to Text-to-Image Diffusion Models por Lvmin Zhang, Anyi Rao e Maneesh Agrawala. Ele oferece um maior grau de controle sobre a geração de imagens a partir de texto ao condicionar o modelo em entradas adicionais, como mapas de bordas, mapas de profundidade, mapas de segmentação e pontos-chave para detecção de pose.
O resumo do artigo é:
Apresentamos o ControlNet, uma arquitetura de rede neural para adicionar controles de condicionamento espacial a grandes modelos de difusão de texto para imagem pré-treinados. O ControlNet trava os grandes modelos de difusão prontos para produção e reutiliza suas camadas de codificação profundas e robustas, pré-treinadas com bilhões de imagens, como uma base forte para aprender um conjunto diversificado de controles condicionais. A arquitetura neural é conectada por “convoluções zero” (camadas de convolução inicializadas em zero) que crescem progressivamente os parâmetros a partir de zero e garantem que nenhum ruído prejudicial possa afetar o ajuste fino. Testamos vários controles de condicionamento, por exemplo, bordas, profundidade, segmentação, pose humana, etc., com o Stable Diffusion, usando condições únicas ou múltiplas, com ou sem prompts. Mostramos que o treinamento dos ControlNets é robusto com conjuntos de dados pequenos (<50k) e grandes (>1m). Resultados extensos mostram que o ControlNet pode facilitar aplicações mais amplas para controlar modelos de difusão de imagem.
Carregando do formato original
Por padrão, o SD3ControlNetModel deve ser carregado com from_pretrained().
from diffusers import StableDiffusion3ControlNetPipeline
from diffusers.models import SD3ControlNetModel, SD3MultiControlNetModel
controlnet = SD3ControlNetModel.from_pretrained("InstantX/SD3-Controlnet-Canny")
pipe = StableDiffusion3ControlNetPipeline.from_pretrained("stabilityai/stable-diffusion-3-medium-diffusers", controlnet=controlnet)SD3ControlNetModel
classe diffusers.SD3ControlNetModel
< source >( sample_size: int = 128patch_size: int = 2in_channels: int = 16num_layers: int = 18attention_head_dim: int = 64num_attention_heads: int = 18joint_attention_dim: int = 4096caption_projection_dim: int = 1152pooled_projection_dim: int = 2048out_channels: int = 16pos_embed_max_size: int = 96extra_conditioning_channels: int = 0dual_attention_layers: tuple[int, ...] = ()qk_norm: str | None = Nonepos_embed_type: str | None = 'sincos'use_pos_embed: bool = Trueforce_zeros_for_pooled_projection: bool = True )
Parâmetros
- sample_size (
int, padrão128) — A largura/altura dos latentes. Isso é fixo durante o treinamento, pois é usado para aprender um número de embeddings de posição. - patch_size (
int, padrão2) — Tamanho do patch para dividir os dados de entrada em pequenos patches. - in_channels (
int, padrão16) — O número de canais latentes na entrada. - num_layers (
int, padrão18) — O número de camadas de blocos de transformador a serem usadas. - attention_head_dim (
int, padrão64) — O número de canais em cada cabeça. - num_attention_heads (
int, padrão18) — O número de cabeças a serem usadas para a atenção multi-cabeça. - joint_attention_dim (
int, padrão4096) — A dimensão de incorporação a ser usada para a atenção conjunta de texto e imagem. - caption_projection_dim (
int, padrão1152) — A dimensão de incorporação dos embeddings de legenda. - pooled_projection_dim (
int, padrão2048) — A dimensão de incorporação das projeções de texto agrupadas. - out_channels (
int, padrão16) — O número de canais latentes na saída. - pos_embed_max_size (
int, padrão96) — A altura/largura máxima latente dos embeddings posicionais. - extra_conditioning_channels (
int, padrão0) — O número de canais extras a serem usados para condicionamento no embedding de patches. - dual_attention_layers (
tuple[int, ...], padrão()) — O número de blocos de transformador de fluxo duplo a serem usados. - qk_norm (
str, opcional, padrãoNone) — A normalização a ser usada para a query e a key na camada de atenção. SeNone, nenhuma normalização é usada. - pos_embed_type (
str, padrão"sincos") — O tipo de incorporação posicional a ser usado. Escolha entre"sincos"eNone. - use_pos_embed (
bool, padrãoTrue) — Se deve usar embeddings posicionais. - force_zeros_for_pooled_projection (
bool, padrãoTrue) — Se deve forçar zeros para embeddings de projeção agregada. Isso é tratado nos pipelines lendo o valor de configuração do modelo ControlNet.
Modelo ControlNet para Stable Diffusion 3.
enable_forward_chunking
< source >( chunk_size: int | None = Nonedim: int = 0 )
Parâmetros
- chunk_size (
int, opcional) — O tamanho do bloco das camadas feed-forward. Se não for especificado, a camada feed-forward será executada individualmente sobre cada tensor com dim=dim. - dim (
int, opcional, padrão0) — A dimensão sobre a qual o cálculo feed-forward deve ser dividido em blocos. Escolha entre dim=0 (lote) ou dim=1 (comprimento da sequência).
Define o processador de atenção para usar chunking de feed forward.
forward
< source >( hidden_states: Tensorcontrolnet_cond: Tensorconditioning_scale: float = 1.0encoder_hidden_states: Tensor = Nonepooled_projections: Tensor = Nonetimestep: LongTensor = Nonejoint_attention_kwargs: dict[str, typing.Any] | None = Nonereturn_dict: bool = True )
Parâmetros
- hidden_states (
torch.Tensorde forma(batch size, channel, height, width)) —hidden_statesde entrada. - controlnet_cond (
torch.Tensor) — O tensor de entrada condicional com forma(batch_size, sequence_length, hidden_size). - conditioning_scale (
float, padrão1.0) — Fator de escala para as saídas do ControlNet. - encoder_hidden_states (
torch.Tensorde forma(batch size, sequence_len, embed_dims)) — Incorporações condicionais (incorporações calculadas a partir das condições de entrada, como prompts) a serem usadas. - pooled_projections (
torch.Tensorde forma(batch_size, projection_dim)) — Projeções dos embeddings das condições de entrada. - timestep (
torch.LongTensor) — Usado para indicar o passo de desruido. - joint_attention_kwargs (
dict, opcional) — Um dicionário de kwargs que, se especificado, é passado aoAttentionProcessorconforme definido emself.processorem diffusers.models.attention_processor. - return_dict (
bool, opcional, padrãoTrue) — Se deve ou não retornar um~models.transformer_2d.Transformer2DModelOutputem vez de uma tupla simples.
O método forward do SD3Transformer2DModel.
Ativa as projeções QKV fundidas. Para os módulos de autoatenção, todas as matrizes de projeção (ou seja, query, key, value) são fundidas. Para os módulos de atenção cruzada, as matrizes de projeção de key e value são fundidas.
> Esta API é 🧪 experimental.
Desativa a projeção QKV fundida, se estiver habilitada.
> Esta API é 🧪 experimental.
SD3ControlNetOutput
classe diffusers.models.controlnets.SD3ControlNetOutput
< source >( controlnet_block_samples: tuple[torch.Tensor] )