الأخبار التكنولوجية والاستعراضات والنصائح!

مقارنة أداء استدلال وحدة المعالجة المركزية Yolov3 – Onnx و OpenCV و Darknet – نحو الذكاء الاصطناعي

ستساعدك المقالة التالية: مقارنة أداء استدلال وحدة المعالجة المركزية Yolov3 – Onnx و OpenCV و Darknet – نحو الذكاء الاصطناعي

الرؤية الحاسوبية

مقارنة أداء استدلال وحدة المعالجة المركزية Yolov3 – Onnx و OpenCV و Darknet

اختيار الحق إطار عمل الاستدلال لتطبيقات اكتشاف الكائنات في الوقت الفعلي أصبحت صعبة بشكل كبير ، خاصة عندما يجب تشغيل النماذج الأجهزة منخفضة الطاقة. في هذه المقالة سوف تفعل فهم كيفية اختيار أفضل كاشف للاستدلال لاحتياجاتك ، واكتشاف أداء ضخم يمكن أن يمنحك الحصول عليها.

عادة ، نميل إلى التركيز على هياكل النماذج خفيفة الوزن عندما نهدف إلى نشر النماذج على وحدة المعالجة المركزية أو الأجهزة المحمولة ، مع إهمال البحث عن محرك استدلال سريع.

أثناء بحثي حول الاستدلال السريع على أجهزة وحدة المعالجة المركزية ، اختبرت العديد من الأطر التي توفر واجهة برمجة تطبيقات Python مستقرة. اليوم سوف تركز على Onnxruntimeو OpenCV DNN و Darknet إطار أعمال، وقياسها من حيث الأداء (وقت التشغيل) والدقة.

سنستخدم نموذجين شائعين لاكتشاف الأشياء لقياس الأداء:

حجم الصورة = 480 * 480
الطبقات = 98
BFLOPS = 87.892 حجم الصورة = 1024 * 1024
الطبقات = 98
BFLOPS = 46.448

تم تدريب كلا النموذجين باستخدام Darknet Framework الخاص بـ AlexeyAB على البيانات المخصصة.

الآن دعنا نتعرف على الاستدلال الجاري باستخدام الكواشف التي نريد اختبارها.

كاشف الشبكة المظلمة

Darknet هو الإطار الرسمي لتدريب نماذج اكتشاف الكائنات في YOLO (أنت تنظر مرة واحدة فقط).

علاوة على ذلك ، فإنه يوفر القدرة على تشغيل الاستدلال على النماذج بتنسيق ملف *. weight ، وهو نفس تنسيق مخرجات التدريب.

هناك طريقتان للاستدلال:

  • عدد مختلف من الصور:

اختبار كاشف شبكة الظلام cfg / coco.data cfg / yolov3.cfg yolov3.weights -thresh 0.25 darknet detector demo cfg / coco.data cfg / yolov3.cfg yolov3.weights dog.png

كاشف OpenCV DNN

Opencv-DNN هو امتداد لمكتبة opencv المعروفة والتي تستخدم بشكل شائع في مجال رؤية الكمبيوتر. تدعي Darknet أن opencv-dnn هي ” أسرع تطبيق استنتاج لـ YOLOv4 / v3 على أجهزة وحدة المعالجة المركزية“بسبب التنفيذ الفعال لـ C & C ++.

تحميل أوزان darknet إلى opencv-dnn هو أمر مستقيم للأمام بفضل واجهة برمجة تطبيقات Python المريحة.

هذا مقتطف رمز من E2E Inference:

كاشف Onnxruntime

تحتفظ Microsoft Onnxruntime وتزعم أنها تحقق استدلالًا أسرع بشكل كبير بفضل التحسينات المضمنة وملف تنسيق أوزان ONNX الفريد.

كما ترى في الصورة التالية ، فهو يدعم العديد من النكهات والتقنيات.

في مقارنتنا سوف نستخدم نكهة Pythonx64CPU.

يحدد تنسيق ONNX مجموعة مشتركة من المشغلين – اللبنات الأساسية لنماذج التعلم الآلي والتعلم العميق – وتنسيق ملف شائع لتمكين مطوري الذكاء الاصطناعي من استخدام النماذج مع مجموعة متنوعة من الأطر والأدوات وأوقات التشغيل والمجمعين.

تحويل أوزان Darknet> أوزان Onnx

من أجل تشغيل الاستدلال باستخدام Onnxruntime ، سيتعين علينا تحويل تنسيق * .weights إلى * .onnx fomrat.

سنستخدم مستودعًا تم إنشاؤه خصيصًا لتحويل تنسيق darknet * .weights إلى * .pt (PyTorch) و * .onnx (تنسيق ONNX).

matankley / Yolov3_Darknet_PyTorch_Onnx_Converter

  • استنساخ الريبو وتثبيت المتطلبات.
  • قم بتشغيل convert.py باستخدام وسيطات cfg & weights & img_size.

محول python.py yolov3.cfg yolov3.weights 1024 1024

  • سيتم إنشاء ملف yolov3.onnx في دليل yolov3.weights.

*** ضع في اعتبارك أن هناك انخفاضًا طفيفًا بنسبة 0.1٪ في الدقة عند الاستنتاج باستخدام تنسيق ONNX بسبب عملية التحويل. يحاكي المحول وظائف darknet في PyTorch ولكنه ليس بلا عيب ***

*** لا تتردد في إنشاء مشكلات / العلاقات العامة من أجل دعم التحويل إلى بنى داكنة أخرى غير yolov3 ***

بعد أن نجحنا في تحويل نموذجنا إلى تنسيق ONNX ، يمكننا تشغيل الاستدلال باستخدام Onnxruntime.

يمكنك العثور أدناه على مقتطف الشفرة لاستدلال E2E:

مقارنة الأداء

تهانينا ، لقد مررنا بجميع الجوانب الفنية ويجب أن يكون لديك الآن معرفة كافية للاستدلال على كل واحد من أجهزة الكشف.

الآن دعنا نتناول هدفنا الرئيسي – مقارنة الأداء.

تم قياس الأداء بشكل منفصل لكل من الطرازات المذكورة أعلاه (Yolov3 ، Tiny-Yolov3) على وحدة المعالجة المركزية للكمبيوتر الشخصي – معالج Intel i7 9th Gen.

بالنسبة إلى opencv و onnxruntime ، نقوم فقط بقياس وقت تنفيذ ملفات التكاثر إلى الأمام من أجل عزله عن العمليات السابقة / اللاحقة.

تم تحديد ملامح هذه الخطوط:

  1. أوبينكف

Layers_result = self.net.forward (_output_layers)

2. Onnxruntime

Layers_result = session.run ([output_name_1, output_name_2]، {input_name: image_blob}) layer_result = np.concatenate ([layers_result[1]، الطبقات_النتيجة[0]]، المحور = 1)

3. Darknet

اختبار كاشف الشبكة المظلمة cfg / coco.data cfg / yolov3.cfg yolov3.weights -thresh 0.25

الحكم

يولوف 3

تم اختبار Yolov3 على 400 صورة فريدة.

  1. كاشف ONNX هو الأسرع في استنتاج نموذج Yolov3 الخاص بنا. لأكون دقيقا، 43٪ أسرع من opencv-dnn، والذي يعتبر من أسرع أجهزة الكشف المتوفرة.

2. متوسط ​​الوقت للصورة:

صغيرة يولوف 3

تم اختبار Tiny-Yolov3 على 600 صورة فريدة.

  1. هنا أيضا، كاشف ONNX متفوق، على نموذج Tiny-Yolov3 الخاص بنا ،33٪ أسرع من opencv-dnn.

2. متوسط ​​الوقت للصورة:

الاستنتاجات

  1. لقد رأينا أن onnxruntime يدير الاستدلال أسرع بكثير من opencv-dnn.
  2. لقد حققنا تشغيل Yolov3 في وقت أقل من Tiny-Yolov3 ، على الرغم من أن Yolvo3 أكبر بكثير!
  3. لدينا الأدوات اللازمة لتحويل نموذج تم تدريبه في darknet إلى تنسيق * .onnx.

هذا كل شيء لهذه المقالة. أتمنى أن تجدها مفيدة. إذا كانت الإجابة بنعم ، يرجى التصفيق. لأية أسئلة واقتراحات ، لا تتردد في التواصل معي على Linkedin.

شكرا للقراءة!

~ ماتان


تم نشر Yolov3 CPU Inference Performance Comparison – Onnx و OpenCV و Darknet في الأصل في Towards AI on Medium ، حيث يواصل الأشخاص المحادثة من خلال تسليط الضوء على هذه القصة والرد عليها.

تم النشر عبر نحو الذكاء الاصطناعي