فهم مكتبة C++

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

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

بنية الملف

تشير رسالة الأشكال البيانية micro الدليل الجذر له بنية بسيطة نسبيًا. ومع ذلك، نظرًا لوقوعها في مستودع TensorFlow الواسع، ننشئ نصوصًا برمجية ملفات المشاريع المنشأة مسبقًا والتي توفر ملفات المصدر ذات الصلة بمعزل عن ضمن مختلف بيئات التطوير المضمنة.

الملفات الأساسية

أهم ملفات استخدام LiteRT لوحدات التحكم الدقيقة في جذور المشروع، مصحوبة بالاختبارات التالية:

[`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_TensorFlowLite مكتبة Arduino، التي يمكنك تثبيتها يدويًا في Arduino IDE وفي Arduino Create

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

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

بإمكان LiteRT لوحدات التحكم الدقيقة إنشاء مشاريع مستقلة تحتوي على جميع ملفات المصدر اللازمة باستخدام 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 الأسماء التجريبية لعبارة مرحبًا مثال على العالم.

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

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

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

على سبيل المثال، سينشئ الأمر التالي نصًا ثنائيًا لكلمة Hello World. app:

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

بشكل افتراضي، سيتم تجميع المشروع لنظام التشغيل المضيف. إلى تحديد بنية هدف مختلفة، استخدِم TARGET= وTARGET_ARCH=. تشير رسالة الأشكال البيانية يوضح المثال التالي كيفية إنشاء مثال Hello World لكلمة عامة القشرة 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 الأسماء الثنائية لعبارة مرحبًا مثال على العالم.

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

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

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

لإنشاء مشاريع باستخدام نواة محسنة، استخدم الأمر التالي، مع استبدال <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

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

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