Diffusers documentation

Marigold Computer Vision

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Marigold Computer Vision

marigold

Marigold se propuso en Repurposing Diffusion-Based Image Generators for Monocular Depth Estimation, un artículo Oral de CVPR 2024 de Bingxin Ke, Anton Obukhov, Shengyu Huang, Nando Metzger, Rodrigo Caye Daudt y Konrad Schindler. La idea central es reutilizar el prior generativo de los Modelos de Difusión Latente de Texto a Imagen (LDM) para tareas tradicionales de visión por computadora. Este enfoque se exploró mediante el ajuste fino de Stable Diffusion para Monocular Depth Estimation, como se muestra en la imagen de arriba.

Marigold se amplió posteriormente en el artículo de seguimiento, Marigold: Affordable Adaptation of Diffusion-Based Image Generators for Image Analysis, autoría de Bingxin Ke, Kevin Qu, Tianfu Wang, Nando Metzger, Shengyu Huang, Bo Li, Anton Obukhov y Konrad Schindler. Este trabajo expandió Marigold para soportar nuevas modalidades como Surface Normals y Intrinsic Image Decomposition (IID), introdujo un protocolo de entrenamiento para Latent Consistency Models (LCM) y demostró la capacidad de procesamiento en High-Resolution (HR).

Los modelos de Marigold iniciales (v1-0 y anteriores) estaban optimizados para obtener los mejores resultados con al menos 10 pasos de inferencia. Los modelos LCM se desarrollaron posteriormente para permitir una inferencia de alta calidad en solo 1 a 4 pasos. Los modelos de Marigold v1-1 y posteriores utilizan el programador DDIM para lograr resultados óptimos en tan solo 1 a 4 pasos.

Pipelines disponibles

Cada pipeline está diseñado para una tarea específica de visión por computadora, procesa una imagen RGB de entrada y genera una predicción correspondiente. Actualmente, se han implementado las siguientes tareas de visión por computadora:

PipelinePuntos de control de modelos recomendadosSpaces (Aplicaciones interactivas)Modalidades predichas
MarigoldDepthPipelineprs-eth/marigold-depth-v1-1Estimación de profundidadProfundidad, Disparidad
MarigoldNormalsPipelineprs-eth/marigold-normals-v1-1Estimación de normales de superficieNormales de superficie
MarigoldIntrinsicsPipelineprs-eth/marigold-iid-appearance-v1-1,
prs-eth/marigold-iid-lighting-v1-1
Descomposición de imagen intrínsecaAlbedo, Materiales, Iluminación

Puntos de control disponibles

Todos los puntos de control originales están disponibles bajo la organización PRS-ETH en Hugging Face. Están diseñados para su uso con pipelines de diffusers y el original codebase, que también puede utilizarse para entrenar nuevos puntos de control de modelos. A continuación se presenta un resumen de los puntos de control recomendados, todos los cuales producen resultados fiables con 1 a 4 pasos.

CheckpointModalidadComentario
prs-eth/marigold-depth-v1-1ProfundidadLa predicción de profundidad invariante a afinidades asigna a cada píxel un valor entre 0 (plano cercano) y 1 (plano lejano), donde ambos planos son determinados por el modelo durante la inferencia.
prs-eth/marigold-normals-v0-1NormalesLas predicciones de normales de superficie son vectores 3D de longitud unitaria en el espacio de la cámara de la pantalla, con valores en el rango de -1 a 1.
prs-eth/marigold-iid-appearance-v1-1IntrínsecosLa descomposición de InteriorVerse está compuesta por el Albedo y dos propiedades de material BRDF: Roughness y Metallicity.
prs-eth/marigold-iid-lighting-v1-1IntrínsecosDescomposición de una imagen en HyperSim II está compuesta por el Albedo $A$, la iluminación difusa $S$ y el residuo no difuso $R$: $I = A*S+R$.

Asegúrate de consultar la guía de Schedulers para aprender a explorar el equilibrio entre la velocidad y la calidad del scheduler, y consulta la sección reuse components across pipelines para aprender a cargar de forma eficiente los mismos componentes en varios pipelines. Además, para saber más sobre cómo reducir el uso de memoria de este pipeline, consulta la sección [“Reduce memory usage”] aquí.

Los pipelines de Marigold se diseñaron y probaron con el scheduler integrado en el checkpoint del modelo. El número óptimo de pasos de inferencia varía según el scheduler, y no existe un valor universal que funcione mejor en todos los casos. Para adaptarse a esto, el parámetro num_inference_steps en el método __call__ del pipeline tiene un valor predeterminado de None (consulte la referencia de la API). A menos que se establezca explícitamente, hereda el valor del campo default_denoising_steps en el archivo de configuración del checkpoint (model_index.json). Esto garantiza predicciones de alta calidad al invocar el pipeline solo con el argumento image.

Los ejemplos a continuación se presentan principalmente para la predicción de profundidad, pero pueden aplicarse universalmente a otras modalidades admitidas. Mostramos las predicciones utilizando la misma imagen de entrada de Albert Einstein generada por Midjourney. Esto facilita la comparación de las visualizaciones de las predicciones entre las distintas modalidades y puntos de control.

Imagen de entrada de ejemplo para todas las pipelines de Marigold

Predicción de profundidad

Para obtener una predicción de profundidad, carga el punto de control prs-eth/marigold-depth-v1-1 en MarigoldDepthPipeline, pasa la imagen por el pipeline y guarda las predicciones:

import diffusers
import torch

pipe = diffusers.MarigoldDepthPipeline.from_pretrained(
    "prs-eth/marigold-depth-v1-1", variant="fp16", dtype=torch.float16
).to("cuda")  # or "mps", "xpu", "cpu"

image = diffusers.utils.load_image("https://marigoldmonodepth.github.io/images/einstein.jpg")

depth = pipe(image)

vis = pipe.image_processor.visualize_depth(depth.prediction)
vis[0].save("einstein_depth.png")

depth_16bit = pipe.image_processor.export_depth_to_16bit_png(depth.prediction)
depth_16bit[0].save("einstein_depth_16bit.png")

La función visualize_depth() aplica uno de los colormaps de matplotlib (Spectral por defecto) para mapear los valores de píxel predichos de un rango de profundidad de un solo canal [0, 1] a una imagen RGB. Con el colormap Spectral, los píxeles con profundidad cercana se pintan de rojo y los píxeles lejanos, de azul. El archivo PNG de 16 bits almacena los valores de un solo canal mapeados linealmente desde el rango [0, 1] hasta [0, 65535]. A continuación se muestran las predicciones en bruto y las visualizadas. Las áreas más oscuras y cercanas (bigote) son más fáciles de distinguir en la visualización.

Profundidad predicha (PNG de 16 bits)
Visualización de profundidad predicha (espectral)

Estimación de normales de superficie

Carga el punto de control prs-eth/marigold-normals-v1-1 en MarigoldNormalsPipeline, procesa la imagen a través de la tubería y guarda las predicciones:

import diffusers
import torch

pipe = diffusers.MarigoldNormalsPipeline.from_pretrained(
    "prs-eth/marigold-normals-v1-1", variant="fp16", dtype=torch.float16
).to("cuda")  # or "mps", "xpu", "cpu"

image = diffusers.utils.load_image("https://marigoldmonodepth.github.io/images/einstein.jpg")

normals = pipe(image)

vis = pipe.image_processor.visualize_normals(normals.prediction)
vis[0].save("einstein_normals.png")

La función visualize_normals() mapea la predicción tridimensional, con valores de píxeles en el rango [-1, 1], a una imagen RGB. La función de visualización admite la inversión de los ejes de las normales de la superficie para hacer que la visualización sea compatible con otras elecciones del sistema de referencia. Conceptualmente, cada píxel se pinta según el vector de la normal de la superficie en el sistema de referencia, donde el eje X apunta a la derecha, el eje Y apunta hacia arriba y el eje Z apunta hacia el espectador. A continuación se muestra la predicción visualizada:

Visualización de normales de superficie predichas

En este ejemplo, la punta de la nariz casi con seguridad tiene un punto en la superficie en el que el vector normal de la superficie apunta directamente hacia el espectador, lo que significa que sus coordenadas son [0, 0, 1]. Este vector se mapea al RGB [128, 128, 255], que corresponde al color violeta-azulado. De manera similar, una normal de superficie en la mejilla de la parte derecha de la imagen tiene un componente X grande, lo que aumenta el tono rojo. Los puntos en los hombros que apuntan hacia arriba con un Y grande promueven el color verde.

Descomposición de imagen intrínseca

Marigold ofrece dos modelos para la Descomposición de Imágenes Intrínsecas (IID): “Appearance” y “Lighting”. Cada modelo produce mapas de Albedo, derivados de las anotaciones de InteriorVerse y Hypersim, respectivamente.

  • El modelo “Appearance” también estima las propiedades de Material: Roughness y Metallicity.
  • El modelo “Lighting” genera Diffuse Shading y Non-diffuse Residual.

A continuación se muestra el código de ejemplo que guarda las predicciones realizadas por el modelo “Appearance”:

import diffusers
import torch

pipe = diffusers.MarigoldIntrinsicsPipeline.from_pretrained(
    "prs-eth/marigold-iid-appearance-v1-1", variant="fp16", dtype=torch.float16
).to("cuda")  # or "mps", "xpu", "cpu"

image = diffusers.utils.load_image("https://marigoldmonodepth.github.io/images/einstein.jpg")

intrinsics = pipe(image)

vis = pipe.image_processor.visualize_intrinsics(intrinsics.prediction, pipe.target_properties)
vis[0]["albedo"].save("einstein_albedo.png")
vis[0]["roughness"].save("einstein_roughness.png")
vis[0]["metallicity"].save("einstein_metallicity.png")

Otro ejemplo que muestra las predicciones realizadas por el modelo “Lighting”:

import diffusers
import torch

pipe = diffusers.MarigoldIntrinsicsPipeline.from_pretrained(
    "prs-eth/marigold-iid-lighting-v1-1", variant="fp16", dtype=torch.float16
).to("cuda")  # or "mps", "xpu", "cpu"

image = diffusers.utils.load_image("https://marigoldmonodepth.github.io/images/einstein.jpg")

intrinsics = pipe(image)

vis = pipe.image_processor.visualize_intrinsics(intrinsics.prediction, pipe.target_properties)
vis[0]["albedo"].save("einstein_albedo.png")
vis[0]["shading"].save("einstein_shading.png")
vis[0]["residual"].save("einstein_residual.png")

Ambos modelos comparten el mismo pipeline mientras admiten diferentes tipos de descomposición. La parametrización exacta de la descomposición (p. ej., espacio sRGB vs. espacio lineal) se almacena en el diccionario pipe.target_properties, que se pasa a la función visualize_intrinsics().

A continuación se muestran algunos ejemplos que ilustran las salidas de descomposición predichas. Todas las modalidades pueden inspeccionarse en el Espacio Intrinsic Image Decomposition.

Albedo predicho (modelo "Appearance")
Sombreado difuso predicho (modelo "Lighting")

Acelerar la inferencia

Los fragmentos de inicio rápido anteriores ya están optimizados para calidad y velocidad: cargan el punto de control, utilizan la variante fp16 de pesos y cómputo, y ejecutan el número predeterminado (4) de pasos de difusión de desruido. El primer paso para acelerar la inferencia, a costa de la calidad de la predicción, es reducir los pasos de difusión de desruido al mínimo:

  import diffusers
  import torch

  pipe = diffusers.MarigoldDepthPipeline.from_pretrained(
      "prs-eth/marigold-depth-v1-1", variant="fp16", dtype=torch.float16
  ).to("cuda")  # or "mps", "xpu", "cpu"

  image = diffusers.utils.load_image("https://marigoldmonodepth.github.io/images/einstein.jpg")
  
- depth = pipe(image)
+ depth = pipe(image, num_inference_steps=1)

Con este cambio, la llamada pipe se completa en 280 ms en una GPU RTX 3090. Internamente, la imagen de entrada se codifica primero con el codificador VAE de Stable Diffusion, seguido de un único paso de desruido realizado por la U-Net. Finalmente, el latente de predicción se decodifica con el decodificador VAE al espacio de píxeles. En esta configuración, dos de las tres llamadas a módulos están dedicadas a convertir entre los espacios de píxeles y latentes del LDM. Dado que el espacio latente de Marigold es compatible con Stable Diffusion 2.0, la inferencia puede acelerarse más de 3 veces, reduciendo el tiempo de llamada a 85 ms en una RTX 3090, mediante el uso de un sustituto ligero del VAE de SD. Tenga en cuenta que el uso de un VAE ligero puede reducir ligeramente la calidad visual de las predicciones.

  import diffusers
  import torch

  pipe = diffusers.MarigoldDepthPipeline.from_pretrained(
      "prs-eth/marigold-depth-v1-1", variant="fp16", dtype=torch.float16
  ).to("cuda")  # or "mps", "xpu", "cpu"

+ pipe.vae = diffusers.AutoencoderTiny.from_pretrained(
+     "madebyollin/taesd", dtype=torch.float16
+ ).cuda()

  image = diffusers.utils.load_image("https://marigoldmonodepth.github.io/images/einstein.jpg")

  depth = pipe(image, num_inference_steps=1)

Hasta ahora, hemos optimizado el número de pasos de difusión y los componentes del modelo. Las operaciones de autoatención representan una parte significativa de los cálculos. Pueden acelerarse utilizando un procesador de atención más eficiente:

  import diffusers
  import torch
+ from diffusers.models.attention_processor import AttnProcessor2_0

  pipe = diffusers.MarigoldDepthPipeline.from_pretrained(
      "prs-eth/marigold-depth-v1-1", variant="fp16", dtype=torch.float16
  ).to("cuda")  # or "mps", "xpu", "cpu"

+ pipe.vae.set_attn_processor(AttnProcessor2_0()) 
+ pipe.unet.set_attn_processor(AttnProcessor2_0())

  image = diffusers.utils.load_image("https://marigoldmonodepth.github.io/images/einstein.jpg")

  depth = pipe(image, num_inference_steps=1)

Por último, tal como se sugiere en Optimizations, habilitar torch.compile puede mejorar aún más el rendimiento dependiendo del hardware objetivo. Sin embargo, la compilación implica un sobrecoste significativo durante la primera invocación del pipeline, por lo que solo resulta beneficioso cuando la misma instancia del pipeline se llama repetidamente, como dentro de un bucle.

  import diffusers
  import torch
  from diffusers.models.attention_processor import AttnProcessor2_0

  pipe = diffusers.MarigoldDepthPipeline.from_pretrained(
      "prs-eth/marigold-depth-v1-1", variant="fp16", dtype=torch.float16
  ).to("cuda")  # or "mps", "xpu", "cpu"

  pipe.vae.set_attn_processor(AttnProcessor2_0()) 
  pipe.unet.set_attn_processor(AttnProcessor2_0())

+ pipe.vae = torch.compile(pipe.vae, mode="reduce-overhead", fullgraph=True)
+ pipe.unet = torch.compile(pipe.unet, mode="reduce-overhead", fullgraph=True)

  image = diffusers.utils.load_image("https://marigoldmonodepth.github.io/images/einstein.jpg")

  depth = pipe(image, num_inference_steps=1)

Maximizar la precisión y el ensembling

Los pipelines de Marigold tienen un mecanismo de ensembling integrado que combina múltiples predicciones a partir de diferentes latentes aleatorios. Esta es una forma de fuerza bruta de mejorar la precisión de las predicciones, aprovechando la naturaleza generativa de la difusión. La ruta de ensembling se activa automáticamente cuando el argumento ensemble_size se establece en un valor mayor o igual que 3. Cuando se busca la máxima precisión, tiene sentido ajustar num_inference_steps simultáneamente con ensemble_size. Los valores recomendados varían entre puntos de control, pero dependen principalmente del tipo de programador. El efecto del ensembling se aprecia especialmente bien con las normales de superficie:

  import diffusers

  pipe = diffusers.MarigoldNormalsPipeline.from_pretrained("prs-eth/marigold-normals-v1-1").to("cuda")  # or "mps", "xpu", "cpu"

  image = diffusers.utils.load_image("https://marigoldmonodepth.github.io/images/einstein.jpg")

- depth = pipe(image)
+ depth = pipe(image, num_inference_steps=10, ensemble_size=5)

  vis = pipe.image_processor.visualize_normals(depth.prediction)
  vis[0].save("einstein_normals.png")
Normales de superficie, sin ensembling
Normales de superficie, con ensembling

Como se puede observar, todas las áreas con estructuras de grano fino, como el cabello, obtuvieron predicciones más conservadoras y, en promedio, más correctas. Tal resultado es más adecuado para tareas posteriores sensibles a la precisión, como la reconstrucción 3D.

Procesamiento de video cuadro a cuadro con consistencia temporal

Debido a la naturaleza generativa de Marigold, cada predicción es única y está definida por el ruido aleatorio muestreado para la inicialización latente. Esto se convierte en un inconveniente evidente en comparación con las redes de regresión densa de extremo a extremo tradicionales, como se ilustra en los siguientes videos:

Video de entrada
Marigold Depth aplicado de forma independiente a los fotogramas de entrada del video

Para abordar este problema, es posible pasar el argumento latents a los pipelines, lo que define el punto de partida de la difusión. Empíricamente, encontramos que una combinación convexa del mismo ruido latente de punto de partida y el latente correspondiente a la predicción del fotograma anterior produce resultados suficientemente suaves, tal como se implementa en el fragmento de código a continuación:

import imageio
import diffusers
import torch
from diffusers.models.attention_processor import AttnProcessor2_0
from PIL import Image
from tqdm import tqdm

device = "cuda"  # or "mps", "xpu", "cpu"
path_in = "https://huggingface.co/spaces/prs-eth/marigold-lcm/resolve/c7adb5427947d2680944f898cd91d386bf0d4924/files/video/obama.mp4"
path_out = "obama_depth.gif"

pipe = diffusers.MarigoldDepthPipeline.from_pretrained(
    "prs-eth/marigold-depth-v1-1", variant="fp16", dtype=torch.float16
).to(device)
pipe.vae = diffusers.AutoencoderTiny.from_pretrained(
    "madebyollin/taesd", dtype=torch.float16
).to(device)
pipe.unet.set_attn_processor(AttnProcessor2_0())
pipe.vae = torch.compile(pipe.vae, mode="reduce-overhead", fullgraph=True)
pipe.unet = torch.compile(pipe.unet, mode="reduce-overhead", fullgraph=True)
pipe.set_progress_bar_config(disable=True)

with imageio.get_reader(path_in) as reader:
    size = reader.get_meta_data()['size']
    last_frame_latent = None
    latent_common = torch.randn(
        (1, 4, 768 * size[1] // (8 * max(size)), 768 * size[0] // (8 * max(size)))
    ).to(device=device, dtype=torch.float16)

    out = []
    for frame_id, frame in tqdm(enumerate(reader), desc="Processing Video"):
        frame = Image.fromarray(frame)
        latents = latent_common
        if last_frame_latent is not None:
            latents = 0.9 * latents + 0.1 * last_frame_latent

        depth = pipe(
            frame,
            num_inference_steps=1,
            match_input_resolution=False, 
            latents=latents, 
            output_latent=True,
        )
        last_frame_latent = depth.latent
        out.append(pipe.image_processor.visualize_depth(depth.prediction)[0])

    diffusers.utils.export_to_gif(out, path_out, fps=reader.get_meta_data()['fps'])

Aquí, el proceso de difusión comienza desde el latente calculado dado. La pipeline establece output_latent=True para acceder a out.latent y calcula su contribución a la inicialización del latente del siguiente fotograma. El resultado es mucho más estable ahora:

Marigold Depth aplicado de forma independiente a los fotogramas de entrada del video
Marigold Depth con inicialización forzada de latentes

Marigold para ControlNet

Una aplicación muy común para la predicción de profundidad con modelos de difusión se da en conjunto con ControlNet. La nitidez de la profundidad desempeña un papel crucial para obtener resultados de alta calidad con ControlNet. Como se observa en las comparaciones con otros métodos anteriores, Marigold destaca en esa tarea. El fragmento de código a continuación demuestra cómo cargar una imagen, calcular la profundidad y pasarla a ControlNet en un formato compatible:

import torch
import diffusers

device = "cuda"  # or "mps", "xpu", "cpu"
generator = torch.Generator(device=device).manual_seed(2024)
image = diffusers.utils.load_image(
    "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/controlnet_depth_source.png"
)

pipe = diffusers.MarigoldDepthPipeline.from_pretrained(
    "prs-eth/marigold-depth-v1-1", dtype=torch.float16, variant="fp16"
).to(device)

depth_image = pipe(image, generator=generator).prediction
depth_image = pipe.image_processor.visualize_depth(depth_image, color_map="binary")
depth_image[0].save("motorcycle_controlnet_depth.png")

controlnet = diffusers.ControlNetModel.from_pretrained(
    "diffusers/controlnet-depth-sdxl-1.0", dtype=torch.float16, variant="fp16"
).to(device)
pipe = diffusers.StableDiffusionXLControlNetPipeline.from_pretrained(
    "SG161222/RealVisXL_V4.0", dtype=torch.float16, variant="fp16", controlnet=controlnet
).to(device)
pipe.scheduler = diffusers.DPMSolverMultistepScheduler.from_config(pipe.scheduler.config, use_karras_sigmas=True)

controlnet_out = pipe(
    prompt="high quality photo of a sports bike, city",
    negative_prompt="",
    guidance_scale=6.5,
    num_inference_steps=25,
    image=depth_image,
    controlnet_conditioning_scale=0.7,
    control_guidance_end=0.7,
    generator=generator,
).images
controlnet_out[0].save("motorcycle_controlnet_out.png")
Imagen de entrada
Profundidad en un formato compatible con ControlNet
Generación de ControlNet, condicionada por profundidad y el prompt: "high quality photo of a sports bike, city"

Evaluación cuantitativa

Para evaluar Marigold de forma cuantitativa en tablas de clasificación y conjuntos de datos estándar (como NYU, KITTI y otros), siga el protocolo de evaluación descrito en el artículo: cargue el modelo de precisión completa fp32 y use los valores adecuados para num_inference_steps y ensemble_size. Opcionalmente, fije la semilla de aleatoriedad para garantizar la reproducibilidad. Maximizar batch_size proporcionará la máxima utilización del dispositivo.

import diffusers
import torch

device = "cuda"  # or "mps", "xpu", "cpu"
seed = 2024

generator = torch.Generator(device=device).manual_seed(seed)
pipe = diffusers.MarigoldDepthPipeline.from_pretrained("prs-eth/marigold-depth-v1-1").to(device)

image = diffusers.utils.load_image("https://marigoldmonodepth.github.io/images/einstein.jpg")

depth = pipe(
    image, 
    num_inference_steps=4,  # set according to the evaluation protocol from the paper
    ensemble_size=10,       # set according to the evaluation protocol from the paper
    generator=generator,
)

# evaluate metrics

Uso de la incertidumbre predictiva

El mecanismo de ensembling integrado en las pipelines de Marigold combina múltiples predicciones obtenidas a partir de diferentes latentes aleatorios. Como efecto secundario, puede utilizarse para cuantificar la incertidumbre epistémica (del modelo); basta con especificar ensemble_size mayor o igual que 3 y establecer output_uncertainty=True. La incertidumbre resultante estará disponible en el campo uncertainty de la salida. Puede visualizarse de la siguiente manera:

import diffusers
import torch

pipe = diffusers.MarigoldDepthPipeline.from_pretrained(
    "prs-eth/marigold-depth-v1-1", variant="fp16", dtype=torch.float16
).to("cuda")  # or "mps", "xpu", "cpu"

image = diffusers.utils.load_image("https://marigoldmonodepth.github.io/images/einstein.jpg")

depth = pipe(
	image,
	ensemble_size=10,  # any number >= 3
	output_uncertainty=True,
)

uncertainty = pipe.image_processor.visualize_uncertainty(depth.uncertainty)
uncertainty[0].save("einstein_depth_uncertainty.png")
Incertidumbre de profundidad
Incertidumbre de las normales de superficie
Incertidumbre del albedo

La interpretación de la incertidumbre es sencilla: los valores más altos (blanco) corresponden a píxeles donde el modelo tiene dificultades para hacer predicciones consistentes.

  • El modelo de profundidad presenta la mayor incertidumbre en las discontinuidades, donde la profundidad de los objetos cambia de forma abrupta.
  • El modelo de normales de superficie tiene menos confianza en estructuras de gran detalle, como el cabello, y en regiones oscuras, como el área del cuello.
  • La incertidumbre del albedo se representa como una imagen RGB, ya que captura la incertidumbre de forma independiente para cada canal de color, a diferencia de la profundidad y las normales de superficie. También es mayor en las regiones sombreadas y en las discontinuidades.

API de predicción de profundidad de Marigold

clase diffusers.MarigoldDepthPipeline

< >

( unet: UNet2DConditionModelvae: AutoencoderKLscheduler: diffusers.schedulers.scheduling_ddim.DDIMScheduler | diffusers.schedulers.scheduling_lcm.LCMSchedulertext_encoder: CLIPTextModeltokenizer: CLIPTokenizerprediction_type: str | None = Nonescale_invariant: bool | None = Trueshift_invariant: bool | None = Truedefault_denoising_steps: int | None = Nonedefault_processing_resolution: int | None = None )

Parámetros

  • unet (UNet2DConditionModel) — U-Net condicional para desruidar el latente de profundidad, condicionado por el latente de imagen.
  • vae (AutoencoderKL) — Modelo de Variational Auto-Encoder (VAE) para codificar y decodificar imágenes y predicciones hacia y desde representaciones latentes.
  • scheduler (DDIMScheduler o LCMScheduler) — Un scheduler para usar en combinación con unet para desruidar los latentes de la imagen codificada.
  • text_encoder (CLIPTextModel) — Codificador de texto, para la incrustación de texto vacío.
  • tokenizer (CLIPTokenizer) — Tokenizador de CLIP.
  • prediction_type (str, opcional) — Tipo de predicciones realizadas por el modelo.
  • scale_invariant (bool, opcional) — Una propiedad del modelo que especifica si los mapas de profundidad predichos son invariantes a la escala. Este valor debe establecerse en la configuración del modelo. Cuando se usa junto con la bandera shift_invariant=True, el modelo también se denomina “afine-invariante”. NB: no se admite la sobrescritura de este valor.
  • shift_invariant (bool, opcional) — Una propiedad del modelo que especifica si los mapas de profundidad predichos son invariantes al desplazamiento. Este valor debe establecerse en la configuración del modelo. Cuando se usa junto con la bandera scale_invariant=True, el modelo también se denomina “invariante afín”. NB: no se admite la sobrescritura de este valor.
  • default_denoising_steps (int, opcional) — El número mínimo de pasos de difusión de desruido necesarios para producir una predicción de calidad razonable con el modelo dado. Este valor debe establecerse en la configuración del modelo. Cuando se llama a la pipeline sin establecer explícitamente num_inference_steps, se utiliza el valor predeterminado. Esto es necesario para garantizar resultados razonables con las distintas variantes de modelos compatibles con la pipeline, como aquellas que dependen de calendarios de desruido muy cortos (LCMScheduler) y aquellas con calendarios de difusión completos (DDIMScheduler).
  • default_processing_resolution (int, opcional) — El valor recomendado del parámetro processing_resolution del pipeline. Este valor debe establecerse en la configuración del modelo. Cuando se llama al pipeline sin establecer explícitamente processing_resolution, se utiliza el valor predeterminado. Esto es necesario para garantizar resultados razonables con las distintas variantes de modelos entrenadas con valores óptimos de resolución de procesamiento variables.

Pipeline para estimación de profundidad monocular usando el método Marigold: https://marigoldmonodepth.github.io.

Este modelo hereda de DiffusionPipeline. Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos los pipelines (como la descarga o el guardado, la ejecución en un dispositivo específico, etc.)

__call__

< >

( image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]num_inference_steps: int | None = Noneensemble_size: int = 1processing_resolution: int | None = Nonematch_input_resolution: bool = Trueresample_method_input: str = 'bilinear'resample_method_output: str = 'bilinear'batch_size: int = 1ensembling_kwargs: dict[str, typing.Any] | None = Nonelatents: typing.Union[torch.Tensor, list[torch.Tensor], NoneType] = Nonegenerator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneoutput_type: str = 'np'output_uncertainty: bool = Falseoutput_latent: bool = Falsereturn_dict: bool = True ) → MarigoldDepthOutput or tuple

Parámetros

  • image (PIL.Image.Image, np.ndarray, torch.Tensor, list[PIL.Image.Image], list[np.ndarray]), list[torch.Tensor]: Una imagen o imágenes de entrada utilizadas como entrada para la tarea de estimación de profundidad. Para arrays y tensors, el rango de valores esperado está entre [0, 1]. Es posible pasar un lote de imágenes proporcionando un array o tensor de cuatro dimensiones. Además, se puede pasar una lista de imágenes de arrays o tensors de dos o tres dimensiones. En este último caso, todos los elementos de la lista deben tener el mismo ancho y alto.
  • num_inference_steps (int, opcional, valor predeterminado None) — Número de pasos de difusión de desruido durante la inferencia. El valor predeterminado None resulta en una selección automática.
  • ensemble_size (int, por defecto 1) — Número de predicciones de ensemble. Valores más altos resultan en mejoras medibles y degradación visual.
  • processing_resolution (int, opcional, valor predeterminado None) — Resolución de procesamiento efectiva. Cuando se establece en 0, coincide con la dimensión mayor de la imagen de entrada. Esto produce predicciones más nítidas, pero también puede provocar la pérdida del contexto global. El valor predeterminado None se resuelve al valor óptimo de la configuración del modelo.
  • match_input_resolution (bool, opcional, valor predeterminado True) — Cuando está habilitado, la predicción de salida se redimensiona para que coincida con las dimensiones de entrada. Cuando está deshabilitado, el lado más largo de la salida será igual a processing_resolution.
  • resample_method_input (str, opcional, por defecto "bilinear") — Método de remuestreo utilizado para redimensionar las imágenes de entrada a processing_resolution. Los valores aceptados son: "nearest", "nearest-exact", "bilinear", "bicubic" o "area".
  • resample_method_output (str, opcional, valor predeterminado "bilinear") — Método de remuestreo utilizado para redimensionar las predicciones de salida para que coincidan con la resolución de entrada. Los valores aceptados son "nearest", "nearest-exact", "bilinear", "bicubic" o "area".
  • batch_size (int, opcional, valor predeterminado 1) — Tamaño del lote; solo es relevante al establecer ensemble_size o al pasar un tensor de imágenes.
  • ensembling_kwargs (dict, opcional, por defecto None) — Diccionario adicional con argumentos para un control preciso del ensembling. Las siguientes opciones están disponibles:
    • reducción (str, opcional, por defecto "median"): Define la función de ensembling aplicada en cada ubicación de píxel, puede ser "median" o "mean".
    • regularizer_strength (float, opcional, valor predeterminado 0.02): Fuerza del regularizador que arrastra las predicciones alineadas al rango unitario de 0 a 1.
    • max_iter (int, opcional, valor predeterminado 2): Número máximo de pasos del solver de alineación. Consulte la función scipy.optimize.minimize, argumento options.
    • tol (float, opcional, valor predeterminado 1e-3): Tolerancia del solver de alineación. El solver se detiene cuando se alcanza la tolerancia.
    • max_res (int, opcional, valor predeterminado None): Resolución en la que se realiza la alineación; None coincide con processing_resolution.
  • latents (torch.Tensor o list[torch.Tensor], opcional, valor predeterminado None) — Tensores de ruido latente para reemplazar la inicialización aleatoria. Estos pueden obtenerse de la salida de la llamada anterior a la función.
  • generator (torch.Generator, o list[torch.Generator], opcional, valor predeterminado None) — Objeto generador de números aleatorios para garantizar la reproducibilidad.
  • output_type (str, opcional, valor predeterminado "np") — Formato preferido de los campos prediction y uncertainty opcionales de la salida. Los valores aceptados son: "np" (array de numpy) o "pt" (tensor de torch).
  • output_uncertainty (bool, opcional, valor predeterminado False) — Cuando está habilitado, el campo uncertainty de la salida contiene el mapa de incertidumbre predictiva, siempre que el argumento ensemble_size se establezca en un valor superior a 2.
  • output_latent (bool, opcional, valor predeterminado False) — Cuando está habilitado, el campo latent de la salida contiene los códigos latentes correspondientes a las predicciones dentro del ensemble. Estos códigos se pueden guardar, modificar y usar en llamadas posteriores con el argumento latents.
  • return_dict (bool, opcional, valor predeterminado True) — Indica si se debe devolver un MarigoldDepthOutput en lugar de una tupla simple.

Devuelve

MarigoldDepthOutput o tuple

Si return_dict es True, se devuelve MarigoldDepthOutput; en caso contrario, se devuelve una tuple cuyo primer elemento es la predicción, el segundo es la incertidumbre (o None) y el tercero es el latente (o None).

Función invocada al llamar al pipeline.

Ejemplos:

>>> import diffusers
>>> import torch

>>> pipe = diffusers.MarigoldDepthPipeline.from_pretrained(
...     "prs-eth/marigold-depth-v1-1", variant="fp16", torch_dtype=torch.float16
... ).to("cuda")

>>> image = diffusers.utils.load_image("https://marigoldmonodepth.github.io/images/einstein.jpg")
>>> depth = pipe(image)

>>> vis = pipe.image_processor.visualize_depth(depth.prediction)
>>> vis[0].save("einstein_depth.png")

>>> depth_16bit = pipe.image_processor.export_depth_to_16bit_png(depth.prediction)
>>> depth_16bit[0].save("einstein_depth_16bit.png")

clase diffusers.pipelines.marigold.MarigoldDepthOutput

< >

( prediction: typing.Union[numpy.ndarray, torch.Tensor]uncertainty: typing.Union[NoneType, numpy.ndarray, torch.Tensor]latent: typing.Optional[torch.Tensor] )

Parámetros

  • prediction (np.ndarray, torch.Tensor) — Mapas de profundidad predichos con valores en el rango [0, 1]. La forma es numimages × 1 × height × width para torch.Tensor o numimages × height × width × 1 para np.ndarray.
  • uncertainty (None, np.ndarray, torch.Tensor) — Mapas de incertidumbre calculados a partir del ensemble, con valores en el rango [0, 1]. La forma es numimages × 1 × height × width para torch.Tensor o numimages × height × width × 1 para np.ndarray.
  • latent (None, torch.Tensor) — Latent features corresponding to the predictions, compatible with the latents argument of the pipeline. The shape is numimages * numensemble × 4 × latentheight × latentwidth.

Clase de salida para el pipeline de predicción de profundidad monocular de Marigold.

diffusers.pipelines.marigold.MarigoldImageProcessor.visualize_depth

< >

( depth: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]val_min: float = 0.0val_max: float = 1.0color_map: str = 'Spectral' )

Parámetros

  • depth (PIL.Image.Image | np.ndarray | torch.Tensor | list[PIL.Image.Image, list[np.ndarray], -- list[torch.Tensor]]): Mapas de profundidad.
  • val_min (float, opcional, valor predeterminado 0.0) — Valor mínimo del rango de profundidad visualizado.
  • val_max (float, opcional, valor predeterminado 1.0) — Valor máximo del rango de profundidad visualizado.
  • color_map (str, opcional, valor predeterminado "Spectral") — Mapa de colores utilizado para convertir una predicción de profundidad de un solo canal en una representación con color.

Visualiza mapas de profundidad, como las predicciones de MarigoldDepthPipeline.

Devuelve: list[PIL.Image.Image] con la visualización de los mapas de profundidad.

API de estimación de normales de Marigold

clase diffusers.MarigoldNormalsPipeline

< >

( unet: UNet2DConditionModelvae: AutoencoderKLscheduler: diffusers.schedulers.scheduling_ddim.DDIMScheduler | diffusers.schedulers.scheduling_lcm.LCMSchedulertext_encoder: CLIPTextModeltokenizer: CLIPTokenizerprediction_type: str | None = Noneuse_full_z_range: bool | None = Truedefault_denoising_steps: int | None = Nonedefault_processing_resolution: int | None = None )

Parámetros

  • unet (UNet2DConditionModel) — U-Net condicional para desruidar el latente de normales, condicionado por el latente de imagen.
  • vae (AutoencoderKL) — Modelo de Variational Auto-Encoder (VAE) para codificar y decodificar imágenes y predicciones hacia y desde representaciones latentes.
  • scheduler (DDIMScheduler o LCMScheduler) — Un scheduler para usar en combinación con unet para desruidar los latentes de la imagen codificada.
  • text_encoder (CLIPTextModel) — Codificador de texto, para la incrustación de texto vacío.
  • tokenizer (CLIPTokenizer) — Tokenizador de CLIP.
  • prediction_type (str, opcional) — Tipo de predicciones realizadas por el modelo.
  • use_full_z_range (bool, opcional) — Si las normales predichas por este modelo utilizan el rango completo de la dimensión Z, o solo su mitad positiva.
  • default_denoising_steps (int, opcional) — El número mínimo de pasos de difusión de desruido necesarios para producir una predicción de calidad razonable con el modelo dado. Este valor debe establecerse en la configuración del modelo. Cuando se llama a la pipeline sin establecer explícitamente num_inference_steps, se utiliza el valor predeterminado. Esto es necesario para garantizar resultados razonables con las distintas variantes de modelos compatibles con la pipeline, como aquellas que dependen de calendarios de desruido muy cortos (LCMScheduler) y aquellas con calendarios de difusión completos (DDIMScheduler).
  • default_processing_resolution (int, opcional) — El valor recomendado del parámetro processing_resolution del pipeline. Este valor debe establecerse en la configuración del modelo. Cuando se llama al pipeline sin establecer explícitamente processing_resolution, se utiliza el valor predeterminado. Esto es necesario para garantizar resultados razonables con las distintas variantes de modelos entrenadas con valores óptimos de resolución de procesamiento variables.

Pipeline para la estimación de normales monoculares usando el método Marigold: https://marigoldmonodepth.github.io.

Este modelo hereda de DiffusionPipeline. Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos los pipelines (como la descarga o el guardado, la ejecución en un dispositivo específico, etc.)

__call__

< >

( image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]num_inference_steps: int | None = Noneensemble_size: int = 1processing_resolution: int | None = Nonematch_input_resolution: bool = Trueresample_method_input: str = 'bilinear'resample_method_output: str = 'bilinear'batch_size: int = 1ensembling_kwargs: dict[str, typing.Any] | None = Nonelatents: typing.Union[torch.Tensor, list[torch.Tensor], NoneType] = Nonegenerator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneoutput_type: str = 'np'output_uncertainty: bool = Falseoutput_latent: bool = Falsereturn_dict: bool = True ) → MarigoldNormalsOutput or tuple

Parámetros

  • image (PIL.Image.Image, np.ndarray, torch.Tensor, list[PIL.Image.Image], list[np.ndarray]), list[torch.Tensor]: Una imagen o imágenes de entrada utilizadas como entrada para la tarea de estimación de normales. Para arrays y tensores, el rango de valores esperado está entre [0, 1]. Es posible pasar un lote de imágenes proporcionando un array o tensor de cuatro dimensiones. Además, se puede pasar una lista de imágenes de arrays o tensores de dos o tres dimensiones. En este último caso, todos los elementos de la lista deben tener el mismo ancho y alto.
  • num_inference_steps (int, opcional, valor predeterminado None) — Número de pasos de difusión de desruido durante la inferencia. El valor predeterminado None resulta en una selección automática.
  • ensemble_size (int, por defecto 1) — Número de predicciones de ensemble. Valores más altos resultan en mejoras medibles y degradación visual.
  • processing_resolution (int, opcional, valor predeterminado None) — Resolución de procesamiento efectiva. Cuando se establece en 0, coincide con la dimensión mayor de la imagen de entrada. Esto produce predicciones más nítidas, pero también puede provocar la pérdida del contexto global. El valor predeterminado None se resuelve al valor óptimo de la configuración del modelo.
  • match_input_resolution (bool, opcional, valor predeterminado True) — Cuando está habilitado, la predicción de salida se redimensiona para que coincida con las dimensiones de entrada. Cuando está deshabilitado, el lado más largo de la salida será igual a processing_resolution.
  • resample_method_input (str, opcional, por defecto "bilinear") — Método de remuestreo utilizado para redimensionar las imágenes de entrada a processing_resolution. Los valores aceptados son: "nearest", "nearest-exact", "bilinear", "bicubic" o "area".
  • resample_method_output (str, opcional, valor predeterminado "bilinear") — Método de remuestreo utilizado para redimensionar las predicciones de salida para que coincidan con la resolución de entrada. Los valores aceptados son "nearest", "nearest-exact", "bilinear", "bicubic" o "area".
  • batch_size (int, opcional, valor predeterminado 1) — Tamaño del lote; solo es relevante al establecer ensemble_size o al pasar un tensor de imágenes.
  • ensembling_kwargs (dict, opcional, el valor predeterminado es None) — Diccionario adicional con argumentos para un control preciso del ensembling. Las siguientes opciones están disponibles:
    • reducción (str, opcional, por defecto "closest"): Define la función de ensembling aplicada en cada ubicación de píxel, puede ser "closest" o "mean".
  • latents (torch.Tensor, opcional, valor predeterminado None) — Tensores de ruido latente para reemplazar la inicialización aleatoria. Estos pueden obtenerse de la salida de la llamada anterior a la función.
  • generator (torch.Generator, o list[torch.Generator], opcional, valor predeterminado None) — Objeto generador de números aleatorios para garantizar la reproducibilidad.
  • output_type (str, opcional, valor predeterminado "np") — Formato preferido de los campos prediction y uncertainty opcionales de la salida. Los valores aceptados son: "np" (array de numpy) o "pt" (tensor de torch).
  • output_uncertainty (bool, opcional, valor predeterminado False) — Cuando está habilitado, el campo uncertainty de la salida contiene el mapa de incertidumbre predictiva, siempre que el argumento ensemble_size se establezca en un valor superior a 2.
  • output_latent (bool, opcional, valor predeterminado False) — Cuando está habilitado, el campo latent de la salida contiene los códigos latentes correspondientes a las predicciones dentro del ensemble. Estos códigos se pueden guardar, modificar y usar en llamadas posteriores con el argumento latents.
  • return_dict (bool, opcional, valor predeterminado True) — Indica si se debe devolver un MarigoldNormalsOutput en lugar de una tupla simple.

Devuelve

MarigoldNormalsOutput o tuple

Si return_dict es True, se devuelve MarigoldNormalsOutput; en caso contrario, se devuelve una tuple cuyo primer elemento es la predicción, el segundo es la incertidumbre (o None) y el tercero es el latente (o None).

Función invocada al llamar al pipeline.

Ejemplos:

>>> import diffusers
>>> import torch

>>> pipe = diffusers.MarigoldNormalsPipeline.from_pretrained(
...     "prs-eth/marigold-normals-v1-1", variant="fp16", torch_dtype=torch.float16
... ).to("cuda")

>>> image = diffusers.utils.load_image("https://marigoldmonodepth.github.io/images/einstein.jpg")
>>> normals = pipe(image)

>>> vis = pipe.image_processor.visualize_normals(normals.prediction)
>>> vis[0].save("einstein_normals.png")

clase diffusers.pipelines.marigold.MarigoldNormalsOutput

< >

( prediction: typing.Union[numpy.ndarray, torch.Tensor]uncertainty: typing.Union[NoneType, numpy.ndarray, torch.Tensor]latent: typing.Optional[torch.Tensor] )

Parámetros

  • prediction (np.ndarray, torch.Tensor) — Normales predichas con valores en el rango [-1, 1]. La forma es numimages × 3 × height × width para torch.Tensor o numimages × height × width × 3 para np.ndarray.
  • uncertainty (None, np.ndarray, torch.Tensor) — Mapas de incertidumbre calculados a partir del ensemble, con valores en el rango [0, 1]. La forma es numimages × 1 × height × width para torch.Tensor o numimages × height × width × 1 para np.ndarray.
  • latent (None, torch.Tensor) — Latent features corresponding to the predictions, compatible with the latents argument of the pipeline. The shape is numimages * numensemble × 4 × latentheight × latentwidth.

Clase de salida para el pipeline de predicción de normales monoculares de Marigold.

diffusers.pipelines.marigold.MarigoldImageProcessor.visualize_normals

< >

( normals: typing.Union[numpy.ndarray, torch.Tensor, list[numpy.ndarray], list[torch.Tensor]]flip_x: bool = Falseflip_y: bool = Falseflip_z: bool = False )

Parámetros

  • normals (np.ndarray | torch.Tensor | list[np.ndarray, list[torch.Tensor]]) — Normales de la superficie.
  • flip_x (bool, opcional, valor predeterminado False) — Invierte el eje X del sistema de referencia de las normales. La dirección predeterminada es a la derecha.
  • flip_y (bool, opcional, valor predeterminado False) — Invierte el eje Y del sistema de referencia de las normales. La dirección predeterminada es hacia arriba.
  • flip_z (bool, opcional, valor predeterminado False) — Invierte el eje Z del sistema de referencia de las normales. La dirección predeterminada es hacia el observador.

Visualiza normales de superficie, como las predicciones de MarigoldNormalsPipeline.

Devuelve: list[PIL.Image.Image] con la visualización de normales de superficie.

API de descomposición de imagen intrínseca de Marigold

clase diffusers.MarigoldIntrinsicsPipeline

< >

( unet: UNet2DConditionModelvae: AutoencoderKLscheduler: diffusers.schedulers.scheduling_ddim.DDIMScheduler | diffusers.schedulers.scheduling_lcm.LCMSchedulertext_encoder: CLIPTextModeltokenizer: CLIPTokenizerprediction_type: str | None = Nonetarget_properties: dict[str, typing.Any] | None = Nonedefault_denoising_steps: int | None = Nonedefault_processing_resolution: int | None = None )

Parámetros

  • unet (UNet2DConditionModel) — U-Net condicional para desruidar el latente de los objetivos, condicionado por el latente de la imagen.
  • vae (AutoencoderKL) — Modelo de Variational Auto-Encoder (VAE) para codificar y decodificar imágenes y predicciones hacia y desde representaciones latentes.
  • scheduler (DDIMScheduler o LCMScheduler) — Un scheduler para usar en combinación con unet para desruidar los latentes de la imagen codificada.
  • text_encoder (CLIPTextModel) — Codificador de texto, para la incrustación de texto vacío.
  • tokenizer (CLIPTokenizer) — Tokenizador de CLIP.
  • prediction_type (str, opcional) — Tipo de predicciones realizadas por el modelo.
  • target_properties (dict[str, Any], opcional) — Propiedades de las modalidades predichas, como target_names, una list[str] utilizada para definir el número, el orden y los nombres de las modalidades predichas, y cualquier otro metadato que pueda ser necesario para interpretar las predicciones.
  • default_denoising_steps (int, opcional) — El número mínimo de pasos de difusión de desruido necesarios para producir una predicción de calidad razonable con el modelo dado. Este valor debe establecerse en la configuración del modelo. Cuando se llama a la pipeline sin establecer explícitamente num_inference_steps, se utiliza el valor predeterminado. Esto es necesario para garantizar resultados razonables con las distintas variantes de modelos compatibles con la pipeline, como aquellas que dependen de calendarios de desruido muy cortos (LCMScheduler) y aquellas con calendarios de difusión completos (DDIMScheduler).
  • default_processing_resolution (int, opcional) — El valor recomendado del parámetro processing_resolution del pipeline. Este valor debe establecerse en la configuración del modelo. Cuando se llama al pipeline sin establecer explícitamente processing_resolution, se utiliza el valor predeterminado. Esto es necesario para garantizar resultados razonables con las distintas variantes de modelos entrenadas con valores óptimos de resolución de procesamiento variables.

Pipeline para la Descomposición de Imágenes Intrínsecas (IID) usando el método Marigold: https://marigoldcomputervision.github.io.

Este modelo hereda de DiffusionPipeline. Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos los pipelines (como la descarga o el guardado, la ejecución en un dispositivo específico, etc.)

__call__

< >

( image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]num_inference_steps: int | None = Noneensemble_size: int = 1processing_resolution: int | None = Nonematch_input_resolution: bool = Trueresample_method_input: str = 'bilinear'resample_method_output: str = 'bilinear'batch_size: int = 1ensembling_kwargs: dict[str, typing.Any] | None = Nonelatents: typing.Union[torch.Tensor, list[torch.Tensor], NoneType] = Nonegenerator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneoutput_type: str = 'np'output_uncertainty: bool = Falseoutput_latent: bool = Falsereturn_dict: bool = True ) → MarigoldIntrinsicsOutput or tuple

Parámetros

  • image (PIL.Image.Image, np.ndarray, torch.Tensor, list[PIL.Image.Image], list[np.ndarray]), list[torch.Tensor]: Una imagen o imágenes de entrada utilizadas como entrada para la tarea de descomposición intrínseca. Para matrices y tensores, el rango de valores esperado está entre [0, 1]. Es posible pasar un lote de imágenes proporcionando una matriz o un tensor de cuatro dimensiones. Además, se puede pasar una lista de imágenes de matrices o tensores de dos o tres dimensiones. En este último caso, todos los elementos de la lista deben tener el mismo ancho y alto.
  • num_inference_steps (int, opcional, valor predeterminado None) — Número de pasos de difusión de desruido durante la inferencia. El valor predeterminado None resulta en una selección automática.
  • ensemble_size (int, por defecto 1) — Número de predicciones de ensemble. Valores más altos resultan en mejoras medibles y degradación visual.
  • processing_resolution (int, opcional, valor predeterminado None) — Resolución de procesamiento efectiva. Cuando se establece en 0, coincide con la dimensión mayor de la imagen de entrada. Esto produce predicciones más nítidas, pero también puede provocar la pérdida del contexto global. El valor predeterminado None se resuelve al valor óptimo de la configuración del modelo.
  • match_input_resolution (bool, opcional, valor predeterminado True) — Cuando está habilitado, la predicción de salida se redimensiona para que coincida con las dimensiones de entrada. Cuando está deshabilitado, el lado más largo de la salida será igual a processing_resolution.
  • resample_method_input (str, opcional, por defecto "bilinear") — Método de remuestreo utilizado para redimensionar las imágenes de entrada a processing_resolution. Los valores aceptados son: "nearest", "nearest-exact", "bilinear", "bicubic" o "area".
  • resample_method_output (str, opcional, valor predeterminado "bilinear") — Método de remuestreo utilizado para redimensionar las predicciones de salida para que coincidan con la resolución de entrada. Los valores aceptados son "nearest", "nearest-exact", "bilinear", "bicubic" o "area".
  • batch_size (int, opcional, valor predeterminado 1) — Tamaño del lote; solo es relevante al establecer ensemble_size o al pasar un tensor de imágenes.
  • ensembling_kwargs (dict, opcional, el valor predeterminado es None) — Diccionario adicional con argumentos para un control preciso del ensembling. Las siguientes opciones están disponibles:
    • reducción (str, opcional, por defecto "median"): Define la función de ensembling aplicada en cada ubicación de píxel, puede ser "median" o "mean".
  • latents (torch.Tensor, opcional, valor predeterminado None) — Tensores de ruido latente para reemplazar la inicialización aleatoria. Estos pueden obtenerse de la salida de la llamada anterior a la función.
  • generator (torch.Generator, o list[torch.Generator], opcional, valor predeterminado None) — Objeto generador de números aleatorios para garantizar la reproducibilidad.
  • output_type (str, opcional, valor predeterminado "np") — Formato preferido de los campos prediction y uncertainty opcionales de la salida. Los valores aceptados son: "np" (array de numpy) o "pt" (tensor de torch).
  • output_uncertainty (bool, opcional, valor predeterminado False) — Cuando está habilitado, el campo uncertainty de la salida contiene el mapa de incertidumbre predictiva, siempre que el argumento ensemble_size se establezca en un valor superior a 2.
  • output_latent (bool, opcional, valor predeterminado False) — Cuando está habilitado, el campo latent de la salida contiene los códigos latentes correspondientes a las predicciones dentro del ensemble. Estos códigos se pueden guardar, modificar y usar en llamadas posteriores con el argumento latents.
  • return_dict (bool, opcional, valor predeterminado True) — Indica si se debe devolver un MarigoldIntrinsicsOutput en lugar de una tupla simple.

Devuelve

MarigoldIntrinsicsOutput o tuple

Si return_dict es True, se devuelve MarigoldIntrinsicsOutput; en caso contrario, se devuelve una tuple cuyo primer elemento es la predicción, el segundo es la incertidumbre (o None) y el tercero es el latente (o None).

Función invocada al llamar al pipeline.

Ejemplos:

>>> import diffusers
>>> import torch

>>> pipe = diffusers.MarigoldIntrinsicsPipeline.from_pretrained(
...     "prs-eth/marigold-iid-appearance-v1-1", variant="fp16", torch_dtype=torch.float16
... ).to("cuda")

>>> image = diffusers.utils.load_image("https://marigoldmonodepth.github.io/images/einstein.jpg")
>>> intrinsics = pipe(image)

>>> vis = pipe.image_processor.visualize_intrinsics(intrinsics.prediction, pipe.target_properties)
>>> vis[0]["albedo"].save("einstein_albedo.png")
>>> vis[0]["roughness"].save("einstein_roughness.png")
>>> vis[0]["metallicity"].save("einstein_metallicity.png")
>>> import diffusers
>>> import torch

>>> pipe = diffusers.MarigoldIntrinsicsPipeline.from_pretrained(
...     "prs-eth/marigold-iid-lighting-v1-1", variant="fp16", torch_dtype=torch.float16
... ).to("cuda")

>>> image = diffusers.utils.load_image("https://marigoldmonodepth.github.io/images/einstein.jpg")
>>> intrinsics = pipe(image)

>>> vis = pipe.image_processor.visualize_intrinsics(intrinsics.prediction, pipe.target_properties)
>>> vis[0]["albedo"].save("einstein_albedo.png")
>>> vis[0]["shading"].save("einstein_shading.png")
>>> vis[0]["residual"].save("einstein_residual.png")

clase diffusers.pipelines.marigold.MarigoldIntrinsicsOutput

< >

( prediction: typing.Union[numpy.ndarray, torch.Tensor]uncertainty: typing.Union[NoneType, numpy.ndarray, torch.Tensor]latent: typing.Optional[torch.Tensor] )

Parámetros

  • prediction (np.ndarray, torch.Tensor) — Intrínsecos de imagen predichos con valores en el rango [0, 1]. La forma es (numimages * numtargets) × 3 × height × width para torch.Tensor o (numimages * numtargets) × height × width × 3 para np.ndarray, donde numtargets corresponde al número de modalidades objetivo predichas de la descomposición de la imagen intrínseca.
  • uncertainty (None, np.ndarray, torch.Tensor) — Mapas de incertidumbre calculados a partir del ensemble, con valores en el rango [0, 1]. La forma es (numimages * numtargets) × 3 × height × width para torch.Tensor o (numimages * numtargets) × height × width × 3 para np.ndarray.
  • latent (None, torch.Tensor) — Latent features corresponding to the predictions, compatible with the latents argument of the pipeline. The shape is (numimages * numensemble) × (numtargets * 4) × latentheight × latentwidth.

Clase de salida para el pipeline de Marigold Intrinsic Image Decomposition.

diffusers.pipelines.marigold.MarigoldImageProcessor.visualize_intrinsics

< >

( prediction: typing.Union[numpy.ndarray, torch.Tensor, list[numpy.ndarray], list[torch.Tensor]]target_properties: dictcolor_map: str | dict[str, str] = 'binary' )

Parámetros

  • prediction (np.ndarray | torch.Tensor | list[np.ndarray, list[torch.Tensor]]) — Descomposición de imagen intrínseca.
  • target_properties (dict[str, Any]) — Propiedades de descomposición. Entradas esperadas: target_names: list[str] y un diccionario con las claves prediction_space: str, sub_target_names: list[str | Null] (debe tener 3 entradas, null para las modalidades ausentes), up_to_scale: bool, una para cada objetivo y subobjetivo.
  • color_map (str | dict[str, str], opcional, valor predeterminado "Spectral") — Mapa de colores utilizado para convertir predicciones de un solo canal en representaciones con color. Cuando se pasa un diccionario, cada modalidad puede colorearse con su propio mapa de colores.

Visualiza la descomposición de imágenes intrínsecas, como las predicciones de MarigoldIntrinsicsPipeline.

Devuelve: list[dict[str, PIL.Image.Image]] con la visualización de la descomposición de la imagen intrínseca.

Update on GitHub