Ultralytics YOLO27:
Get Started

تصدير Qualcomm QNN لنماذج Ultralytics YOLO#

يتطلب نشر نماذج الرؤية الحاسوبية على أجهزة Qualcomm Snapdragon تنسيقًا للنموذج مُهيأً لوقت تشغيل Qualcomm AI Engine Direct (QNN). يتيح تصدير نماذج Ultralytics YOLO إلى تنسيق QNN تشغيل الاستدلال المسرّع على الجهاز عبر وحدات CPU وGPU Adreno وNPU Hexagon في Snapdragon، وهي عتاد موجود في مليارات الهواتف المحمولة والحواسيب المحمولة وأنظمة السيارات وأجهزة إنترنت الأشياء. يشرح هذا الدليل كيفية تصدير YOLO إلى Qualcomm QNN ونشره للاستدلال السريع منخفض الطاقة على أجهزة Snapdragon.

شغّل YOLO اليوم على وحدات NPU في Snapdragon باستخدام التطبيقات الرسمية للأجهزة المحمولة

توفر إضافة Ultralytics الرسمية لـ Flutter دعم QNN اختياريًا للاستدلال بالكاميرا في الوقت الفعلي والتنبؤ بصورة واحدة عبر مهام YOLO26 السبع. فعّل وقت تشغيل QNN وأضف تبعية ONNX Runtime كما هو موضح في ملف README الخاص بالإضافة. للنشر على iOS، راجع SDK ‏Ultralytics YOLO لنظام iOS وتكامل CoreML.

أحجام الإدخال الرسمية للأجهزة المحمولة

صدّر نماذج التصنيف إلى imgsz=224. وصدّر نماذج الكشف والتجزئة والدلالات والعمق والوضعية وOBB إلى imgsz=640. ويُستخدم معيار 224/640 هذا في أصول الأجهزة المحمولة الرسمية لـ QNN وLiteRT وCoreML. تتوفر أصول v73 وv81 الجاهزة للتشغيل لجميع المهام النانوية السبع في إصدار yolo-flutter-app v0.6.6.

ما هو Qualcomm QNN؟#

Qualcomm QNN on-device inference

إن Qualcomm AI Engine Direct، المعروف عادةً باسم QNN والموزع ضمن SDK الخاص بـ Qualcomm AI Runtime (QAIRT)، هو حزمة الاستدلال منخفضة المستوى من Qualcomm لمعالجات Snapdragon. يوفر واجهة API موحدة مع مكتبات خاصة بالواجهات الخلفية تستهدف وحدة CPU في Snapdragon ووحدة GPU Adreno ومعالج Hexagon Tensor Processor (HTP)، وهي وحدة معالجة الشبكات العصبية (NPU) المخصصة داخل أنظمة SoC الحديثة من Snapdragon. يمنح 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 الاستفادة من عتاد الذكاء الاصطناعي المخصص في هذه الأجهزة:

  • تسريع NPU ‏Hexagon: يؤدي تشغيل YOLO على Hexagon Tensor Processor إلى معدل نقل أعلى بكثير واستهلاك طاقة أقل من الاستدلال على CPU، ما يجعله مثاليًا لـالاستدلال في الوقت الفعلي والرؤية الحاسوبية المستمرة التشغيل على Snapdragon.
  • على الجهاز ودون اتصال: يعمل استدلال QNN بالكامل على جهاز Snapdragon، فلا توجد اتصالات ذهابًا وإيابًا مع السحابة، ويبقى زمن الاستجابة منخفضًا، ولا تغادر البيانات الجهاز مطلقًا.
  • كفاءة التكميم: يُجري تصدير QNN تكميمًا لـ YOLO إلى أوزان INT8 مع عمليات تنشيط 16 بت، وهو التوازن المفضل بين الدقة والأداء لدى NPU ‏Hexagon، ما يقلص حجم النموذج ويزيد عدد الإطارات في الثانية على الأجهزة العاملة بالبطارية.
  • تنسيق واحد لأجهزة عديدة: يستهدف تصدير Qualcomm QNN واحد وحدات CPU في Snapdragon وGPU Adreno وNPU Hexagon ضمن عائلات 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 (حزمة onnxruntime-qnn القابلة للتثبيت عبر pip، والتي تتضمن مكتبات QAIRT). يحوّل المُصدّر نموذجك إلى ONNX، ثم يُكمّمه باستخدام بيانات المعايرة إلى عمليات تنشيط 16 بت وأوزان INT8 (التوازن الموصى به لـ NPU ‏Hexagon)، ثم يهيّئ جلسة 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 نفسه — وحدات CPU في Snapdragon وGPU Adreno وNPU Hexagon — من دون تسجيل أو حدود للتحميل أو أوقات انتظار في الطوابير، كما يندمج مباشرةً في سير عمل تصدير YOLO القياسي.

ملف *_qnn.onnx المُصدّر مكتفٍ ذاتيًا: فهو يضمّن ثنائي سياق QNN وبيانات ONNX الوصفية، مثل أسماء الفئات وحجم الصورة والمهمة.

الميزات الرئيسية لنماذج QNN#

  • التكميم: يُكمّم النموذج إلى عمليات تنشيط 16 بت وأوزان INT8 باستخدام مسار QNN QDQ في ONNX Runtime ومجموعة بيانات معايرة، وهو التوازن الموصى به بين الدقة والأداء لدى NPU ‏Hexagon. تعرّف على المزيد حول تكميم النماذج.
  • التجميع المحلي بالكامل: يُنشأ ثنائي السياق بالكامل على الجهاز المضيف، من دون حساب Qualcomm أو رمز API أو تحميل إلى السحابة.
  • تسريع كامل على Snapdragon: شغّل الاستدلال على NPU ‏Hexagon (HTP) أو GPU Adreno أو CPU من خلال وقت تشغيل موحد واحد.
  • نطاق واسع من الأجهزة: استهدف مجموعة واسعة من منصات Snapdragon المستخدمة في الهواتف والحواسيب (Windows على Snapdragon) والسيارات والواقع الممتد (XR) والمنتجات المضمنة.
  • ثنائي سياق مُجمّع مسبقًا: يقلل شحن ثنائي السياق من تجميع الرسم البياني على الجهاز، ما يخفض زمن تحميل النموذج على الجهاز المستهدف.
  • مخرجات مكتفية ذاتيًا: يتضمن ملف ONNX المُصدّر ثنائي سياق QNN المُجمّع مسبقًا والبيانات الوصفية لتسهيل النشر.

الأداء المقاس#

هاتف Android#

العتاد: Xiaomi 17 بذاكرة LPDDR5X سعتها 12 GB ونظام Android 16 / API 36. ويضم معالج Snapdragon 8 Elite Gen 5 بدقة تصنيع 3 nm (SM8850) وحدة CPU من Qualcomm Oryon ذات 8 أنوية (نواتان Prime بتردد يصل إلى 4.6 GHz و6 أنوية Performance بتردد يصل إلى 3.62 GHz)، ووحدة GPU من Adreno، ووحدة NPU من Hexagon (HTP v81).

النموذجالمهمةالحجم
(بكسل)
CPU
w8a32 LiteRT
(مللي ثانية)
GPU
w8a32 LiteRT
(مللي ثانية)
NPU
QNN W8A16
(ms)
YOLO26nDetect64052.2
1.8 / 48.1 / 2.4
15.8
2.3 / 8.9 / 4.6
10.7
1.8 / 6.7 / 2.2
YOLO26n-segSegment64073.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دلالي64061.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العمق640124.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التصنيف2244.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الوضعية64057.4
1.8 / 53.8 / 1.8
16.6
2.7 / 10.1 / 3.9
10.9
1.8 / 7.0 / 2.0
YOLO26n-obbOBB64050.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 على Snapdragon#

استخدمت هذه الدورة التاريخية ثنائيات QNN من v73 سابقة للمعيار؛ وكانت مدخلات الدلالات وOBB بدقة 1024px. وأُجريت على حاسوب Lenovo محمول بذاكرة 32 GB ونظام Windows 11. ويضم Snapdragon X Elite (X1E78100) وحدة CPU من Qualcomm Oryon ذات 12 نواة، ووحدة GPU من Adreno، ووحدة NPU من Hexagon (HTP v73)؛ ولم يُسجّل طراز Lenovo الدقيق. تقارن هذه النتائج على Windows بنظام 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)
YOLO26nDetect64091.4
4.3 / 75.2 / 0.1
27.2
4.9 / 19.4 / 0.9
YOLO26n-segSegment640138.8
4.5 / 127.1 / 2.8
34.3
5.0 / 24.0 / 5.1
YOLO26n-semدلالي1024295.8
9.1 / 189.2 / 94.8
133.0
8.8 / 37.4 / 83.9
YOLO26n-clsالتصنيف22415.4
3.0 / 9.8 / 0.0
11.7
2.7 / 5.5 / 0.0
YOLO26n-poseالوضعية640109.6
4.6 / 102.9 / 0.2
28.9
5.3 / 23.3 / 0.6
YOLO26n-obbOBB1024267.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).
  • يعمل NPU من Hexagon أسرع بنحو 2-4 مرات من خط الأساس لوحدة CPU في PyTorch عبر المهام ذات الدقة 640-1024 بكسل (نحو 3.4 مرات في الكشف)، ويتقلص الفارق إلى نحو 1.3 مرة في المصنف ذي الدقة 224 بكسل، حيث تطغى كلفة المعالجة المسبقة الثابتة على عبء العمل الصغير.

المهام المدعومة#

يدعم التصدير إلى Qualcomm QNN مهام Ultralytics السبع جميعها. ولا يتاح التقسيم الدلالي وتقدير العمق إلا باستخدام YOLO26، وهي العائلة الوحيدة التي تتضمن هذين الرأسين.

المهمةYOLOv8YOLO11YOLO26
كشف✅✅✅
تجزئة✅✅✅
دلالي❌❌✅
العمق❌❌✅
تصنيف✅✅✅
الوضعية✅✅✅
OBB✅✅✅

التصدير إلى QNN: تحويل نموذج YOLO الخاص بك#

صدّر نموذج Ultralytics YOLO إلى تنسيق QNN لنشره على أجهزة Qualcomm. تُهيأ الوحدة الثنائية للسياق النهائية لبنية معالج Hexagon المستهدف (HTP) أو لنظام على شريحة (SoC) مدعوم، ويمكنك تحديد ذلك باستخدام الوسيطة name — وهي الوسيطة نفسها المستخدمة لاستهداف شريحة في التصدير إلى RKNN.

أهداف HTP المدعومة#

مرّر البنية المستهدفة أو نظام الشريحة (SoC) عبر name (مثل name="73" أو name="iq-8275"). يتحدد الدعم بحسب هدف HTP، لذا فإن صفوف Snapdragon أدناه تمثل منصات نموذجية وليست قائمة شاملة بكل أنظمة SoC. أما أجهزة Dragonwing فتُدرج صراحةً.

الحالةnameHexagon HTPمثال على جهاز أو منصة
✅ مدعوم68v68Snapdragon 888
✅ مدعوم69v69Snapdragon 8 Gen 1 / 8+ Gen 1
✅ مدعوم73v73Snapdragon 8 Gen 2، X Elite (افتراضي)
✅ مدعوم75v75Snapdragon 8 Gen 3
✅ مدعوم79v79Snapdragon 8 Elite
✅ مدعوم81v81Snapdragon 8 Elite Gen 5
✅ مدعومiq-8275 أو qcs8275v75Dragonwing IQ-8275 / QCS8275 (طراز QNN SoC 82)
❌ غير مدعوم—v66Dragonwing IQ-615 / QCS615

لا يمكن استخدام Dragonwing IQ-615 لتصدير وحدة سياق QNN من Ultralytics، لأن ONNX Runtime لا يتيح DSP v66 بوصفه هدف HTP غير متصل. ومع ذلك، يمكن دمج تصدير ONNX عادي بشكل منفصل باستخدام موفر تنفيذ لوحدة CPU أو GPU يدعمه BSP الخاص باللوحة.

التصدير إلى Dragonwing IQ-8275
from ultralytics import YOLO

model = YOLO("best.pt")
model.export(format="qnn", name="iq-8275", imgsz=640)
دعم المنصات

يستخدم تصدير QNN حزمة onnxruntime-qnn. بدءًا من الإصدار 2.4.0، توفر الحزمة ملفات wheel جاهزة لأنظمة Windows (x64 وARM64) وLinux (x86-64 وARM64) على Python 3.11 أو أحدث؛ أما macOS فليس مضيفًا مدعومًا لـ 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

# ⁨تحميل نموذج YOLO26⁩
model = YOLO("yolo26n.pt")

# ⁨التصدير إلى تنسيق Qualcomm QNN (INT8، يُفرض تلقائيًا) لهدف HTP الافتراضي v73⁩
model.export(format="qnn", name="73", imgsz=640)  # ⁨استخدم imgsz=224 للتصنيف⁩
التنبؤ
from ultralytics import YOLO

# ⁨تحميل نموذج QNN المُصدّر (على جهاز Snapdragon يتضمن onnxruntime-qnn)⁩
model = YOLO("yolo26n_qnn.onnx")

# ⁨تنفيذ الاستدلال⁩
results = model("https://ultralytics.com/images/bus.jpg")
تحقّق
from ultralytics import YOLO

# ⁨تحميل نموذج QNN المُصدّر (على جهاز Snapdragon يتضمن onnxruntime-qnn)⁩
model = YOLO("yolo26n_qnn.onnx")

# ⁨# التحقق من الدقة على مجموعة بيانات COCO8⁩
metrics = model.val(data="coco8.yaml")

وسيطات التصدير#

المعاملالنوعالافتراضيالوصف
formatstr'qnn'التنسيق المستهدف للنموذج المُصدّر، الذي يحدد مدى توافقه مع بيئة تشغيل Qualcomm QNN.
imgszint أو tuple640حجم الصورة المطلوب لإدخال النموذج. يمكن أن يكون عددًا صحيحًا للصور المربعة، أو مجموعة قيم (height, width).
batchint1يحدد حجم الدفعة للنموذج المُصدّر، والذي يُضمّن في الملف الثنائي لسياق QNN المُنشأ.
namestr'73'بنية Hexagon HTP المستهدفة (68 أو 69 أو 73 أو 75 أو 79 أو 81) أو نظام SoC مدعوم (iq-8275 أو qcs8275). تُهيأ الوحدة الثنائية للسياق النهائية لهذا الهدف.
quantizeint أو str'w8a16'/تلقائيدقة التكميم. يُكمَّم تصدير QNN HTP إلى أوزان INT8 مع تنشيطات 16 بت ('w8a16')، ويُفعّل تلقائيًا إذا لم يُحدّد. ويحل محل علامتي half/int8 المهجورتين.
simplifyboolTrueيبسّط رسم ONNX الوسيط باستخدام onnxslim.
opsetintNoneيحدد إصدار opset الخاص بـ ONNX لرسم ONNX الوسيط. وإذا لم يُحدَّد، فسيُستخدم أحدث إصدار مدعوم.
datastrNoneملف YAML لمجموعة البيانات المستخدم لمعايرة INT8؛ أما التصنيف فيتطلب دليلًا لمجموعة البيانات أو اسم مجموعة بيانات مضمّنة. إذا لم تحدده، تختار Ultralytics مجموعة بيانات المعايرة الافتراضية لمهمة النموذج.
fractionfloat أو int أو list1.0مجموعة فرعية للمعايرة محددة كنسبة أو عدد صور أو نسب/أعداد [train, val, test]. تترك القوائم المكوّنة من عنصرين test كاملة، بينما تتجاوزها 0.
devicestrNoneيحدد الجهاز المستخدم لخطوة تصدير ONNX: GPU (device=0) أو CPU (device=cpu).
الدقة

يكمّم تصدير QNN النموذج إلى تنشيطات 16 بت وأوزان INT8 — وهو التوازن الموصى به بين الدقة والأداء لوحدة NPU من Hexagon — باستخدام مسار تكميم 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

# ⁨على جهاز Snapdragon، سجّل موفر تنفيذ QNN الإضافي وحدد أجهزته⁩
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/النواة المقابلة. ويجب أن تكون مكتبة skeleton قابلة للاكتشاف عبر مسار مكتبات DSP في BSP.

تأتي هذه المكونات على جانب الجهاز المستهدف من BSP المزوّد من الشركة المصنّعة للوحة، والمُمكّن بـ QAIRT/QNN؛ وهي غير مضمنة في النموذج المُصدّر. أما تنفيذ GPU فيتطلب libQnnGpu.so ومجموعة برامج تشغيل مساحة المستخدم المطابقة لـ Adreno. إن ناتج Ultralytics format=qnn هو وحدة ثنائية لسياق مخصصة لـ HTP، لذا ينبغي أن يبدأ النشر على GPU أو CPU من تصدير ONNX عادي، لا من الملف المُجمّع مسبقًا *_qnn.onnx.

  1. درّب نموذجك باستخدام وضع التدريب من Ultralytics
  2. صدّر إلى تنسيق QNN باستخدام model.export(format="qnn", name="iq-8275", imgsz=640) على منصة مدعومة (استخدم imgsz=224 للتصنيف)
  3. انشر الملف المُصدّر *_qnn.onnx على جهاز Qualcomm لديك
  4. شغّل الاستدلال باستخدام ONNX Runtime وموفر تنفيذ QNN مع الواجهة الخلفية HTP

تطبيقات واقعية#

تلائم نماذج YOLO التي تعمل على أجهزة Qualcomm Snapdragon مجموعة واسعة من تطبيقات الذكاء الاصطناعي الطرفي:

  • الهواتف الذكية: كشف الأجسام وفهم المشاهد في الوقت الفعلي ضمن تطبيقات الكاميرا والصور، مع تسريع NPU.
  • Windows على Snapdragon: رؤية حاسوبية على الجهاز في حواسيب Copilot+ PC دون نقل المعالجة إلى السحابة.
  • السيارات: مراقبة السائق، وكشف الركاب، وميزات ADAS على منصات Snapdragon Digital Chassis.
  • XR والأجهزة القابلة للارتداء: إدراك منخفض الطاقة وزمن الاستجابة لسماعات AR/VR والنظارات الذكية.
  • إنترنت الأشياء والروبوتات: استدلال بصري فعّال على الكاميرات والطائرات المسيّرة والأنظمة المضمنة المدعومة بـ Snapdragon.

الملخص#

في هذا الدليل، تعلّمت كيفية تصدير نماذج Ultralytics YOLO إلى تنسيق Qualcomm QNN محليًا باستخدام موفر تنفيذ QNN في ONNX Runtime. يحوّل مسار التصدير النموذج إلى ONNX، ثم يجمّعه في وحدة ثنائية لسياق QNN على جهازك المضيف — دون الحاجة إلى حساب Qualcomm أو السحابة — لينتج ملف *_qnn.onnx مُحسّنًا لوحدات CPU وGPU من Adreno وNPU من Hexagon في 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)  # ⁨استخدم imgsz=224 للتصنيف⁩
  • لا. يُجرى تصدير QNN بالكامل على جهازك المحلي باستخدام حزمة onnxruntime-qnn التي تتضمن مكتبات QAIRT. لا يلزم حساب Qualcomm أو رمز API أو الاتصال بالشبكة.

  • Qualcomm AI Hub هي خدمة Qualcomm السحابية لتجميع النماذج وتحليل أدائها وقياسه على أجهزة Snapdragon مستضافة، وتتطلب حساب Qualcomm. يستهدف تصدير QNN من Ultralytics بيئة تشغيل QNN/QAIRT نفسها (وحدات CPU في Snapdragon وGPU من Adreno وNPU من Hexagon)، لكنه يجمّع الوحدة الثنائية للسياق محليًا باستخدام موفر تنفيذ QNN في ONNX Runtime — بلا حساب أو رفع ملفات أو انتظار في قائمة انتظار. إنها أسرع طريقة للانتقال من نموذج .pt إلى إصدار جاهز لـ Snapdragon مباشرةً ضمن سير عمل تصدير YOLO المعتاد.

  • توفر onnxruntime-qnn، الإصدار 2.4.0 وما بعده، ملفات wheel جاهزة لأنظمة 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 للذكاء الاصطناعي المباشر، وهو جزء من SDK الخاص بـ QAIRT) هو مجموعة تقنيات الاستدلال الحالية من Qualcomm والبديل الموصى به لمجموعة SDK الأقدم، Snapdragon Neural Processing Engine (SNPE). ينبغي أن تستهدف عمليات النشر الجديدة QNN.

  • نعم، على جهاز Qualcomm Snapdragon مثبت عليه onnxruntime-qnn — إذ يحمّل YOLO("yolo26n_qnn.onnx") الوحدة الثنائية للسياق عبر موفر تنفيذ QNN ويشغّل predict/val كما يفعل مع أي تنسيق آخر. أما على مضيف x86 من دون أجهزة QNN، فلا يمكن تشغيل النموذج لأن الوحدة الثنائية للسياق تستهدف وحدة NPU في Snapdragon.

  • ينشئ التصدير ملف ONNX مستقلًا بذاته يحتوي على الوحدة الثنائية للسياق (مثل yolo26n_qnn.onnx)، ويتضمن أسماء الفئات وحجم الصورة والمهمة وغيرها من البيانات الوصفية للنموذج في ONNX metadata_props.

التعليقات