Diffusers documentation

Marigold Vision par ordinateur

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Marigold Vision par ordinateur

marigold

Marigold a été proposé dans Repurposing Diffusion-Based Image Generators for Monocular Depth Estimation, un article oral de CVPR 2024 de Bingxin Ke, Anton Obukhov, Shengyu Huang, Nando Metzger, Rodrigo Caye Daudt et Konrad Schindler. L’idée centrale est de réutiliser le prior génératif des modèles de diffusion latente Text-to-Image (LDM) pour des tâches traditionnelles de vision par ordinateur. Cette approche a été explorée en effectuant un fine-tuning de Stable Diffusion pour l'estimation de profondeur monoculaire, comme le montre l’image d’illustration ci-dessus.

Marigold a ensuite été étendu dans l'article de suivi, Marigold: Affordable Adaptation of Diffusion-Based Image Generators for Image Analysis, co-signé par Bingxin Ke, Kevin Qu, Tianfu Wang, Nando Metzger, Shengyu Huang, Bo Li, Anton Obukhov et Konrad Schindler. Ce travail a élargi Marigold pour prendre en charge de nouvelles modalités telles que les Surface Normals et la Intrinsic Image Decomposition (IID), a introduit un protocole d'entraînement pour les Latent Consistency Models (LCM) et a démontré la capacité de traitement en High-Resolution (HR).

Les premiers modèles Marigold (v1-0 et antérieurs) étaient optimisés pour obtenir les meilleurs résultats avec au moins 10 étapes d’inférence. Les modèles LCM ont été développés par la suite pour permettre une inférence de haute qualité en seulement 1 à 4 étapes. Les modèles Marigold v1-1 et ultérieurs utilisent le planificateur DDIM pour obtenir des résultats optimaux en aussi peu que 1 à 4 étapes.

Pipelines disponibles

Chaque pipeline est conçu pour une tâche de vision par ordinateur spécifique, traitant une image RGB en entrée et générant une prédiction correspondante. Actuellement, les tâches de vision par ordinateur suivantes sont implémentées :

PipelinePoints de contrôle de modèles recommandésSpaces (Applications interactives)Modalités prédites
MarigoldDepthPipelineprs-eth/marigold-depth-v1-1Estimation de la profondeurProfondeur, Disparité
MarigoldNormalsPipelineprs-eth/marigold-normals-v1-1Estimation des normales de surfaceNormales de surface
MarigoldIntrinsicsPipelineprs-eth/marigold-iid-appearance-v1-1,
prs-eth/marigold-iid-lighting-v1-1
Décomposition d'image intrinsèqueAlbédo, Matériaux, Éclairage

Points de contrôle disponibles

Tous les points de contrôle originaux sont disponibles sous l’organisation PRS-ETH sur Hugging Face. Ils sont conçus pour être utilisés avec les pipelines diffusers et le code source original, qui peut également servir à entraîner de nouveaux points de contrôle de modèles. Voici un résumé des points de contrôle recommandés, qui produisent tous des résultats fiables en 1 à 4 étapes.

Point de contrôleModalitéComment
prs-eth/marigold-depth-v1-1ProfondeurLa prédiction de profondeur invariante par affinité attribue à chaque pixel une valeur comprise entre 0 (plan proche) et 1 (plan lointain), les deux plans étant déterminés par le modèle lors de l'inférence.
prs-eth/marigold-normals-v0-1NormalesLes prédictions des normales de surface sont des vecteurs 3D de longueur unitaire dans l'espace écran de la caméra, avec des valeurs comprises entre -1 et 1.
prs-eth/marigold-iid-appearance-v1-1IntrinsèquesLa décomposition d'InteriorVerse est composée de l'Albedo et de deux propriétés de matériau BRDF : Roughness et Metallicity.
prs-eth/marigold-iid-lighting-v1-1IntrinsèquesDécomposition HyperSim d'une image II est composée de l'Albédo $A$, de l'ombrage diffus $S$ et du résidu non diffus $R$ : $I = A*S+R$.

Pensez à consulter le guide sur les Schedulers pour apprendre à explorer le compromis entre la vitesse et la qualité du scheduler, et à consulter la section réutilisation des composants entre les pipelines pour apprendre à charger efficacement les mêmes composants dans plusieurs pipelines. En outre, pour en savoir plus sur la réduction de l'utilisation de la mémoire de ce pipeline, reportez-vous à la section [“Reduce memory usage”] ici.

Les pipelines Marigold ont été conçus et testés avec le planificateur intégré au point de contrôle du modèle. Le nombre optimal d'étapes d'inférence varie selon le planificateur, sans valeur universelle qui soit la meilleure dans tous les cas. Pour s'adapter à cela, le paramètre num_inference_steps de la méthode __call__ du pipeline a par défaut la valeur None (voir la référence de l'API). Sauf s'il est défini explicitement, il hérite de la valeur du champ default_denoising_steps du fichier de configuration du point de contrôle (model_index.json). Cela garantit des prédictions de haute qualité lors de l'appel du pipeline avec uniquement l'argument image.

Les exemples ci-dessous sont principalement donnés pour la prédiction de profondeur, mais ils peuvent être appliqués de manière universelle à d'autres modalités prises en charge. Nous présentons les prédictions en utilisant la même image d'Albert Einstein générée par Midjourney. Cela facilite la comparaison des visualisations des prédictions entre les différentes modalités et points de contrôle.

Image d’exemple pour tous les pipelines Marigold

Prédiction de la profondeur

Pour obtenir une prédiction de profondeur, chargez le point de contrôle prs-eth/marigold-depth-v1-1 dans MarigoldDepthPipeline, faites passer l’image dans le pipeline, puis enregistrez les prédictions :

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 fonction visualize_depth() applique l’une des cartes de couleurs de matplotlib (Spectral par défaut) pour mapper les valeurs de pixels prédites, issues d’une plage de profondeur monocanal [0, 1], vers une image RGB. Avec la carte de couleurs Spectral, les pixels proches sont peints en rouge et les pixels éloignés en bleu. Le fichier PNG 16 bits stocke les valeurs du canal unique, mappées linéairement de la plage [0, 1] vers [0, 65535]. Ci-dessous figurent les prédictions brutes et visualisées. Les zones plus sombres et plus proches (la moustache) sont plus faciles à distinguer dans la visualisation.

Profondeur prédite (PNG 16 bits)
Visualisation de la profondeur prédite (spectrale)

Estimation des normales de surface

Chargez le point de contrôle prs-eth/marigold-normals-v1-1 dans MarigoldNormalsPipeline, passez l’image dans le pipeline et enregistrez les prédictions :

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 fonction visualize_normals() convertit la prédiction tridimensionnelle, dont les valeurs de pixels sont comprises dans l'intervalle [-1, 1], en une image RGB. La fonction de visualisation permet d'inverser les axes des normales de surface afin de rendre la visualisation compatible avec d'autres choix de repère. Conceptuellement, chaque pixel est coloré en fonction du vecteur normale de surface dans le repère, où l'axe X pointe vers la droite, l'axe Y pointe vers le haut et l'axe Z pointe vers l'observateur. Voici la prédiction visualisée :

Visualisation des normales de surface prédites

Dans cet exemple, la pointe du nez a presque certainement un point sur la surface, dont le vecteur normal pointe directement vers l’observateur, ce qui signifie que ses coordonnées sont [0, 0, 1]. Ce vecteur correspond à la valeur RGB [128, 128, 255], qui correspond à la couleur bleu-violet. De même, une normale de surface sur la joue dans la partie droite de l’image a une grande composante X, ce qui augmente la teinte rouge. Les points sur les épaules pointant vers le haut avec une grande Y favorisent la couleur verte.

Décomposition d'image intrinsèque

Marigold fournit deux modèles pour la décomposition d'image intrinsèque (IID) : « Appearance » et « Lighting ». Chaque modèle produit des cartes d'albédo, dérivées respectivement des annotations d'InteriorVerse et de Hypersim.

  • Le modèle « Appearance » estime également les propriétés de matériau : Roughness et Metallicity.
  • Le modèle « Lighting » génère l'ombrage diffus et le résidu non diffus.

Voici le code d’exemple qui enregistre les prédictions effectuées par le modèle « 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")

Un autre exemple illustrant les prédictions effectuées par le modèle « 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")

Les deux modèles partagent le même pipeline tout en prenant en charge différents types de décomposition. La paramétrisation exacte de la décomposition (par exemple, espace sRGB vs. espace linéaire) est stockée dans le dictionnaire pipe.target_properties, qui est transmis à la fonction visualize_intrinsics().

Voici quelques exemples illustrant les sorties de décomposition prédites. Toutes les modalités peuvent être examinées dans l’espace Intrinsic Image Decomposition.

Albédo prédit (modèle « Appearance »)
Ombrage diffus prédit (modèle « Lighting »)

Accélérer l'inférence

Les extraits de démarrage rapide ci-dessus sont déjà optimisés pour la qualité et la vitesse : ils chargent le point de contrôle, utilisent la variante fp16 des poids et des calculs, et effectuent le nombre par défaut (4) d'étapes de débruitage par diffusion. La première étape pour accélérer l'inférence, au détriment de la qualité de la prédiction, consiste à réduire les étapes de débruitage par diffusion au minimum :

  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)

Avec ce changement, l’appel pipe s’achève en 280 ms sur un GPU RTX 3090. En interne, l’image d’entrée est d’abord encodée à l’aide de l’encodeur VAE de Stable Diffusion, puis une seule étape de débruitage est effectuée par le U-Net. Enfin, le latent de prédiction est décodé par le décodeur VAE dans l’espace des pixels. Dans cette configuration, deux des trois appels de modules sont consacrés à la conversion entre les espaces pixel et latent du LDM. Puisque l’espace latent de Marigold est compatible avec Stable Diffusion 2.0, l’inférence peut être accélérée de plus de 3x, réduisant le temps d’appel à 85 ms sur un RTX 3090, en utilisant un remplacement léger du VAE SD. Notez que l’utilisation d’un VAE léger peut légèrement réduire la qualité visuelle des prédictions.

  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)

Jusqu'à présent, nous avons optimisé le nombre d'étapes de diffusion et les composants du modèle. Les opérations d'auto-attention représentent une part importante des calculs. Les accélérer peut se faire en utilisant un processeur d'attention plus efficace :

  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)

Enfin, comme suggéré dans Optimizations, l’activation de torch.compile peut améliorer encore les performances, selon le matériel cible. Cependant, la compilation entraîne un surcoût important lors de la première invocation du pipeline, ce qui n’est avantageux que lorsque la même instance de pipeline est appelée de manière répétée, par exemple dans une boucle.

  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)

Maximiser la précision et le regroupement

Les pipelines Marigold disposent d'un mécanisme d'ensembling intégré qui combine plusieurs prédictions issues de différents latents aléatoires. Il s'agit d'une méthode par la force brute pour améliorer la précision des prédictions, en tirant parti de la nature générative de la diffusion. Le chemin d'ensembling est activé automatiquement lorsque l'argument ensemble_size est défini à une valeur supérieure ou égale à 3. Lorsque l'on vise une précision maximale, il est judicieux d'ajuster num_inference_steps simultanément à ensemble_size. Les valeurs recommandées varient selon les points de contrôle, mais dépendent principalement du type de planificateur. L'effet de l'ensembling est particulièrement bien visible avec les normales de surface :

  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 surface, sans ensembling
Normales de surface, avec ensembling

Comme on peut le constater, toutes les zones présentant des structures fines, comme les cheveux, ont obtenu des prédictions plus conservatrices et, en moyenne, plus correctes. Un tel résultat est plus adapté aux tâches en aval sensibles à la précision, telles que la reconstruction 3D.

Traitement vidéo image par image avec cohérence temporelle

En raison de la nature générative de Marigold, chaque prédiction est unique et définie par le bruit aléatoire échantillonné pour l’initialisation latente. Cela constitue un inconvénient évident par rapport aux réseaux de régression dense de bout en bout traditionnels, comme l’illustrent les vidéos suivantes :

Vidéo d'entrée
Marigold Depth appliqué indépendamment aux images d'entrée de la vidéo

Pour résoudre ce problème, il est possible de passer l'argument latents aux pipelines, ce qui définit le point de départ de la diffusion. Empiriquement, nous avons constaté qu'une combinaison convexe du bruit latent correspondant au point de départ et du latent correspondant à la prédiction de la frame précédente donne des résultats suffisamment lisses, comme implémenté dans l'extrait de code ci-dessous :

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'])

Ici, le processus de diffusion démarre à partir du latent calculé fourni. Le pipeline définit output_latent=True pour accéder à out.latent et calcule sa contribution à l’initialisation du latent de la frame suivante. Le résultat est désormais beaucoup plus stable :

Marigold Depth appliqué indépendamment aux images d'entrée de la vidéo
Marigold Depth avec initialisation forcée des latents

Marigold pour ControlNet

Une application très courante de la prédiction de profondeur avec des modèles de diffusion est son utilisation conjointe avec ControlNet. La netteté de la profondeur joue un rôle crucial pour obtenir des résultats de haute qualité avec ControlNet. Comme le montrent les comparaisons avec d'autres méthodes ci-dessus, Marigold excelle dans cette tâche. L'extrait de code ci-dessous montre comment charger une image, calculer la profondeur et la transmettre à ControlNet dans un format 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")
Image d'entrée
Profondeur au format compatible avec ControlNet
Génération ControlNet, conditionnée par la profondeur et le prompt : "high quality photo of a sports bike, city"

Évaluation quantitative

Pour évaluer Marigold de manière quantitative sur des classements et des jeux de données de référence standard (tels que NYU, KITTI et d'autres), suivez le protocole d'évaluation décrit dans l'article : chargez le modèle en précision complète fp32 et utilisez des valeurs appropriées pour num_inference_steps et ensemble_size. Faites éventuellement un tirage aléatoire (seed) pour garantir la reproductibilité. Maximiser batch_size permettra d'obtenir une utilisation maximale de l'appareil.

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

Utilisation de l'incertitude prédictive

Le mécanisme d'ensembling intégré aux pipelines Marigold combine plusieurs prédictions obtenues à partir de différents latents aléatoires. En conséquence, il peut être utilisé pour quantifier l'incertitude épistémique (du modèle) ; il suffit de spécifier ensemble_size supérieur ou égal à 3 et de définir output_uncertainty=True. L'incertitude résultante sera disponible dans le champ uncertainty de la sortie. Elle peut être visualisée comme suit :

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")
Incertitude de profondeur
Incertitude des normales de surface
Incertitude sur l'albédo

L'interprétation de l'incertitude est simple : les valeurs élevées (blanc) correspondent aux pixels pour lesquels le modèle a du mal à produire des prédictions cohérentes.

  • Le modèle de profondeur présente l'incertitude la plus élevée autour des discontinuités, là où la profondeur des objets change brusquement.
  • Le modèle de normales de surface est le moins fiable pour les structures fines comme les cheveux et pour les zones sombres telles que le col.
  • L'incertitude de l'albédo est représentée sous forme d'image RVB, car elle capture l'incertitude de manière indépendante pour chaque canal de couleur, contrairement à la profondeur et aux normales de surface. Elle est également plus élevée dans les zones ombragées et aux discontinuités.

API de prédiction de profondeur Marigold

classe 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 )

Paramètres

  • unet (UNet2DConditionModel) — U-Net conditionnel pour débruyer le latent de profondeur, conditionné sur le latent d'image.
  • vae (AutoencoderKL) — Modèle de Variational Auto-Encoder (VAE) pour encoder et décoder des images et des prédictions vers et depuis des représentations latentes.
  • scheduler (DDIMScheduler ou LCMScheduler) — Un planificateur à utiliser en combinaison avec unet pour débruyer les latents de l'image encodée.
  • text_encoder (CLIPTextModel) — Encodeur de texte, pour l’incorporation de texte vide.
  • tokenizer (CLIPTokenizer) — Tokeniseur CLIP.
  • prediction_type (str, facultatif) — Type de prédictions effectuées par le modèle.
  • scale_invariant (bool, facultatif) — Propriété du modèle indiquant si les cartes de profondeur prédites sont invariantes à l'échelle. Cette valeur doit être définie dans la configuration du modèle. Utilisée conjointement avec le drapeau shift_invariant=True, le modèle est également appelé « affine-invariant ». NB : la surcharge de cette valeur n'est pas prise en charge.
  • shift_invariant (bool, facultatif) — Propriété du modèle indiquant si les cartes de profondeur prédites sont invariantes par translation. Cette valeur doit être définie dans la configuration du modèle. Utilisée conjointement avec le drapeau scale_invariant=True, le modèle est également appelé « affine-invariant ». NB : la surcharge de cette valeur n’est pas prise en charge.
  • default_denoising_steps (int, facultatif) — Le nombre minimal d’étapes de débruitage de diffusion nécessaires pour produire une prédiction de qualité raisonnable avec le modèle donné. Cette valeur doit être définie dans la configuration du modèle. Lorsque le pipeline est appelé sans définir explicitement num_inference_steps, la valeur par défaut est utilisée. Cela est requis pour garantir des résultats raisonnables avec les différentes variantes de modèles compatibles avec le pipeline, telles que celles qui reposent sur des calendriers de débruitage très courts (LCMScheduler) et celles avec des calendriers de diffusion complets (DDIMScheduler).
  • default_processing_resolution (int, facultatif) — La valeur recommandée du paramètre processing_resolution du pipeline. Cette valeur doit être définie dans la configuration du modèle. Lorsque le pipeline est appelé sans définir explicitement processing_resolution, la valeur par défaut est utilisée. Cela est nécessaire pour garantir des résultats raisonnables avec les différentes variantes de modèles entraînées avec des valeurs de résolution de traitement optimales variables.

Pipeline pour l'estimation de profondeur monoculaire utilisant la méthode Marigold : https://marigoldmonodepth.github.io.

Ce modèle hérite de DiffusionPipeline. Consultez la documentation de la classe parente pour les méthodes génériques que la bibliothèque implémente pour tous les pipelines (tels que le téléchargement ou l'enregistrement, l'exécution sur un appareil particulier, 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

Paramètres

  • image (PIL.Image.Image, np.ndarray, torch.Tensor, list[PIL.Image.Image], list[np.ndarray]), — list[torch.Tensor] : une image d’entrée ou des images utilisées comme entrée pour la tâche d’estimation de profondeur. Pour les tableaux et les tenseurs, la plage de valeurs attendue est comprise entre [0, 1]. Il est possible de passer un lot d’images en fournissant un tableau ou un tenseur à quatre dimensions. De plus, une liste d’images sous forme de tableaux ou de tenseurs à deux ou trois dimensions peut être transmise. Dans ce dernier cas, tous les éléments de la liste doivent avoir la même largeur et la même hauteur.
  • num_inference_steps (int, facultatif, valeur par défaut None) — Nombre d'étapes de diffusion de débruitage lors de l'inférence. La valeur par défaut None entraîne une sélection automatique.
  • ensemble_size (int, par défaut 1) — Nombre de prédictions d'ensemble. Des valeurs plus élevées entraînent des améliorations mesurables et une dégradation visuelle.
  • processing_resolution (int, facultatif, valeur par défaut None) — Résolution de traitement effective. Si définie sur 0, elle correspond à la dimension la plus grande de l'image d'entrée. Cela produit des prédictions plus nettes, mais peut également entraîner une perte du contexte global. La valeur par défaut None se résout à la valeur optimale issue de la configuration du modèle.
  • match_input_resolution (bool, facultatif, valeur par défaut True) — Lorsqu’activé, la prédiction de sortie est redimensionnée pour correspondre aux dimensions de l’entrée. Lorsqu’il est désactivé, le côté le plus long de la sortie sera égal à processing_resolution.
  • resample_method_input (str, facultatif, par défaut "bilinear") — Méthode de rééchantillonnage utilisée pour redimensionner les images d'entrée vers processing_resolution. Les valeurs acceptées sont : "nearest", "nearest-exact", "bilinear", "bicubic" ou "area".
  • resample_method_output (str, facultatif, par défaut "bilinear") — Méthode de rééchantillonnage utilisée pour redimensionner les prédictions de sortie afin de correspondre à la résolution d'entrée. Les valeurs acceptées sont "nearest", "nearest-exact", "bilinear", "bicubic" ou "area".
  • batch_size (int, facultatif, par défaut 1) — Taille du lot ; ne concerne que la configuration de ensemble_size ou le passage d'un tenseur d'images.
  • ensembling_kwargs (dict, facultatif, défaut None) — Dictionnaire supplémentaire avec des arguments pour un contrôle précis de l'ensembling. Les options suivantes sont disponibles :
    • reduction (str, facultatif, par défaut "median") : Définit la fonction d'ensembling appliquée à chaque position de pixel, peut être soit "median" soit "mean".
    • regularizer_strength (float, facultatif, valeur par défaut 0.02) : Intensité du régularisateur qui ramène les prédictions alignées vers l'intervalle unitaire de 0 à 1.
    • max_iter (int, facultatif, valeur par défaut 2) : Nombre maximal d'étapes du solveur d'alignement. Reportez-vous à la fonction scipy.optimize.minimize, argument options.
    • tol (float, facultatif, par défaut 1e-3) : Tolérance du solveur d'alignement. Le solveur s'arrête lorsque la tolérance est atteinte.
    • max_res (int, facultatif, par défaut None) : Résolution à laquelle l’alignement est effectué ; None correspond à processing_resolution.
  • latents (torch.Tensor ou list[torch.Tensor], facultatif, par défaut None) — Tenseurs de bruit latent pour remplacer l’initialisation aléatoire. Ils peuvent être issus de la sortie de l’appel de fonction précédent.
  • generator (torch.Generator, ou list[torch.Generator], facultatif, par défaut None) — Objet générateur de nombres aléatoires pour garantir la reproductibilité.
  • output_type (str, facultatif, par défaut "np") — Format préféré des champs prediction et uncertainty facultatif de la sortie. Les valeurs acceptées sont : "np" (tableau numpy) ou "pt" (tenseur torch).
  • output_uncertainty (bool, facultatif, par défaut False) — Lorsqu’il est activé, le champ uncertainty de la sortie contient la carte d’incertitude prédictive, à condition que l’argument ensemble_size soit défini sur une valeur supérieure à 2.
  • output_latent (bool, optional, defaults to False) — When enabled, the output’s latent field contains the latent codes corresponding to the predictions within the ensemble. These codes can be saved, modified, and used for subsequent calls with the latents argument.
  • return_dict (bool, facultatif, par défaut True) — Indique s'il faut retourner un MarigoldDepthOutput plutôt qu'un simple tuple.

Retourne

MarigoldDepthOutput ou tuple

Si return_dict est True, MarigoldDepthOutput est renvoyé, sinon un tuple est renvoyé dont le premier élément est la prédiction, le deuxième élément est l’incertitude (ou None) et le troisième est le latent (ou None).

Fonction appelée lors de l'appel du pipeline.

Exemples :

>>> 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")

classe diffusers.pipelines.marigold.MarigoldDepthOutput

< >

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

Paramètres

  • prediction (np.ndarray, torch.Tensor) — Cartes de profondeur prédites avec des valeurs comprises dans l'intervalle [0, 1]. La forme est numimages × 1 × height × width pour torch.Tensor ou numimages × height × width × 1 pour np.ndarray.
  • uncertainty (None, np.ndarray, torch.Tensor) — Cartes d'incertitude calculées à partir de l'ensemble, avec des valeurs comprises dans l'intervalle [0, 1]. La forme est numimages × 1 × height × width pour torch.Tensor ou numimages × height × width × 1 pour 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.

Classe de sortie pour le pipeline de prédiction de profondeur monoculaire 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' )

Paramètres

  • depth (PIL.Image.Image | np.ndarray | torch.Tensor | list[PIL.Image.Image, list[np.ndarray], -- list[torch.Tensor]]) : Cartes de profondeur.
  • val_min (float, facultatif, valeur par défaut 0.0) — Valeur minimale de la plage de profondeur visualisée.
  • val_max (float, facultatif, valeur par défaut 1.0) — Valeur maximale de la plage de profondeur visualisée.
  • color_map (str, facultatif, par défaut "Spectral") — Carte de couleurs utilisée pour convertir une prédiction de profondeur monocanal en représentation colorée.

Visualise les cartes de profondeur, telles que les prédictions du MarigoldDepthPipeline.

Retourne : list[PIL.Image.Image] avec la visualisation des cartes de profondeur.

API d'estimation des normales Marigold

classe 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 )

Paramètres

  • unet (UNet2DConditionModel) — U-Net conditionnel pour débruyer les latents de normales, conditionné sur les latents d'image.
  • vae (AutoencoderKL) — Modèle de Variational Auto-Encoder (VAE) pour encoder et décoder des images et des prédictions vers et depuis des représentations latentes.
  • scheduler (DDIMScheduler ou LCMScheduler) — Un planificateur à utiliser en combinaison avec unet pour débruyer les latents de l'image encodée.
  • text_encoder (CLIPTextModel) — Encodeur de texte, pour l’incorporation de texte vide.
  • tokenizer (CLIPTokenizer) — Tokeniseur CLIP.
  • prediction_type (str, facultatif) — Type de prédictions effectuées par le modèle.
  • use_full_z_range (bool, facultatif) — Indique si les normales prédites par ce modèle utilisent l'intégralité de la plage de la dimension Z, ou seulement sa moitié positive.
  • default_denoising_steps (int, facultatif) — Le nombre minimal d’étapes de débruitage de diffusion nécessaires pour produire une prédiction de qualité raisonnable avec le modèle donné. Cette valeur doit être définie dans la configuration du modèle. Lorsque le pipeline est appelé sans définir explicitement num_inference_steps, la valeur par défaut est utilisée. Cela est requis pour garantir des résultats raisonnables avec les différentes variantes de modèles compatibles avec le pipeline, telles que celles qui reposent sur des calendriers de débruitage très courts (LCMScheduler) et celles avec des calendriers de diffusion complets (DDIMScheduler).
  • default_processing_resolution (int, facultatif) — La valeur recommandée du paramètre processing_resolution du pipeline. Cette valeur doit être définie dans la configuration du modèle. Lorsque le pipeline est appelé sans définir explicitement processing_resolution, la valeur par défaut est utilisée. Cela est nécessaire pour garantir des résultats raisonnables avec les différentes variantes de modèles entraînées avec des valeurs de résolution de traitement optimales variables.

Pipeline pour l'estimation des normales monoculaires à l'aide de la méthode Marigold : https://marigoldmonodepth.github.io.

Ce modèle hérite de DiffusionPipeline. Consultez la documentation de la classe parente pour les méthodes génériques que la bibliothèque implémente pour tous les pipelines (tels que le téléchargement ou l'enregistrement, l'exécution sur un appareil particulier, 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

Paramètres

  • image (PIL.Image.Image, np.ndarray, torch.Tensor, list[PIL.Image.Image], list[np.ndarray]), — list[torch.Tensor] : une image d’entrée ou des images utilisées comme entrée pour la tâche d’estimation des normales. Pour les tableaux et les tenseurs, la plage de valeurs attendue est comprise entre [0, 1]. Il est possible de passer un lot d’images en fournissant un tableau ou un tenseur à quatre dimensions. De plus, une liste d’images sous forme de tableaux ou de tenseurs à deux ou trois dimensions peut être transmise. Dans ce dernier cas, tous les éléments de la liste doivent avoir la même largeur et la même hauteur.
  • num_inference_steps (int, facultatif, valeur par défaut None) — Nombre d'étapes de diffusion de débruitage lors de l'inférence. La valeur par défaut None entraîne une sélection automatique.
  • ensemble_size (int, par défaut 1) — Nombre de prédictions d'ensemble. Des valeurs plus élevées entraînent des améliorations mesurables et une dégradation visuelle.
  • processing_resolution (int, facultatif, valeur par défaut None) — Résolution de traitement effective. Si définie sur 0, elle correspond à la dimension la plus grande de l'image d'entrée. Cela produit des prédictions plus nettes, mais peut également entraîner une perte du contexte global. La valeur par défaut None se résout à la valeur optimale issue de la configuration du modèle.
  • match_input_resolution (bool, facultatif, valeur par défaut True) — Lorsqu’activé, la prédiction de sortie est redimensionnée pour correspondre aux dimensions de l’entrée. Lorsqu’il est désactivé, le côté le plus long de la sortie sera égal à processing_resolution.
  • resample_method_input (str, facultatif, par défaut "bilinear") — Méthode de rééchantillonnage utilisée pour redimensionner les images d'entrée vers processing_resolution. Les valeurs acceptées sont : "nearest", "nearest-exact", "bilinear", "bicubic" ou "area".
  • resample_method_output (str, facultatif, par défaut "bilinear") — Méthode de rééchantillonnage utilisée pour redimensionner les prédictions de sortie afin de correspondre à la résolution d'entrée. Les valeurs acceptées sont "nearest", "nearest-exact", "bilinear", "bicubic" ou "area".
  • batch_size (int, facultatif, par défaut 1) — Taille du lot ; ne concerne que la configuration de ensemble_size ou le passage d'un tenseur d'images.
  • ensembling_kwargs (dict, facultatif, défaut None) — Dictionnaire supplémentaire avec des arguments pour un contrôle précis de l'ensembling. Les options suivantes sont disponibles :
    • reduction (str, facultatif, par défaut "closest") : Définit la fonction d'ensembling appliquée à chaque position de pixel, peut être soit "closest" soit "mean".
  • latents (torch.Tensor, facultatif, par défaut None) — Tenseurs de bruit latent pour remplacer l’initialisation aléatoire. Ils peuvent être issus de la sortie de l’appel de fonction précédent.
  • generator (torch.Generator, ou list[torch.Generator], facultatif, par défaut None) — Objet générateur de nombres aléatoires pour garantir la reproductibilité.
  • output_type (str, facultatif, par défaut "np") — Format préféré des champs prediction et uncertainty facultatif de la sortie. Les valeurs acceptées sont : "np" (tableau numpy) ou "pt" (tenseur torch).
  • output_uncertainty (bool, facultatif, par défaut False) — Lorsqu’il est activé, le champ uncertainty de la sortie contient la carte d’incertitude prédictive, à condition que l’argument ensemble_size soit défini sur une valeur supérieure à 2.
  • output_latent (bool, optional, defaults to False) — When enabled, the output’s latent field contains the latent codes corresponding to the predictions within the ensemble. These codes can be saved, modified, and used for subsequent calls with the latents argument.
  • return_dict (bool, facultatif, valeur par défaut True) — Indique s'il faut retourner un MarigoldNormalsOutput plutôt qu'un simple tuple.

Retourne

MarigoldNormalsOutput ou tuple

Si return_dict est True, MarigoldNormalsOutput est renvoyé, sinon un tuple est renvoyé dont le premier élément est la prédiction, le deuxième élément est l’incertitude (ou None) et le troisième est le latent (ou None).

Fonction appelée lors de l'appel du pipeline.

Exemples :

>>> 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")

classe diffusers.pipelines.marigold.MarigoldNormalsOutput

< >

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

Paramètres

  • prediction (np.ndarray, torch.Tensor) — Normales prédites avec des valeurs comprises dans l'intervalle [-1, 1]. La forme est numimages × 3 × height × width pour torch.Tensor ou numimages × height × width × 3 pour np.ndarray.
  • uncertainty (None, np.ndarray, torch.Tensor) — Cartes d'incertitude calculées à partir de l'ensemble, avec des valeurs comprises dans l'intervalle [0, 1]. La forme est numimages × 1 × height × width pour torch.Tensor ou numimages × height × width × 1 pour 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.

Classe de sortie pour le pipeline de prédiction des normales monoculaires 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 )

Paramètres

  • normals (np.ndarray | torch.Tensor | list[np.ndarray, list[torch.Tensor]]) — Normales de surface.
  • flip_x (bool, facultatif, par défaut False) — Inverse l’axe X du repère des normales. La direction par défaut est la droite.
  • flip_y (bool, facultatif, par défaut False) — Inverse l’axe Y du repère des normales. La direction par défaut est le haut.
  • flip_z (bool, facultatif, par défaut False) — Inverse l’axe Z du repère des normales. La direction par défaut est orientée vers l’observateur.

Visualise les normales de surface, telles que les prédictions du MarigoldNormalsPipeline.

Retourne : list[PIL.Image.Image] avec la visualisation des normales de surface.

API de décomposition d'image intrinsèque Marigold

classe 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 )

Paramètres

  • unet (UNet2DConditionModel) — U-Net conditionnel pour débruyer les latents cibles, conditionné sur le latent d'image.
  • vae (AutoencoderKL) — Modèle de Variational Auto-Encoder (VAE) pour encoder et décoder des images et des prédictions vers et depuis des représentations latentes.
  • scheduler (DDIMScheduler ou LCMScheduler) — Un planificateur à utiliser en combinaison avec unet pour débruyer les latents de l'image encodée.
  • text_encoder (CLIPTextModel) — Encodeur de texte, pour l’incorporation de texte vide.
  • tokenizer (CLIPTokenizer) — Tokeniseur CLIP.
  • prediction_type (str, facultatif) — Type de prédictions effectuées par le modèle.
  • target_properties (dict[str, Any], facultatif) — Propriétés des modalités prédites, telles que target_names, une list[str] utilisée pour définir le nombre, l’ordre et les noms des modalités prédites, ainsi que toute autre métadonnée nécessaire à l’interprétation des prédictions.
  • default_denoising_steps (int, facultatif) — Le nombre minimal d’étapes de débruitage de diffusion nécessaires pour produire une prédiction de qualité raisonnable avec le modèle donné. Cette valeur doit être définie dans la configuration du modèle. Lorsque le pipeline est appelé sans définir explicitement num_inference_steps, la valeur par défaut est utilisée. Cela est requis pour garantir des résultats raisonnables avec les différentes variantes de modèles compatibles avec le pipeline, telles que celles qui reposent sur des calendriers de débruitage très courts (LCMScheduler) et celles avec des calendriers de diffusion complets (DDIMScheduler).
  • default_processing_resolution (int, facultatif) — La valeur recommandée du paramètre processing_resolution du pipeline. Cette valeur doit être définie dans la configuration du modèle. Lorsque le pipeline est appelé sans définir explicitement processing_resolution, la valeur par défaut est utilisée. Cela est nécessaire pour garantir des résultats raisonnables avec les différentes variantes de modèles entraînées avec des valeurs de résolution de traitement optimales variables.

Pipeline pour la décomposition d'images intrinsèques (IID) à l'aide de la méthode Marigold : https://marigoldcomputervision.github.io.

Ce modèle hérite de DiffusionPipeline. Consultez la documentation de la classe parente pour les méthodes génériques que la bibliothèque implémente pour tous les pipelines (tels que le téléchargement ou l'enregistrement, l'exécution sur un appareil particulier, 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

Paramètres

  • image (PIL.Image.Image, np.ndarray, torch.Tensor, list[PIL.Image.Image], list[np.ndarray]), list[torch.Tensor] : une image d’entrée ou des images d’entrée utilisées comme entrée pour la tâche de décomposition intrinsèque. Pour les tableaux et les tenseurs, la plage de valeurs attendue est comprise entre [0, 1]. Il est possible de passer un lot d’images en fournissant un tableau ou un tenseur à quatre dimensions. De plus, une liste d’images de tableaux ou de tenseurs à deux ou trois dimensions peut être transmise. Dans ce dernier cas, tous les éléments de la liste doivent avoir la même largeur et la même hauteur.
  • num_inference_steps (int, facultatif, valeur par défaut None) — Nombre d'étapes de diffusion de débruitage lors de l'inférence. La valeur par défaut None entraîne une sélection automatique.
  • ensemble_size (int, par défaut 1) — Nombre de prédictions d'ensemble. Des valeurs plus élevées entraînent des améliorations mesurables et une dégradation visuelle.
  • processing_resolution (int, facultatif, valeur par défaut None) — Résolution de traitement effective. Si définie sur 0, elle correspond à la dimension la plus grande de l'image d'entrée. Cela produit des prédictions plus nettes, mais peut également entraîner une perte du contexte global. La valeur par défaut None se résout à la valeur optimale issue de la configuration du modèle.
  • match_input_resolution (bool, facultatif, valeur par défaut True) — Lorsqu’activé, la prédiction de sortie est redimensionnée pour correspondre aux dimensions de l’entrée. Lorsqu’il est désactivé, le côté le plus long de la sortie sera égal à processing_resolution.
  • resample_method_input (str, facultatif, par défaut "bilinear") — Méthode de rééchantillonnage utilisée pour redimensionner les images d'entrée vers processing_resolution. Les valeurs acceptées sont : "nearest", "nearest-exact", "bilinear", "bicubic" ou "area".
  • resample_method_output (str, facultatif, par défaut "bilinear") — Méthode de rééchantillonnage utilisée pour redimensionner les prédictions de sortie afin de correspondre à la résolution d'entrée. Les valeurs acceptées sont "nearest", "nearest-exact", "bilinear", "bicubic" ou "area".
  • batch_size (int, facultatif, par défaut 1) — Taille du lot ; ne concerne que la configuration de ensemble_size ou le passage d'un tenseur d'images.
  • ensembling_kwargs (dict, facultatif, défaut None) — Dictionnaire supplémentaire avec des arguments pour un contrôle précis de l'ensembling. Les options suivantes sont disponibles :
    • reduction (str, facultatif, par défaut "median") : Définit la fonction d'ensembling appliquée à chaque position de pixel, peut être soit "median" soit "mean".
  • latents (torch.Tensor, facultatif, par défaut None) — Tenseurs de bruit latent pour remplacer l’initialisation aléatoire. Ils peuvent être issus de la sortie de l’appel de fonction précédent.
  • generator (torch.Generator, ou list[torch.Generator], facultatif, par défaut None) — Objet générateur de nombres aléatoires pour garantir la reproductibilité.
  • output_type (str, facultatif, par défaut "np") — Format préféré des champs prediction et uncertainty facultatif de la sortie. Les valeurs acceptées sont : "np" (tableau numpy) ou "pt" (tenseur torch).
  • output_uncertainty (bool, facultatif, par défaut False) — Lorsqu’il est activé, le champ uncertainty de la sortie contient la carte d’incertitude prédictive, à condition que l’argument ensemble_size soit défini sur une valeur supérieure à 2.
  • output_latent (bool, optional, defaults to False) — When enabled, the output’s latent field contains the latent codes corresponding to the predictions within the ensemble. These codes can be saved, modified, and used for subsequent calls with the latents argument.
  • return_dict (bool, facultatif, par défaut True) — Indique s'il faut retourner un MarigoldIntrinsicsOutput plutôt qu'un simple tuple.

Retourne

MarigoldIntrinsicsOutput ou tuple

Si return_dict est True, MarigoldIntrinsicsOutput est renvoyé, sinon un tuple est renvoyé dont le premier élément est la prédiction, le deuxième élément est l’incertitude (ou None) et le troisième est le latent (ou None).

Fonction appelée lors de l'appel du pipeline.

Exemples :

>>> 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")

classe diffusers.pipelines.marigold.MarigoldIntrinsicsOutput

< >

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

Paramètres

  • prediction (np.ndarray, torch.Tensor) — Intrinsèques d’image prédites, avec des valeurs comprises dans l’intervalle [0, 1]. La forme est (numimages * numtargets) × 3 × height × width pour torch.Tensor ou (numimages * numtargets) × height × width × 3 pour np.ndarray, où numtargets correspond au nombre de modalités cibles prédites de la décomposition intrinsèque de l’image.
  • uncertainty (None, np.ndarray, torch.Tensor) — Cartes d'incertitude calculées à partir de l'ensemble, avec des valeurs comprises dans l'intervalle [0, 1]. La forme est (numimages * numtargets) × 3 × height × width pour torch.Tensor ou (numimages * numtargets) × height × width × 3 pour 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.

Classe de sortie pour le pipeline de décomposition d'image intrinsèque de Marigold.

diffusers.pipelines.marigold.MarigoldImageProcessor.visualize_intrinsics

< >

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

Paramètres

  • prediction (np.ndarray | torch.Tensor | list[np.ndarray, list[torch.Tensor]]) — Décomposition d'image intrinsèque.
  • target_properties (dict[str, Any]) — Propriétés de décomposition. Entrées attendues : target_names: list[str] et un dictionnaire avec les clés prediction_space: str, sub_target_names: list[str | Null] (doit contenir 3 entrées, null pour les modalités manquantes), up_to_scale: bool, une pour chaque cible et sous-cible.
  • color_map (str | dict[str, str], facultatif, par défaut "Spectral") — Carte de couleurs utilisée pour convertir des prédictions monocanaux en représentations colorées. Lorsqu'un dictionnaire est transmis, chaque modalité peut être colorée avec sa propre carte de couleurs.

Visualise la décomposition d'image intrinsèque, par exemple les prédictions du MarigoldIntrinsicsPipeline.

Retourne : list[dict[str, PIL.Image.Image]] avec la visualisation de la décomposition d'image intrinsèque.

Update on GitHub