فهم مكتبة C++

تُعدّ مكتبة TensorFlow Lite for Microcontrollers C++ جزءًا من مستودع TensorFlow. فهي مُصمَّمة لتكون سهلة القراءة والتعديل ويتم اختبارها بشكل جيد ودمجها بشكل صحيح ومتوافقة مع TensorFlow Lite العادي.

يحدد المستند التالي الهيكل الأساسي لمكتبة C++ ويوفر معلومات حول إنشاء مشروعك الخاص.

بنية الملف

يحتوي الدليل الجذري micro على بنية بسيطة نسبيًا. وبما أنّه يقع داخل مستودع TensorFlow الواسع، أنشأنا نصوصًا برمجية وملفات مشاريع تم إنشاؤها مسبقًا توفّر ملفات المصدر ذات الصلة بشكلٍ منفصل داخل العديد من بيئات التطوير المضمّنة.

الملفات الرئيسية

تقع أهم الملفات لاستخدام برنامج TensorFlow Lite for Microcontrolers في جذر المشروع، مصحوبة باختبارات:

[`micro_mutable_op_resolver.h`](https://github.com/tensorflow/tflite-micro/blob/main/tensorflow/lite/micro/micro_mutable_op_resolver.h)
can be used to provide the operations used by the interpreter to run the
model.
  • تؤدّي أداة micro_error_reporter.h إلى استخراج معلومات تصحيح الأخطاء.
  • يحتوي micro_interpreter.h على رمز للتعامل مع النماذج وتشغيلها.

راجِع بدء استخدام وحدات التحكّم الدقيقة للاطّلاع على إرشادات حول الاستخدام المعتاد.

يوفر نظام التصميم عمليات تنفيذ خاصة بالنظام الأساسي لملفات معينة. وتتوفّر هذه النطاقات في دليل يحمل اسم المنصة، على سبيل المثال cortex-m.

هناك عدة أدلة أخرى، بما في ذلك:

  • kernel، الذي يحتوي على عمليات تنفيذ العمليات والرمز المرتبط بها.
  • tools الذي يتضمّن أدوات الإنشاء ونتائجها
  • examples، الذي يحتوي على رمز نموذجي.

بدء مشروع جديد

ننصحك باستخدام مثال Hello World كنموذج للمشاريع الجديدة. يمكنك الحصول على نسخة منها للمنصّة التي تختارها من خلال اتّباع التعليمات الواردة في هذا القسم.

استخدام مكتبة Arduino

إذا كنت تستخدم Arduino، سيتم تضمين مثال Hello World في مكتبة Arduino Arduino_TensorFlowLite التي يمكنك تثبيتها يدويًا في Arduino IDE وفي Arduino Create.

بعد إضافة المكتبة، انتقِل إلى "File -> Examples". من المفترَض أن ترى مثالاً بالقرب من أسفل القائمة المسماة TensorFlowLite:hello_world حدده وانقر على hello_world لتحميل المثال. يمكنك بعد ذلك حفظ نسخة من المثال واستخدامها كأساس لمشروعك الخاص.

إنشاء مشروعات لمنصات أخرى

بإمكان TensorFlow Lite for Microcontrolers إنشاء مشاريع مستقلة تحتوي على جميع ملفات المصدر اللازمة باستخدام Makefile. البيئات المتوافقة الحالية هي Keil وMake وMbed.

لإنشاء هذه المشاريع باستخدام Make، استنسِخ مستودع TensorFlow/tflite-micro وشغِّل الأمر التالي:

make -f tensorflow/lite/micro/tools/make/Makefile generate_projects

سيستغرق ذلك بضع دقائق، حيث يتعين عليه تنزيل بعض سلاسل الأدوات الكبيرة للتبعيات. بعد الانتهاء من ذلك، من المفترض أن تظهر لك بعض المجلدات التي تم إنشاؤها داخل مسار مثل gen/linux_x86_64/prj/ (يعتمد المسار الدقيق على نظام التشغيل المضيف). تحتوي هذه المجلدات على المشروع الذي تم إنشاؤه وملفات المصدر.

بعد تنفيذ الأمر، ستتمكّن من العثور على مشاريع Hello World في gen/linux_x86_64/prj/hello_world. على سبيل المثال، سيحتوي hello_world/keil على مشروع Keil.

إجراء الاختبارات

لإنشاء المكتبة وإجراء جميع اختبارات الوحدات، استخدِم الأمر التالي:

make -f tensorflow/lite/micro/tools/make/Makefile test

لإجراء اختبار فردي، استخدِم الأمر التالي مع استبدال <test_name> باسم الاختبار:

make -f tensorflow/lite/micro/tools/make/Makefile test_<test_name>

يمكنك العثور على الأسماء الاختبارية في ملف Makefiles الخاص بالمشروع. على سبيل المثال، تحدد السمة examples/hello_world/Makefile.inc الأسماء التجريبية في مثال Hello World.

إنشاء برامج ثنائية

لإنشاء برنامج ثنائي قابل للتشغيل لمشروع معيّن (مثل مثال على تطبيق)، استخدِم الأمر التالي مع استبدال <project_name> بالمشروع الذي تريد إنشاءه:

make -f tensorflow/lite/micro/tools/make/Makefile <project_name>_bin

على سبيل المثال، سيُنشئ الأمر التالي برنامجًا ثنائيًا لتطبيق Hello World:

make -f tensorflow/lite/micro/tools/make/Makefile hello_world_bin

سيتم تجميع المشروع افتراضيًا لنظام التشغيل المضيف. لتحديد بنية هدف مختلفة، استخدِم TARGET= وTARGET_ARCH=. يوضح المثال التالي كيفية إنشاء مثال Hello World لـcortex-m0 عام:

make -f tensorflow/lite/micro/tools/make/Makefile TARGET=cortex_m_generic TARGET_ARCH=cortex-m0 hello_world_bin

عند تحديد هدف، سيتم استخدام أي ملفات مصدر محدّدة ومتاحة بدلاً من الرمز الأصلي. على سبيل المثال، يحتوي الدليل الفرعي examples/hello_world/cortex_m_generic على عمليات تنفيذ SparkFun Edge للملفين constants.cc وoutput_handler.cc، والتي سيتم استخدامها عند تحديد cortex_m_generic الهدف.

يمكنك العثور على أسماء المشاريع في ملف Makefiles الخاص بالمشروع. على سبيل المثال، تحدد السمة examples/hello_world/Makefile.inc الأسماء الثنائية لمثال Hello World.

النواة المحسَّنة

يتم تنفيذ النواة المرجعية في جذر tensorflow/lite/micro/kernels باستخدام لغة C/C++ خالصة، ولا تشمل تحسينات على الأجهزة الخاصة بالنظام الأساسي.

يتم توفير إصدارات محسنة من النواة في أدلة فرعية. على سبيل المثال، يحتوي kernels/cmsis-nn على العديد من النواة المحسّنة التي تستخدم مكتبة CMSIS-NN من Arm.

لإنشاء مشاريع باستخدام نواة محسَّنة، استخدِم الأمر التالي، واستبدال <subdirectory_name> باسم الدليل الفرعي الذي يحتوي على التحسينات:

make -f tensorflow/lite/micro/tools/make/Makefile TAGS=<subdirectory_name> generate_projects

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

إنشاء مكتبة Arduino

إذا كنت بحاجة إلى إنشاء إصدار جديد من المكتبة، يمكنك تشغيل النص البرمجي التالي من مستودع TensorFlow:

./tensorflow/lite/micro/tools/ci_build/test_arduino.sh

يمكن العثور على المكتبة الناتجة في gen/arduino_x86_64/prj/tensorflow_lite.zip.

النقل إلى أجهزة جديدة

يمكن العثور على إرشادات حول عملية نقل TensorFlow Lite لوحدات التحكّم الدقيقة إلى منصات وأجهزة جديدة في micro/docs/new_platform_support.md.