تصدير Qualcomm QNN لنماذج Ultralytics YOLO#
يتطلب نشر نماذج الرؤية الحاسوبية على أجهزة Qualcomm Snapdragon تنسيقَ نموذج مُحسَّناً لوقت تشغيل Qualcomm AI Engine Direct (QNN). يتيح تصدير نماذج Ultralytics YOLO إلى تنسيق QNN تشغيل الاستدلال المُسرَّع على الجهاز عبر عتاد Snapdragon CPU وAdreno GPU وHexagon NPU الموجود في مليارات الهواتف المحمولة وأجهزة الكمبيوتر المحمولة وأنظمة السيارات وأجهزة إنترنت الأشياء. يوضّح هذا الدليل كيفية تصدير YOLO إلى Qualcomm QNN ونشره لإجراء استدلال سريع ومنخفض استهلاك الطاقة على عتاد Snapdragon.
يوفّر مكوّن Ultralytics الإضافي لـ Flutter دعماً اختيارياً لـ QNN لإجراء استدلال الكاميرا في الوقت الفعلي والتنبؤ بصورة واحدة عبر جميع مهام YOLO26 السبع. فعّل وقت تشغيل QNN وأضف تبعية ONNX Runtime كما هو موضّح في README الخاص بالمكوّن الإضافي. لنشر iOS، راجع Ultralytics YOLO iOS SDK وتكامل CoreML.
صدّر نماذج التصنيف في imgsz=224. وصدّر نماذج الكشف والتقسيم والتقسيم الدلالي والعمق والوضعية وOBB في
imgsz=640. ويُستخدم معيار 224/640 هذا في أصول الأجهزة المحمولة الرسمية لـ QNN وLiteRT وCoreML.
تُنشر الأصول v73 وv81 الجاهزة للتشغيل لجميع المهام النانوية السبع في
إصدار yolo-flutter-app v0.6.6.
ما هو Qualcomm QNN؟#
إن Qualcomm AI Engine Direct — المعروف عادةً باسم QNN والموزَّع كجزء من SDK الخاص بوقت تشغيل Qualcomm AI Runtime (QAIRT) — هو حزمة الاستدلال منخفضة المستوى من Qualcomm لمعالجات Snapdragon. ويوفّر واجهة API موحّدة مع مكتبات خاصة بكل واجهة خلفية تستهدف Snapdragon CPU وAdreno GPU وHexagon Tensor Processor (HTP)، وهي وحدة معالجة الشبكات العصبية (NPU) المخصصة داخل شرائح Snapdragon SoC الحديثة. ويمنح QNN المطورين وصولاً كاملاً إلى مسرّعات Snapdragon للذكاء الاصطناعي على مستوى الحزمة البرمجية بأكملها، وهو الخلف الحديث لـ SDK Snapdragon Neural Processing Engine (SNPE) الأقدم. ويشغّل الذكاء الاصطناعي على الجهاز عبر منصات Snapdragon 8 Gen 2 و8 Gen 3 و8 Elite المحمولة، وأجهزة الكمبيوتر المحمولة Snapdragon X، ومنتجات السيارات وXR.
لماذا التصدير إلى Qualcomm QNN؟#
Snapdragon هي منصة الحوسبة المحمولة الأكثر انتشاراً في العالم. يتيح تصدير Ultralytics YOLO إلى تنسيق Qualcomm QNN الاستفادة من عتاد الذكاء الاصطناعي المخصص في هذه الأجهزة:
- تسريع Hexagon NPU: يؤدي تشغيل YOLO على Hexagon Tensor Processor إلى إنتاجية أعلى بكثير واستهلاك طاقة أقل من الاستدلال عبر CPU، ما يجعله مثالياً لـالاستدلال في الوقت الفعلي والرؤية الحاسوبية الدائمة التشغيل على Snapdragon.
- على الجهاز ودون اتصال: يعمل استدلال QNN بالكامل على جهاز Snapdragon، لذلك لا توجد عمليات ذهاب وإياب إلى السحابة، وتظل مدة الاستجابة منخفضة، ولا تغادر البيانات الجهاز.
- الكفاءة بعد التكميم: تُكمِّم عملية التصدير إلى QNN YOLO إلى أوزان INT8 مع تنشيطات 16 بت، وهو توازن الدقة/الأداء المفضّل لوحدة Hexagon NPU، ما يقلّص حجم النموذج ويزيد عدد الإطارات في الثانية إلى أقصى حد على الأجهزة العاملة بالبطارية.
- تنسيق واحد، وأجهزة متعددة: يستهدف تصدير Qualcomm QNN واحد Snapdragon CPU وAdreno GPU وHexagon NPU عبر عائلات Snapdragon 8 Gen 2 و8 Gen 3 و8 Elite وما بعدها.
- حزمة Qualcomm AI جاهزة للإنتاج: يُعد QNN (Qualcomm AI Engine Direct / QAIRT) وقت تشغيل Qualcomm الحالي للذكاء الاصطناعي على الجهاز، والمدعوم بنشاط، والبديل الموصى به لـ SNPE.
تنسيق تصدير QNN#
تُجمّع Ultralytics نماذج YOLO إلى QNN محلياً باستخدام موفّر تنفيذ QNN في ONNX Runtime (الحزمة القابلة للتثبيت عبر pip onnxruntime-qnn، التي تتضمن مكتبات QAIRT). يحوّل المصدّر نموذجك إلى ONNX، ثم يكمّمه باستخدام بيانات المعايرة إلى عمليات تنشيط 16 بت وأوزان INT8 (التوازن الموصى به لـ Hexagon NPU)، ثم يهيّئ جلسة ONNX Runtime مع تفعيل التخزين المؤقت للثنائي السياقي — ما يجمّع الرسم البياني المكمّم في ثنائي سياق QNN مضمن في <model>_qnn.onnx. ولا يلزم حساب Qualcomm أو رفع إلى السحابة أو تنزيل SDK منفصل.
بخلاف Qualcomm AI Hub القائم على السحابة، الذي يجمّع النماذج ويقيس أداءها على أجهزة Snapdragon المستضافة لدى Qualcomm ويتطلب حساب Qualcomm، يعمل تصدير Ultralytics QNN بالكامل على جهازك باستخدام استدعاء واحد export(format="qnn", imgsz=640) (imgsz=224 للتصنيف). وتحصل على هدف وقت تشغيل QNN/QAIRT نفسه — Snapdragon CPU وAdreno GPU وHexagon NPU — من دون تسجيل أو حدود للرفع أو أوقات انتظار في الطوابير، ويندمج مباشرةً في سير عمل تصدير YOLO القياسي.
ملف *_qnn.onnx المُصدَّر مكتفٍ ذاتياً؛ إذ يتضمن ثنائي سياق QNN وبيانات ONNX الوصفية، مثل أسماء الفئات وحجم الصورة والمهمة.
الميزات الرئيسية لنماذج QNN#
- التكميم: يُكمَّم النموذج إلى عمليات تنشيط 16 بت وأوزان INT8 باستخدام مسار ONNX Runtime QNN QDQ ومجموعة بيانات معايرة، وهو توازن الدقة/الأداء الموصى به لدى Hexagon NPU. تعرّف على المزيد حول تكميم النماذج.
- التجميع المحلي بالكامل: يُنشأ ثنائي السياق بالكامل على جهازك المضيف، من دون حساب Qualcomm أو رمز API أو رفع إلى السحابة.
- تسريع Snapdragon الكامل: شغّل الاستدلال على Hexagon NPU (HTP) أو Adreno GPU أو CPU عبر وقت تشغيل موحّد واحد.
- نطاق واسع من الأجهزة: استهدف مجموعة Snapdragon الواسعة المستخدمة في الهواتف وأجهزة الكمبيوتر (Windows on Snapdragon) والسيارات وXR والمنتجات المضمّنة.
- ثنائي سياق مُجمَّع مسبقاً: يقلّل شحن ثنائي السياق من تجميع الرسم البياني على الجهاز، ما يخفض زمن تحميل النموذج على الجهاز المستهدف.
- مخرجات مكتفية ذاتياً: يتضمن ملف ONNX المُصدَّر ثنائي سياق QNN المُجمَّع مسبقاً والبيانات الوصفية، بما يسهّل النشر.
الأداء المُقاس#
هاتف Android#
العتاد: Xiaomi 17 مع ذاكرة LPDDR5X بسعة 12 GB وAndroid 16 / API 36. وتحتوي شريحة Snapdragon 8 Elite Gen 5 بدقة تصنيع 3 nm (SM8850) على Qualcomm Oryon CPU بثماني نوى (نواتان Prime بتردد يصل إلى 4.6 GHz و6 نوى Performance بتردد يصل إلى 3.62 GHz)، وAdreno GPU وHexagon NPU (HTP v81).
| النموذج | المهمة | الحجم (بكسل) | CPU w8a32 LiteRT (ms) | GPU w8a32 LiteRT (ms) | NPU QNN W8A16 (ms) |
|---|---|---|---|---|---|
| YOLO26n | Detect | 640 | 52.2 1.8 / 48.1 / 2.4 | 15.8 2.3 / 8.9 / 4.6 | 10.7 1.8 / 6.7 / 2.2 |
| YOLO26n-seg | Segment | 640 | 73.4 1.8 / 65.6 / 6.0 | 33.2 1.8 / 23.8 / 7.6 | 17.4 1.8 / 9.9 / 5.7 |
| YOLO26n-sem | دلالي | 640 | 61.2 1.8 / 51.1 / 8.3 | 34.2 1.8 / 24.0 / 8.3 | 11.5 1.8 / 7.1 / 2.6 |
| YOLO26n-depth | العمق | 640 | 124.4 1.9 / 115.1 / 7.4 | 23.0 1.8 / 13.5 / 7.7 | 35.2 1.8 / 26.1 / 7.3 |
| YOLO26n-cls | التصنيف | 224 | 4.4 0.4 / 4.0 / 0.0 | 3.1 0.8 / 2.1 / 0.2 | 1.2 0.6 / 0.6 / 0.0 |
| YOLO26n-pose | الوضعية | 640 | 57.4 1.8 / 53.8 / 1.8 | 16.6 2.7 / 10.1 / 3.9 | 10.9 1.8 / 7.0 / 2.0 |
| YOLO26n-obb | OBB | 640 | 50.3 1.8 / 47.2 / 1.4 | 11.7 1.8 / 7.8 / 2.0 | 8.6 1.8 / 5.7 / 1.1 |
- قيم السرعة هي أزمنة استجابة لدفعات من الصور المفردة — متوسط 15 تشغيلاً بعد 3 تشغيلات إحماء على
bus.jpg، وقيسَت باستخدام أداة الاختبار المعيارية على الجهاز0.6.10الخاصة بـمكوّن Flutter الإضافي، والأصول المعياريةv0.6.6. وقد تناوب ترتيب الواجهات الخلفية بين المهام في عملية مسح تسلسلية واحدة. وأكدت السجلات الأصلية أن كل صف CPU استخدم LiteRT CPU/XNNPACK، وأن كل صف GPU فوّض الرسم البياني كاملاً إلى LiteRT OpenCL (LITERT_CL)، وأن كل صف NPU استخدم الواجهة الخلفية QNN Hexagon HTP. - يوجد السجل التفصيلي للاختبار المعياري في وثيقة أداء Flutter.
- قارن أجهزة Android الأخرى في تكامل LiteRT وأجهزة Apple في تكامل CoreML.
حاسوب محمول Windows on Snapdragon#
استخدم هذا المسح التاريخي ثنائيات QNN v73 السابقة للمعيار؛ كما استخدم التقسيم الدلالي وOBB مدخلات بدقة 1024 بكسل. وأُجري الاختبار على حاسوب محمول من Lenovo بذاكرة 32 GB ونظام Windows 11. ويحتوي Snapdragon X Elite
(X1E78100) على Qualcomm Oryon CPU بـ12 نواة وAdreno GPU وHexagon NPU (HTP v73)؛ ولم يُسجَّل طراز Lenovo الدقيق. وتقارن هذه المقارنة الخاصة بـWindows-on-Snapdragon خط أساس CPU الأصلي PyTorch FP32 الذي يبدأ منه معظم مطوري أجهزة الكمبيوتر المكتبية بمسار ONNX Runtime QNN Hexagon HTP. وتعرض كل خلية الزمن الكامل المنقضي لاستدعاء model.predict() مع أزمنة المعالجة المسبقة/الاستدلال/المعالجة اللاحقة المُبلَّغ عنها أسفلها؛ وقد يتضمن الإجمالي عبء إطار العمل خارج هذه المراحل الثلاث. أرقام CPU هي PyTorch FP32 (torch==2.10.0+cpu)، وأرقام NPU هي ONNX Runtime QNN (onnxruntime-qnn==2.2.0، أوزان INT8/عمليات تنشيط 16 بت).
| النموذج | المهمة | الحجم (بكسل) | CPU PT FP32 (ms) | NPU Hexagon QNN W8A16 (ms) |
|---|---|---|---|---|
| YOLO26n | Detect | 640 | 91.4 4.3 / 75.2 / 0.1 | 27.2 4.9 / 19.4 / 0.9 |
| YOLO26n-seg | Segment | 640 | 138.8 4.5 / 127.1 / 2.8 | 34.3 5.0 / 24.0 / 5.1 |
| YOLO26n-sem | دلالي | 1024 | 295.8 9.1 / 189.2 / 94.8 | 133.0 8.8 / 37.4 / 83.9 |
| YOLO26n-cls | التصنيف | 224 | 15.4 3.0 / 9.8 / 0.0 | 11.7 2.7 / 5.5 / 0.0 |
| YOLO26n-pose | الوضعية | 640 | 109.6 4.6 / 102.9 / 0.2 | 28.9 5.3 / 23.3 / 0.6 |
| YOLO26n-obb | OBB | 1024 | 267.8 8.1 / 254.6 / 0.1 | 64.8 8.9 / 54.7 / 0.6 |
- قيم السرعة هي أزمنة استجابة لدفعات من الصور المفردة — متوسط 100 تشغيل بعد 10 تشغيلات إحماء على
bus.jpg، وقيسَت باستخدامtime.perf_counter()حول استدعاءmodel.predict()الكامل على جهاز مستقر حرارياً (ultralytics==8.4.67، Python 3.12.10). - تعمل Hexagon NPU بسرعة أكبر بنحو 2-4 مرات من خط أساس PyTorch CPU عبر مهام 640-1024 بكسل (نحو 3.4 مرات للكشف)، وتضيق الفجوة إلى نحو 1.3 مرة في المصنّف ذي الدقة 224 بكسل، حيث يهيمن عبء المعالجة المسبقة الثابت على الحمل الصغير.
المهام المدعومة#
يدعم تصدير Qualcomm QNN مهام Ultralytics السبع جميعها. ولا يتوفر التقسيم الدلالي وتقدير العمق إلا مع YOLO26، وهي العائلة الوحيدة التي توفر رأسي الإخراج هذين.
التصدير إلى QNN: تحويل نموذج YOLO الخاص بك#
صدّر نموذج Ultralytics YOLO إلى تنسيق QNN لنشره على عتاد Qualcomm. ويُنهى إعداد ثنائي السياق لمعمارية Hexagon Tensor Processor (HTP) مستهدفة أو SoC مدعوم، تحددها باستخدام الوسيطة name — وهي الوسيطة نفسها المستخدمة لاستهداف شريحة في تصدير RKNN.
أهداف HTP المدعومة#
مرّر المعمارية المستهدفة أو SoC عبر name (مثل name="73" أو name="iq-8275"). ويتحدد الدعم وفق هدف HTP، لذلك تمثل صفوف Snapdragon أدناه منصات نموذجية وليست قائمة شاملة بكل SoC. وتُدرج أجهزة Dragonwing صراحةً.
| الحالة | name | Hexagon HTP | الجهاز أو المنصة النموذجية |
|---|---|---|---|
| ✅ مدعوم | 68 | v68 | Snapdragon 888 |
| ✅ مدعوم | 69 | v69 | Snapdragon 8 Gen 1 / 8+ Gen 1 |
| ✅ مدعوم | 73 | v73 | Snapdragon 8 Gen 2، X Elite (الافتراضي) |
| ✅ مدعوم | 75 | v75 | Snapdragon 8 Gen 3 |
| ✅ مدعوم | 79 | v79 | Snapdragon 8 Elite |
| ✅ مدعوم | 81 | v81 | Snapdragon 8 Elite Gen 5 |
| ✅ مدعوم | iq-8275 أو qcs8275 | v75 | Dragonwing IQ-8275 / QCS8275 (طراز Qualcomm QNN SoC 82) |
| ❌ غير مدعوم | — | v66 | Dragonwing IQ-615 / QCS615 |
لا يمكن لجهاز Dragonwing IQ-615 استخدام تصدير ثنائي سياق Ultralytics QNN، لأن ONNX Runtime لا يعرّض DSP v66 الخاص به كهدف HTP غير متصل. ومع ذلك، يمكن دمج تصدير ONNX القياسي بشكل منفصل باستخدام موفّر تنفيذ CPU أو GPU يدعمه BSP الخاص باللوحة.
from ultralytics import YOLO
model = YOLO("best.pt")
model.export(format="qnn", name="iq-8275", imgsz=640)يستخدم تصدير QNN حزمة onnxruntime-qnn. ويوفر الإصدار 2.4.0 والإصدارات الأحدث عجلات مُنشأة مسبقاً لـ Windows (x64 وARM64) وLinux (x86-64 وARM64) على Python 3.11 أو أحدث؛ ولا يُعد macOS مضيف QNN مدعوماً. ويُجرى إنشاء ثنائي سياق QNN على مضيف x64 ولا يتطلب جهاز Snapdragon في خطوة التصدير.
التثبيت#
لتثبيت الحزم المطلوبة، شغّل:
# Install the required package for YOLO
pip install ultralyticsتُثبَّت حزمة onnxruntime-qnn (التي توفر موفّر تنفيذ QNN في ONNX Runtime وتتضمن مكتبات QAIRT) تلقائياً عند أول تصدير. للحصول على تعليمات تفصيلية وأفضل الممارسات المتعلقة بعملية التثبيت، راجع دليل تثبيت Ultralytics. وإذا واجهت أي صعوبات أثناء تثبيت الحزم المطلوبة لـ YOLO، فاستشر دليل المشكلات الشائعة للاطلاع على الحلول والنصائح.
الاستخدام#
يدعم تنسيق QNN أوضاع التصدير والتنبؤ والتحقق. ويُجرى الاستدلال والتحقق على عتاد Qualcomm Snapdragon عبر موفّر تنفيذ QNN في ONNX Runtime (الحزمة نفسها onnxruntime-qnn المستخدمة للتصدير). صدّر نموذجك، ثم حمّل النموذج المُصدَّر على جهاز Snapdragon لإجراء الاستدلال أو التحقق من دقته.
from ultralytics import YOLO
# Load a YOLO26 model
model = YOLO("yolo26n.pt")
# Export to Qualcomm QNN format (INT8, enforced automatically) for the default v73 HTP target
model.export(format="qnn", name="73", imgsz=640) # use imgsz=224 for classificationfrom ultralytics import YOLO
# Load the exported QNN model (on a Snapdragon device with onnxruntime-qnn)
model = YOLO("yolo26n_qnn.onnx")
# Run inference
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load the exported QNN model (on a Snapdragon device with onnxruntime-qnn)
model = YOLO("yolo26n_qnn.onnx")
# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")وسائط التصدير#
| الوسيطة | النوع | الافتراضي | الوصف |
|---|---|---|---|
format | str | 'qnn' | التنسيق المستهدف للنموذج المُصدَّر، والذي يحدد التوافق مع وقت تشغيل Qualcomm QNN. |
imgsz | int أو tuple | 640 | حجم الصورة المطلوب لمدخل النموذج. ويمكن أن يكون عدداً صحيحاً للصور المربعة أو صفاً (height, width). |
batch | int | 1 | يحدد حجم دفعة نموذج التصدير، الذي يُضمَّن في ثنائي سياق QNN المُنشأ. |
name | str | '73' | معمارية Hexagon HTP المستهدفة (68 أو 69 أو 73 أو 75 أو 79 أو 81) أو SoC المدعوم (iq-8275 أو qcs8275). ويُنهى إعداد ثنائي السياق لهذا الهدف. |
quantize | int أو str | 'w8a16'/auto | دقة التكميم. يُكمَّم تصدير QNN HTP إلى أوزان INT8 مع عمليات تنشيط 16 بت ('w8a16') ويُفعَّل تلقائياً إذا لم يُحدَّد. ويستبدل الرايتين المهجورتين half/int8. |
simplify | bool | True | يبسّط الرسم البياني الوسيط لـ ONNX باستخدام onnxslim. |
opset | int | None | يحدد إصدار مجموعة عمليات ONNX للرسم البياني الوسيط لـ ONNX. وإذا لم يُحدَّد، فسيُستخدم أحدث إصدار مدعوم. |
data | str | None | ملف YAML لمجموعة البيانات المستخدم لمعايرة INT8؛ أما التصنيف فيتطلب بدلاً من ذلك دليلاً لمجموعة البيانات أو اسماً لمجموعة بيانات مضمّنة. وإذا لم يُحدَّد، تختار Ultralytics مجموعة بيانات المعايرة الافتراضية لمهمة النموذج. |
fraction | float أو int أو list | 1.0 | مجموعة المعايرة الجزئية كنسبة أو عدد صور أو نسب/أعداد [train, val, test]. تترك القوائم ذات العنصرين test ممتلئًا، بينما تتخطى 0. |
device | str | None | يحدد الجهاز لخطوة تصدير ONNX: GPU (device=0) أو CPU (device=cpu). |
يكمّم تصدير QNN النموذج إلى عمليات تنشيط 16 بت وأوزان INT8 — وهو توازن الدقة/الأداء الموصى به لـ Hexagon NPU — باستخدام مسار تكميم ONNX Runtime QDQ مع صور المعايرة من data. ويُفرض quantize='w8a16' تلقائياً.
لمزيد من التفاصيل حول عملية التصدير، تفضل بزيارة صفحة توثيق Ultralytics حول التصدير.
بنية المخرجات#
بعد نجاح التصدير، يُنشأ ملف ONNX مكتفٍ ذاتياً:
yolo26n_qnn.onnx # ONNX wrapping the precompiled QNN context binary and metadata
يُضمّن الملف yolo26n_qnn.onnx ثنائي سياق QNN، ويُحمّله ONNX Runtime باستخدام موفّر تنفيذ QNN على جهاز Snapdragon. كما يتضمن بيانات وصفية للنموذج مثل أسماء الفئات وحجم الصورة والمهمة في ONNX metadata_props.
نشر نماذج YOLO المصدَّرة بتنسيق QNN#
تعمل نماذج QNN على أجهزة Qualcomm المدعومة، مما يجعل نشر النماذج على الجهاز أمرًا سهلًا. على جهاز متوافق مثبّت عليه onnxruntime-qnn، شغّل النموذج المصدَّر مباشرةً باستخدام واجهة Ultralytics البرمجية (yolo predict/yolo val، راجع الاستخدام أعلاه) — إذ تحمّل Ultralytics ثنائي سياق HTP عبر موفّر تنفيذ QNN في ONNX Runtime.
بالنسبة إلى مسارات المعالجة المخصصة، يمكنك أيضًا تحميل ثنائي السياق ONNX مباشرةً باستخدام ONNX Runtime. إن onnxruntime-qnn موفّر تنفيذ إضافي، لذا سجّله أثناء وقت التشغيل:
import onnxruntime as ort
import onnxruntime_qnn as qnn_ep
# On the Snapdragon device, register the QNN plugin EP and select its device(s)
ort.register_execution_provider_library("QNNExecutionProvider", qnn_ep.get_library_path())
devices = [d for d in ort.get_ep_devices() if d.ep_name == "QNNExecutionProvider"]
options = ort.SessionOptions()
options.add_provider_for_devices(devices, {"backend_path": qnn_ep.get_qnn_htp_path()})
session = ort.InferenceSession("yolo26n_qnn.onnx", sess_options=options)
input_info = session.get_inputs()[0]
outputs = session.run(None, {input_info.name: input_tensor}) # input_tensor: float32 NHWCنظرًا إلى أن ثنائي سياق QNN مُجمَّع مسبقًا، تُحمَّل الجلسة بسرعة من دون إعادة تجميع الرسم البياني على الجهاز.
متطلبات Linux وYocto BSP#
يجب أن توفّر اللوحة المستهدفة بيئة تشغيل Qualcomm وBSP متوافقين معًا. ويتضمن ذلك لاستدلال HTP موفّر تنفيذ QNN في ONNX Runtime، وlibQnnSystem.so، وlibQnnHtp.so، ومكتبتي stub وskeleton لـ HTP v75 الخاص بـ IQ-8275، ودعم FastRPC في مساحة المستخدم مثل libcdsprpc.so، والبرامج الثابتة لـ DSP، وبرامج التشغيل المناظرة لـ FastRPC/kernel. ويجب أن تكون مكتبة skeleton قابلة للاكتشاف عبر مسار مكتبات DSP في BSP.
تأتي مكوّنات جهة الهدف هذه من BSP المزوّد من الشركة المصنّعة للوحة والمفعّل به QAIRT/QNN؛ وهي ليست مضمنة في النموذج المصدَّر. ويتطلب التنفيذ على GPU بدلًا من ذلك libQnnGpu.so ومكدس برنامج تشغيل Adreno المطابق في مساحة المستخدم. ويُنتج Ultralytics format=qnn ثنائي سياق خاصًا بـ HTP، لذا ينبغي أن يبدأ النشر على GPU أو CPU من تصدير ONNX قياسي بدلًا من الملف المجمَّع مسبقًا *_qnn.onnx.
سير العمل الموصى به#
- درّب نموذجك باستخدام وضع التدريب في Ultralytics
- صدِّر إلى تنسيق QNN باستخدام
model.export(format="qnn", name="iq-8275", imgsz=640)على منصة مدعومة (استخدمimgsz=224للتصنيف) - انشر الملف المصدَّر
*_qnn.onnxعلى جهاز Qualcomm لديك - شغِّل الاستدلال باستخدام ONNX Runtime وموفّر تنفيذ QNN مع استخدام الواجهة الخلفية HTP
التطبيقات الواقعية#
تُعد نماذج YOLO التي تعمل على أجهزة Qualcomm Snapdragon مناسبة تمامًا لمجموعة واسعة من تطبيقات الذكاء الاصطناعي الطرفي:
- الهواتف الذكية: اكتشاف الكائنات وفهم المشاهد في الوقت الفعلي ضمن تطبيقات الكاميرا والصور، مع تسريع بواسطة NPU.
- Windows على Snapdragon: رؤية حاسوبية على الجهاز في حواسيب Copilot+ PC من دون تفريغ المعالجة إلى السحابة.
- السيارات: مراقبة السائق، واكتشاف الركاب، وميزات ADAS على منصات Snapdragon Digital Chassis.
- الواقع الممتد والأجهزة القابلة للارتداء: إدراك منخفض الطاقة وزمن استجابة منخفض لسماعات الواقع المعزز/الواقع الافتراضي والنظارات الذكية.
- إنترنت الأشياء والروبوتات: استدلال بصري فعّال على الكاميرات والطائرات المسيّرة والأنظمة المضمنة المدعومة بـ Snapdragon.
الملخص#
في هذا الدليل، تعلّمت كيفية تصدير نماذج Ultralytics YOLO إلى تنسيق Qualcomm QNN محليًا باستخدام موفّر تنفيذ QNN في ONNX Runtime. يحوّل مسار التصدير النموذج إلى ONNX، ثم يجمّعه في ثنائي سياق QNN على جهازك المضيف — من دون الحاجة إلى حساب Qualcomm أو السحابة — وينتج ملف *_qnn.onnx محسّنًا لأجهزة CPU وAdreno GPU وHexagon NPU من Snapdragon عبر بيئة تشغيل QNN/QAIRT.
يوفّر الجمع بين Ultralytics YOLO ومكدس Qualcomm للذكاء الاصطناعي على الجهاز حلًا فعّالًا لتشغيل أعباء عمل الرؤية الحاسوبية المتقدمة عبر منظومة Snapdragon الواسعة.
بالنسبة إلى أهداف النشر الأخرى على الجهاز والهواتف المحمولة، راجع أدلة التصدير ذات الصلة الخاصة بـ ONNX وCoreML وNCNN وLiteRT وExecuTorch وRKNN وSony IMX500 وTensorRT. ولمقارنة التنسيقات قبل الشحن، استخدم وضع قياس الأداء. وللاطلاع على القائمة الكاملة للتنسيقات والخيارات، انتقل إلى وثائق وضع التصدير وصفحة دليل عمليات التكامل.
الأسئلة الشائعة#
يمكنك تصدير النموذج باستخدام
export(format="qnn", imgsz=640)(imgsz=224للتصنيف) أو باستخدام وسيطات CLI المكافئة. ينشئ التصدير أولًا نموذج ONNX، ثم يجمّعه محليًا في ثنائي سياق QNN باستخدام موفّر تنفيذ QNN في ONNX Runtime. وتُثبَّت حزمةonnxruntime-qnnتلقائيًا عند إجراء التصدير للمرة الأولى.مثالfrom ultralytics import YOLO model = YOLO("yolo26n.pt") model.export(format="qnn", imgsz=640) # use imgsz=224 for classificationلا. يعمل تصدير QNN بالكامل على جهازك المحلي باستخدام حزمة
onnxruntime-qnn، التي تتضمن مكتبات QAIRT. ولا يلزم حساب Qualcomm أو رمز API أو الوصول إلى الشبكة.Qualcomm AI Hub هي خدمة Qualcomm السحابية لتجميع النماذج وتنميطها وقياس أدائها على أجهزة Snapdragon مستضافة، وتتطلب حساب Qualcomm. يستهدف تصدير QNN من Ultralytics بيئة تشغيل QNN/QAIRT نفسها (وهي CPU وAdreno GPU وHexagon NPU من Snapdragon)، لكنه يجمّع ثنائي السياق محليًا باستخدام موفّر تنفيذ QNN في ONNX Runtime — من دون حساب أو رفع أو انتظار في قائمة. وهي أسرع طريقة للانتقال من نموذج
.ptإلى إصدار جاهز لـ Snapdragon مباشرةً ضمن سير عمل تصدير YOLO القياسي.توفر
onnxruntime-qnnبإصدار 2.4.0 والإصدارات الأحدث حزم wheels مُنشأة مسبقًا لـ Windows (x64 وARM64) وLinux (x86-64 وARM64) على Python 3.11 أو أحدث؛ ولا يُعد macOS مضيف QNN مدعومًا. ويُجرى إنشاء ثنائي السياق على مضيف x64 ولا يتطلب جهاز Snapdragon فعليًا.صدِّر باستخدام
model.export(format="qnn", imgsz=640)(imgsz=224للتصنيف)، وانسخ الملف الناتجyolo26n_qnn.onnxإلى جهاز Snapdragon، ثم شغّلyolo predict model=yolo26n_qnn.onnx source=image.jpg(أوyolo val). تحمّل Ultralytics ثنائي السياق عبر موفّر تنفيذ QNN في ONNX Runtime وتشغّله على NPU في Hexagon — راجع نشر نماذج YOLO المصدَّرة بتنسيق QNN.إن QNN (Qualcomm AI Engine Direct، وهو جزء من SDK الخاص بـ QAIRT) هو مكدس الاستدلال الحالي من Qualcomm والبديل الموصى به لـ Snapdragon Neural Processing Engine (SNPE) SDK الأقدم. وينبغي أن تستهدف عمليات النشر الجديدة QNN.
نعم، على جهاز Qualcomm Snapdragon مثبّت عليه
onnxruntime-qnn— إذ يحمّلYOLO("yolo26n_qnn.onnx")ثنائي السياق عبر موفّر تنفيذ QNN ويشغّلpredict/valمثل أي تنسيق آخر. أما على مضيف x86 من دون أجهزة QNN، فلا يمكن تنفيذ النموذج، لأن ثنائي السياق يستهدف NPU في Snapdragon.ينشئ التصدير ملف ONNX مستقلًا بذاتيًا يحتوي على ثنائي السياق (مثل
yolo26n_qnn.onnx)، مع تضمين أسماء الفئات وحجم الصورة والمهمة وبيانات وصفية أخرى للنموذج في ONNXmetadata_props.