stabilityai/stable-diffusion-3.5-large-controlnet-depth
ControlNet de profundidad para Stable Diffusion 3.5 Large. Permite condicionar la generación texto-a-imagen con mapas de profundidad, de modo que la imagen generada siga la estructura espacial y la composición del mapa de profundidad proporcionado.
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 una imagen de muestra:
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 el ControlNet de profundidad:
python sd3_infer.py --controlnet_ckpt models/depth_8b.safetensors --controlnet_cond_image input/sample_cond.png --prompt "A girl sitting in a cafe, cozy interior, HDR photograph"
Uso con Diffusers
Actualizar Diffusers:
pip install -U diffusers
Ejecutar el pipeline:
import torch
from diffusers import StableDiffusion3ControlNetPipeline, SD3ControlNetModel
from diffusers.utils import load_image
controlnet = SD3ControlNetModel.from_pretrained(
"stabilityai/stable-diffusion-3.5-large-controlnet-depth",
torch_dtype=torch.float16
)
pipe = StableDiffusion3ControlNetPipeline.from_pretrained(
"stabilityai/stable-diffusion-3.5-large",
controlnet=controlnet,
torch_dtype=torch.float16,
).to("cuda")
control_image = load_image(
"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/marigold/marigold_einstein_lcm_depth.png"
)
generator = torch.Generator(device="cpu").manual_seed(0)
image = pipe(
prompt="a photo of a man",
control_image=control_image,
guidance_scale=4.5,
num_inference_steps=40,
generator=generator,
max_sequence_length=77,
).images[0]
image.save("depth-8b.jpg")
Extracción de imagen de profundidad con image_gen_aux
pip install git+https://github.com/huggingface/image_gen_aux.git
from image_gen_aux import DepthPreprocessor
image = load_image("path to image")
depth_preprocessor = DepthPreprocessor.from_pretrained(
"depth-anything/Depth-Anything-V2-Large-hf"
).to("cuda")
depth_image = depth_preprocessor(image, invert=True)[0].convert("RGB")
Preprocesamiento externo recomendado
SD3.5 no implementa este preprocesamiento internamente, por lo que se recomienda hacerlo antes en un script externo.
# install depthfm from https://github.com/CompVis/depth-fm
import torchvision.transforms as transforms
from depthfm.dfm import DepthFM
depthfm_model = DepthFM(ckpt_path=checkpoint_path)
depthfm_model.eval()
# assuming img is a PIL image
img = F.to_tensor(img)
c, h, w = img.shape
img = F.interpolate(img, (512, 512), mode='bilinear', align_corners=False)
with torch.no_grad():
img = self.depthfm_model(img, num_steps=2, ensemble_size=4)
img = F.interpolate(img, (h, w), mode='bilinear', align_corners=False)
Consejos específicos del modelo: Stability AI recomienda empezar con una fuerza de ControlNet de 0.7 y ajustarla según el resultado. El sampler Euler con 50 a 60 pasos suele dar mejores resultados. El argumento --text_encoder_device permite cargar los codificadores de texto directamente en VRAM para acelerar la inferencia a cambio de usar más memoria de GPU.
Funcionalidades
- Modelo texto-a-imagen basado en Diffusers y pesos Safetensors.
- ControlNet especializado en profundidad para Stable Diffusion 3.5 Large.
- Compatible con el repositorio independiente de SD3.5 de Stability AI y con pipelines de Diffusers.
- Puede usar imágenes de profundidad preprocesadas como señal de control para guiar la composición.
- Licencia Stability AI Community: uso no comercial gratuito y uso comercial gratuito para organizaciones con menos de 1 millón USD de ingresos anuales.
- El modelo base no está diseñado para producir representaciones factuales o verídicas de personas o eventos.
Casos de uso
- Generar imágenes con Stable Diffusion 3.5 Large manteniendo la estructura espacial indicada por un mapa de profundidad.
- Transformar una imagen o escena de referencia en una nueva imagen guiada por prompt, conservando distribución de planos y relaciones de profundidad.
- Flujos creativos donde se necesita controlar composición, perspectiva y volumen con más precisión que usando solo texto.
- Prototipado de pipelines texto-a-imagen con ControlNet de profundidad en Diffusers o en el repositorio independiente de SD3.5.