تقدير العمق أحادي العين#
يتنبأ تقدير العمق أحادي العين بخريطة عمق لكل بكسل من صورة RGB واحدة. يحتوي كل بكسل ناتج على قيمة عمق بالأمتار تمثل المسافة المقدرة من الكاميرا إلى نقطة السطح تلك.
ناتج نموذج العمق هو خريطة عائمة كثيفة بالشكل (H, W) ومحاذاة مع صورة الإدخال. هذا التمثيل لكل بكسل يجعل تقدير العمق الأحادي مناسبًا جدًا لإعادة بناء المشاهد ثلاثية الأبعاد، والملاحة الروبوتية، وإنشاء محتوى الواقع المعزز/الافتراضي (AR/VR)، وأي تطبيق يتطلب تخطيطًا مكانيًا من كاميرا واحدة.
استخدم task=depth أو مهمة واجهة سطر الأوامر (CLI) yolo depth لتقدير العمق الأحادي. تستخدم ملفات نموذج العمق YOLO26 اللاحقة -depth، مثل yolo26n-depth.pt.
Watch: Monocular Depth Estimation with Ultralytics YOLO26 | Python Tutorial | Vision AI 🚀
النماذج#
تظهر أدناه نماذج العمق YOLO26 المدربة مسبقًا على مزيج واسع من مجموعات البيانات المتعددة (داخلية + خارجية، ~2.19 مليون صورة). يتم الإبلاغ عن أعمدة المقاييس في مجموعة اختبار Eigen لـ NYU Depth V2.
يتم تنزيل النماذج تلقائيًا من أحدث إصدار لـ Ultralytics عند الاستخدام الأول.
| النموذج | الحجم (بكسل) | delta1NYU | abs_relNYU | rmseNYU | السرعة CPU ONNX (ms) | السرعة T4 TensorRT10 (ms) | المعلمات (M) | FLOPs (B) |
|---|---|---|---|---|---|---|---|---|
| YOLO26n-depth | 768 | 0.882 | 0.109 | 0.414 | 272.0 ± 27.2 | 2.7 ± 0.1 | 6.4 | 46.9 |
| YOLO26s-depth | 768 | 0.896 | 0.104 | 0.399 | 393.7 ± 13.1 | 3.8 ± 0.0 | 13.2 | 67.9 |
| YOLO26m-depth | 768 | 0.921 | 0.089 | 0.364 | 621.5 ± 49.7 | 6.0 ± 0.1 | 23.3 | 130.7 |
| YOLO26l-depth | 768 | 0.930 | 0.083 | 0.351 | 821.9 ± 50.7 | 7.7 ± 0.1 | 27.7 | 157.2 |
| YOLO26x-depth | 768 | 0.933 | 0.080 | 0.344 | 1240.9 ± 73.3 | 13.6 ± 0.2 | 57.0 | 302.0 |
- delta1NYU هي النسبة المئوية للبكسلات التي يقع فيها العمق المتوقع ضمن عامل 1.25 من الحقيقة الأرضية، في مجموعة اختبار Eigen لـ NYU Depth V2 (654 صورة) مع تقنية TTA متعددة المقاييس + الانعكاس الأفقي ومحاذاة المربعات الصغرى اللوغاريتمية.
- يمكن إعادة إنتاج الدقة ذات المقياس الواحد بدون TTA باستخدام
yolo depth val model=yolo26n-depth.pt data=nyu-depth.yaml imgsz=768 device=0(مع استبدالmodel=لكل حجم)، والذي يستخدم محاذاة الوسيط (المقياس فقط) ويسجل نتائج أقل: delta1 0.783 (n)، 0.793 (s)، 0.840 (m)، 0.853 (l)، 0.860 (x). - abs_rel هو متوسط الخطأ النسبي المطلق بين قيم العمق المتوقعة وقيم العمق الحقيقية.
- rmse هو جذر متوسط مربع الخطأ بالأمتار.
- السرعة (Speed) هي زمن الاستجابة للاستدلال فقط (باستثناء المعالجة المسبقة/اللاحقة) عند
imgsz=768وbatch=1، ويُبلغ عنها كمتوسط ± الانحراف المعياري عبر التشغيلات الموقوتة بعد الإحماء. CPU ONNX هو ONNX Runtime fp32 على معالج Intel Xeon (Skylake) بـ 32 نواة؛ T4 TensorRT10 هو TensorRT fp16 على وحدة معالجة رسومات Tesla T4. - يتم قياس params و FLOPs عند 768×768، وهي دقة التدريب للأوزان المُصدرة.
السرعة مقارنة مع Depth Anything V2#
Depth Anything V2 هو أساس مفتوح يستخدم على نطاق واسع للعمق الأحادي. إن هيكل محول الرؤية (vision transformer) DINOv2 ومفكل DPT الخاص به كثيفان حسابيًا، لذا على نفس وحدة المعالجة الرسومات Tesla T4 تحت TensorRT fp16، يكون أصغر نموذج Depth Anything V2 تم إصداره أبطأ من كل نموذج عمق YOLO26 - بما في ذلك YOLO26x-depth، الذي يحمل أكثر من ضعف عدد المعلمات.
عند ~768 بكسل — imgsz=768 لـ YOLO26، الدقة التي تم تدريب أوزانها الصادرة عليها، و770 بكسل لـ Depth Anything V2، الذي يتطلب هيكل DINOv2 الخاص به مضاعفًا لحجم رقعته البالغ 14:
| النموذج | المعلمات (مليون) | عمليات الفاصلة العائمة (مليار) | T4 TensorRT10 (مللي ثانية) | FPS | تسريع مقارنة بـ V2 Small | تسريع مقارنة بـ V2 Base |
|---|---|---|---|---|---|---|
| Depth Anything V2 Base | 97.5 | 1025.5 | 55.40 | 18.1 | — | — |
| Depth Anything V2 Small | 24.8 | 346.9 | 20.99 | 47.6 | — | — |
| YOLO26x-depth | 57.0 | 302.0 | 13.57 | 73.7 | 1.5× | 4.1× |
| YOLO26l-depth | 27.7 | 157.2 | 7.68 | 130.2 | 2.7× | 7.2× |
| YOLO26m-depth | 23.3 | 130.7 | 6.00 | 166.7 | 3.5× | 9.2× |
| YOLO26s-depth | 13.2 | 67.9 | 3.82 | 261.6 | 5.5× | 14.5× |
| YOLO26n-depth | 6.4 | 46.9 | 2.73 | 365.8 | 7.7× | 20.3× |
عند ~640 بكسل — imgsz=640 و 644 بكسل على التوالي — يظل الترتيب دون تغيير، ويكون YOLO26n-depth أسرع بـ 5.9 مرة من Depth Anything V2 Small:
| النموذج | T4 TensorRT10 (مللي ثانية) | FPS |
|---|---|---|
| Depth Anything V2 Base | 35.10 | 28.5 |
| Depth Anything V2 Small | 13.62 | 73.4 |
| YOLO26x-depth | 10.26 | 97.5 |
| YOLO26l-depth | 6.14 | 162.8 |
| YOLO26m-depth | 4.71 | 212.1 |
| YOLO26s-depth | 3.08 | 324.4 |
| YOLO26n-depth | 2.29 | 436.9 |
- زمن الاستجابة هو للاستدلال فقط،
batch=1، TensorRT fp16 على Tesla T4 — نفس حزمة الاختبار كجدول النموذج أعلاه، المعروض هنا برقمين عشريين؛ FPS هو مقلوب زمن الاستجابة غير المُقَرَّب. تقسم أعمدة تسريع السرعة (Speedup) زمن استجابة Depth Anything V2 Small (20.99 مللي ثانية) و Base (55.40 مللي ثانية) على زمن استجابة YOLO26. - نموذجا Depth Anything V2 Small و Base هما نقاط التحقق ViT-S و ViT-B الصادرتان.
- تغطي المقارنة زمن الانتقال فقط — ولا يتم تقييم عائلتي النماذج هنا بموجب بروتوكول دقة مشترك.
نطاق العمق ورأس العمق اللوغاريتمي#
يتوقع رأس العمق exp(logit) — غير محدود (~0.02–150 م) — ويفصل شكل المشهد عن المقياس المطلق: تتوقع الشبكة حقل عمق لوغاريتمي نسبي، ويتم تعيين الأمتار المطلقة بواسطة تحويل منفصل ثنائي المعلمات (exp(a·log d + b)) يتم استرداده عند التقييم، أو عن طريق المعايرة خفيفة الوزن، أو عن طريق الضبط الدقيق. البديل الشائع، وهو رأس محدود sigmoid × max_depth، يدمج بدلاً من ذلك حدًا أقصى ثابتًا في البنية، بحيث يتم اقتطاع أي عمق يتجاوز max_depth — مما يمنع التدريب على المشاهد ذات النطاق الأطول والتنبؤ بها.
لماذا الرأس غير محدود: أدلة عبر نطاقات العمق#
اختبار A/B مضبوط — نفس البيانات، نفس الجدول الزمني، الرأس فقط هو المختلف. تدريب كلا الرأسين من الصفر على مزيج متطابق من البيانات الداخلية (≤10 م) والخارجية (≤80 م):
| الرأس | نطاق المخرج | δ1 للمدى المختلط | سلوك التدريب |
|---|---|---|---|
sigmoid × max_depth (10 أمتار) | محدود 0–10 م | 0.221 | يصل إلى مرحلة الاستقرار في الحقبة 1 |
log (غير محدود) | 0–~150 m | 0.367 (+66%) | يتحسن باستمرار |
لا يمكن للرأس المحدود تمثيل غالبية بكسلات الأماكن المفتوحة التي تزيد عن 10 أمتار، لذا يتوقف عن التحسن تقريبًا على الفور؛ يتعلم رأس log من النطاق الكامل.
نمط الفشل الذي يعالجه — الضبط الدقيق لمجموعة بيانات واحدة، مصنف حسب النطاق. الضبط الدقيق لرأس محدود (10 م) على مجموعات بيانات فردية يعمل عندما تتناسب البيانات مع الحد الأقصى وتنهار عندما تتجاوزه:
| مجموعة البيانات | نطاق العمق | δ1 للرأس المحدود |
|---|---|---|
| SUN RGB-D | ≤10 m | 0.78 ✅ |
| Hypersim | غالباً ≤10 م | 0.74 ✅ |
| KITTI | ~80 m | 0.08 ❌ (abs_rel ≈ 7.0 — عدم تطابق النطاق 80/10) |
| vKITTI2 | 80 m | 0.04 ❌ |
يهبط الانهيار تمامًا عند حدود السقف. رأس log ليس لديه مثل هذا الحد.
النماذج المُصدرة — أداء النطاق المتقاطع. عائلة رأس log المشحونة، والتي تم تقييمها عبر معايير تمتد من 10 م (NYU, iBims-1) إلى 80 م (KITTI)، مع مقياس محاذٍ δ1:
| قياس الأداء (Benchmark) | النطاق | YOLO26x-depth (log) | الإصدار المحدود السابق |
|---|---|---|---|
| NYU Eigen | 10 m | 0.933 | 0.934 |
| iBims-1 | 10 m | 0.961 | 0.945 |
| ETH3D | ~60 m | 0.959 | 0.931 |
| Make3D | ~70 m | 0.302 | 0.296 |
| KITTI Eigen | 80 m | 0.942 | 0.891 |
| المتوسط | — | 0.819 | 0.799 |
كلا العمودين كما هما منشوران. يتم تسجيل الصفوف الأخرى باستخدام بروتوكول TTA وبروتوكول أقل مربعات اللوغاريتمات الموضحين في صفحات مجموعات البيانات الخاصة بها، وهو ما لا يطبقه المدقق في هذا المستودع، لذا لا يمكن إعادة قياس صف KITTI على نفس الأساس؛ تحمل صفحة KITTI أرقاماً مقاسة على تقسيم Eigen القانوني المكون من 652 إطاراً.
أكبر المكاسب هي في المعايير الخارجية طويلة المدى (KITTI، ETH3D) — حيث يضر الحد الأقصى الثابت 10 أمتار أكثر من غيره — بينما يتم الحفاظ على الأداء الداخلي.
التدريب#
تدريب YOLO26n-depth على مجموعة بيانات Depth8 لمدة 100 حقبة (epoch) بحجم صورة 640. للحصول على قائمة كاملة بالوسائط المتاحة، راجع صفحة التكوين (Configuration).
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-depth.yaml") # build a new model from YAML
model = YOLO("yolo26n-depth.pt") # load a pretrained model (recommended for training)
model = YOLO("yolo26n-depth.yaml").load("yolo26n-depth.pt") # build from YAML and transfer weights
# Train the model
results = model.train(data="depth8.yaml", epochs=100, imgsz=640)راجع تفاصيل وضع train الكاملة في صفحة التدريب (Train).
الضبط الدقيق على بياناتك الخاصة#
عند تكييف نموذج عمق مُدرب مسبقًا مع مجموعة بيانات مخصصة، قم بخفض معدل التعلم واستخدم مُحسّن AdamW. إعدادات المُحسّن الافتراضية مضبوطة للتدريب من الصفر (SGD مع lr0=0.01)؛ وعند تطبيقها على نموذج عمق وصل بالفعل إلى التقارب، يمكنها الكتابة فوق المعرفة المدربة مسبقًا وتدهور النتائج — خاصة عند الضبط الدقيق على مجال واحد.
from ultralytics import YOLO
model = YOLO("yolo26s-depth.pt") # start from pretrained weights
model.train(
data="path/to/your_dataset.yaml",
epochs=20,
imgsz=640,
optimizer="AdamW",
lr0=1e-4, # ~100x below the from-scratch default
warmup_bias_lr=1e-4, # keep warmup gentle too
)نصائح إضافية:
- يتم التحكم في زيادة البيانات (Augmentation) بواسطة الوسائط القياسية (
degrees،translate،scale،shear،perspective،flipud،fliplr،hsv_h،hsv_s،hsv_v)؛ يتم تطبيق التشوه الهندسي والانعكاسات بشكل مطابق على خريطة العمق المقترنة. لرؤية الوصفة الدقيقة المستخدمة لأوزان YOLO26-Depth المُصدرة، افحصtrain_argsالمخزن في نقطة التحقق — راجع فحص وسائط تدريب نقطة تحقق YOLO26 (Inspecting YOLO26 Checkpoint Training Args). mosaic، وmixup، وcutmix، وcopy_pasteغير مطبقة للعمق. يقوم محمل مجموعة بيانات العمق تلقائيًا بتعيين هذه الاحتمالات إلى 0، لذا فإن تمريرها ليس له أي تأثير. هذه الزيادات غير مدعومة لأنها تجمع بين صور متعددة، مما ينتج عنه خرائط عمق مقترنة غير صالحة.- أي نطاق عمق يعمل مباشرة دون تعديل. تتوقع نماذج رأس
logعمقًا غير محدود، لذا فهي تتكيف مع بيانات النطاق القصير (ماكرو) أو النطاق الطويل (الأماكن المفتوحة / القيادة) دون تغييرات. يحدد تعيينmax_depth:في ملف YAML الخاص بمجموعة البيانات الخاص بك (بالأمتار) البكسلات الأرضية الصحيحة (GT) التي تحتسب ضمن مقاييس التحقق من الصحة. - الحفاظ على الأداء العام. إذا كنت بحاجة إلى أن يظل النموذج دقيقاً في مشاهد خارج نطاق تدريبك، فقم بخلط جزء صغير (~5–10%) من الصور العامة المتنوعة في بيانات تدريبك؛ هذا يقلل بشكل كبير من النسيان أثناء الضبط الدقيق.
- التدريب من الصفر (
model=yolo26s-depth.yaml) فقط إذا كان مجال عملك مختلفًا للغاية ولديك مجموعة بيانات كبيرة — وهناك يكون SGD الافتراضيlr0=0.01مناسبًا، نظرًا لعدم وجود أوزان مدربة مسبقًا للحفاظ عليها.
معايرة مقياس العمق#
يفصل رأس العمق الشكل (هيكل المشهد النسبي) عن المقياس (الأمتار المطلقة). إذا كان النموذج ينتج بالفعل عمقًا نسبياً جيدًا على مشاهدك ولكن القيم المطلقة غير صحيحة للكاميرا الخاصة بك، يمكنك تصحيح المقياس في ثوانٍ باستخدام model.calibrate() — وهو ملاءمة مغلقة الشكل لتحويل لوغاريتمي-تآلفي (log-affine) ثنائي المعلمات مقابل مجموعة صغيرة مصنفة، بدون تدريب تدرجي وبدون تغيير في أوزان الشبكة، لذلك لا يمكنه تدهور الهيكل النسبي.
from ultralytics import YOLO
model = YOLO("yolo26s-depth.pt")
# Fit scale on a labeled split (~100+ images is enough), then persist it
model.calibrate(data="path/to/your_dataset.yaml")
model.save("yolo26s-depth-calibrated.pt")تحتاج المعايرة إلى عمق الحقيقة الأرضية (ground-truth) للملاءمة معه، لذا فهي تعمل على جزء مصنف — وليست شيئًا يمكن أن يحدث في الاستدلال الأعمى. وهي تتلاءم وتُسجل على نفس البكسلات التي تقيمها مقاييس التحقق من الصحة: يتم استبعاد الحقيقة الأرضية عند أو بعد max_depth الخاص بملف YAML لمجموعة البيانات (الافتراضي 100 متر). استخدمها عندما يكون العمق النسبي جيدًا بالفعل وكان المقياس/النطاق خطأً فقط؛ وإذا كان الهيكل النسبي نفسه بحاجة إلى تغيير لمجالك، فقم بالضبط الدقيق (fine-tune) بدلاً من ذلك.
يقوم التدريب بهذا نيابة عنك تلقائيًا: بعد اكتمال model.train(...)، تتم معايرة نقاط التحقق الأفضل والأخيرة على مجموعة التحقق من الصحة بحيث تُخرج عمقًا مقاسًا متريًا مباشرة.
تأتي نقاط تحقق yolo26*-depth.pt المُصدرة مع هذه المعايرة مدمجة بالفعل، ومضبوطة على مزيج التحقق من الصحة للتدريب المسبق. وهو مقياس عالمي واحد عبر جميع المجالات، لذا للحصول على أدق عمق مطلق على كاميرا معينة أو نوع مشهد معين، قم بتشغيل model.calibrate() على جزء صغير مصنف من بياناتك الخاصة — فهو يحل محل الملاءمة المدمجة.
تنسيق مجموعة البيانات#
تربط datasets تقدير العمق كل صورة RGB بملف عمق مقابل. يتم تخزين أهداف العمق كصفوف .npy تحتوي على قيم float32 بالأمتار. يشير ملف YAML الخاص بمجموعة البيانات إلى دليل images/؛ ويستنتج المحمل مسار ملف العمق عن طريق استبدال مكون images بـ depth واستبدال امتداد الصورة بـ .npy.
dataset/
├── images/
│ ├── train/
│ └── val/
└── depth/
├── train/
└── val/على سبيل المثال، يتم إقران صورة في images/train/scene_001.jpg بخريطة عمق في depth/train/scene_001.npy. راجع دليل مجموعة بيانات تقدير العمق (Depth Estimation Dataset Guide) لمعرفة مواصفات التنسيق الكاملة.
التحقق#
تحقق من دقة نموذج YOLO26n-depth المُدرب على مجموعة بيانات تقدير العمق. قم بتمرير data صراحةً بحيث يستخدم التحقق من الصحة ملف YAML المقصود لمجموعة البيانات. يتم تدريب الأوزان المُصدرة على imgsz=768، لذا تحقق وتنبأ بهذا الحجم للحصول على أفضل دقة.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-depth.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Validate the model
metrics = model.val(data="nyu-depth.yaml")
metrics.delta1 # percentage of pixels within threshold δ=1.25
metrics.abs_rel # mean absolute relative error
metrics.rmse # root mean squared error (meters)
metrics.silog # scale-invariant logarithmic errorالتنبؤ#
استخدم نموذج YOLO26n-depth مدرباً لتشغيل التنبؤات على الصور.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-depth.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Predict with the model
results = model("https://ultralytics.com/images/bus.jpg") # predict on an image
# Access the results
for result in results:
depth_map = result.depth.data.cpu().numpy() # torch.Tensor -> NumPy float32, shape (H, W), metersراجع تفاصيل وضع predict الكاملة في صفحة التنبؤ (Predict).
مخرجات النتائج#
يعيد تقدير عمق YOLO كائن Results واحدًا لكل صورة. تخزن كل نتيجة خريطة عمق عائمة كثيفة واحدة للصورة الكاملة.
| السمة (Attribute) | النوع | الشكل | الوصف |
|---|---|---|---|
result.depth | DepthMap | (H,W) | خريطة عمق كثيفة لكل بكسل. |
result.depth.data | torch.Tensor | (H,W) | قيم العمق بالأمتار؛ استدعِ .cpu().numpy() لـ NumPy. |
result.boxes | - | - | لا توجد مربعات مثيل. |
result.masks | - | - | لا توجد أقنعة مثيلات. |
للحصول على حقول Results الخاصة بكل مهمة عبر كل مهمة، راجع قسم نتائج التنبؤ حسب المهمة (Predict Results by Task).
تلوين خريطة العمق#
خريطة العمق الخام هي مصفوفة أعداد عдинаة أحادية القناة ذات فاصلة عائمة بالأمتار — وهي مفيدة للحساب، ولكن يصعب قراءتها مباشرة. لتحويلها إلى صورة ملونة، استخدم مساعد colorize_depth في ultralytics.utils.plotting، والذي يقوم بربط مصفوفة عمق (H, W) بصورة BGR uint8 ذات الصيغة (H, W, 3) (يتم عرض وحدات البكسل غير الصالحة <= 0 باللون الأسود).
يقوم result.plot() بالفعل بدمج هذا التلوين فوق صورة الإدخال باستخدام الإعدادات الافتراضية (cmap="jet"، mode="disparity")؛ استدعِ colorize_depth مباشرة عندما تريد صورة عمق ملونة مستقلة أو خريطة ألوان أو تطبيعًا مختلفًا.
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import colorize_depth
model = YOLO("yolo26n-depth.pt")
result = model("https://ultralytics.com/images/bus.jpg")[0]
depth = result.depth.data.cpu().numpy() # (H, W) float32, meters
# Colorize with near = warm and save
cv2.imwrite("depth_colored.png", colorize_depth(depth, cmap="spectral")) # (H, W, 3) BGR uint8
# Fix the range to 0-20 m so the same color means the same distance across frames
cv2.imwrite("depth_metric.png", colorize_depth(depth, vmin=0.0, vmax=20.0, cmap="inferno", mode="metric"))
# Blended overlay straight from the Results object (uses cmap="jet", mode="disparity")
result.save("depth_overlay.png")كل خريطة ألوان تعمل من البارد/الداكن ← الدافئ/الساطع. يقرر mode أي طرف قريب، ويقوم vmin/vmax بتثبيت النطاق عبر الإطارات بحيث يعني اللون دائمًا نفس المسافة.
| الوسيط | القيمة | الوصف |
|---|---|---|
cmap | jet (الافتراضي) | أزرق عالي التباين ← أخضر ← أحمر، اللوحة التي يستخدمها result.plot(). |
cmap | inferno | أسود ← بنفسجي ← برتقالي ← أصفر. موحد إدراكياً، ومناسب لمرضى عمى الألوان، وقابل للقراءة بدرجات الرمادي. |
cmap | spectral | أحمر ← أصفر ← أخضر ← أزرق (Spectral_r لـ matplotlib). |
mode | disparity (الافتراضي) | يطبع العمق العكسي (1/d) بين النسبة المئوية الثانية والثامنة والتسعين؛ يتم امتصاص القيم المتطرفة القريبة والبعيدة للعلامات الدافئة. |
mode | metric | يطبع العمق بالأمتار خطيًا بين vmin و vmax؛ تشير العلامات الدافئة إلى البعيد، لذا تتبع الألوان المسافة الحقيقية. |
التصدير#
قم بتصدير نموذج YOLO26n-depth إلى تنسيق مختلف مثل ONNX أو CoreML وما إلى ذلك.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-depth.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Export the model
model.export(format="onnx")تنسيقات تصدير تقدير العمق المتاحة لـ YOLO26 موجودة في الجدول أدناه. يمكنك التصدير إلى أي تنسيق باستخدام وسيط format، أي format='onnx' أو format='engine'. يمكنك التنبؤ أو التحقق من الصحة مباشرة على النماذج المُصدّرة، أي yolo predict model=yolo26n-depth.onnx. يتم عرض أمثلة الاستخدام لنموذجك بعد اكتمال التصدير.
| التنسيق | وسيط format | النموذج | البيانات الوصفية | الوسائط (Arguments) |
|---|---|---|---|---|
| PyTorch | - | yolo26n-depth.pt | ✅ | - |
| TorchScript | torchscript | yolo26n-depth.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n-depth.onnx | ✅ | imgsz، quantize، dynamic، simplify، opset، nms، batch، data، fraction، device |
| OpenVINO | openvino | yolo26n-depth_openvino_model/ | ✅ | imgsz، quantize، dynamic، nms، batch، data، fraction، device |
| TensorRT | engine | yolo26n-depth.engine | ✅ | imgsz، quantize، dynamic، simplify، opset، workspace، nms، batch، data، fraction، device |
| CoreML | coreml | yolo26n-depth.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| TF SavedModel | saved_model | yolo26n-depth_saved_model/ | ✅ | imgsz، keras، quantize، opset، nms، batch، data، fraction، device |
| TF GraphDef | pb | yolo26n-depth.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n-depth_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-depth_paddle_model/ | ✅ | imgsz، batch، device |
| MNN | mnn | yolo26n-depth.mnn | ✅ | imgsz، batch، dynamic، quantize، simplify، opset، nms، device |
| NCNN | ncnn | yolo26n-depth_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n-depth_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n-depth_rknn_model/ | ✅ | imgsz، batch، name، quantize، simplify، opset، data، fraction، device |
| ExecuTorch | executorch | yolo26n-depth_executorch_model/ | ✅ | imgsz، batch، device |
| Axelera | axelera | yolo26n-depth_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n-depth_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-depth_qnn.onnx | ✅ | imgsz، batch، name، quantize، simplify، opset، data، fraction، device |
| LiteRT | litert | yolo26n-depth.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| Hailo | hailo | yolo26n-depth_hailo_model/ | ✅ | imgsz، name، quantize، data، fraction، simplify، conf، iou |
| Huawei Ascend | ascend | yolo26n-depth_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms |
راجع تفاصيل export الكاملة في صفحة التصدير (Export).
الأسئلة الشائعة#
قم بتحضير صور RGB المقترنة وملفات عمق
.npy، ثم أنشئ ملف YAML لمجموعة البيانات يشير إلى دليلimages/الخاص بك. يجد المحمل ملفات العمق تلقائيًا عن طريق استبدالimagesبـdepthفي المسار ومطابقة امتداد الصورة بـ.npy.ابدأ من الأوزان المُدربة مسبقًا واستخدم معدل تعلم منخفضًا مع AdamW بحيث يحتفظ الضبط الدقيق بما يعرفه النموذج بالفعل (راجع الضبط الدقيق على بياناتك الخاصة (Fine-tuning on your own data) لمعرفة السبب):
مثالfrom ultralytics import YOLO # Load a pretrained YOLO26 depth model model = YOLO("yolo26s-depth.pt") # Fine-tune on a custom depth dataset results = model.train( data="path/to/your_dataset.yaml", epochs=20, imgsz=640, optimizer="AdamW", lr0=1e-4, warmup_bias_lr=1e-4, )تحقق من صفحة التكوين (Configuration) لمعرفة المزيد من الوسائط المتاحة.
تقارير التحقق من صحة تقدير العمق تتضمن مجموعة المقاييس المستخدمة بواسطة Depth Anything والأعمال ذات الصلة بتقدير العمق أحادي العين:
- delta1 / delta2 / delta3 — النسبة المئوية للبكسلات حيث تكون نسبة العمق المتوقع إلى العمق الحقيقي (أو معكوسه) أقل من 1.25 و 1.25² و 1.25³ على التوالي. كلما زادت القيمة كان ذلك أفضل.
- abs_rel — متوسط الخطأ النسبي المطلق. كلما انخفضت القيمة كان ذلك أفضل.
- rmse — جذر متوسط مربع الخطأ بالأمتار. كلما انخفضت القيمة كان ذلك أفضل.
- silog — الخطأ اللوغاريتمي غير المتغير حسب المقياس. كلما انخفضت القيمة كان ذلك أفضل.
يتم محاذاة كل تنبؤ مع الحقيقة الأرضية الخاصة به لكل صورة بناءً على القيمة الوسيطة، ويتم احتساب كل مقياس نهائياً على تلك الصورة، ثم يتم متوسط نتائج تلك الصور على مجموعة التحقق، بحيث يكون وزن كل صورة متساوياً بغض النظر عن عدد بكسلات العمق الصالحة التي تحتوي عليها. يتم تخطي الصور التي تحتوي على أقل من 10 بكسلات حقيقية صالحة ولا يتم تضمينها في ذلك المتوسط، نظراً لأن محاذاة وسيط عدد قليل من البكسلات تعد عديمة المعنى؛ بدلاً من ذلك، يتم تقييم التنبؤات غير المحدودة عند حدود العمق. يتوافق هذا مع حساب المتوسط لكل عينة والحد الأدنى البالغ 10 بكسلات المُستخدم في Depth Anything V2.
يتم تخزين خريطة العمق كـ
torch.Tensorبالشكل(H, W)حيث تكون كل قيمة هي العمق المتوقع بالأمتار (استخدمresult.depth.data.cpu().numpy()لمصفوفةfloat32لـ NumPy). الوصول إليها من خلالresult.depth.dataبعد تشغيل التنبؤ. الخريطة محاذاة مع دقة صورة الإدخال.يوفر Ultralytics YOLO26 تكوينات YAML مدمجة لمجموعة البيانات للعديد من مجموعات بيانات تقدير العمق بما في ذلك NYU Depth V2 و KITTI و Hypersim و SUN RGB-D و ARKitScenes. راجع دليل مجموعة بيانات تقدير العمق (Depth Estimation Dataset Guide) للحصول على القائمة الكاملة وتفاصيل التنسيق.
تحقق من صحة نموذج عمق YOLO26 مدرب مسبقًا عن طريق توفير ملف YAML الخاص بمجموعة البيانات المستخدم للتقييم:
مثالfrom ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n-depth.pt") # Validate the model metrics = model.val(data="nyu-depth.yaml") print("delta1:", metrics.delta1) print("abs_rel:", metrics.abs_rel) print("rmse:", metrics.rmse)قم بتصدير نموذج عمق YOLO26 إلى ONNX باستخدام Python أو CLI:
مثالfrom ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n-depth.pt") # Export the model to ONNX format model.export(format="onnx")لمزيد من التفاصيل حول التصدير إلى تنسيقات مختلفة، راجع صفحة التصدير (Export).