ControlNet é uma arquitetura de rede neural revolucionária desenvolvida por lllyasviel, projetada para controlar modelos de difusão adicionando condições extras. Este projeto é a implementação oficial do artigo "Adding Conditional Control to Text-to-Image Diffusion Models" (Adicionando Controle Condicional a Modelos de Difusão Texto-para-Imagem), trazendo uma capacidade de controle precisa sem precedentes para o campo da geração de texto para imagem.
O ControlNet funciona replicando os pesos dos blocos da rede neural em cópias "bloqueadas" e cópias "treináveis". A ideia central por trás desse design é:
O ControlNet adiciona uma dimensão de controle condicional extra à base de prompts de texto tradicionais, permitindo que os usuários guiem o processo de geração de imagens de várias maneiras, incluindo:
O projeto suporta vários modelos de controle pré-treinados:
# Exemplos de tipos de controle suportados
control_types = [
"canny", # Detecção de bordas
"depth", # Estimativa de profundidade
"hed", # Detecção de bordas suaves
"mlsd", # Detecção de linhas
"normal", # Vetor normal
"openpose", # Detecção de pose
"scribble", # Controle de rabisco
"seg", # Segmentação semântica
]
O processo de aprendizado do ControlNet é de ponta a ponta e robusto, mesmo com conjuntos de dados de treinamento pequenos (<50k). Treinar o ControlNet é tão rápido quanto ajustar modelos de difusão, e pode até ser feito em dispositivos pessoais.
A revolução do ControlNet reside na sua solução para o problema da consistência espacial, trazendo um nível de controle sem precedentes para a geração de imagens por IA.
Os principais componentes do projeto incluem:
ControlNet/
├── models/ # Definições de modelo
├── annotator/ # Vários detectores de condição
├── tutorials/ # Tutoriais e exemplos
├── gradio_*.py # Arquivos de interface Gradio
└── train.py # Script de treinamento
# Exemplo de uso básico
from transformers import pipeline
# Carregar o pipeline ControlNet
pipe = pipeline("text-to-image", model="lllyasviel/sd-controlnet-canny")
# Gerar imagem
result = pipe(
prompt="a beautiful landscape",
image=control_image, # Imagem de condição de controle
num_inference_steps=50
)
Em comparação com os modelos tradicionais de texto para imagem, o ControlNet oferece capacidade de controle preciso em nível de pixel.
Suporta o uso combinado de várias condições de controle, permitindo requisitos complexos de geração de imagens.
O código do projeto já está conectado ao 🤗 Hub, facilitando a integração em fluxos de trabalho existentes.
O projeto é totalmente de código aberto, com suporte ativo da comunidade e atualizações contínuas.
Fornece uma versão noturna e arquivos de modelo aprimorados, contendo melhor desempenho e funcionalidades adicionais.
# Dependências básicas
pip install torch torchvision
pip install transformers diffusers
pip install controlnet-aux # Pacote de ferramentas auxiliares
# Usando a biblioteca Hugging Face Diffusers
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel
import torch
# Carregar o modelo ControlNet
controlnet = ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-canny")
# Criar o pipeline
pipe = StableDiffusionControlNetPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
controlnet=controlnet,
torch_dtype=torch.float16
)
O ControlNet representa um avanço significativo na tecnologia de geração de texto para imagem. Ele não apenas resolve o problema da falta de controle preciso dos métodos tradicionais, mas também fornece uma ferramenta poderosa para criadores e desenvolvedores. Através de seu design de arquitetura inovador e ricas condições de controle, o ControlNet está redefinindo as possibilidades da criação assistida por IA.