# رؤية الحاسوب في Marigold

![marigold](https://marigoldmonodepth.github.io/images/teaser_collage_compressed.jpg)

قُدمت Marigold في [Repurposing Diffusion-Based Image Generators for Monocular Depth Estimation](https://huggingface.co/papers/2312.02145)، وهي ورقة فموية في مؤتمر CVPR 2024 من إعداد [Bingxin Ke](http://www.kebingxin.com/) و[Anton Obukhov](https://www.obukhov.ai/) و[Shengyu Huang](https://shengyuh.github.io/) و[Nando Metzger](https://nandometzger.github.io/) و[Rodrigo Caye Daudt](https://rcdaudt.github.io/) و[Konrad Schindler](https://scholar.google.com/citations?user=FZuNgqIAAAAJ&hl=en). الفكرة الجوهرية هي **إعادة توظيف المسبق التوليدي لنماذج الانتشار الكامنة من النص إلى الصورة (LDMs) لمهام الرؤية الحاسوبية التقليدية**. وقد استُكشفت هذه المنهجية من خلال ضبط دقيق لنموذج Stable Diffusion من أجل **Monocular Depth Estimation**، كما هو موضح في الصورة التوضيحية أعلاه.

تم توسيع Marigold لاحقًا في الورقة اللاحقة [Marigold: Affordable Adaptation of Diffusion-Based Image Generators for Image Analysis](https://huggingface.co/papers/2312.02145)، من تأليف [Bingxin Ke](http://www.kebingxin.com/) و[Kevin Qu](https://www.linkedin.com/in/kevin-qu-b3417621b/?locale=en_US) و[Tianfu Wang](https://tianfwang.github.io/) و[Nando Metzger](https://nandometzger.github.io/) و[Shengyu Huang](https://shengyuh.github.io/) و[Bo Li](https://www.linkedin.com/in/bobboli0202/) و[Anton Obukhov](https://www.obukhov.ai/) و[Konrad Schindler](https://scholar.google.com/citations?user=FZuNgqIAAAAJ&hl=en). وسّع هذا العمل Marigold لدعم أنماط جديدة مثل **Surface Normals** و**Intrinsic Image Decomposition** (IID)، وقدم بروتوكول تدريب لـ **Latent Consistency Models** (LCM)، وأثبت قدرة المعالجة **High-Resolution** (HR).

> [!TIP]
> تم تحسين النماذج المبكرة من Marigold (`v1-0` وما قبلها) للحصول على أفضل النتائج مع 10 خطوات استدلال على الأقل. تم تطوير نماذج LCM لاحقًا لتمكين الاستدلال عالي الجودة في 1 إلى 4 خطوات فقط. تستخدم نماذج Marigold `v1-1` وما بعدها مجدول DDIM لتحقيق نتائج مثالية في 1 إلى 4 خطوات فقط.

## الخطوط الأنابيب المتاحة

كل خط أنابيب مصمّم لمهمة محددة في مجال الرؤية الحاسوبية، حيث يعالج صورة RGB مدخلة ويولّد تنبؤًا مقابلاً. حاليًا، تم تنفيذ مهام الرؤية الحاسوبية التالية:

| خط أنابيب                                                                                                                                          | نقاط التفتيش الموصى بها للنماذج                                                                                                                                                                           |                              المساحات (التطبيقات التفاعلية)                               | الأنماط المتوقعة                                                                                                                                                               |
|---------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:------------------------------------------------------------------------------------:|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [MarigoldDepthPipeline](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/marigold/pipeline_marigold_depth.py)           | [prs-eth/marigold-depth-v1-1](https://huggingface.co/prs-eth/marigold-depth-v1-1)                                                                                                                       |          [تقدير العمق](https://huggingface.co/spaces/prs-eth/marigold)          | [العمق](https://en.wikipedia.org/wiki/Depth_map)، [الفرق](https://en.wikipedia.org/wiki/Binocular_disparity)                                                                   |
| [MarigoldNormalsPipeline](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/marigold/pipeline_marigold_normals.py)       | [prs-eth/marigold-normals-v1-1](https://huggingface.co/prs-eth/marigold-normals-v1-1)                                                                                                                   | [تقدير العواطف السطحية](https://huggingface.co/spaces/prs-eth/marigold-normals) | [المعادلات السطحية](https://en.wikipedia.org/wiki/Normal_mapping)                                                                                                                    |
| [MarigoldIntrinsicsPipeline](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/marigold/pipeline_marigold_intrinsics.py) | [prs-eth/marigold-iid-appearance-v1-1](https://huggingface.co/prs-eth/marigold-iid-appearance-v1-1)، [prs-eth/marigold-iid-lighting-v1-1](https://huggingface.co/prs-eth/marigold-iid-lighting-v1-1) | [التحليل الداخلي للصور](https://huggingface.co/spaces/prs-eth/marigold-iid)  | [الانعكاسية](https://en.wikipedia.org/wiki/Albedo)، [المواد](https://www.n.aiq3d.com/wiki/roughnessmetalnessao-map)، [الإضاءة](https://en.wikipedia.org/wiki/Diffuse_reflection)   |

## نقاط التفتيش المتاحة

جميع نقاط التفتيش الأصلية متاحة تحت منظمة [PRS-ETH](https://huggingface.co/prs-eth/) على Hugging Face. وهي مصممة للاستخدام مع خطوط أنابيب diffusers و[قاعدة الكود الأصلية](https://github.com/prs-eth/marigold)، والتي يمكن أيضًا استخدامها لتدريب نقاط تفتيش جديدة للنماذج. فيما يلي ملخص لنقاط التفتيش الموصى بها، والتي تنتج جميعها نتائج موثوقة بخطوة إلى أربع خطوات.

| نقطة التفتيش                                                                                          | الوسيط     | تعليق                                                                                                                                                                              |
|-----------------------------------------------------------------------------------------------------|--------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [prs-eth/marigold-depth-v1-1](https://huggingface.co/prs-eth/marigold-depth-v1-1)                   | العمق        | يُسند التنبؤ بالعمق غير المعتمد على التحويلات الخطية (Affine-invariant) لكل بكسل قيمة بين 0 (السترة القريبة) و1 (السترة البعيدة)، حيث يحدد النموذج كلا من هاتين المستويين أثناء الاستدلال.                    |
| [prs-eth/marigold-normals-v0-1](https://huggingface.co/prs-eth/marigold-normals-v0-1)               | المُتَّجَهات      | تتكون تنبؤات العواطف السطحية من متجهات ثلاثية الأبعاد بطول وحدة في مساحة الكاميرا على الشاشة، بقيم تتراوح من -1 إلى 1.                                                        |
| [prs-eth/marigold-iid-appearance-v1-1](https://huggingface.co/prs-eth/marigold-iid-appearance-v1-1) | الخصائص الجوهرية   | يتكون تفكيك InteriorVerse من خاصية Albedo وخاصيتين ماديتين BRDF: خاصية Roughness وخاصية Metallicity.                                                                      |
| [prs-eth/marigold-iid-lighting-v1-1](https://huggingface.co/prs-eth/marigold-iid-lighting-v1-1)     | الخصائص الجوهرية   | يتكون تحليل HyperSim للصورة $I$ من ألبيدو $A$، والتظليل المنتشر $S$، والباقي غير المنتشر $R$: $I = A*S+R$. |

> [!TIP]
> تأكد من الاطلاع على [دليل المجدولين](../../using-diffusers/schedulers) لمعرفة كيفية استكشاف التوازن بين سرعة المجدول وجودة النتائج، واطّلع على قسم [إعادة استخدام المكونات عبر خطوط الأنابيب](../../using-diffusers/loading#reusing-models-in-multiple-pipelines) لمعرفة كيفية تحميل نفس المكونات بكفاءة في خطوط أنابيب متعددة. بالإضافة إلى ذلك، لمعرفة المزيد حول تقليل استهلاك الذاكرة في خط الأنابيب هذا، راجع دليل [تقليل استهلاك الذاكرة](../../optimization/memory).

> [!WARNING]
> صُممت خطوط أنابيب Marigold واختُبرت مع جدولة مدمجة في نقطة الفحص النموذجية. يختلف العدد الأمثل لخطوات الاستدلال حسب الجدولة، ولا توجد قيمة عالمية واحدة تكون الأفضل في جميع الحالات. ولتلبية هذا، فإن معامل `num_inference_steps` في طريقة `__call__` الخاصة بخط الأنابيب يكون افتراضيًا `None` (انظر مرجع واجهة البرمجة). ما لم يُضبط صراحةً، فإنه يرث القيمة من حقل `default_denoising_steps` في ملف إعدادات نقطة الفحص (`model_index.json`). وهذا يضمن تنبؤات عالية الجودة عند استدعاء خط الأنابيب بحجة `image` فقط.

تُقدَّم الأمثلة أدناه بشكلٍ رئيسي للتنبؤ بالعمق، لكنها قابلة للتطبيق بشكلٍ عام على الأنماط المدعومة الأخرى. نُظهر التنبؤات باستخدام صورة مدخلاتٍ واحدة لألبرت أينشتاين تم توليدها بواسطة Midjourney. وهذا يسهّل مقارنة تصورات التنبؤات عبر الأنماط ونقاط التفتيش المختلفة.

  
    
    
      صورة الإدخال النموذجية لجميع خطوط أنابيب Marigold
    
  

## توقع العمق

للحصول على تنبؤ بالعمق، حمّل نقطة التفتيش `prs-eth/marigold-depth-v1-1` في [MarigoldDepthPipeline](/docs/diffusers/main/ar/api/pipelines/marigold#diffusers.MarigoldDepthPipeline)، ومرّر الصورة عبر خط الأنابيب، ثم احفظ التنبؤات:

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

تطبّق الدالة [visualize_depth()](/docs/diffusers/main/ar/api/pipelines/marigold#diffusers.pipelines.marigold.MarigoldImageProcessor.visualize_depth) أحد [خرائط ألوان matplotlib](https://matplotlib.org/stable/users/explain/colors/colormaps.html) (افتراضيًا `Spectral`) لربط قيم البكسلات المتنبأ بها من نطاق عمق أحادي القناة `[0, 1]` بصورة RGB. مع خريطة الألوان `Spectral`، تُرسم البكسلات ذات العمق القريب باللون الأحمر، والبكسلات البعيدة باللون الأزرق. يخزّن ملف PNG ذو 16 بت قيم القناة الواحدة المُربوطة خطيًا من النطاق `[0, 1]` إلى `[0, 65535]`. أدناه التنبؤات الخام والتنبؤات المُصوَّرة. المناطق الداكنة والأقرب (الشوارب) أسهل في التمييز في التصويرة.

  
    
    
      العمق المتوقع (PNG بدقة 16 بت)
    
  
  
    
    
      تصور العمق المتوقع (طيفي)
    
  

## تقدير العواطف السطحية

حمّل نقطة التفتيش `prs-eth/marigold-normals-v1-1` في [MarigoldNormalsPipeline](/docs/diffusers/main/ar/api/pipelines/marigold#diffusers.MarigoldNormalsPipeline)، ومرّر الصورة عبر خط الأنابيب، واحفظ التنبؤات:

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

تُحوّل [visualize_normals()](/docs/diffusers/main/ar/api/pipelines/marigold#diffusers.pipelines.marigold.MarigoldImageProcessor.visualize_normals) التنبؤ ثلاثي الأبعاد ذي قيم البكسل في المدى `[-1, 1]` إلى صورة RGB. تدعم دالة التصور عكس محاور العواطف السطحية لجعل التصور متوافقًا مع اختيارات أخرى لنظام الإحداثيات. من الناحية المفاهيمية، يُرسم كل بكسل وفقًا لمتجه العاطفة السطحية في نظام الإحداثيات، حيث يشير محور `X` إلى اليمين، ومحور `Y` إلى الأعلى، ومحور `Z` نحو المشاهد. التنبؤ المُصوَّر أدناه:

  
    
    
      تصور الأطوال العمودية السطحية المتوقعة
    
  

في هذا المثال، من شبه المؤكد أن طرف الأنف يحتوي على نقطة على السطح، يتجه فيها متجه العمودي على السطح مباشرةً نحو المشاهد، مما يعني أن إحداثياته هي `[0, 0, 1]`. يتطابق هذا المتجه مع قيم RGB `[128, 128, 255]`، والتي تقابل اللون البنفسجي الأزرق. وبالمثل، فإن العمودي على السطح على الخد في الجزء الأيمن من الصورة يحتوي على مكوّن `X` كبير، مما يزيد من درجة اللون الأحمر. أما النقاط على الكتفين التي تتجه للأعلى مع مكوّن `Y` كبير فتعزز اللون الأخضر.

## التحليل الجوهري للصورة

توفر Marigold نموذجين لتفكيك الصورة الجوهرية (IID): "Appearance" و"Lighting". ينتج كل نموذج خرائط Albedo، مشتقة من تسميات InteriorVerse وHypersim على التوالي.

- يقوم نموذج "Appearance" أيضاً بتقدير خصائص المادة: الخشونة والمعدنية.
- ينشئ نموذج "Lighting" كلًا من التظليل المنتشر (Diffuse Shading) والباقي غير المنتشر (Non-diffuse Residual).

فيما يلي رمز نموذجي لحفظ التنبؤات التي أجراها نموذج "Appearance":

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

مثال آخر يوضح التنبؤات التي يقدمها نموذج "Lighting":

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

تشارك كلا النموذجين نفس خط المعالجة مع دعم أنواع تفكيك مختلفة. يُخزَّن تمثيل معامل التفكيك الدقيق (مثل sRGB مقابل الفضاء الخطي) في قاموس `pipe.target_properties`، الذي يُمرَّر إلى دالة [visualize_intrinsics()](/docs/diffusers/main/ar/api/pipelines/marigold#diffusers.pipelines.marigold.MarigoldImageProcessor.visualize_intrinsics).

فيما يلي بعض الأمثلة التي تُظهر مخرجات التفكيك المتوقعة. يمكن فحص جميع الأنماط في مساحة [Intrinsic Image Decomposition](https://huggingface.co/spaces/prs-eth/marigold-iid).

  
    
    
      المعكوسية المتوقعة (نموذج "المظهر")
    
  
  
    
    
      الظلال المتناثرة المتوقعة (نموذج "الإضاءة")
    
  

## تسريع الاستدلال

المقاطع السريعة المذكورة أعلاه مُحسَّنة بالفعل من حيث الجودة والسرعة، حيث تُحمّل نقطة التفتيش (checkpoint) وتستخدم متغير `fp16` للأوزان والحسابات، وتنفذ العدد الافتراضي (4) من خطوات إزالة الضوضاء في الانتشار. الخطوة الأولى لتسريع الاستدلال، على حساب جودة التنبؤ، هي تقليل خطوات إزالة الضوضاء في الانتشار إلى الحد الأدنى:

```diff
  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)
```

مع هذا التغيير، يكتمل استدعاء `pipe` في 280 مللي ثانية على بطاقة RTX 3090. داخليًا، يتم ترميز الصورة المدخلة أولًا باستخدام مُرمِّز VAE الخاص بـ Stable Diffusion، يليه خطوة إزالة ضوضاء واحدة يقوم بها U-Net. أخيرًا، يتم فك ترميز الكامن للتنبؤ باستخدام مُفكّك VAE إلى فضاء البكسلات. في هذا الإعداد، يُخصص اثنان من استدعاءات الوحدات الثلاثة لتحويل البيانات بين فضاء البكسلات وفضاء الكامن في LDM. نظرًا لأن فضاء الكامن الخاص بـ Marigold متوافق مع Stable Diffusion 2.0، يمكن تسريع الاستدلال بأكثر من 3 أضعاف، مما يقلل زمن الاستدعاء إلى 85 مللي ثانية على RTX 3090، وذلك通过使用 [بديل خفيف الوزن لـ VAE الخاص بـ SD](../models/autoencoder_tiny). لاحظ أن استخدام VAE خفيف الوزن قد يُقلل من الجودة البصرية للتنبؤات بشكل طفيف.

```diff
  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)
```

حتى الآن، قمنا بتحسين عدد خطوات الانتشار ومكونات النموذج. وتشكل عمليات الانتباه الذاتي جزءًا كبيرًا من العمليات الحسابية. ويمكن تحقيق تسريعها من خلال استخدام معالج انتباه أكثر كفاءة:

```diff
  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)
```

أخيرًا، كما هو موصى به في [التحسينات](../../optimization/fp16#torchcompile)، يمكن لتفعيل `torch.compile` تعزيز الأداء بشكل أكبر اعتمادًا على العتاد المستهدف. ومع ذلك، فإن التجميع يستلزم عبئًا كبيرًا أثناء أول استدعاء للخط الأنابيب، مما يجعله مفيدًا فقط عندما يُستدعى نفس مثيل الخط الأنابيب بشكل متكرر، مثل ما يحدث داخل حلقة.

```diff
  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)
```

## تعظيم الدقة والتجميع

تتميز خطوط أنابيب Marigold بآلية تجميع مدمجة تجمع بين عدة تنبؤات ناتجة عن كامنات عشوائية مختلفة. هذه طريقة قسرية لتحسين دقة التنبؤات، تستفيد من الطبيعة التوليدية للانتشار. يتم تفعيل مسار التجميع تلقائيًا عند ضبط معامل `ensemble_size` بقيمة أكبر من أو تساوي `3`. عند السعي لتحقيق أقصى دقة، من المنطقي ضبط `num_inference_steps` بالتزامن مع `ensemble_size`. تختلف القيم الموصى بها بين نقاط التفتيش، لكنها تعتمد بشكل أساسي على نوع المجدول. يظهر تأثير التجميع بوضوح خاص مع العواطف السطحية:

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

  
    
    
      طبيعيات السطح، بدون تجميع
    
  
  
    
    
      طبيعات السطح، مع التجميع
    
  

كما هو واضح، أصبحت جميع المناطق ذات البنى الدقيقة، مثل الشعر، أكثر تحفظاً في التنبؤات وأكثر دقة في المتوسط. هذا النوع من النتائج أكثر ملاءمة للمهام اللاحقة الحساسة للدقة، مثل إعادة البناء ثلاثية الأبعاد.

## معالجة الفيديو إطارًا بإطار مع الاتساق الزمني

نظرًا للطبيعة التوليدية لـ Marigold، فإن كل تنبؤ فريد ومُعرَّف بالضوضاء العشوائية المُستخرجة لتهيئة الحالة الكامنة. ويصبح هذا عيبًا واضحًا مقارنةً بشبكات الانحدار الكثيف التقليدية من الطرف إلى الطرف، كما هو موضح في مقاطع الفيديو التالية:

  
    
    فيديو الإدخال
  
  
    
    تطبيق Marigold Depth على إطارات الفيديو المدخلة بشكل مستقل
  

لمعالجة هذه المشكلة، يمكن تمرير معامل `latents` إلى خطوط الأنابيب، والذي يحدد نقطة بداية الانتشار. وقد وجدنا تجريبيًا أن الجمع المحدب بين ضجيج الكامن لنقطة البداية نفسها والكامن المقابل لتوقع الإطار السابق يعطي نتائج سلسة بما يكفي، كما هو موضح في المقطع أدناه:

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

هنا، تبدأ عملية الانتشار من الكامن المُحسَب المُعطى. يضبط خط الأنابيب `output_latent=True` للوصول إلى `out.latent` ويحسب مساهمته في تهيئة الكامن للإطار التالي. أصبح الناتج أكثر استقراراً بكثير الآن:

  
    
    تطبيق Marigold Depth على إطارات الفيديو المدخلة بشكل مستقل
  
  
    
    عمق Marigold مع تهيئة إجبارية للكائنات الكامنة
  

## Marigold لـ ControlNet

تُعدّ التنبؤ بالعمق باستخدام نماذج الانتشار تطبيقاً شائعاً جداً عند اقترانه مع ControlNet. تلعب دقة العمق دوراً حاسماً في الحصول على نتائج عالية الجودة من ControlNet. وكما هو موضح في المقارنات مع الأساليب الأخرى أعلاه، يتفوق Marigold في أداء هذه المهمة. يوضح المقطع أدناه كيفية تحميل صورة، وحساب العمق، وتوريده إلى ControlNet بتنسيق متوافق:

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

  
    
    
      صورة الإدخال
    
  
  
    
    
      العمق بالصيغة المتوافقة مع ControlNet
    
  
  
    
    
      توليد ControlNet، مشروط بالعمق والموجّه النصي: "صورة عالية الجودة لدراجة رياضية، مدينة"
    
  

## التقييم الكمي

لتقييم Marigold كمياً في لوحات الترتيب والمعايير القياسية (مثل NYU وKITTI ومجموعات بيانات أخرى)، اتبع بروتوكول التقييم الموضح في الورقة البحثية: حمّل النموذج بدقة كاملة fp32 واستخدم القيم المناسبة لـ`num_inference_steps` و`ensemble_size`. يمكنك اختيارياً تحديد البذرة العشوائية لضمان قابلية التكرار. سيؤدي تعظيم `batch_size` إلى تحقيق أقصى استغلال للجهاز.

```python
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
```

## استخدام عدم اليقين التنبؤي

تجمع آلية التجميع (Ensembling) المدمجة في خطوط أنابيب Marigold بين تنبؤات متعددة مستمدة من كامنات عشوائية مختلفة. وكأثر جانبي، يمكن استخدام هذه الآلية لقياس عدم اليقين الإبستمولوجي (الناتج عن النموذج)؛ يكفي تحديد `ensemble_size` بقيمة أكبر من 3 أو تساويها، وإعداد `output_uncertainty=True`. ستكون قيمة عدم اليقين الناتجة متاحة في حقل `uncertainty` من المخرجات. ويمكن تمثيلها بصريًا على النحو التالي:

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

  
    
    
      عدم اليقين في العمق
    
  
  
    
    
      عدم اليقين في متجهات العمودي
    
  
  
    
    
      عدم اليقين في البياض
    
  

تفسير عدم اليقين سهل: فالقيم الأعلى (الأبيض) تتوافق مع البكسلات التي يجد النموذج صعوبة في تقديم تنبؤات متسقة بشأنها.
- يُظهر نموذج العمق أكبر قدر من عدم اليقين حول نقاط التوقف، حيث يتغير عمق الكائنات بشكل مفاجئ.
- أقل ثقة لنموذج الاتجاهات السطحية تكون في الهياكل الدقيقة مثل الشعر وفي المناطق الداكنة مثل
منطقة الياقة.
- يُمثَّل عدم اليقين في البياض (Albedo) كصورة RGB، حيث إنه يلتقط عدم اليقين بشكل مستقل لكل قناة ألوان،
على عكس العمق وطبيعيّات السطح. كما أنها أعلى في المناطق المظللة وعند نقاط عدم الاستمرارية.

## واجهة برمجة التطبيقات للتنبؤ بالعمق في Marigold[[diffusers.MarigoldDepthPipeline]]

#### diffusers.MarigoldDepthPipeline[[diffusers.MarigoldDepthPipeline]]

```python
diffusers.MarigoldDepthPipeline(unet: UNet2DConditionModel, vae: AutoencoderKL, scheduler: diffusers.schedulers.scheduling_ddim.DDIMScheduler | diffusers.schedulers.scheduling_lcm.LCMScheduler, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, prediction_type: str | None = None, scale_invariant: bool | None = True, shift_invariant: bool | None = True, default_denoising_steps: int | None = None, default_processing_resolution: int | None = None)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/marigold/pipeline_marigold_depth.py#L104)

**المعاملات:**

unet (`UNet2DConditionModel`) : شبكة U-Net شرطية لإزالة الضوضاء من الكامن العمقي، مشروطة بالكامن الصوري.

vae (`AutoencoderKL`) : نموذج الترميز التحويلي التبايني (VAE) لتشفير وفك تشفير الصور والتنبؤات إلى تمثيلات كامنة ومنها.

scheduler (`DDIMScheduler` أو `LCMScheduler`) : مُجدوِل يُستخدم بالاقتران مع `unet` لإزالة الضوضاء من الكامنات المُرمَّزة للصورة.

text_encoder (`CLIPTextModel`) : مُشفِّر النص، لتضمين النص الفارغ.

tokenizer (`CLIPTokenizer`) : مُجزِّئ CLIP.

prediction_type (`str`، *اختياري*) : نوع التنبؤات التي يقوم بها النموذج.

scale_invariant (`bool`, *اختياري*) : خاصية في النموذج تحدد ما إذا كانت خرائط العمق المتوقعة غير حساسة للتغيير في المقياس. يجب تعيين هذه القيمة في إعدادات النموذج. عند استخدامها مع العلم `shift_invariant=True`، يُطلق على النموذج أيضًا اسم "غير حساس للتحويلات الأفينية". ملاحظة: لا يُدعم تجاوز هذه القيمة.

shift_invariant (`bool`, *اختياري*) : خاصية في النموذج تحدد ما إذا كانت خرائط العمق المتوقعة غير حساسة للإزاحة. يجب تعيين هذه القيمة في إعدادات النموذج. عند استخدامها مع علم `scale_invariant=True`، يُطلق على النموذج أيضًا اسم "غير حساس للتحويلات الأفينية". ملاحظة: لا يُدعم تجاوز هذه القيمة.

default_denoising_steps (`int`, *اختياري*) : الحد الأدنى لخطوات إزالة الضوضاء التوزيعية المطلوبة لإنتاج تنبؤ بجودة معقولة باستخدام النموذج المعطى. يجب تعيين هذه القيمة في إعدادات النموذج. عند استدعاء خط الأنابيب دون تعيين `num_inference_steps` صراحةً، يتم استخدام القيمة الافتراضية. وهذا ضروري لضمان نتائج معقولة مع مختلف النماذج المتوافقة مع خط الأنابيب، مثل تلك التي تعتمد على جداول إزالة ضوضاء قصيرة جداً (`LCMScheduler`) وتلك التي لديها جداول توزيع كاملة (`DDIMScheduler`).

default_processing_resolution (`int`, *اختياري*) : القيمة الموصى بها لمعامل `processing_resolution` في خط المعالجة. يجب تعيين هذه القيمة في إعدادات النموذج. عند استدعاء خط المعالجة دون تعيين `processing_resolution` بشكل صريح، تُستخدم القيمة الافتراضية. وهذا ضروري لضمان نتائج معقولة مع مختلف أنواع النماذج المدرَّبة بقيم معالجة مثالية متباينة.

خط أنابيب لتقدير العمق أحادي العين باستخدام طريقة Marigold: https://marigoldmonodepth.github.io.

يرث هذا النموذج من [DiffusionPipeline](/docs/diffusers/main/ar/api/pipelines/overview#diffusers.DiffusionPipeline). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع خطوط الأنابيب (مثل التنزيل أو الحفظ، أو التشغيل على جهاز معين، وما إلى ذلك).

#### __call__[[diffusers.MarigoldDepthPipeline.__call__]]

```python
__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 = None, ensemble_size: int = 1, processing_resolution: int | None = None, match_input_resolution: bool = True, resample_method_input: str = 'bilinear', resample_method_output: str = 'bilinear', batch_size: int = 1, ensembling_kwargs: dict[str, typing.Any] | None = None, latents: typing.Union[torch.Tensor, list[torch.Tensor], NoneType] = None, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, output_type: str = 'np', output_uncertainty: bool = False, output_latent: bool = False, return_dict: bool = True)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/marigold/pipeline_marigold_depth.py#L347)

**المعاملات:**

image (`PIL.Image.Image`، `np.ndarray`، `torch.Tensor`، `list[PIL.Image.Image]`، `list[np.ndarray]`)، : `list[torch.Tensor]`: صورة مدخل أو صور مدخلات تُستخدم كمدخلات لمهمة تقدير العمق. بالنسبة للمصفوفات والموترات، النطاق المتوقع للقيم هو بين `[0, 1]`. يمكن تمرير دفعة من الصور من خلال تقديم مصفوفة رباعية الأبعاد أو موتر. بالإضافة إلى ذلك، يمكن تمرير قائمة من الصور المكونة من مصفوفات أو موترات ثنائية أو ثلاثية الأبعاد. في الحالة الأخيرة، يجب أن تكون جميع عناصر القائمة ذات نفس العرض والارتفاع.

num_inference_steps (`int`، *اختياري*، القيمة الافتراضية `None`) : عدد خطوات الانتشار لإزالة الضوضاء أثناء الاستدلال. تؤدي القيمة الافتراضية `None` إلى الاختيار التلقائي.

ensemble_size (`int`، القيمة الافتراضية `1`) : عدد تنبؤات المجموعة. تؤدي القيم الأعلى إلى تحسينات قابلة للقياس وتدهور بصري.

processing_resolution (`int`، *اختياري*، القيمة الافتراضية `None`) : دقة المعالجة الفعلية. عند ضبطها على `0`، تتطابق مع بُعد الصورة المدخلة الأكبر. يؤدي هذا إلى تنبؤات أكثر وضوحًا، لكنه قد يؤدي أيضًا إلى فقدان السياق العام بشكل كلي. تحل القيمة الافتراضية `None` إلى القيمة المثلى من إعدادات النموذج.

match_input_resolution (`bool`، *اختياري*، القيمة الافتراضية `True`) : عند التفعيل، يتم تغيير حجم التنبؤ الناتج ليتطابق مع أبعاد الإدخال. عند التعطيل، ستكون الطول الأكبر للجهة الناتجة مساوياً لـ`processing_resolution`.

resample_method_input (`str`، *اختياري*، القيمة الافتراضية `"bilinear"`) : طريقة إعادة العينة المستخدمة لتغيير حجم الصور المدخلة إلى `processing_resolution`. القيم المقبولة هي: `"nearest"`، `"nearest-exact"`، `"bilinear"`، `"bicubic"`، أو `"area"`.

resample_method_output (`str`، *اختياري*، القيمة الافتراضية `"bilinear"`) : طريقة إعادة العينة المستخدمة لتغيير حجم التنبؤات الناتجة لتطابق دقة الإدخال. القيم المقبولة هي `"nearest"`، `"nearest-exact"`، `"bilinear"`، `"bicubic"`، أو `"area"`.

batch_size (`int`، *اختياري*، القيمة الافتراضية `1`) : حجم الدفعة؛ لا يهم إلا عند تعيين `ensemble_size` أو تمرير مصفوفة من الصور.

ensembling_kwargs (`dict`، *اختياري*، القيمة الافتراضية `None`) : قاموس إضافي يحتوي على حُجج للتحكم الدقيق في عملية الدمج. الخيارات المتاحة هي: - reduction (`str`، *اختياري*، القيمة الافتراضية `"median"`): يحدد دالة الدمج المطبقة في كل موقع بكسل، ويمكن أن تكون إما `"median"` أو `"mean"`. - regularizer_strength (`float`، *اختياري*، القيمة الافتراضية `0.02`): قوة المُنظِّم الذي يسحب التنبؤات المحاذاة إلى المدى الموحّد من 0 إلى 1. - max_iter (`int`، *اختياري*، القيمة الافتراضية `2`): الحد الأقصى لعدد خطوات محلل المحاذاة. راجع دالة `scipy.optimize.minimize`، الحجة `options`. - tol (`float`، *اختياري*، القيمة الافتراضية `1e-3`): سماحية محلل المحاذاة. يتوقف المحلل عند بلوغ السماحية. - max_res (`int`، *اختياري*، القيمة الافتراضية `None`): الدقة التي يتم عندها تنفيذ المحاذاة؛ `None` يطابق `processing_resolution`.

latents (`torch.Tensor`، أو `list[torch.Tensor]`، *اختياري*، القيمة الافتراضية `None`) : تينسورات الضوضاء الكامنة لاستبدال التهيئة العشوائية. يمكن أخذ هذه التينسورات من مخرجات استدعاء الدالة السابق.

generator (`torch.Generator`، أو `list[torch.Generator]`، *اختياري*، القيمة الافتراضية `None`) : كائن مولّد الأرقام العشوائية لضمان قابلية التكرار.

output_type (`str`، *اختياري*، القيمة الافتراضية `"np"`) : التنسيق المفضل لحقل `prediction` في المخرجات والحقل الاختياري `uncertainty`. القيم المقبولة هي: `"np"` (مصفوفة numpy) أو `"pt"` (موتر torch).

output_uncertainty (`bool`، *اختياري*، القيمة الافتراضية `False`) : عند التفعيل، يحتوي حقل `uncertainty` في المخرجات على خريطة عدم اليقين التنبؤية، شريطة أن تكون قيمة الحجة `ensemble_size` أكبر من 2.

output_latent (`bool`، *اختياري*، القيمة الافتراضية `False`) : عند التفعيل، يحتوي حقل `latent` في المخرجات على الرموز الكامنة المقابلة للتنبؤات ضمن المجموعة. يمكن حفظ هذه الرموز وتعديلها واستخدامها في الاستدعاءات اللاحقة مع الحجة `latents`.

return_dict (`bool`، *اختياري*، الافتراضي `True`) : ما إذا كان يجب إرجاع [MarigoldDepthOutput](/docs/diffusers/main/ar/api/pipelines/marigold#diffusers.pipelines.marigold.MarigoldDepthOutput) بدلاً من tuple عادي.

**يعيد:** [MarigoldDepthOutput](/docs/diffusers/main/ar/api/pipelines/marigold#diffusers.pipelines.marigold.MarigoldDepthOutput) أو `tuple`

إذا كان `return_dict` هو `True`، يُعاد [MarigoldDepthOutput](/docs/diffusers/main/ar/api/pipelines/marigold#diffusers.pipelines.marigold.MarigoldDepthOutput)، وإلا يُعاد `tuple` حيث العنصر الأول هو التنبؤ، والعنصر الثاني هو عدم اليقين (أو `None`)، والثالث هو الكمون (أو `None`).

الدالة التي يتم استدعاؤها عند استدعاء خط الأنابيب.

أمثلة:
```py
>>> 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")
```

#### diffusers.pipelines.marigold.MarigoldDepthOutput[[diffusers.pipelines.marigold.MarigoldDepthOutput]]

```python
diffusers.pipelines.marigold.MarigoldDepthOutput(prediction: typing.Union[numpy.ndarray, torch.Tensor], uncertainty: typing.Union[NoneType, numpy.ndarray, torch.Tensor], latent: typing.Optional[torch.Tensor])
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/marigold/pipeline_marigold_depth.py#L83)

**المعاملات:**

prediction (`np.ndarray`، `torch.Tensor`) : خرائط العمق المتوقعة بقيم ضمن المدى [0، 1]. يكون الشكل `numimages × 1 × height × width` في حالة `torch.Tensor` أو `numimages × height × width × 1` في حالة `np.ndarray`.

uncertainty (`None`, `np.ndarray`, `torch.Tensor`) : خرائط عدم اليقين المحسوبة من المجموعة، بقيم ضمن المدى [0, 1]. الشكل هو `numimages × 1 × height × width` لـ `torch.Tensor` أو `numimages × height × width × 1` لـ `np.ndarray`.

latent (`None`, `torch.Tensor`) : ميزات كامنة تتوافق مع التنبؤات، متوافقة مع معامل `latents` في خط الأنابيب. الشكل هو `numimages * numensemble × 4 × latentheight × latentwidth`.

فئة الإخراج لخط أنابيب Marigold للتنبؤ بالعمق أحادي العين.

#### diffusers.pipelines.marigold.MarigoldImageProcessor.visualize_depth[[diffusers.pipelines.marigold.MarigoldImageProcessor.visualize_depth]]

```python
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.0, val_max: float = 1.0, color_map: str = 'Spectral')
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/marigold/marigold_image_processing.py#L387)

**المعاملات:**

depth (`PIL.Image.Image | np.ndarray | torch.Tensor | list[PIL.Image.Image, list[np.ndarray], : list[torch.Tensor]]`): خرائط العمق.

val_min (`float`، *اختياري*، القيمة الافتراضية `0.0`) : القيمة الدنيا لنطاق العمق المُصوَّر.

val_max (`float`، *اختياري*، القيمة الافتراضية `1.0`) : القيمة القصوى لنطاق العمق المُصوَّر.

color_map (`str`، *اختياري*، القيمة الافتراضية `"Spectral"`) : خريطة الألوان المستخدمة لتحويل التنبؤ العميق أحادي القناة إلى تمثيل ملوّن.

يُظهر خرائط العمق، مثل تنبؤات خط أنابيب `MarigoldDepthPipeline`.

يعيد: `list[PIL.Image.Image]` تحتوي على تصور لخرائط العمق.

## واجهة برمجة التطبيقات لتقدير الاتجاهات في Marigold[[diffusers.MarigoldNormalsPipeline]]

#### diffusers.MarigoldNormalsPipeline[[diffusers.MarigoldNormalsPipeline]]

```python
diffusers.MarigoldNormalsPipeline(unet: UNet2DConditionModel, vae: AutoencoderKL, scheduler: diffusers.schedulers.scheduling_ddim.DDIMScheduler | diffusers.schedulers.scheduling_lcm.LCMScheduler, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, prediction_type: str | None = None, use_full_z_range: bool | None = True, default_denoising_steps: int | None = None, default_processing_resolution: int | None = None)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/marigold/pipeline_marigold_normals.py#L99)

**المعاملات:**

unet (`UNet2DConditionModel`) : شبكة U-Net شرطية لإزالة الضوضاء من الكمونيات الطبيعية، مشروطة بالكمونيات الصورية.

vae (`AutoencoderKL`) : نموذج الترميز التحويلي التبايني (VAE) لتشفير وفك تشفير الصور والتنبؤات إلى تمثيلات كامنة ومنها.

scheduler (`DDIMScheduler` أو `LCMScheduler`) : مُجدوِل يُستخدم بالاقتران مع `unet` لإزالة الضوضاء من الكامنات المُرمَّزة للصورة.

text_encoder (`CLIPTextModel`) : مُشفِّر النص، لتضمين النص الفارغ.

tokenizer (`CLIPTokenizer`) : مُجزِّئ CLIP.

prediction_type (`str`، *اختياري*) : نوع التنبؤات التي يقوم بها النموذج.

use_full_z_range (`bool`, *اختياري*) : ما إذا كانت المتجهات العمودية (normals) التي يتنبأ بها هذا النموذج تستخدم النطاق الكامل لبُعد Z، أم نصفه الموجب فقط.

default_denoising_steps (`int`, *اختياري*) : الحد الأدنى لخطوات إزالة الضوضاء التوزيعية المطلوبة لإنتاج تنبؤ بجودة معقولة باستخدام النموذج المعطى. يجب تعيين هذه القيمة في إعدادات النموذج. عند استدعاء خط الأنابيب دون تعيين `num_inference_steps` صراحةً، يتم استخدام القيمة الافتراضية. وهذا ضروري لضمان نتائج معقولة مع مختلف النماذج المتوافقة مع خط الأنابيب، مثل تلك التي تعتمد على جداول إزالة ضوضاء قصيرة جداً (`LCMScheduler`) وتلك التي لديها جداول توزيع كاملة (`DDIMScheduler`).

default_processing_resolution (`int`, *اختياري*) : القيمة الموصى بها لمعامل `processing_resolution` في خط المعالجة. يجب تعيين هذه القيمة في إعدادات النموذج. عند استدعاء خط المعالجة دون تعيين `processing_resolution` بشكل صريح، تُستخدم القيمة الافتراضية. وهذا ضروري لضمان نتائج معقولة مع مختلف أنواع النماذج المدرَّبة بقيم معالجة مثالية متباينة.

خط أنابيب لتقدير العواطف الأحادية باستخدام طريقة Marigold: https://marigoldmonodepth.github.io.

يرث هذا النموذج من [DiffusionPipeline](/docs/diffusers/main/ar/api/pipelines/overview#diffusers.DiffusionPipeline). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع خطوط الأنابيب (مثل التنزيل أو الحفظ، أو التشغيل على جهاز معين، وما إلى ذلك).

#### __call__[[diffusers.MarigoldNormalsPipeline.__call__]]

```python
__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 = None, ensemble_size: int = 1, processing_resolution: int | None = None, match_input_resolution: bool = True, resample_method_input: str = 'bilinear', resample_method_output: str = 'bilinear', batch_size: int = 1, ensembling_kwargs: dict[str, typing.Any] | None = None, latents: typing.Union[torch.Tensor, list[torch.Tensor], NoneType] = None, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, output_type: str = 'np', output_uncertainty: bool = False, output_latent: bool = False, return_dict: bool = True)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/marigold/pipeline_marigold_normals.py#L332)

**المعاملات:**

image (`PIL.Image.Image`، `np.ndarray`، `torch.Tensor`، `list[PIL.Image.Image]`، `list[np.ndarray]`)، : `list[torch.Tensor]`: صورة أو صور مدخلة تُستخدم كمدخلات لمهمة تقدير العواطف (normals estimation). بالنسبة للمصفوفات والموترات، النطاق المتوقع للقيم هو بين `[0, 1]`. يمكن تمرير دفعة من الصور من خلال تقديم مصفوفة رباعية الأبعاد أو موتر. بالإضافة إلى ذلك، يمكن تمرير قائمة من الصور تكون مصفوفات أو موترات ثنائية أو ثلاثية الأبعاد. في الحالة الأخيرة، يجب أن تكون جميع عناصر القائمة ذات نفس العرض والارتفاع.

num_inference_steps (`int`، *اختياري*، القيمة الافتراضية `None`) : عدد خطوات الانتشار لإزالة الضوضاء أثناء الاستدلال. تؤدي القيمة الافتراضية `None` إلى الاختيار التلقائي.

ensemble_size (`int`، القيمة الافتراضية `1`) : عدد تنبؤات المجموعة. تؤدي القيم الأعلى إلى تحسينات قابلة للقياس وتدهور بصري.

processing_resolution (`int`، *اختياري*، القيمة الافتراضية `None`) : دقة المعالجة الفعلية. عند ضبطها على `0`، تتطابق مع بُعد الصورة المدخلة الأكبر. يؤدي هذا إلى تنبؤات أكثر وضوحًا، لكنه قد يؤدي أيضًا إلى فقدان السياق العام بشكل كلي. تحل القيمة الافتراضية `None` إلى القيمة المثلى من إعدادات النموذج.

match_input_resolution (`bool`، *اختياري*، القيمة الافتراضية `True`) : عند التفعيل، يتم تغيير حجم التنبؤ الناتج ليتطابق مع أبعاد الإدخال. عند التعطيل، ستكون الطول الأكبر للجهة الناتجة مساوياً لـ`processing_resolution`.

resample_method_input (`str`، *اختياري*، القيمة الافتراضية `"bilinear"`) : طريقة إعادة العينة المستخدمة لتغيير حجم الصور المدخلة إلى `processing_resolution`. القيم المقبولة هي: `"nearest"`، `"nearest-exact"`، `"bilinear"`، `"bicubic"`، أو `"area"`.

resample_method_output (`str`، *اختياري*، القيمة الافتراضية `"bilinear"`) : طريقة إعادة العينة المستخدمة لتغيير حجم التنبؤات الناتجة لتطابق دقة الإدخال. القيم المقبولة هي `"nearest"`، `"nearest-exact"`، `"bilinear"`، `"bicubic"`، أو `"area"`.

batch_size (`int`، *اختياري*، القيمة الافتراضية `1`) : حجم الدفعة؛ لا يهم إلا عند تعيين `ensemble_size` أو تمرير مصفوفة من الصور.

ensembling_kwargs (`dict`, *اختياري*, القيمة الافتراضية `None`) : قاموس إضافي يحتوي على حُجج للتحكم الدقيق في عملية الدمج. الخيارات المتاحة هي: - reduction (`str`, *اختياري*, القيمة الافتراضية `"closest"`): يحدد دالة الدمج المطبقة في كل موقع بكسل، ويمكن أن تكون إما `"closest"` أو `"mean"`.

latents (`torch.Tensor`، *اختياري*، القيمة الافتراضية `None`) : متجهات ضوضاء كامنة لاستبدال التهيئة العشوائية. يمكن أخذ هذه المتجهات من مخرجات استدعاء الدالة السابق.

generator (`torch.Generator`، أو `list[torch.Generator]`، *اختياري*، القيمة الافتراضية `None`) : كائن مولّد الأرقام العشوائية لضمان قابلية التكرار.

output_type (`str`، *اختياري*، القيمة الافتراضية `"np"`) : التنسيق المفضل لحقل `prediction` في المخرجات والحقل الاختياري `uncertainty`. القيم المقبولة هي: `"np"` (مصفوفة numpy) أو `"pt"` (موتر torch).

output_uncertainty (`bool`، *اختياري*، القيمة الافتراضية `False`) : عند التفعيل، يحتوي حقل `uncertainty` في المخرجات على خريطة عدم اليقين التنبؤية، شريطة أن تكون قيمة الحجة `ensemble_size` أكبر من 2.

output_latent (`bool`، *اختياري*، القيمة الافتراضية `False`) : عند التفعيل، يحتوي حقل `latent` في المخرجات على الرموز الكامنة المقابلة للتنبؤات ضمن المجموعة. يمكن حفظ هذه الرموز وتعديلها واستخدامها في الاستدعاءات اللاحقة مع الحجة `latents`.

return_dict (`bool`، *اختياري*، الافتراضي `True`) : ما إذا كان يجب إرجاع [MarigoldNormalsOutput](/docs/diffusers/main/ar/api/pipelines/marigold#diffusers.pipelines.marigold.MarigoldNormalsOutput) بدلاً من tuple عادي.

**يعيد:** [MarigoldNormalsOutput](/docs/diffusers/main/ar/api/pipelines/marigold#diffusers.pipelines.marigold.MarigoldNormalsOutput) أو `tuple`

إذا كان `return_dict` هو `True`، يُعاد [MarigoldNormalsOutput](/docs/diffusers/main/ar/api/pipelines/marigold#diffusers.pipelines.marigold.MarigoldNormalsOutput)، وإلا يُعاد `tuple` حيث العنصر الأول هو التنبؤ، والعنصر الثاني هو عدم اليقين (أو `None`)، والثالث هو الكمون (أو `None`).

الدالة التي يتم استدعاؤها عند استدعاء خط الأنابيب.

أمثلة:
```py
>>> 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")
```

#### diffusers.pipelines.marigold.MarigoldNormalsOutput[[diffusers.pipelines.marigold.MarigoldNormalsOutput]]

```python
diffusers.pipelines.marigold.MarigoldNormalsOutput(prediction: typing.Union[numpy.ndarray, torch.Tensor], uncertainty: typing.Union[NoneType, numpy.ndarray, torch.Tensor], latent: typing.Optional[torch.Tensor])
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/marigold/pipeline_marigold_normals.py#L78)

**المعاملات:**

prediction (`np.ndarray`، `torch.Tensor`) : العواطف المتوقعة بقيم ضمن النطاق [-1، 1]. الشكل هو `numimages × 3 × height × width` لـ `torch.Tensor` أو `numimages × height × width × 3` لـ `np.ndarray`.

uncertainty (`None`, `np.ndarray`, `torch.Tensor`) : خرائط عدم اليقين المحسوبة من المجموعة، بقيم ضمن المدى [0, 1]. الشكل هو `numimages × 1 × height × width` لـ `torch.Tensor` أو `numimages × height × width × 1` لـ `np.ndarray`.

latent (`None`, `torch.Tensor`) : ميزات كامنة تتوافق مع التنبؤات، متوافقة مع معامل `latents` في خط الأنابيب. الشكل هو `numimages * numensemble × 4 × latentheight × latentwidth`.

فئة الإخراج لخط أنابيب تنبؤ Marigold بالمتجهات العمودية أحادية العين.

#### diffusers.pipelines.marigold.MarigoldImageProcessor.visualize_normals[[diffusers.pipelines.marigold.MarigoldImageProcessor.visualize_normals]]

```python
diffusers.pipelines.marigold.MarigoldImageProcessor.visualize_normals(normals: typing.Union[numpy.ndarray, torch.Tensor, list[numpy.ndarray], list[torch.Tensor]], flip_x: bool = False, flip_y: bool = False, flip_z: bool = False)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/marigold/marigold_image_processing.py#L486)

**المعاملات:**

normals (`np.ndarray | torch.Tensor | list[np.ndarray, list[torch.Tensor]]`) : متجهات العمودية السطحية.

flip_x (`bool`، *اختياري*، القيمة الافتراضية `False`) : يقلب محور X في إطار إحداثيات العواطف. الاتجاه الافتراضي هو اليمين.

flip_y (`bool`، *اختياري*، القيمة الافتراضية `False`) : يقلب محور Y في إطار إحداثيات العواطف. الاتجاه الافتراضي هو الأعلى.

flip_z (`bool`، *اختياري*، القيمة الافتراضية `False`) : يقلب محور Z في إطار إحداثيات العواطف. الاتجاه الافتراضي هو مواجهة المشاهد.

يُظهر متجهات العمودية السطحية، مثل تنبؤات خط أنابيب `MarigoldNormalsPipeline`.

يعيد: `list[PIL.Image.Image]` مع تصور لطبقات السطوح.

## واجهة برمجة التطبيقات الخاصة بتفكيك الصورة الجوهرية في Marigold[[diffusers.MarigoldIntrinsicsPipeline]]

#### diffusers.MarigoldIntrinsicsPipeline[[diffusers.MarigoldIntrinsicsPipeline]]

```python
diffusers.MarigoldIntrinsicsPipeline(unet: UNet2DConditionModel, vae: AutoencoderKL, scheduler: diffusers.schedulers.scheduling_ddim.DDIMScheduler | diffusers.schedulers.scheduling_lcm.LCMScheduler, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, prediction_type: str | None = None, target_properties: dict[str, typing.Any] | None = None, default_denoising_steps: int | None = None, default_processing_resolution: int | None = None)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/marigold/pipeline_marigold_intrinsics.py#L120)

**المعاملات:**

unet (`UNet2DConditionModel`) : شبكة U-Net شرطية لإزالة الضوضاء من الكامنات المستهدفة، مشروطة بالكامنات الصورية.

vae (`AutoencoderKL`) : نموذج الترميز التحويلي التبايني (VAE) لتشفير وفك تشفير الصور والتنبؤات إلى تمثيلات كامنة ومنها.

scheduler (`DDIMScheduler` أو `LCMScheduler`) : مُجدوِل يُستخدم بالاقتران مع `unet` لإزالة الضوضاء من الكامنات المُرمَّزة للصورة.

text_encoder (`CLIPTextModel`) : مُشفِّر النص، لتضمين النص الفارغ.

tokenizer (`CLIPTokenizer`) : مُجزِّئ CLIP.

prediction_type (`str`، *اختياري*) : نوع التنبؤات التي يقوم بها النموذج.

target_properties (`dict[str, Any]`، *اختياري*) : خصائص الأنماط المتنبأ بها، مثل `target_names`، وهو `list[str]` يُستخدم لتحديد عدد الأنماط المتنبأ بها وترتيبها وأسمائها، وأي بيانات وصفية أخرى قد تكون مطلوبة لتفسير التنبؤات.

default_denoising_steps (`int`, *اختياري*) : الحد الأدنى لخطوات إزالة الضوضاء التوزيعية المطلوبة لإنتاج تنبؤ بجودة معقولة باستخدام النموذج المعطى. يجب تعيين هذه القيمة في إعدادات النموذج. عند استدعاء خط الأنابيب دون تعيين `num_inference_steps` صراحةً، يتم استخدام القيمة الافتراضية. وهذا ضروري لضمان نتائج معقولة مع مختلف النماذج المتوافقة مع خط الأنابيب، مثل تلك التي تعتمد على جداول إزالة ضوضاء قصيرة جداً (`LCMScheduler`) وتلك التي لديها جداول توزيع كاملة (`DDIMScheduler`).

default_processing_resolution (`int`, *اختياري*) : القيمة الموصى بها لمعامل `processing_resolution` في خط المعالجة. يجب تعيين هذه القيمة في إعدادات النموذج. عند استدعاء خط المعالجة دون تعيين `processing_resolution` بشكل صريح، تُستخدم القيمة الافتراضية. وهذا ضروري لضمان نتائج معقولة مع مختلف أنواع النماذج المدرَّبة بقيم معالجة مثالية متباينة.

خط أنابيب لتفكيك الصورة الجوهرية (IID) باستخدام طريقة Marigold: https://marigoldcomputervision.github.io.

يرث هذا النموذج من [DiffusionPipeline](/docs/diffusers/main/ar/api/pipelines/overview#diffusers.DiffusionPipeline). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع خطوط الأنابيب (مثل التنزيل أو الحفظ، أو التشغيل على جهاز معين، وما إلى ذلك).

#### __call__[[diffusers.MarigoldIntrinsicsPipeline.__call__]]

```python
__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 = None, ensemble_size: int = 1, processing_resolution: int | None = None, match_input_resolution: bool = True, resample_method_input: str = 'bilinear', resample_method_output: str = 'bilinear', batch_size: int = 1, ensembling_kwargs: dict[str, typing.Any] | None = None, latents: typing.Union[torch.Tensor, list[torch.Tensor], NoneType] = None, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, output_type: str = 'np', output_uncertainty: bool = False, output_latent: bool = False, return_dict: bool = True)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/marigold/pipeline_marigold_intrinsics.py#L359)

**المعاملات:**

image (`PIL.Image.Image`، `np.ndarray`، `torch.Tensor`، `list[PIL.Image.Image]`، `list[np.ndarray]`)، : `list[torch.Tensor]`: صورة مدخلات أو صور تُستخدم كمدخلات لمهمة التفكيك الجوهري. بالنسبة للمصفوفات والموترات، النطاق المتوقع للقيم هو بين `[0, 1]`. يمكن تمرير دفعة من الصور من خلال تقديم مصفوفة رباعية الأبعاد أو موتر. بالإضافة إلى ذلك، يمكن تمرير قائمة من الصور تكون مصفوفات أو موترات ثنائية أو ثلاثية الأبعاد. في الحالة الأخيرة، يجب أن تكون جميع عناصر القائمة ذات نفس العرض والارتفاع.

num_inference_steps (`int`، *اختياري*، القيمة الافتراضية `None`) : عدد خطوات الانتشار لإزالة الضوضاء أثناء الاستدلال. تؤدي القيمة الافتراضية `None` إلى الاختيار التلقائي.

ensemble_size (`int`، القيمة الافتراضية `1`) : عدد تنبؤات المجموعة. تؤدي القيم الأعلى إلى تحسينات قابلة للقياس وتدهور بصري.

processing_resolution (`int`، *اختياري*، القيمة الافتراضية `None`) : دقة المعالجة الفعلية. عند ضبطها على `0`، تتطابق مع بُعد الصورة المدخلة الأكبر. يؤدي هذا إلى تنبؤات أكثر وضوحًا، لكنه قد يؤدي أيضًا إلى فقدان السياق العام بشكل كلي. تحل القيمة الافتراضية `None` إلى القيمة المثلى من إعدادات النموذج.

match_input_resolution (`bool`، *اختياري*، القيمة الافتراضية `True`) : عند التفعيل، يتم تغيير حجم التنبؤ الناتج ليتطابق مع أبعاد الإدخال. عند التعطيل، ستكون الطول الأكبر للجهة الناتجة مساوياً لـ`processing_resolution`.

resample_method_input (`str`، *اختياري*، القيمة الافتراضية `"bilinear"`) : طريقة إعادة العينة المستخدمة لتغيير حجم الصور المدخلة إلى `processing_resolution`. القيم المقبولة هي: `"nearest"`، `"nearest-exact"`، `"bilinear"`، `"bicubic"`، أو `"area"`.

resample_method_output (`str`، *اختياري*، القيمة الافتراضية `"bilinear"`) : طريقة إعادة العينة المستخدمة لتغيير حجم التنبؤات الناتجة لتطابق دقة الإدخال. القيم المقبولة هي `"nearest"`، `"nearest-exact"`، `"bilinear"`، `"bicubic"`، أو `"area"`.

batch_size (`int`، *اختياري*، القيمة الافتراضية `1`) : حجم الدفعة؛ لا يهم إلا عند تعيين `ensemble_size` أو تمرير مصفوفة من الصور.

ensembling_kwargs (`dict`, *اختياري*, القيمة الافتراضية `None`) : قاموس إضافي يحتوي على معاملات للتحكم الدقيق في عملية الدمج. الخيارات المتاحة هي: - reduction (`str`, *اختياري*, القيمة الافتراضية `"median"`): يحدد دالة الدمج المطبقة في كل موقع بكسل، ويمكن أن تكون إما `"median"` أو `"mean"`.

latents (`torch.Tensor`، *اختياري*، القيمة الافتراضية `None`) : متجهات ضوضاء كامنة لاستبدال التهيئة العشوائية. يمكن أخذ هذه المتجهات من مخرجات استدعاء الدالة السابق.

generator (`torch.Generator`، أو `list[torch.Generator]`، *اختياري*، القيمة الافتراضية `None`) : كائن مولّد الأرقام العشوائية لضمان قابلية التكرار.

output_type (`str`، *اختياري*، القيمة الافتراضية `"np"`) : التنسيق المفضل لحقل `prediction` في المخرجات والحقل الاختياري `uncertainty`. القيم المقبولة هي: `"np"` (مصفوفة numpy) أو `"pt"` (موتر torch).

output_uncertainty (`bool`، *اختياري*، القيمة الافتراضية `False`) : عند التفعيل، يحتوي حقل `uncertainty` في المخرجات على خريطة عدم اليقين التنبؤية، شريطة أن تكون قيمة الحجة `ensemble_size` أكبر من 2.

output_latent (`bool`، *اختياري*، القيمة الافتراضية `False`) : عند التفعيل، يحتوي حقل `latent` في المخرجات على الرموز الكامنة المقابلة للتنبؤات ضمن المجموعة. يمكن حفظ هذه الرموز وتعديلها واستخدامها في الاستدعاءات اللاحقة مع الحجة `latents`.

return_dict (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان يجب إرجاع [MarigoldIntrinsicsOutput](/docs/diffusers/main/ar/api/pipelines/marigold#diffusers.pipelines.marigold.MarigoldIntrinsicsOutput) بدلاً من tuple عادي.

**يعيد:** [MarigoldIntrinsicsOutput](/docs/diffusers/main/ar/api/pipelines/marigold#diffusers.pipelines.marigold.MarigoldIntrinsicsOutput) أو `tuple`

إذا كان `return_dict` هو `True`، يُعاد [MarigoldIntrinsicsOutput](/docs/diffusers/main/ar/api/pipelines/marigold#diffusers.pipelines.marigold.MarigoldIntrinsicsOutput)، وإلا يُعاد `tuple` حيث العنصر الأول هو التنبؤ، والعنصر الثاني هو عدم اليقين (أو `None`)، والثالث هو الكمون (أو `None`).

الدالة التي يتم استدعاؤها عند استدعاء خط الأنابيب.

أمثلة:
```py
>>> 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")
```

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

#### diffusers.pipelines.marigold.MarigoldIntrinsicsOutput[[diffusers.pipelines.marigold.MarigoldIntrinsicsOutput]]

```python
diffusers.pipelines.marigold.MarigoldIntrinsicsOutput(prediction: typing.Union[numpy.ndarray, torch.Tensor], uncertainty: typing.Union[NoneType, numpy.ndarray, torch.Tensor], latent: typing.Optional[torch.Tensor])
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/marigold/pipeline_marigold_intrinsics.py#L96)

**المعاملات:**

prediction (`np.ndarray`، `torch.Tensor`) : خصائص الكاميرا الداخلية (Intrinsics) للصورة المتوقعة، بقيم ضمن المدى [0, 1]. يكون الشكل `(numimages * numtargets) × 3 × height × width` في حالة `torch.Tensor` أو `(numimages * numtargets) × height × width × 3` في حالة `np.ndarray`، حيث يشير `numtargets` إلى عدد أنماط الأهداف المتوقعة في تفكيك الصورة الداخلية.

uncertainty (`None`, `np.ndarray`, `torch.Tensor`) : خرائط عدم اليقين المحسوبة من المجموعة، بقيم ضمن المدى [0, 1]. الشكل هو `(numimages * numtargets) × 3 × height × width` لـ `torch.Tensor` أو `(numimages * numtargets) × height × width × 3` لـ `np.ndarray`.

latent (`None`, `torch.Tensor`) : ميزات كامنة تتوافق مع التنبؤات، متوافقة مع معامل `latents` في خط الأنابيب. الشكل هو `(numimages * numensemble) × (numtargets * 4) × latentheight × latentwidth`.

فئة الإخراج لخط أنابيب Marigold Intrinsic Image Decomposition.

#### diffusers.pipelines.marigold.MarigoldImageProcessor.visualize_intrinsics[[diffusers.pipelines.marigold.MarigoldImageProcessor.visualize_intrinsics]]

```python
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')
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/marigold/marigold_image_processing.py#L542)

**المعاملات:**

prediction (`np.ndarray | torch.Tensor | list[np.ndarray, list[torch.Tensor]]`) : تفكيك الصورة الجوهري.

target_properties (`dict[str, Any]`) : خصائص التحلل. المدخلات المتوقعة: `target_names: list[str]` وقاموس بمفاتيح `prediction_space: str`، `sub_target_names: list[str | Null]` (يجب أن يحتوي على 3 مدخلات، مع قيمة null للأنماط المفقودة)، `up_to_scale: bool`، واحد لكل هدف وفرع هدف.

color_map (`str | dict[str, str]`، *اختياري*، القيمة الافتراضية `"Spectral"`) : خريطة الألوان المستخدمة لتحويل التنبؤات أحادية القناة إلى تمثيلات ملونة. عند تمرير قاموس، يمكن تلوين كل نمط (modality) بخريطة ألوان خاصة به.

يُظهر تحليل الصورة الجوهري، مثل تنبؤات خط أنابيب `MarigoldIntrinsicsPipeline`.

يعيد: `list[dict[str, PIL.Image.Image]]` مع تصور لتفكيك الصورة الجوهرية.

