جدول المحتويات:

اكتشاف الأجسام باستخدام لوحات Sipeed MaiX (Kendryte K210): 6 خطوات
اكتشاف الأجسام باستخدام لوحات Sipeed MaiX (Kendryte K210): 6 خطوات

فيديو: اكتشاف الأجسام باستخدام لوحات Sipeed MaiX (Kendryte K210): 6 خطوات

فيديو: اكتشاف الأجسام باستخدام لوحات Sipeed MaiX (Kendryte K210): 6 خطوات
فيديو: Lesson 103 Car Speed Detector using Python OpenCV قياس سرعة السيارات من كاميرات المراقبة فى بايثون 2024, شهر نوفمبر
Anonim
Image
Image

استمرارًا لمقالتي السابقة حول التعرف على الصور باستخدام لوحات Sipeed MaiX ، قررت أن أكتب برنامجًا تعليميًا آخر يركز على اكتشاف الكائنات. ظهرت مؤخرًا بعض الأجهزة المثيرة للاهتمام مع شريحة Kendryte K210 ، بما في ذلك Seeed AI Hat for Edge Computing و M5 StickV من M5 و HuskyLens من DFRobot (على الرغم من أن هذا الجهاز يحتوي على برامج ثابتة خاصة به وأكثر استهدافًا للمبتدئين تمامًا). نظرًا لسعره الرخيص ، ناشد Kendryte K210 الأشخاص الراغبين في إضافة رؤية الكمبيوتر إلى مشاريعهم. ولكن كالمعتاد مع منتجات الأجهزة الصينية ، ينقص الدعم الفني وهذا شيء أحاول تحسينه بمقالاتي ومقاطع الفيديو الخاصة بي. لكن ضع في اعتبارك أنني لست عضوًا في فريق مطوري Kendryte أو Sipeed ولا يمكنني الإجابة على جميع الأسئلة المتعلقة بمنتجهم.

مع أخذ ذلك في الاعتبار ، لنبدأ! سنبدأ بنظرة عامة قصيرة (ومبسطة) حول كيفية عمل نماذج CNN للتعرف على الكائنات.

تحديث مايو 2020: عندما رأيت كيف أن مقالتي ومقاطع الفيديو الخاصة بي حول اكتشاف الكائنات باستخدام لوحات K210 لا تزال تحظى بشعبية كبيرة ومن بين أفضل النتائج على YouTube و Google ، قررت تحديث المقالة لتضمين معلومات حول aXeleRate ، إطار العمل المستند إلى Keras للذكاء الاصطناعي على أنا أطور الحافة. يعتمد aXeleRate ، بشكل أساسي ، على مجموعة البرامج النصية التي استخدمتها لتدريب نماذج التعرف على الصور / اكتشاف الكائنات - مدمجة في إطار عمل واحد ومُحسَّن لسير العمل على Google Colab. إنه أكثر ملاءمة للاستخدام وأكثر تحديثًا.

بالنسبة للنسخة القديمة من المقال ، لا يزال بإمكانك رؤيتها على موقع steemit.com.

الخطوة 1: شرح معمارية نموذج الكشف عن الكائنات

شرح معمارية نموذج الكشف عن الكائنات
شرح معمارية نموذج الكشف عن الكائنات
شرح معمارية نموذج الكشف عن الكائنات
شرح معمارية نموذج الكشف عن الكائنات

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

هنا عندما تصبح نماذج اكتشاف الكائنات في متناول اليد. في هذه المقالة سنستخدم هندسة YOLO (تنظر مرة واحدة فقط) ونركز الشرح على الميكانيكا الداخلية لهذه البنية المعينة.

نحاول تحديد الأشياء الموجودة في الصورة وما هي إحداثياتها. نظرًا لأن التعلم الآلي ليس سحرًا وليس "آلة تفكير" ، ولكنه مجرد خوارزمية تستخدم الإحصائيات لتحسين الوظيفة (الشبكة العصبية) لحل مشكلة معينة بشكل أفضل. نحن بحاجة إلى إعادة صياغة هذه المشكلة لجعلها أكثر "قابلة للتحسين". تتمثل الطريقة الساذجة هنا في جعل الخوارزمية تقلل الخسارة (الفرق) بين تنبؤها والإحداثيات الصحيحة للكائن. سيعمل هذا بشكل جيد ، طالما لدينا كائن واحد فقط في الصورة. بالنسبة للكائنات المتعددة ، نتبع نهجًا مختلفًا - نضيف الشبكة ونجعل شبكتنا تتنبأ بوجود (أو غياب) الكائن (الكائنات) في كل شبكة. تبدو رائعة ، لكنها لا تزال تترك الكثير من عدم اليقين للشبكة - كيف تُخرج التنبؤ وماذا تفعل عندما يكون هناك كائنات متعددة مع مركز داخل خلية شبكة واحدة؟ نحتاج إلى إضافة قيد آخر - ما يسمى المراسي. المراسي هي أحجام أولية (عرض ، ارتفاع) سيتم تغيير حجم بعضها (الأقرب إلى حجم الكائن) إلى حجم الكائن - باستخدام بعض المخرجات من الشبكة العصبية (خريطة المعالم النهائية).

إذن ، إليك عرض عالي المستوى لما يحدث عندما تقوم الشبكة العصبية لمعمارية YOLO باكتشاف كائن على الصورة. وفقًا للميزات التي تم اكتشافها بواسطة شبكة مستخرج الميزات ، يتم عمل مجموعة من التنبؤات لكل خلية شبكة ، والتي تتضمن إزاحة المراسي واحتمالية الارتساء وفئة الارتساء. ثم نتجاهل التوقعات ذات الاحتمالية المنخفضة وفويلا!

الخطوة الثانية: تجهيز البيئة

جهز البيئة
جهز البيئة

يعتمد aXeleRate على مشروع رائع بواسطة penny4860 ، كاشف رقمي SVHN yolo-v2. يأخذ aXeleRate هذا التنفيذ لكاشف YOLO في Keras إلى مستوى أعلى ويستخدم نظام التكوين المريح الخاص به لأداء التدريب وتحويل شبكات التعرف على الصور / اكتشاف الكائنات وتجزئة الصور مع خلفيات مختلفة.

هناك طريقتان لاستخدام aXeleRate: التشغيل محليًا على جهاز Ubuntu أو في Google Colab. للتشغيل في Google Colab ، ألق نظرة على هذا المثال:

دفتر ملاحظات كولاب باسكوال- VOC

أصبح تدريب نموذجك محليًا وتصديره لاستخدامه مع تسريع الأجهزة أسهل بكثير الآن ، أوصي بشدة بتثبيت جميع التبعيات الضرورية في بيئة Anaconda للحفاظ على مشروعك منفصلاً عن الآخرين وتجنب التعارضات.

قم بتنزيل المثبت هنا.

بعد اكتمال التثبيت ، قم بإنشاء بيئة جديدة:

كوندا خلق -n yolo python = 3.7

دعونا ننشط البيئة الجديدة

كوندا تفعيل yolo

ستظهر بادئة قبل bash shell مع اسم البيئة ، للإشارة إلى أنك تعمل الآن في تلك البيئة.

قم بتثبيت aXeleRate على جهازك المحلي باستخدام

نقطة تثبيت git +

ثم قم بتشغيل هذا لتنزيل البرامج النصية التي ستحتاجها للتدريب والاستدلال:

استنساخ بوابة

يمكنك إجراء اختبارات سريعة باستخدام Testing_training.py في مجلد aXeleRate. سيجري التدريب والاستدلال لكل نوع نموذج ، وحفظ وتحويل النماذج المدربة. نظرًا لأنه تدريب لمدة 5 فترات فقط ومجموعة البيانات صغيرة جدًا ، فلن تتمكن من الحصول على نماذج مفيدة ، ولكن هذا البرنامج النصي مخصص فقط للتحقق من عدم وجود أخطاء.

الخطوة 3: تدريب نموذج اكتشاف كائن باستخدام Keras

تدريب نموذج اكتشاف كائن باستخدام Keras
تدريب نموذج اكتشاف كائن باستخدام Keras

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

لنبدأ بمثال لعبة وندرب كاشف الراكون. يوجد ملف تهيئة داخل مجلد / config ، raccoon_detector.json. اخترنا MobileNet7_5 كبنية معمارية (حيث 7_5 هي معلمة ألفا لتطبيق Mobilenet الأصلي ، وتتحكم في عرض الشبكة) و 224 × 224 كحجم إدخال. دعنا نلقي نظرة على أهم المعلمات في التكوين:

النوع هو الواجهة الأمامية للنموذج - المصنف أو الكاشف أو SegnetArchitecture هي الواجهة الخلفية للنموذج (مستخرج الميزة)

- Full Yolo - Tiny Yolo - MobileNet1_0 - MobileNet7_5 - MobileNet5_0 - MobileNet2_5 - SqueezeNet - VGG16 - ResNet50

لمزيد من المعلومات حول المراسي ، يرجى قراءة هنا

الملصقات هي تسميات موجودة في مجموعة البيانات الخاصة بك. هام: من فضلك ، ضع قائمة بجميع التسميات الموجودة في مجموعة البيانات.

يحدد Object_scale مقدار معاقبة التنبؤ الخاطئ للثقة في تنبؤات الكائنات

تحدد no_object_scale مدى معاقبة التنبؤ الخاطئ بالثقة في المتنبئين غير الكائنين

يحدد مقياس التنسيق مقدار معاقبة تنبؤات الموضع والحجم الخاطئة (x ، y ، w ، h)

يحدد class_scale مقدار معاقبة التنبؤ الخاطئ للفئة

التضخيم - تكبير الصورة وتغيير حجمها وتحويلها وتشويشها من أجل منع فرط التخصيص والحصول على تنوع أكبر في مجموعة البيانات.

train_times ، validation_times - عدد مرات تكرار مجموعة البيانات. مفيد إذا كان لديك النبأ

ممكن

first_trainable_layer - يسمح لك بتجميد طبقات معينة إذا كنت تستخدم شبكة ميزات مدربة مسبقًا

نحتاج الآن إلى تنزيل مجموعة البيانات ، التي قمت بمشاركتها على Google Drive (مجموعة البيانات الأصلية) ، وهي مجموعة بيانات للكشف عن حيوانات الراكون ، تحتوي على 150 صورة مشروحة.

تأكد من تغيير الأسطر في ملف التكوين (train_image_folder ، train_annot_folder) وفقًا لذلك ثم ابدأ التدريب بالأمر التالي:

python axelerate / train.py -c configs / raccoon_detector.json

يقرأ train.py التكوين من ملف.json ويدرب النموذج باستخدام برنامج نصي axelerate / networks / yolo / yolo_frontend.py. yolo / backend / loss.py هو المكان الذي يتم فيه تنفيذ وظيفة الخسارة المخصصة و yolo / backend / network.py حيث يتم إنشاء النموذج (يتم وضع طبقات الإدخال ومستخرج الميزة والكشف معًا). axelerate / networks / common_utils / fit.py هو البرنامج النصي الذي ينفذ عملية التدريب ويحتوي على محولات / شبكات / common_utils / feature.py مستخلصات الميزات. إذا كنت تنوي استخدام نموذج مدرب مع شريحة K210 والبرامج الثابتة Micropython ، فبسبب قيود الذاكرة ، يمكنك الاختيار بين MobileNet (2_5 و 5_0 و 7_5) و TinyYolo ، لكنني وجدت أن MobileNet يوفر دقة كشف أفضل.

نظرًا لأنه مثال على لعبة ويحتوي فقط على 150 صورة للراكون ، يجب أن تكون عملية التدريب سريعة جدًا ، حتى بدون وحدة معالجة الرسومات ، على الرغم من أن الدقة ستكون بعيدة عن أن تكون ممتازة. بالنسبة للمشروع المتعلق بالعمل ، قمت بتدريب كاشف إشارات المرور وكاشف الأرقام ، وتضمنت كلتا مجموعتي البيانات أكثر من بضعة آلاف من الأمثلة التدريبية.

الخطوة 4: قم بتحويله إلى تنسيق kmodel

قم بتحويله إلى تنسيق kmodel
قم بتحويله إلى تنسيق kmodel

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

إذا لم تتحسن الخريطة ، متوسط الدقة (مقياس التحقق الخاص بنا) لمدة 20 حقبة ، فسيتوقف التدريب قبل الأوان. في كل مرة تتحسن فيها الخريطة ، يتم حفظ النموذج في مجلد المشروع. بعد انتهاء التدريب ، يقوم aXeleRate تلقائيًا بتحويل أفضل نموذج إلى تنسيقات محددة - يمكنك اختيار "tflite" أو "k210" أو "edgetpu" اعتبارًا من الآن.

الآن إلى الخطوة الأخيرة ، تشغيل نموذجنا فعليًا على أجهزة Sipeed!

الخطوة 5: تشغيل البرنامج الثابت Micropython

قم بتشغيل البرنامج الثابت Micropython
قم بتشغيل البرنامج الثابت Micropython

من الممكن تشغيل الاستدلال باستخدام نموذج اكتشاف الكائن الخاص بنا برمز C ، ولكن من أجل الراحة ، سنستخدم البرامج الثابتة Micropython و MaixPy IDE بدلاً من ذلك.

قم بتنزيل MaixPy IDE من هنا والبرامج الثابتة micropython من هنا. يمكنك استخدام برنامج python script kflash.py لنسخ البرنامج الثابت أو تنزيل أداة فلاش GUI منفصلة هنا.

انسخ model.kmodel إلى جذر بطاقة SD وأدخل بطاقة SD في Sipeed Maix Bit (أو أي جهاز K210 آخر). بدلاً من ذلك ، يمكنك نسخ ملفات.kmodel إلى ذاكرة فلاش الجهاز. يقرأ البرنامج النصي المثال الخاص بي.kmodel من ذاكرة فلاش. إذا كنت تستخدم بطاقة SD ، فيرجى تغيير هذا الخط

المهمة = kpu.load (0x200000)

إلى

المهمة = kpu.load ("/ sd / model.kmodel")

افتح MaixPy IDE واضغط على زر الاتصال. افتح البرنامج النصي raccoon_detector.py من مجلد example_scripts / k210 / detector واضغط على زر ابدأ. يجب أن تشاهد بثًا مباشرًا من الكاميرا مع وجود مربعات تحيط به … حسنًا ، حيوانات الراكون. يمكنك زيادة دقة النموذج من خلال تقديم المزيد من الأمثلة التدريبية ، ولكن ضع في اعتبارك أنه نموذج خرافي صغير (1.9 م) وسيواجه مشاكل في اكتشاف الأجسام الصغيرة (بسبب الدقة المنخفضة).

أحد الأسئلة التي تلقيتها في التعليقات على مقالتي السابقة حول التعرف على الصور هو كيفية إرسال نتائج الكشف عبر UART / I2C إلى جهاز آخر متصل بلوحات تطوير Sipeed. في مستودع github الخاص بي ، ستتمكن من العثور على نموذج نصي آخر ، raccoon_detector_uart.py ، والذي (خمنته) يكتشف حيوانات الراكون ويرسل إحداثيات المربعات المحيطة فوق UART. ضع في اعتبارك أن المسامير المستخدمة لاتصالات UART تختلف عن اللوحات المختلفة ، وهذا شيء تحتاج إلى التحقق منه بنفسك في الوثائق.

الخطوة 6: الملخص

Kendryte K210 عبارة عن شريحة صلبة لرؤية الكمبيوتر ومرنة ، وإن كانت ذات ذاكرة محدودة. حتى الآن ، قمنا في دروسي بتغطية استخدامه للتعرف على الكائنات المخصصة ، واكتشاف الكائنات المخصصة وتشغيل بعض مهام الرؤية الحاسوبية القائمة على OpenMV. أعرف حقيقة أنه مناسب أيضًا للتعرف على الوجوه ومع بعض الترقيع ، يجب أن يكون من الممكن القيام باكتشاف الوضع وتجزئة الصورة (يمكنك استخدام aXeleRate لتدريب نموذج التجزئة الدلالي ، لكنني لم أقم بتنفيذ الاستدلال باستخدام K210). لا تتردد في إلقاء نظرة على مشكلات مستودع aXeleRate وإجراء علاقات عامة إذا كنت تعتقد أن هناك بعض التحسينات التي يمكنك المساهمة بها!

فيما يلي بعض المقالات التي استخدمتها في كتابة هذا البرنامج التعليمي ، ألق نظرة إذا كنت تريد معرفة المزيد عن اكتشاف الكائنات باستخدام الشبكات العصبية:

كاشفات كائن الصندوق المحيط: فهم YOLO ، أنت تنظر مرة واحدة فقط

فهم YOLO (المزيد من الرياضيات)

دليل لطيف حول كيفية عمل YOLO Object Localization مع Keras (الجزء 2)

اكتشاف الأشياء في الوقت الفعلي باستخدام YOLO و YOLOv2 والآن YOLOv3

آمل أن تتمكن من استخدام المعرفة التي لديك الآن لبناء بعض المشاريع الرائعة مع رؤية الآلة! يمكنك شراء لوحات Sipeed من هنا ، فهي من بين أرخص الخيارات المتاحة لـ ML على الأنظمة المضمنة.

أضفني على LinkedIn إذا كان لديك أي أسئلة واشترك في قناتي على YouTube للحصول على إشعارات حول المزيد من المشاريع المثيرة للاهتمام التي تتضمن التعلم الآلي والروبوتات.

موصى به: