تقدير العمق الأحادي العين باستخدام Ultralytics YOLO#
يتنبأ تقدير العمق أحادي العين بخريطة عمق لكل بكسل انطلاقًا من صورة RGB واحدة. ويحتوي كل بكسل ناتج على قيمة عمق بالأمتار تمثل المسافة المقدَّرة من الكاميرا إلى نقطة السطح تلك.
يكون ناتج نموذج العمق خريطة كثيفة من الأعداد العشرية ذات الشكل (H, W) ومحاذية للصورة المُدخلة. ويجعل هذا التمثيل لكل بكسل تقديرَ العمق أحادي العين مناسبًا لإعادة بناء المشاهد ثلاثية الأبعاد، وملاحة الروبوتات، وإنشاء محتوى الواقع المعزز/الواقع الافتراضي، وأي تطبيق يتطلب البنية المكانية انطلاقًا من كاميرا واحدة.
استخدم task=depth أو مهمة CLI yolo depth لتقدير العمق أحادي العين. تستخدم ملفات نماذج العمق YOLO26 اللاحقة -depth، مثل yolo26n-depth.pt.
Watch: Monocular Depth Estimation with Ultralytics YOLO26 | Python Tutorial | Vision AI 🚀
النماذج#
تظهر أدناه نماذج العمق YOLO26 المُدرَّبة مسبقًا على مزيج واسع من مجموعات البيانات (داخلية + خارجية، ~2.19M صورة). وتُبلَّغ أعمدة المقاييس على تقسيم اختبار Eigen من NYU Depth V2.
تُنزل النماذج تلقائيًا من أحدث إصدار من Ultralytics عند الاستخدام الأول.
| النموذج | الحجم (بكسل) | delta1NYU | abs_relNYU | rmseNYU | السرعة CPU ONNX (مللي ثانية) | السرعة T4 TensorRT10 (مللي ثانية) | المعاملات (M) | FLOPs (B) |
|---|---|---|---|---|---|---|---|---|
| YOLO26n-depth | 768 | 0.882 | 0.109 | 0.414 | 272.0 ± 27.2 | 2.7 ± 0.1 | 6.3 | 46.9 |
| YOLO26s-depth | 768 | 0.896 | 0.104 | 0.399 | 393.7 ± 13.1 | 3.8 ± 0.0 | 13.2 | 68.0 |
| YOLO26m-depth | 768 | 0.921 | 0.089 | 0.364 | 621.5 ± 49.7 | 6.0 ± 0.1 | 23.3 | 130.4 |
| YOLO26l-depth | 768 | 0.930 | 0.083 | 0.351 | 821.9 ± 50.7 | 7.7 ± 0.1 | 27.7 | 157.0 |
| YOLO26x-depth | 768 | 0.933 | 0.080 | 0.344 | 1240.9 ± 73.3 | 13.6 ± 0.2 | 57.0 | 301.7 |
- 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 هو الجذر التربيعي لمتوسط مربع الخطأ بالأمتار.
- السرعة هي زمن الاستجابة للاستدلال فقط (باستثناء المعالجة المسبقة/اللاحقة) عند
imgsz=768وbatch=1، وتُبلَّغ كمتوسط ± انحراف معياري عبر عمليات التشغيل الموقّتة بعد الإحماء. CPU ONNX هو ONNX Runtime بدقة fp32 على Intel Xeon ذي 32 نواة (Skylake)؛ وT4 TensorRT10 هو TensorRT بدقة fp16 على Tesla T4. - يُقاس params وFLOPs عند 768×768، وهي دقة التدريب للأوزان المُصدرة.
راجع معاينة YOLO27 غير الإصدار الرسمي للحصول على نتائج أولية لـ NYU Depth V2.
مقارنة السرعة مع Depth Anything V2#
يُعد Depth Anything V2 خط أساس مفتوحًا واسع الاستخدام للعمق أحادي العين. وتستهلك البنية الأساسية DINOv2 لمحوّل الرؤية ووحدة فك الترميز DPT قدرًا كبيرًا من الحسابات، ولذلك يكون أصغر نموذج مُصدر من Depth Anything V2 أبطأ من كل نموذج عمق YOLO26 على Tesla T4 نفسها باستخدام TensorRT fp16 — بما في ذلك YOLO26x-depth، الذي يحتوي على أكثر من ضعف عدد المعاملات.
عند ~768 بكسل — imgsz=768 لـ YOLO26، وهي الدقة التي دُرِّبت عليها أوزانه المُصدرة، و770 بكسل لـ Depth Anything V2، الذي تتطلب بنيته الأساسية DINOv2 مضاعفًا لحجم رقعته البالغ 14:
| النموذج | المعاملات (M) | FLOPs (B) | 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 | 301.7 | 13.57 | 73.7 | 1.5× | 4.1× |
| YOLO26l-depth | 27.7 | 157.0 | 7.68 | 130.2 | 2.7× | 7.2× |
| YOLO26m-depth | 23.3 | 130.4 | 6.00 | 166.7 | 3.5× | 9.2× |
| YOLO26s-depth | 13.2 | 68.0 | 3.82 | 261.6 | 5.5× | 14.5× |
| YOLO26n-depth | 6.3 | 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 فهو مقلوب زمن الاستجابة غير المُقَرَّب. وتقسم أعمدة التسارع زمن استجابة Depth Anything V2 Small (20.99 مللي ثانية) وBase (55.40 مللي ثانية) على زمن استجابة YOLO26. - Depth Anything V2 Small وBase هما نقطتا التحقق ViT-S وViT-B المُصدرتان.
- تغطي المقارنة زمن الاستجابة فقط — إذ لم يُقيَّم نموذجا العائلتين هنا وفق بروتوكول دقة مشترك.
نطاق العمق ورأس العمق اللوغاريتمي#
يتنبأ رأس العمق بـ exp(logit) — وهو غير محدود (~0.02–150 m) — ويفصل شكل المشهد عن المقياس المطلق: إذ تتنبأ الشبكة بمجال عمق لوغاريتمي نسبي، وتُحدَّد القيم المطلقة بالأمتار بواسطة تحويل منفصل ذي معاملين (exp(a·log d + b)) يُستعاد أثناء التقييم، أو من خلال معايرة خفيفة، أو عبر الضبط الدقيق. أما البديل الشائع، وهو رأس sigmoid × max_depth محدود النطاق، فيدمج حدًا أعلى ثابتًا في البنية، ولذلك يُقص أي عمق يتجاوز max_depth — ما يمنع التدريب على المشاهد ذات المدى الأطول والتنبؤ بها.
لماذا الرأس غير محدود: أدلة عبر نطاقات العمق#
مقارنة A/B مضبوطة — البيانات نفسها، والجدول الزمني نفسه، والاختلاف في الرأس فقط. تدريب كلا الرأسين من الصفر على مزيج متطابق من البيانات الداخلية (≤10 m) والخارجية (≤80 m):
| الرأس | نطاق الخرج | δ1 للتحقق ذي النطاق المختلط | سلوك التدريب |
|---|---|---|---|
sigmoid × max_depth (10 m) | محدود 0–10 m | 0.221 | يستقر عند الحقبة 1 |
log (غير محدود) | 0–~150 m | 0.367 (+66%) | يتحسن طوال التدريب |
لا يستطيع الرأس المحدود تمثيل غالبية البكسلات الخارجية التي تتجاوز 10 m، ولذلك يتوقف عن التحسن فورًا تقريبًا؛ بينما يتعلم رأس log من النطاق الكامل.
نمط الفشل الذي يعالجه — الضبط الدقيق على مجموعة بيانات واحدة، مصنّف حسب النطاق. ينجح الضبط الدقيق لرأس محدود (10 m) على مجموعات البيانات الفردية عندما تلائم البيانات الحد الأقصى، وينهار عندما تتجاوزه:
| مجموعة البيانات | نطاق العمق | δ1 للرأس المحدود |
|---|---|---|
| SUN RGB-D | ≤10 m | 0.78 ✅ |
| Hypersim | غالبًا ≤10 m | 0.74 ✅ |
| KITTI | ~80 m | 0.08 ❌ (abs_rel ≈ 7.0 — عدم تطابق المقياس 80/10) |
| vKITTI2 | 80 m | 0.04 ❌ |
يحدث الانهيار تمامًا عند حد النطاق. ولا يوجد مثل هذا الحد في رأس log.
النماذج المُصدرة — الأداء عبر النطاقات. عائلة النماذج ذات الرأس log المُوزعة، والمُقيَّمة عبر معايير تمتد من 10 m (NYU وiBims-1) إلى 80 m (KITTI)، باستخدام δ1 بمحاذاة المقياس:
| المعيار | النطاق | 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 m أكبر ضرر تحديدًا — مع الحفاظ على الأداء الداخلي.
التدريب#
درّب 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 في صفحة التدريب.
الضبط الدقيق على بياناتك الخاصة#
عند تكييف نموذج عمق مُدرَّب مسبقًا مع مجموعة بيانات مخصصة، خفّض معدل التعلم واستخدم مُحسِّن 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المخزّن في نقطة التحقق — راجع فحص وسائط تدريب نقطة تحقق YOLO26. - لم تُنفَّذ
mosaicوmixupوcutmixوcopy_pasteللعمق. يضبط محمّل مجموعة بيانات العمق هذه الاحتمالات تلقائيًا على 0، لذا لا يؤثر تمريرها. ولا تُدعَم عمليات زيادة البيانات هذه لأنها تدمج صورًا متعددة، ما سينتج خرائط عمق مزدوجة غير صالحة. - يعمل أي نطاق عمق مباشرةً دون إعدادات إضافية. تتنبأ النماذج ذات الرأس
logبعمق غير محدود، ولذلك تتكيف مع البيانات قصيرة المدى (التصوير القريب) أو طويلة المدى (الخارجية/القيادة) دون تغييرات. ويحدد ضبطmax_depth:في YAML الخاص بمجموعة البيانات، بالأمتار، بكسلات الحقيقة الأساسية التي تُحتسب ضمن مقاييس التحقق. - حافظ على الأداء العام. إذا كنت تحتاج إلى بقاء دقة النموذج في المشاهد الواقعة خارج مجموعة التدريب، فامزج نسبة صغيرة (~5–10%) من الصور العامة المتنوعة في بيانات التدريب؛ فهذا يقلل بدرجة كبيرة من النسيان أثناء الضبط الدقيق.
- درّب من الصفر (
model=yolo26s-depth.yaml) فقط إذا كان مجالك مختلفًا جدًا ولديك مجموعة بيانات كبيرة — ففي هذه الحالة يكون SGD الافتراضيlr0=0.01مناسبًا، إذ لا توجد أوزان مُدرَّبة مسبقًا للحفاظ عليها.
معايرة مقياس العمق#
يفصل رأس العمق بين الشكل (بنية المشهد النسبية) والمقياس (الأمتار المطلقة). إذا كان النموذج ينتج بالفعل عمقًا نسبيًا جيدًا في مشاهدك، لكن القيم المطلقة غير صحيحة لكاميرتك، فيمكنك تصحيح المقياس خلال ثوانٍ باستخدام model.calibrate() — وهو ملاءمة مغلقة الصيغة لتحويل لوغاريتمي-أفيني ذي معلمتين مقابل مجموعة صغيرة من البيانات ذات التسميات، مع عدم إجراء تدريب بالتدرجات وعدم تغيير أوزان الشبكة، ولذلك لا يمكنه إفساد البنية النسبية.
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")تحتاج المعايرة إلى عمق الحقيقة الأرضية لإجراء الملاءمة، ولذلك تُجرى على مجموعة مقسّمة ذات تسميات — ولا يمكن أن تحدث أثناء الاستدلال الأعمى. تُجري الملاءمة والتقييم على وحدات البكسل نفسها التي تقيّمها مقاييس التحقق: تُستبعد قيم الحقيقة الأرضية عند max_depth في YAML الخاص بمجموعة البيانات أو بعده (القيمة الافتراضية 100 m). استخدمها عندما يكون العمق النسبي جيدًا بالفعل ويكون الخطأ في المقياس/النطاق فقط؛ وإذا كانت البنية النسبية نفسها تحتاج إلى تغيير لتلائم مجالك، فاستخدم الضبط الدقيق بدلًا من ذلك.
يتولى التدريب ذلك تلقائيًا: بعد اكتمال model.train(...)، تُعاير أفضل نقاط التحقق وآخرها على مجموعة التحقق، بحيث تُخرج عمقًا مُقاسًا متريًا مباشرةً.
تأتي نقاط التحقق yolo26*-depth.pt المُصدرة مزوّدة بهذه المعايرة المضمّنة بالفعل، بعد ملاءمتها على مزيج التحقق من التدريب المسبق. وهو مقياس عالمي واحد عبر جميع المجالات، ولذلك للحصول على أدق عمق مطلق لكاميرا أو نوع مشهد محدد، شغّل model.calibrate() على مجموعة صغيرة ذات تسميات من بياناتك الخاصة — إذ يستبدل الملاءمة المضمّنة.
تنسيق مجموعة البيانات#
تقرن مجموعات بيانات تقدير العمق كل صورة RGB بخريطة عمق PNG من نوع uint16 مُقاسة أو بخريطة عمق NPY عائمة النقطة، بوحدة المتر. تستخدم قيم PNG المليمترات افتراضيًا؛ أما مجموعات البيانات ذات الاصطلاح المختلف فتعيّن depth_scale في YAML الخاص بها. يستمد المحمّل مسار العمق باستبدال المكوّن images بالمكوّن depth، مع تفضيل .png والرجوع إلى .npy عند تعذّر ذلك.
dataset/
├── images/
│ ├── train/
│ └── val/
└── depth/
├── train/
└── val/على سبيل المثال، تُقرن صورة موجودة في images/train/scene_001.jpg بخريطة عمق موجودة في depth/train/scene_001.png. راجع دليل مجموعة بيانات تقدير العمق للاطلاع على مواصفات التنسيق الكاملة.
التحقق#
تحقق من دقة نموذج 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 الكاملة في صفحة التنبؤ.
مخرجات النتائج#
يعيد YOLO لتقدير العمق كائن Results واحدًا لكل صورة. وتخزّن كل نتيجة خريطة عمق عائمة كثيفة واحدة للصورة كاملةً.
| السمة | النوع | الشكل | الوصف |
|---|---|---|---|
result.depth | DepthMap | (H,W) | خريطة عمق كثيفة لكل بكسل. |
result.depth.data | torch.Tensor | (H,W) | قيم العمق بالأمتار؛ استدعِ .cpu().numpy() للحصول على NumPy. |
result.boxes | - | - | لا توجد مربعات مثيلات. |
result.masks | - | - | لا توجد أقنعة مثيلات. |
للاطلاع على حقول Results الخاصة بالمهمة عبر جميع المهام، راجع قسم نتائج التنبؤ حسب المهمة.
تلوين خريطة العمق#
خريطة العمق الخام عبارة عن مصفوفة عائمة أحادية القناة بوحدة المتر — وهي مفيدة للحساب، لكن يصعب قراءتها مباشرةً. لتحويلها إلى صورة ملوّنة، استخدم المساعد colorize_depth في ultralytics.utils.plotting، الذي يعيّن مصفوفة العمق (H, W) إلى صورة BGR (H, W, 3) ذات uint8 (وتُعرض وحدات البكسل غير الصالحة <= 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 | أحمر ← أصفر ← أخضر ← أزرق (matplotlib Spectral_r). |
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 | النموذج | البيانات الوصفية | الوسائط |
|---|---|---|---|---|
| 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 |
| Apple Core AI | coreai | yolo26n-depth.aimodel | ✅ | imgsz، batch، quantize |
يفترض nms=None المخرجات الخام لـ NMS الخارجي. قم بتعيين nms=False لتحديد رأس متاح خالٍ من NMS؛ وتتراجع التنسيقات غير المدعومة إلى مسار إخراجها الأصلي. وتحدد مُدخلات nms أعلاه التنسيقات التي يمكنها تضمين NMS باستخدام nms=True.
راجع تفاصيل export الكاملة في صفحة التصدير.
الأسئلة الشائعة#
حضّر صور RGB مقترنة بخرائط عمق PNG 16-بت أو خرائط عمق NPY عائمة النقطة بوحدة المتر، ثم أنشئ YAML لمجموعة بيانات يشير إلى مجلد
images/. يعثر المحمّل على ملفات العمق تلقائيًا باستبدالimagesبـdepthفي المسار، مع تفضيل.pngوالرجوع إلى.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, )راجع صفحة الإعدادات للاطلاع على مزيد من الوسائط المتاحة.
يبلّغ التحقق من تقدير العمق عن مجموعة المقاييس المستخدمة في Depth Anything والأعمال ذات الصلة بالعمق الأحادي:
- delta1 / delta2 / delta3 — نسبة وحدات البكسل التي تكون فيها نسبة العمق المتنبأ به إلى عمق الحقيقة الأرضية (أو معكوسها) أقل من 1.25 و1.25² و1.25³ على التوالي. الأعلى أفضل.
- abs_rel — متوسط الخطأ النسبي المطلق. الأقل أفضل.
- rmse — الجذر التربيعي لمتوسط مربع الخطأ بالأمتار. الأقل أفضل.
- silog — الخطأ اللوغاريتمي غير المتأثر بالمقياس. الأقل أفضل.
تُحاذى كل تنبؤات العمق بالوسيط مع الحقيقة الأرضية الخاصة بها لكل صورة، ويُحسم كل مقياس على تلك الصورة، ثم تُحسب متوسطات النتائج لكل صورة على مجموعة التحقق، لذا يكون وزن كل صورة متساويًا بصرف النظر عن عدد وحدات بكسل العمق الصالحة فيها. تُتخطى الصور التي تحتوي على أقل من 10 وحدات بكسل صالحة من الحقيقة الأرضية ولا تدخل في ذلك المتوسط، لأن محاذاة وسيط عدد قليل من وحدات البكسل لا معنى لها؛ أما التنبؤات غير المنتهية فتُقيّم عند حدود العمق. وهذا يطابق المتوسط لكل عينة وحدّ وحدات البكسل العشر المستخدمين في Depth Anything V2.
تُخزّن خريطة العمق على هيئة
torch.Tensorبالشكل(H, W)، حيث تمثل كل قيمة العمق المتنبأ به بالأمتار (استخدمresult.depth.data.cpu().numpy()للحصول على مصفوفة NumPyfloat32). يمكنك الوصول إليها من خلالresult.depth.dataبعد تشغيل التنبؤ. وتكون الخريطة محاذية لدقة صورة الإدخال.يوفر Ultralytics YOLO26 إعدادات YAML مضمّنة لمجموعة البيانات لعدة مجموعات بيانات لتقدير العمق، بما في ذلك NYU Depth V2 وKITTI وHypersim وSUN RGB-D وARKitScenes. راجع دليل مجموعة بيانات تقدير العمق للاطلاع على القائمة الكاملة وتفاصيل التنسيق.
تحقق من نموذج 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")لمزيد من التفاصيل حول التصدير إلى تنسيقات متنوعة، راجع صفحة التصدير.