مدل ها را بسازید و تبدیل کنید

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

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

برای پایان پایان به، به عنوان مثال اجرایی ساخت و تبدیل یک مدل، نگاه کنید به COLAB زیر است که بخشی از مثال Hello World:

train_hello_world_model.ipynb

تبدیل مدل

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

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

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

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

دستور یونیکس زیر یک فایل منبع C است که شامل مدل TensorFlow آرشیو به عنوان یک تولید 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 برای بهره وری بهتر حافظه بر روی سیستم عامل تعبیه شده است.

برای یک مثال از چگونگی شامل و استفاده از یک مدل در برنامه شما، و model.cc در مثال Hello World.

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

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

اندازه مدل

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

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

حجم کار

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

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

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

عملیات پشتیبانی را می توان در فایل دیده all_ops_resolver.cc