آشنایی با کتابخانه ++C

کتابخانه LiteRT برای میکروکنترلرهای 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.

برای آشنایی با کاربرد معمولی ، به شروع با میکروکنترلرها مراجعه کنید.

سیستم ساخت، پیاده سازی های خاص پلتفرم فایل های خاص را فراهم می کند. اینها در فهرستی با نام پلتفرم قرار دارند، برای مثال cortex-m .

چندین دایرکتوری دیگر وجود دارد، از جمله:

  • kernel ، که شامل اجرای عملیات و کد مرتبط است.
  • tools که شامل ابزارهای ساخت و خروجی آنها می باشد.
  • examples که حاوی کد نمونه است.

یک پروژه جدید را شروع کنید

توصیه می کنیم از مثال Hello World به عنوان یک الگو برای پروژه های جدید استفاده کنید. با دنبال کردن دستورالعمل‌های این بخش، می‌توانید نسخه‌ای از آن را برای پلتفرم مورد نظر خود دریافت کنید.

از کتابخانه آردوینو استفاده کنید

اگر از آردوینو استفاده می کنید، نمونه 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 نام آزمون را برای مثال 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 حاوی چندین هسته بهینه شده است که از کتابخانه Arm's CMSIS-NN استفاده می کند.

برای تولید پروژه‌ها با استفاده از هسته‌های بهینه‌سازی شده، از دستور زیر استفاده کنید و به جای <subdirectory_name> نام زیر شاخه حاوی بهینه‌سازی‌ها را جایگزین کنید:

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

شما می توانید بهینه سازی های خود را با ایجاد یک زیر پوشه جدید برای آنها اضافه کنید. ما درخواست های کششی را برای پیاده سازی های بهینه شده جدید تشویق می کنیم.

کتابخانه آردوینو را ایجاد کنید

اگر نیاز به ایجاد یک بیلد جدید از کتابخانه دارید، می توانید اسکریپت زیر را از مخزن 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 بیابید.