class_docstr: Pipeline for monocular depth estimation using Marigold: https://marigoldmonodepth.github.io.
  
  This model inherits from [`DiffusionPipeline`]. Check the superclass documentation for the generic methods the
  library implements for all the pipelines (such as downloading or saving, running on a particular device, etc.)
  
  Args:
      unet (`UNet2DConditionModel`):
          Conditional U-Net to denoise the depth latent, conditioned on image latent.
      vae (`AutoencoderKL`):
          Variational Auto-Encoder (VAE) Model to encode and decode images and depth maps
          to and from latent representations.
      scheduler (`DDIMScheduler`):
          A scheduler to be used in combination with `unet` to denoise the encoded image latents.
      text_encoder (`CLIPTextModel`):
          Text-encoder, for empty text embedding.
      tokenizer (`CLIPTokenizer`):
          CLIP tokenizer.
class_docstr_tok: ["Pipeline","for","monocular","depth","estimation","using","Marigold",":","https",":","\/\/marigoldmonodepth.github.io",".","This","model","inherits","from","[","`","DiffusionPipeline","`","]",".","Check","the","superclass","documentation","for","the","generic","methods","the","library","implements","for","all","the","pipelines","(","such","as","downloading","or","saving",",","running","on","a","particular","device",",","etc",".",")","Args",":","unet","(","`","UNet2DConditionModel","`",")",":","Conditional","U-Net","to","denoise","the","depth","latent",",","conditioned","on","image","latent",".","vae","(","`","AutoencoderKL","`",")",":","Variational","Auto-Encoder","(","VAE",")","Model","to","encode","and","decode","images","and","depth","maps","to","and","from","latent","representations",".","scheduler","(","`","DDIMScheduler","`",")",":","A","scheduler","to","be","used","in","combination","with","`","unet","`","to","denoise","the","encoded","image","latents",".","text_encoder","(","`","CLIPTextModel","`",")",":","Text-encoder",",","for","empty","text","embedding",".","tokenizer","(","`","CLIPTokenizer","`",")",":","CLIP","tokenizer","."]
docstr: Function invoked when calling the pipeline.
  
  Args:
      input_image (`Image`):
          Input RGB (or gray-scale) image.
      processing_res (`int`, *optional*, defaults to `768`):
          Maximum resolution of processing.
          If set to 0: will not resize at all.
      match_input_res (`bool`, *optional*, defaults to `True`):
          Resize depth prediction to match input resolution.
          Only valid if `limit_input_res` is not None.
      denoising_steps (`int`, *optional*, defaults to `10`):
          Number of diffusion denoising steps (DDIM) during inference.
      ensemble_size (`int`, *optional*, defaults to `10`):
          Number of predictions to be ensembled.
      batch_size (`int`, *optional*, defaults to `0`):
          Inference batch size, no bigger than `num_ensemble`.
          If set to 0, the script will automatically decide the proper batch size.
      show_progress_bar (`bool`, *optional*, defaults to `True`):
          Display a progress bar of diffusion denoising.
      color_map (`str`, *optional*, defaults to `"Spectral"`):
          Colormap used to colorize the depth map.
      ensemble_kwargs (`dict`, *optional*, defaults to `None`):
          Arguments for detailed ensembling settings.
  Returns:
      `MarigoldDepthOutput`: Output class for Marigold monocular depth prediction pipeline, including:
      - **depth_np** (`np.ndarray`) Predicted depth map, with depth values in the range of [0, 1]
      - **depth_colored** (`PIL.Image.Image`) Colorized depth map, with the shape of [3, H, W] and values in [0, 1]
      - **uncertainty** (`None` or `np.ndarray`) Uncalibrated uncertainty(MAD, median absolute deviation)
              coming from ensembling. None if `ensemble_size = 1`
docstr_tok: ["Function","invoked","when","calling","the","pipeline",".","Args",":","input_image","(","`","Image","`",")",":","Input","RGB","(","or","gray-scale",")","image",".","processing_res","(","`","int","`",",","*","optional","*",",","defaults","to","`","768","`",")",":","Maximum","resolution","of","processing",".","If","set","to","0",":","will","not","resize","at","all",".","match_input_res","(","`","bool","`",",","*","optional","*",",","defaults","to","`","True","`",")",":","Resize","depth","prediction","to","match","input","resolution",".","Only","valid","if","`","limit_input_res","`","is","not","None",".","denoising_steps","(","`","int","`",",","*","optional","*",",","defaults","to","`","10","`",")",":","Number","of","diffusion","denoising","steps","(","DDIM",")","during","inference",".","ensemble_size","(","`","int","`",",","*","optional","*",",","defaults","to","`","10","`",")",":","Number","of","predictions","to","be","ensembled",".","batch_size","(","`","int","`",",","*","optional","*",",","defaults","to","`","0","`",")",":","Inference","batch","size",",","no","bigger","than","`","num_ensemble","`",".","If","set","to","0",",","the","script","will","automatically","decide","the","proper","batch","size",".","show_progress_bar","(","`","bool","`",",","*","optional","*",",","defaults","to","`","True","`",")",":","Display","a","progress","bar","of","diffusion","denoising",".","color_map","(","`","str","`",",","*","optional","*",",","defaults","to","`","``","Spectral","''","`",")",":","Colormap","used","to","colorize","the","depth","map",".","ensemble_kwargs","(","`","dict","`",",","*","optional","*",",","defaults","to","`","None","`",")",":","Arguments","for","detailed","ensembling","settings",".","Returns",":","`","MarigoldDepthOutput","`",":","Output","class","for","Marigold","monocular","depth","prediction","pipeline",",","including",":","-","*","*","depth_np","*","*","(","`","np.ndarray","`",")","Predicted","depth","map",",","with","depth","values","in","the","range","of","[","0",",","1","]","-","*","*","depth_colored","*","*","(","`","PIL.Image.Image","`",")","Colorized","depth","map",",","with","the","shape","of","[","3",",","H",",","W","]","and","values","in","[","0",",","1","]","-","*","*","uncertainty","*","*","(","`","None","`","or","`","np.ndarray","`",")","Uncalibrated","uncertainty","(","MAD",",","median","absolute","deviation",")","coming","from","ensembling",".","None","if","`","ensemble_size","=","1","`"]
code: def __call__(
      self,
      input_image: Image,
      denoising_steps: int = 10,
      ensemble_size: int = 10,
      processing_res: int = 768,
      match_input_res: bool = True,
      batch_size: int = 0,
      color_map: str = "Spectral",
      show_progress_bar: bool = True,
      ensemble_kwargs: Dict = None,
  ) -> MarigoldDepthOutput:
      """
      Function invoked when calling the pipeline.
  
      Args:
          input_image (`Image`):
              Input RGB (or gray-scale) image.
          processing_res (`int`, *optional*, defaults to `768`):
              Maximum resolution of processing.
              If set to 0: will not resize at all.
          match_input_res (`bool`, *optional*, defaults to `True`):
              Resize depth prediction to match input resolution.
              Only valid if `limit_input_res` is not None.
          denoising_steps (`int`, *optional*, defaults to `10`):
              Number of diffusion denoising steps (DDIM) during inference.
          ensemble_size (`int`, *optional*, defaults to `10`):
              Number of predictions to be ensembled.
          batch_size (`int`, *optional*, defaults to `0`):
              Inference batch size, no bigger than `num_ensemble`.
              If set to 0, the script will automatically decide the proper batch size.
          show_progress_bar (`bool`, *optional*, defaults to `True`):
              Display a progress bar of diffusion denoising.
          color_map (`str`, *optional*, defaults to `"Spectral"`):
              Colormap used to colorize the depth map.
          ensemble_kwargs (`dict`, *optional*, defaults to `None`):
              Arguments for detailed ensembling settings.
      Returns:
          `MarigoldDepthOutput`: Output class for Marigold monocular depth prediction pipeline, including:
          - **depth_np** (`np.ndarray`) Predicted depth map, with depth values in the range of [0, 1]
          - **depth_colored** (`PIL.Image.Image`) Colorized depth map, with the shape of [3, H, W] and values in [0, 1]
          - **uncertainty** (`None` or `np.ndarray`) Uncalibrated uncertainty(MAD, median absolute deviation)
                  coming from ensembling. None if `ensemble_size = 1`
      """
  
      device = self.device
      input_size = input_image.size
  
      if not match_input_res:
          assert (
              processing_res is not None
          ), "Value error: `resize_output_back` is only valid with "
      assert processing_res >= 0
      assert denoising_steps >= 1
      assert ensemble_size >= 1
  
      # ----------------- Image Preprocess -----------------
      # Resize image
      if processing_res > 0:
          input_image = self.resize_max_res(
              input_image, max_edge_resolution=processing_res
          )
      # Convert the image to RGB, to 1.remove the alpha channel 2.convert B&W to 3-channel
      input_image = input_image.convert("RGB")
      image = np.asarray(input_image)
  
      # Normalize rgb values
      rgb = np.transpose(image, (2, 0, 1))  # [H, W, rgb] -> [rgb, H, W]
      rgb_norm = rgb / 255.0
      rgb_norm = torch.from_numpy(rgb_norm).to(self.dtype)
      rgb_norm = rgb_norm.to(device)
      assert rgb_norm.min() >= 0.0 and rgb_norm.max() <= 1.0
  
      # ----------------- Predicting depth -----------------
      # Batch repeated input image
      duplicated_rgb = torch.stack([rgb_norm] * ensemble_size)
      single_rgb_dataset = TensorDataset(duplicated_rgb)
      if batch_size > 0:
          _bs = batch_size
      else:
          _bs = self._find_batch_size(
              ensemble_size=ensemble_size,
              input_res=max(rgb_norm.shape[1:]),
              dtype=self.dtype,
          )
  
      single_rgb_loader = DataLoader(
          single_rgb_dataset, batch_size=_bs, shuffle=False
      )
  
      # Predict depth maps (batched)
      depth_pred_ls = []
      if show_progress_bar:
          iterable = tqdm(
              single_rgb_loader,
              desc=" " * 2 + "Inference batches",
              leave=False,
          )
      else:
          iterable = single_rgb_loader
      for batch in iterable:
          (batched_img,) = batch
          depth_pred_raw = self.single_infer(
              rgb_in=batched_img,
              num_inference_steps=denoising_steps,
              show_pbar=show_progress_bar,
          )
          depth_pred_ls.append(depth_pred_raw.detach().clone())
      depth_preds = torch.concat(depth_pred_ls, axis=0).squeeze()
      torch.cuda.empty_cache()  # clear vram cache for ensembling
  
      # ----------------- Test-time ensembling -----------------
      if ensemble_size > 1:
          depth_pred, pred_uncert = self.ensemble_depths(
              depth_preds, **(ensemble_kwargs or {})
          )
      else:
          depth_pred = depth_preds
          pred_uncert = None
  
      # ----------------- Post processing -----------------
      # Scale prediction to [0, 1]
      min_d = torch.min(depth_pred)
      max_d = torch.max(depth_pred)
      depth_pred = (depth_pred - min_d) / (max_d - min_d)
  
      # Convert to numpy
      depth_pred = depth_pred.cpu().numpy().astype(np.float32)
  
      # Resize back to original resolution
      if match_input_res:
          pred_img = Image.fromarray(depth_pred)
          pred_img = pred_img.resize(input_size)
          depth_pred = np.asarray(pred_img)
  
      # Clip output range
      depth_pred = depth_pred.clip(0, 1)
  
      # Colorize
      depth_colored = self.colorize_depth_maps(
          depth_pred, 0, 1, cmap=color_map
      ).squeeze()  # [3, H, W], value in (0, 1)
      depth_colored = (depth_colored * 255).astype(np.uint8)
      depth_colored_hwc = self.chw2hwc(depth_colored)
      depth_colored_img = Image.fromarray(depth_colored_hwc)
      return MarigoldDepthOutput(
          depth_np=depth_pred,
          depth_colored=depth_colored_img,
          uncertainty=pred_uncert,
      )
  
imports: import math
  from typing import Dict, Union
  import matplotlib
  import numpy
  import torch
  from PIL import Image
  from scipy.optimize import minimize
  from torch.utils.data import DataLoader, TensorDataset
  from tqdm.auto import tqdm
  from transformers import CLIPTextModel, CLIPTokenizer
  from diffusers import AutoencoderKL, DDIMScheduler, DiffusionPipeline, UNet2DConditionModel
  from diffusers.utils import BaseOutput, check_min_version
label_desc: Use image node_id 2 for calling the MarigoldPipeline obj's underlying member method code with example usage: obj.__call__(input_image, denoising_steps, ensemble_size, processing_res, match_input_res, batch_size, color_map, show_progress_bar, ensemble_kwargs) and returns: MarigoldDepthOutput