stabilityai/stable-diffusion-3.5-large-controlnet-canny
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.