7.16. خاتمة

تناول هذا الفصل أجزاء ml التي يلجأ إليها أي تطبيق OpenMV عندما تكون خطوة الاستدلال جزءًا من خط المعالجة:

  • المفاهيم -- ما الشبكة العصبية بالمعنى الحسابي (مجموعة متراكمة من المُعاملات القابلة للتدريب التي تُحوّل موتّرًا إلى موتّر)، وما الذي غيّرته الرؤية الآلية مقارنةً بمعالجة الصور الكلاسيكية (لقد اختفت خوارزمية التلخيص المكتوبة بشريًا، واستُبدلت بأوزان تُتعلَّم من بيانات موسومة)، إضافةً إلى العرض التوضيحي البسيط الذي شغّل كاشف وجوه في بضعة أسطر من Python.

  • وحدة ml -- كائن ml.Model وخصائصه لفحص موتّرات الدخل والخرج، ومسارات ملفات النموذج التي يقبلها، وأين تقيم تلك الملفات: قسم ROMFS للقراءة فقط للتنفيذ مباشرةً من ذاكرة الفلاش، أو أي نظام ملفات MicroPython آخر عندما يمكن نسخ النموذج إلى RAM عند وقت التحميل.

  • خط المعالجة للاستدلال -- المراحل الثلاث التي تُشغّلها predict() بالتتابع (المعالجة المسبقة، وإرسال المهمة إلى المحرك، والمعالجة اللاحقة)، ومقبض Normalization في المرحلة الأولى، ومقبض المعالج اللاحق في المرحلة الثالثة، وحساب التكميم الذي يربط الموتّرات الصحيحة التي تُشغّلها الكاميرا بالأعداد الحقيقية القيمة التي دُرّبت الشبكة عليها.

  • محركات الاستدلال -- TFLM (مفسّر المُعاملات الذي تُشغّله معظم الكاميرات)، وCMSIS-NN (مكتبة نوى SIMD التي تكمن تحته على Cortex-M)، ووحدات NPU (وحدة Ethos-U55 من Arm على AE3 المقترنة بمُترجم Vela غير المتصل، ووحدة Neural-ART من ST على N6 المقترنة بـ STAI وSTEdgeAI). يحدد المحرك بحسب الكاميرا؛ ولا يختاره البرنامج النصي.

  • فك ترميز الخرج -- المعالجات اللاحقة التي تُحوّل موتّرات الخرج الخام إلى مربعات أو نقاط مفتاحية أو قوائم لكل صنف، وصنف NMS الذي يطوي المرشحات المتداخلة، والشرح التفصيلي لـ YOLOv8 الذي يُظهر كيفية إبقاء فك الترميز سريعًا عبر تطبيق العتبة قبل إلغاء التكميم، وبروتوكول كتابة مفكّك ترميز مخصص عندما لا يغطي الكتالوج نموذجًا ما.

7.16.1. ما الذي صار في المتناول الآن

ثلاثة أمور يُمهّد لها هذا الفصل:

  • تحميل نموذج مُدرّب وتشغيله. كل ما في /rom/ يعمل دون أي تحضير إضافي؛ وأي نموذج مُقدَّم خارجيًا بصيغة .tflite متوافقة يعمل بعد أن تكون الأداة غير المتصلة الخاصة بالكاميرا المستهدفة (Vela لـ AE3، وSTEdgeAI لـ N6) قد أنتجت التخطيط الصحيح.

  • فك ترميز أي موتّر خرج. عندما تكون البنية موجودة في الكتالوج، يكون اختيار المعالج اللاحق الصحيح أمرًا آليًا: YoloV8 لنموذج YOLOv8، وBlazeFace لـ BlazeFace، وهكذا. وعندما لا تكون كذلك، يغطي بروتوكول writing-your-own العقد، ويُعد الشرح التفصيلي لـ YOLOv8 المرجع الأوضح للنسخ عنه.

  • التفكير في الأداء. قد يعمل نموذج بمعدل 30 إطارًا في الثانية على وحدة NPU بينما يعمل بمعدل 3 إطارات في الثانية على Cortex-M7؛ وتعتمد النسبة على مقدار ما تستطيع الكاميرا رفعه من الشبكة عن وحدة المعالجة المركزية. والتكميم، ووضع النموذج في ROMFS، وترجمة NPU، وتغطية المُعاملات في المحرك المستهدف هي الروافع الأربع، وقد غطّى الفصل كلًّا منها.

7.16.2. تتكامل ML مع بقية أجزاء الكاميرا

نادرًا ما يعمل الاستدلال بمعزل عن غيره. تلتقط وحدة الصور الإطار وتعالجه مسبقًا، وتُشغّل وحدة ml الشبكة، وتؤدي ulab.numpy أي عمل عددي لا يملك أيٌّ من الطرفين أداة مدمجة له. ويجمع برنامج كشف نموذجي بين الثلاثة جميعًا: الالتقاط عبر csi، وضبط الإطار اختياريًا عبر image، وتشغيل predict()، والمعالجة اللاحقة للنتيجة بالوحدة المناسبة من ml.postprocessing، واللجوء إلى ulab.numpy لأي عمليات حسابية مخصصة يريدها التطبيق فوق المربعات التي أعادها المعالج اللاحق. وتتشارك الوحدات الثلاث نموذج الذاكرة نفسه؛ والحدود بينها خالية من النسخ حيثما أمكن.