stabilityai/stable-diffusion-3.5-large-controlnet-canny

stabilityai
Texto a imagen

ControlNet Canny para Stable Diffusion 3.5 Large. Este modelo añade control estructural basado en bordes Canny a la generación texto-a-imagen, permitiendo guiar la composición, contornos y geometría de la imagen final a partir de una imagen de condición preprocesada. Se publica bajo la Stability Community License, con uso gratuito no comercial y uso comercial gratuito para organizaciones con menos de 1 millón de dólares de ingresos anuales.

Como usar

Uso con el repositorio independiente de SD3.5

Instalar el repositorio:

git clone [email protected]:Stability-AI/sd3.5.git
pip install -r requirements.txt

Después, descargar los modelos y las imágenes de muestra esperadas:

input/sample_cond.png
models/clip_g.safetensors
models/clip_l.safetensors
models/t5xxl.safetensors
models/sd3.5_large.safetensors
models/canny_8b.safetensors

Ejecutar inferencia con ControlNet Canny:

python sd3_infer.py --controlnet_ckpt models/canny_8b.safetensors --controlnet_cond_image input/sample_cond.png --prompt "An adorable fluffy pastel creature"

Uso con Diffusers

Actualizar Diffusers:

pip install -U diffusers

Ejemplo de inferencia:

import torch
from diffusers import StableDiffusion3ControlNetPipeline, SD3ControlNetModel
from diffusers.utils import load_image
from diffusers.image_processor import VaeImageProcessor

class SD3CannyImageProcessor(VaeImageProcessor):
    def __init__(self):
        super().__init__(do_normalize=False)

    def preprocess(self, image, **kwargs):
        image = super().preprocess(image, **kwargs)
        image = image * 255 * 0.5 + 0.5
        return image

    def postprocess(self, image, do_denormalize=True, **kwargs):
        do_denormalize = [True] * image.shape[0]
        image = super().postprocess(image, **kwargs, do_denormalize=do_denormalize)
        return image

controlnet = SD3ControlNetModel.from_pretrained(
    "stabilityai/stable-diffusion-3.5-large-controlnet-canny",
    torch_dtype=torch.float16
)
pipe = StableDiffusion3ControlNetPipeline.from_pretrained(
    "stabilityai/stable-diffusion-3.5-large",
    controlnet=controlnet,
    torch_dtype=torch.float16
).to("cuda")
pipe.image_processor = SD3CannyImageProcessor()

control_image = load_image("https://huggingface.co/datasets/diffusers/diffusers-images-docs/resolve/main/canny.png")
prompt = "A Night time photo taken by Leica M11, portrait of a Japanese woman in a kimono, looking at the camera, Cherry blossoms"
generator = torch.Generator(device="cpu").manual_seed(0)

image = pipe(
    prompt,
    control_image=control_image,
    controlnet_conditioning_scale=1.0,
    guidance_scale=3.5,
    num_inference_steps=60,
    generator=generator,
    max_sequence_length=77,
).images[0]

image.save(f'canny-8b.jpg')

Preprocesamiento de la imagen de control

SD3.5 no aplica este preprocesamiento internamente, por lo que se recomienda hacerlo antes en un script externo:

import torchvision.transforms.functional as F

# assuming img is a PIL image
img = F.to_tensor(img)
img = cv2.cvtColor(img.transpose(1, 2, 0), cv2.COLOR_RGB2GRAY)
img = cv2.Canny(img, 100, 200)

Consejos específicos: comenzar con una fuerza de ControlNet de 0.8 y ajustarla según el resultado; usar Euler y 50-60 pasos para mayor calidad; usar --text_encoder_device para cargar codificadores de texto en VRAM si se busca acelerar el bucle de inferencia a costa de mayor consumo de memoria.

Funcionalidades

Generación texto-a-imagen condicionada por mapas de bordes Canny.
Compatible con Stable Diffusion 3.5 Large y flujos de trabajo ControlNet.
Disponible en formato Safetensors para uso con Diffusers o el repositorio independiente de SD3.5.
Permite ajustar la fuerza de condicionamiento de ControlNet para equilibrar fidelidad al contorno y libertad creativa.
Recomendado con sampler Euler y recuentos de pasos relativamente altos, alrededor de 50 a 60, para mejores resultados.
Incluye orientación para preprocesar imágenes externas con escala de grises y detección de bordes Canny.
Entrenado con una combinación amplia de datos, incluyendo datos sintéticos y datos públicos filtrados.

Casos de uso

Generar imágenes a partir de texto manteniendo la estructura, silueta o composición de una imagen de referencia convertida a bordes Canny.
Crear variaciones visuales de una escena donde los contornos principales deben conservarse pero el estilo, iluminación o contenido semántico puede cambiar.
Flujos de producción creativa que necesitan control fino de pose, encuadre, líneas arquitectónicas, objetos o composición general.
Prototipado visual con Stable Diffusion 3.5 Large cuando se requiere más control espacial que con prompting textual puro.
Investigación y experimentación con ControlNet aplicado a modelos de difusión texto-a-imagen de gran escala.