ساخت و تبدیل مدل ها

میکروکنترلرها حافظه رم و فضای ذخیره سازی محدودی دارند که محدودیت هایی را در اندازه مدل های یادگیری ماشین ایجاد می کند. علاوه بر این، LiteRT برای میکروکنترلرها در حال حاضر از زیرمجموعه محدودی از عملیات پشتیبانی می‌کند، بنابراین همه معماری‌های مدل امکان‌پذیر نیستند.

این سند فرآیند تبدیل یک مدل TensorFlow برای اجرا بر روی میکروکنترلرها را توضیح می دهد. همچنین عملیات پشتیبانی شده را تشریح می کند و راهنمایی هایی را در مورد طراحی و آموزش مدلی برای جا دادن در حافظه محدود ارائه می دهد.

برای مثالی سرتاسر و قابل اجرا از ساخت و تبدیل یک مدل، به مثال Hello World مراجعه کنید.

تبدیل مدل

برای تبدیل یک مدل TensorFlow آموزش دیده برای اجرا بر روی میکروکنترلرها، باید از مبدل LiteRT Python API استفاده کنید. این مدل را به FlatBuffer تبدیل می کند و اندازه مدل را کاهش می دهد و آن را برای استفاده از عملیات LiteRT تغییر می دهد.

برای به دست آوردن کوچکترین اندازه مدل ممکن، باید از کوانتیزاسیون پس از آموزش استفاده کنید.

تبدیل به آرایه C

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

دستور یونیکس زیر یک فایل منبع C ایجاد می کند که شامل مدل LiteRT به عنوان یک آرایه char است:

xxd -i converted_model.tflite > model_data.cc

خروجی مشابه شکل زیر خواهد بود:

unsigned char converted_model_tflite[] = {
  0x18, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x00, 0x00, 0x0e, 0x00,
  // <Lines omitted>
};
unsigned int converted_model_tflite_len = 18200;

پس از ایجاد فایل، می توانید آن را در برنامه خود قرار دهید. برای کارایی بهتر حافظه در پلتفرم‌های تعبیه‌شده، تغییر اعلان آرایه به const مهم است.

برای مثالی از نحوه گنجاندن و استفاده از یک مدل در برنامه خود، به hello_world_test.cc در مثال Hello World مراجعه کنید.

مدل معماری و آموزش

هنگام طراحی یک مدل برای استفاده در میکروکنترلرها، مهم است که اندازه مدل، حجم کار و عملیات مورد استفاده را در نظر بگیرید.

اندازه مدل

یک مدل باید به اندازه کافی کوچک باشد تا در حافظه دستگاه مورد نظر شما در کنار بقیه برنامه شما قرار گیرد، هم به صورت باینری و هم در زمان اجرا.

برای ایجاد یک مدل کوچکتر، می توانید از لایه های کمتر و کوچکتری در معماری خود استفاده کنید. با این حال، مدل های کوچک به احتمال زیاد از کمبود مناسب رنج می برند. این بدان معنی است که برای بسیاری از مشکلات، منطقی است که سعی کنید از بزرگترین مدلی که در حافظه جا می‌شود استفاده کنید. با این حال، استفاده از مدل های بزرگتر منجر به افزایش حجم کاری پردازنده نیز می شود.

حجم کار

اندازه و پیچیدگی مدل بر حجم کار تأثیر دارد. مدل‌های بزرگ و پیچیده ممکن است منجر به چرخه کاری بالاتری شوند، به این معنی که پردازنده دستگاه شما زمان بیشتری را صرف کار و زمان کمتری در بیکاری می‌کند. این باعث افزایش مصرف انرژی و گرمای خروجی می شود که ممکن است بسته به برنامه شما مشکل ساز باشد.

پشتیبانی عملیات

LiteRT برای میکروکنترلرها در حال حاضر از یک زیرمجموعه محدود از عملیات TensorFlow پشتیبانی می‌کند که بر معماری‌های مدلی که امکان اجرا وجود دارد تأثیر می‌گذارد. ما در حال توسعه پشتیبانی عملیات، هم از نظر پیاده سازی مرجع و هم بهینه سازی برای معماری های خاص هستیم.

عملیات پشتیبانی شده را می توان در فایل micro_mutable_ops_resolver.h مشاهده کرد