Link to this sectionتقدير العمق أحادي العين#
يتنبأ تقدير العمق أحادي العين بخريطة عمق لكل بكسل من صورة RGB واحدة. يحتوي كل بكسل ناتج على قيمة عمق بالأمتار تمثل المسافة المقدرة من الكاميرا إلى نقطة السطح تلك.
مخرج نموذج العمق هو خريطة عائمة كثيفة بالشكل (H, W) ومحاذية لصورة الإدخال. يجعل هذا التمثيل لكل بكسل من تقدير العمق أحادي العين خياراً مناسباً لإعادة بناء المشاهد ثلاثية الأبعاد، والملاحة الروبوتية، وإنشاء محتوى الواقع المعزز/الواقع الافتراضي (AR/VR)، وأي تطبيق يتطلب تخطيطاً مكانياً من كاميرا واحدة.
استخدم task=depth أو مهمة CLI yolo depth لتقدير العمق أحادي العين. تستخدم ملفات نموذج العمق YOLO26 اللاحقة -depth، مثل yolo26n-depth.pt.
Link to this sectionالنماذج#
تظهر أدناه نماذج العمق YOLO26 المدربة مسبقاً على مزيج واسع من مجموعات البيانات (داخلي + خارجي، ~2.19 مليون صورة). تم الإبلاغ عن أعمدة المقاييس في مجموعة اختبار Eigen الخاصة بـ NYU Depth V2.
يتم تنزيل النماذج تلقائياً من أحدث إصدار لـ Ultralytics عند الاستخدام لأول مرة.
| النموذج | الحجم (بكسل) | delta1NYU | abs_relNYU | rmseNYU | المعلمات (M) | FLOPs (B) |
|---|---|---|---|---|---|---|
| YOLO26n-depth | 768 | 0.882 | 0.109 | 0.414 | 6.4 | 46.9 |
| YOLO26s-depth | 768 | 0.896 | 0.104 | 0.399 | 13.2 | 67.9 |
| YOLO26m-depth | 768 | 0.921 | 0.089 | 0.364 | 23.3 | 130.7 |
| YOLO26l-depth | 768 | 0.930 | 0.083 | 0.351 | 27.7 | 157.2 |
| YOLO26x-depth | 768 | 0.933 | 0.080 | 0.344 | 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.785 (n)، 0.786 (s)، 0.827 (m)، 0.839 (l)، 0.843 (x). - abs_rel هو متوسط الخطأ النسبي المطلق بين قيم العمق المتوقعة وقيم العمق الحقيقية.
- rmse هو جذر متوسط مربع الخطأ بالأمتار.
- يتم قياس params و FLOPs عند 768×768، وهي دقة التدريب للأوزان المُصدرة.
Link to this sectionنطاق العمق ورأس العمق اللوغاريتمي#
يتنبأ رأس العمق بـ exp(logit) — غير محدود (~0.02–150 م) — ويفصل شكل المشهد عن المقياس المطلق: تتنبأ الشبكة بمجال عمق لوغاريتمي نسبي، ويتم تحديد الأمتار المطلقة بواسطة تحويل منفصل بمعلمتين (exp(a·log d + b)) يتم استعادتهما عند التقييم، أو عن طريق المعايرة خفيفة الوزن، أو عن طريق الضبط الدقيق. البديل الشائع، وهو رأس sigmoid × max_depth المحدود، يضع بدلاً من ذلك حداً أقصى ثابتاً في البنية، بحيث يتم قص أي عمق يتجاوز max_depth — مما يمنع التدريب على المشاهد طويلة المدى والتنبؤ بها.
Link to this sectionلماذا الرأس غير محدود: أدلة عبر نطاقات العمق#
اختبار A/B مضبوط — نفس البيانات، نفس الجدول الزمني، الرأس فقط هو المختلف. تدريب كلا الرأسين من الصفر على مزيج متطابق من البيانات الداخلية (≤10 م) والخارجية (≤80 م):
| الرأس | نطاق المخرج | δ1 للمدى المختلط | سلوك التدريب |
|---|---|---|---|
sigmoid × max_depth (10 م) | محدود 0–10 م | 0.221 | يصل إلى مرحلة الاستقرار في الحقبة 1 |
log (غير محدود) | 0–~150 م | 0.367 (+66%) | يتحسن باستمرار |
لا يمكن للرأس المحدود تمثيل غالبية البكسلات الخارجية التي تزيد عن 10 أمتار، لذا يتوقف عن التحسن على الفور تقريباً؛ يتعلم رأس log من النطاق الكامل.
نمط الفشل الذي يعالجه — الضبط الدقيق لمجموعة بيانات واحدة، مصنف حسب النطاق. الضبط الدقيق لرأس محدود (10 م) على مجموعات بيانات فردية يعمل عندما تتناسب البيانات مع الحد الأقصى وتنهار عندما تتجاوزه:
| مجموعة البيانات | نطاق العمق | δ1 للرأس المحدود |
|---|---|---|
| SUN RGB-D | ≤10 م | 0.78 ✅ |
| Hypersim | غالباً ≤10 م | 0.74 ✅ |
| KITTI | ~80 م | 0.08 ❌ (abs_rel ≈ 7.0 — عدم تطابق النطاق 80/10) |
| vKITTI2 | 80 م | 0.04 ❌ |
يحدث الانهيار بالضبط عند حدود النطاق. رأس log ليس لديه مثل هذا الحد.
النماذج المُصدرة — الأداء عبر النطاقات. عائلة رؤوس log المُصدرة، التي تم تقييمها عبر معايير تتراوح من 10 م (NYU، iBims-1) إلى 80 م (KITTI)، مع δ1 محاذية للمقياس:
| قياس الأداء (Benchmark) | النطاق | YOLO26x-depth (log) | الإصدار المحدود السابق |
|---|---|---|---|
| NYU Eigen | 10 م | 0.933 | 0.934 |
| iBims-1 | 10 م | 0.961 | 0.945 |
| ETH3D | ~60 م | 0.959 | 0.931 |
| Make3D | ~70 م | 0.302 | 0.296 |
| KITTI Eigen | 80 م | 0.942 | 0.891 |
| المتوسط | — | 0.819 | 0.799 |
أكبر المكاسب هي في المعايير الخارجية طويلة المدى (KITTI، ETH3D) — حيث يضر الحد الأقصى الثابت 10 أمتار أكثر من غيره — بينما يتم الحفاظ على الأداء الداخلي.
Link to this sectionالتدريب#
قم بتدريب YOLO26n-depth على مجموعة بيانات Depth8 لمدة 100 حقبة بحجم صورة 640. للحصول على قائمة كاملة بالوسيطات المتاحة، راجع صفحة التكوين.
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 الكاملة في صفحة التدريب.
Link to this sectionالضبط الدقيق على بياناتك الخاصة#
عند تكييف نموذج عمق مدرب مسبقاً مع مجموعة بيانات مخصصة، قم بخفض معدل التعلم واستخدم محسن 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
)نصائح إضافية:
- يتم التحكم في التعزيز بواسطة الوسيطات القياسية (
degrees,translate,scale,shear,perspective,flipud,fliplr,hsv_h,hsv_s,hsv_v)؛ يتم تطبيق التشويه الهندسي والانعكاسات بشكل متطابق على خريطة العمق المقترنة. لرؤية الوصفة الدقيقة المستخدمة لأوزان YOLO26-Depth المُصدرة، افحصtrain_argsالمخزنة في نقطة التحقق (checkpoint) — راجع فحص وسيطات تدريب نقطة تحقق YOLO26. mosaicوmixupوcutmixوcopy_pasteغير مطبقة للعمق. يقوم محمل مجموعة بيانات العمق تلقائياً بتعيين احتمالات هذه العمليات إلى 0، لذا فإن تمريرها ليس له أي تأثير. هذه التعزيزات غير مدعومة لأنها تجمع بين صور متعددة، مما قد ينتج عنه خرائط عمق مقترنة غير صالحة.- يعمل أي نطاق عمق خارج الصندوق. تتنبأ نماذج رأس
logبعمق غير محدود، لذا فهي تتكيف مع البيانات قصيرة المدى (الماكرو) أو طويلة المدى (الخارجية/القيادة) دون تغييرات. ضبطmax_depth:في YAML مجموعة البيانات الخاصة بك (بالأمتار) يحدد بكسلات الحقيقة الأرضية التي تُحتسب ضمن مقاييس التحقق. - الحفاظ على الأداء العام. إذا كنت بحاجة إلى أن يظل النموذج دقيقاً في مشاهد خارج نطاق تدريبك، فقم بخلط جزء صغير (~5–10%) من الصور العامة المتنوعة في بيانات تدريبك؛ هذا يقلل بشكل كبير من النسيان أثناء الضبط الدقيق.
- درب من الصفر (
model=yolo26s-depth.yaml) فقط إذا كان مجالك مختلفاً جداً وكان لديك مجموعة بيانات كبيرة — حيث يكون SGD الافتراضيlr0=0.01مناسباً، نظراً لعدم وجود أوزان مدربة مسبقاً للحفاظ عليها.
Link to this sectionمعايرة مقياس العمق#
يفصل رأس العمق الشكل (هيكل المشهد النسبي) عن المقياس (الأمتار المطلقة). إذا كان النموذج ينتج بالفعل عمقاً نسبياً جيداً في مشاهدك ولكن القيم المطلقة غير دقيقة لكاميرتك، يمكنك تصحيح المقياس في ثوانٍ باستخدام 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")تحتاج المعايرة إلى عمق حقيقة أرضية للملاءمة معه، لذا فهي تعمل على مجموعة مصنفة — ولا يمكن أن تحدث عند الاستدلال الأعمى. استخدمها عندما يكون العمق النسبي جيداً بالفعل ويكون المقياس/النطاق فقط هو الخاطئ؛ إذا كان الهيكل النسبي نفسه يحتاج إلى تغيير لمجالك، فاستخدم الضبط الدقيق بدلاً من ذلك.
يقوم التدريب بذلك من أجلك تلقائياً: بعد اكتمال model.train(...)، يتم معايرة أفضل نقاط التحقق وآخرها على مجموعة التحقق بحيث تخرج عمقاً مقاساً مترياً خارج الصندوق.
يتم شحن نقاط التحقق yolo26*-depth.pt المُصدرة مع هذه المعايرة المدمجة بالفعل، والمجهزة على مزيج تحقق ما قبل التدريب. إنها مقياس عالمي واحد عبر جميع المجالات، لذا للحصول على أدق عمق مطلق على كاميرا أو نوع مشهد معين، قم بتشغيل model.calibrate() على مجموعة مصنفة صغيرة من بياناتك الخاصة — فهي تحل محل الملاءمة المدمجة.
Link to this sectionتنسيق مجموعة البيانات#
تربط مجموعات بيانات تقدير العمق كل صورة 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. راجع دليل مجموعة بيانات تقدير العمق للحصول على مواصفات التنسيق الكاملة.
Link to this sectionالتحقق#
تحقق من دقة نموذج 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 errorLink to this sectionالتنبؤ#
استخدم نموذج 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 الكاملة في صفحة التنبؤ.
Link to this sectionمخرجات النتائج#
يعيد تقدير العمق YOLO كائن Results واحداً لكل صورة. تخزن كل نتيجة خريطة عمق عائمة كثيفة واحدة للصورة الكاملة.
| السمة (Attribute) | النوع | الشكل | الوصف |
|---|---|---|---|
result.depth | DepthMap | (H,W) | خريطة عمق كثيفة لكل بكسل. |
result.depth.data | torch.Tensor | (H,W) | قيم العمق بالأمتار؛ استدعِ .cpu().numpy() لـ NumPy. |
result.boxes | - | - | لا توجد مربعات مثيل. |
result.masks | - | - | لا توجد أقنعة مثيلات. |
للحصول على حقول Results الخاصة بالمهمة عبر كل مهمة، راجع قسم نتائج التنبؤ حسب المهمة.
Link to this sectionالتصدير#
قم بتصدير نموذج 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, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-depth.pb | ❌ | imgsz, batch, device |
| TF Edge TPU | edgetpu | yolo26n-depth_edgetpu.tflite | ✅ | imgsz, quantize, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-depth_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-depth.mnn | ✅ | imgsz, batch, dynamic, quantize, 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, 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, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-depth_qnn.onnx | ✅ | imgsz, batch, name, quantize, 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 |
راجع تفاصيل export الكاملة في صفحة التصدير (Export).
Link to this sectionالأسئلة الشائعة#
Link to this sectionكيف يمكنني تدريب نموذج تقدير العمق YOLO26 على مجموعة بيانات مخصصة؟#
قم بإعداد صور RGB مزدوجة وملفات عمق بتنسيق .npy، ثم أنشئ ملف YAML لمجموعة البيانات يشير إلى دليل images/ الخاص بك. يجد المحمل ملفات العمق تلقائيًا عن طريق استبدال images بـ depth في المسار واستبدال امتداد الصورة بـ .npy.
ابدأ من الأوزان المدربة مسبقًا واستخدم معدل تعلم منخفض مع AdamW لضمان احتفاظ الضبط الدقيق بما يعرفه النموذج بالفعل (انظر الضبط الدقيق على بياناتك الخاصة لمعرفة السبب):
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,
)راجع صفحة التكوين لمزيد من المعلمات المتاحة.
Link to this sectionما هي المقاييس التي يبلغ عنها YOLO26 لتقدير العمق؟#
تقارير التحقق من صحة تقدير العمق تتضمن مجموعة المقاييس المستخدمة بواسطة Depth Anything والأعمال ذات الصلة بتقدير العمق أحادي العين:
- delta1 / delta2 / delta3 — النسبة المئوية للبكسلات حيث تكون نسبة العمق المتوقع إلى العمق الحقيقي (أو معكوسه) أقل من 1.25 و 1.25² و 1.25³ على التوالي. كلما زادت القيمة كان ذلك أفضل.
- abs_rel — متوسط الخطأ النسبي المطلق. كلما انخفضت القيمة كان ذلك أفضل.
- rmse — جذر متوسط مربع الخطأ بالأمتار. كلما انخفضت القيمة كان ذلك أفضل.
- silog — الخطأ اللوغاريتمي غير المتغير حسب المقياس. كلما انخفضت القيمة كان ذلك أفضل.
تتم محاذاة كل تنبؤ مع حقيقته الأساسية لكل صورة على أساس الوسيط، ثم يتم تجميع الإحصائيات عبر كل بكسل صالح في مجموعة التحقق (الصور التي تحتوي على بكسلات عمق صالحة أكثر تزن نسبيًا أكثر). الأوراق البحثية التي تقوم بحساب متوسط المقاييس لكل صورة بدلاً من ذلك قد تبلغ عن قيم مختلفة قليلاً لنفس التنبؤات.
Link to this sectionما هو تنسيق مخرجات خريطة العمق؟#
يتم تخزين خريطة العمق كـ torch.Tensor بشكل (H, W) حيث تمثل كل قيمة العمق المتوقع بالأمتار (استخدم result.depth.data.cpu().numpy() للحصول على مصفوفة NumPy بتنسيق float32). يمكنك الوصول إليها من خلال result.depth.data بعد تشغيل التنبؤ. الخريطة محاذية لدقة الصورة المدخلة.
Link to this sectionما هي مجموعات البيانات المدعومة لتقدير العمق؟#
توفر Ultralytics YOLO26 تكوينات YAML مدمجة لمجموعة البيانات لعدة مجموعات بيانات لتقدير العمق بما في ذلك NYU Depth V2 و KITTI و Hypersim و SUN RGB-D و ARKitScenes. راجع دليل مجموعة بيانات تقدير العمق للحصول على القائمة الكاملة وتفاصيل التنسيق.
Link to this sectionكيف يمكنني التحقق من صحة نموذج تقدير العمق المدرب مسبقًا YOLO26؟#
تحقق من صحة نموذج عمق 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)Link to this sectionكيف يمكنني تصدير نموذج تقدير العمق YOLO26 إلى تنسيق ONNX؟#
قم بتصدير نموذج عمق 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")لمزيد من التفاصيل حول التصدير إلى تنسيقات مختلفة، راجع صفحة التصدير.