آموزش آردوینو

استفاده از Edge Impulse برای تشخیص تب با آردوینو

استودیو Edge Impulse می تواند برای آموزش مدلهای یادگیری ماشین مانند طبقه بندی اشیا ، تشخیص سرفه ، تشخیص گفتار و بسیاری از موارد دیگر استفاده شود. در این آموزش ، ما قصد داریم از Edge Impulse Studio برای آموزش یک مدل ساده مبتنی بر سیگنال برای تشخیص اینکه آیا فرد تب دارد یا نه استفاده کنیم.

Edge Impulse چیست؟

Edge impulse به سازندگان کمک می کند تا کل فرایند اتصال سخت افزار ، جمع آوری داده ها از آن ، پیش پردازش آن و سپس ایجاد مدل با آن را از روزها یا ماه ها به چند ساعت کاهش دهید. این پلتفرم برای پروژه های شخصی رایگان است و استفاده از آن بسیار راحت است. دارای یک رابط کاربری بصری است که شما را در مراحل ساخت مدل راهنمایی می کند بدون اینکه شما را در معرض پیچیدگی های غیر ضروری قرار دهد. در عین حال ، اطمینان حاصل می کند که گزینه های کافی برای جمع آوری/بارگذاری داده های شخصی شما و سفارشی سازی کل مدل و روند آموزش آن را در اختیار شما قرار می دهد.

چرا از مدل های Edge Impulse برای این پروژه استفاده میکنیم؟

ما از آردوینو نانو 33 اینترنت اشیا استفاده خواهیم کرد زیرا می توان آن را به راحتی با کتابخانه ای که توسط edge impulse صادر می شود ادغام کرد. برای انجام این پروژه ، ما سنسور MLX90614 را برای اندازه گیری دمای انگشتان شخص و پیش بینی تب یا عدم تب او ادغام می کنیم. در حالی که در ابتدا فکر می کردم ممکن است این پروژه بسیار ساده و با استفاده از آستانه باشد، اما اینطور نیست و به دلایل زیر این پروژه پیچیده تر است:

  1. دمای محیط و فاصله بین انگشت و حسگر mlx مقدار اندازه گیری شده دمای جسم را به میزان قابل توجهی تغییر می دهد.
  2. ممکن است دمای بدن یک فرد در روزهای مختلف کمی متفاوت باشد
  3. افراد مختلف با پیشینه های قومی مختلف نیز دارای ویژگی های متفاوت و دمای بدنی کمی متفاوت هستند
  4. دمای انگشت چند درجه پایین تر از دمای بدن است

مدار اتصال MLX90614 به Arduino Nano 33 IoT

شماتیک بسیار ساده است. ما از mlx90614 و صفحه نمایش 1.3 اینچی OLED I2C استفاده خواهیم کرد. اتصالات بسیار ساده هستند زیرا هر دو ماژول (صفحه نمایش MLX90614 و OLED) با ارتباط I2C کار می کنند.

مدار اتصال MLX90614 به Arduino Nano 33 IoT

Arduino Nano 33 IOT Display/MLX90614 sensor
5V VCC
GND GND
A4 SDA
A5 SCL
قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

آموزش مدل تشخیص تب با استودیو Edge Impulse

آموزش مدل یادگیری ماشین با Edge Impulse بسیار ساده است و می تواند در 7-8 مرحله تکمیل شود. همه مراحل آموزش مدل با Edge Impulse در زیر توضیح داده شده است:

1. در وب سایت ثبت نام کنید و پروژه خود را ایجاد کنید

اولین قدم ثبت نام در وب سایت edge Impulse است. پس از ثبت نام ، صفحه داشبورد را مشاهده خواهید کرد که جریان اصلی توسعه مدل را در edge impulse به شما نشان می دهد. از شما خواسته می شود که یک پروژه جدید ایجاد کرده و نامگذاری کنید. همانطور که در اطلاعات پروژه ذکر شد ، روش برچسب زدن را به عنوان “one label per data item” و محاسبات تاخیر را در Cortex-M4F 80 MHz انتخاب کنید. برای مدل های مبتنی بر بینایی ، می توانید گزینه bounding boxes را انتخاب کنید. بسیاری از پردازنده ها و بردهای دیگر توسط پلت فرم edge impulse پشتیبانی می شوند.

آموزش مدل تشخیص تب با استودیو Edge Impulse

2. جمع آوری داده ها با استفاده از Data-Forwarder

اگر روی دکمه “LET’S COLLECT SOME DATA” کلیک کنید ، گزینه های متنوعی را مشاهده خواهید کرد.

جمع آوری داده ها با استفاده از Data-Forwarder

ما از گزینه data-forwarder استفاده می کنیم که از python3 ، node.js و cli برای جمع آوری داده ها از دستگاه سخت افزاری شما استفاده می کند و سپس اطلاعات جمع آوری شده را به پلت فرم edge impulse منتقل می کند.  ابتدا اسکریپت جمع آوری داده ارائه شده را در تنظیمات برد Arduino 33 IOT بارگذاری کنید. در حالی که دستگاه هنوز به لپ تاپ/دسکتاپ شما متصل است ، یک cmd یا خط فرمان باز کنید و دستور زیر را در آن وارد کنید.

$ edge-impulse-data-forwarder

سپس فرستنده داده باید بر اساس آن پاسخ دهد:

Edge Impulse data forwarder v1.5.0
? What is your user name or e-mail address (edgeimpulse.com)? <enter registered email-id>
? What is your password? <enter password>
Endpoints:
    Websocket: wss://remote-mgmt.edgeimpulse.com
    API:       https://studio.edgeimpulse.com
    Ingestion: https://ingestion.edgeimpulse.com
[SER] Connecting to /dev/tty.usbmodem401203
[SER] Serial is connected
[WS ] Connecting to wss://remote-mgmt.edgeimpulse.com
[WS ] Connected to wss://remote-mgmt.edgeimpulse.com
? To which project do you want to add this device? <project_name>
? 3 sensor axes detected. What do you want to call them? Separate the names with ',': <axis1,axis2,axis3,…>
? What name do you want to give this device? <device_name>
[WS ] Authenticated

اعتبارنامه های معتبر registration credentials، نام پروژه ای که تازه ایجاد کرده اید را وارد کنید و 2 محور را که به ترتیب به عنوان O_Temp و A_Temp شناسایی شده اند ، نامگذاری کنید. فرکانس داده ها باید به طور خودکار تشخیص داده شود. این چنین خواهد بود:

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

پاسخ دریافتی از edge impulse

در صورت بازگشت به رابط کاربری edge impulse، باید نام دستگاه تازه اضافه شده را مانند تصویر زیر مشاهده کنید-

نام دستگاه در پلتفرم edge impulse

نقطه سبز نشان می دهد که دستگاه فعال و وصل است. در حال حاضر ، Data acquisition را در سمت چپ انتخاب کنید و می توانید صفحه زیر را مشاهده کنید:

Data acquisition

طول نمونه مورد نظر را وارد کرده و سپس بر روی دکمه Start Sampling کلیک کنید. شمارنده باید به جای دکمه نمونه گیری که تازه فشار داده شده است شروع به کار کند و پس از گذشت زمان وارد شده ، داده های جمع آوری شده مطابق شکل نمایش داده می شود. با کلیک روی 3 نقطه در سمت راست هر نمونه جمع آوری شده ، می توانید نام نمونه را تغییر داده و برچسب آن را تغییر دهید. برای مشاهده جزئیات نمونه جمع آوری شده ، فقط روی آن کلیک کنید.

نمونه جمع آوری شده در edge impulse

چند نکته قابل توجه:

  • حداقل 9 دقیقه داده جمع آوری کنید که به طور مساوی به سه کلاس تقسیم شده است – بدون انگشت ، سالم و تب دار.
  • هر روز به مدت چند روز 1 نمونه 100 ثانیه ای برای هر سه برچسب در هر روز جمع آوری کنید تا مدل شما برای انواع دمای محیط کار کند.
  • برای کلاس اول ، فقط انگشت خود را روی سنسور بردارید و بگذارید. در حالت دوم ، انگشت خود را 1 سانتی متر از سنسور دور کنید و برای برچسب تب ، انگشت خود به سنسور بچسبانید.
  • صفحه نمایش اولد باید دمای اندازه گیری شده توسط سنسور را به شما نشان دهد.
  • انگشتان 5-6 درجه فارنهایت پایین تر از دمای بدن هستند و ما فرض می کنیم که آستانه تب 100 درجه فارنهایت است.
  • همچنین می توانید با انتخاب برگه “Test data” در کنار برگه “Training data” که در حال حاضر انتخاب شده است ، داده های آزمایش را جمع آوری کنید. همچنین می توانید از دکمه rebalance data استفاده کرده و مجموعه داده را به صورت خودکار در نسبت 80:20 تقسیم کنید.
  • برای داده های آزمایش ، طول نمونه 10 ثانیه ای باید مناسب باشد.
  • Edge Impulse به شما این امکان را می دهد که نمونه های خود را نیز تقسیم کرده و برش دهید ، بنابراین قبل از ادامه کار هرگونه داده اشتباه را حذف کنید.

3. ایجاد یک ضربه (Impulse)

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

ایجاد یک ضربه (Impulse)

به گزینه ها و بلوک های مختلف موجود نگاه کنید. شما می توانید بلوک ها را بر اساس داده های خود انتخاب کنید و حتی محورهایی را که می خواهید داده ها را در آنها آموزش دهید انتخاب کنید. Edge impulse هر بلوک و کاربرد استفاده آن را توضیح می دهد. ما از داده های خام استفاده خواهیم کرد زیرا به ما امکان می دهد مقادیر را مستقیماً از سنسور خود به API مدل برسانیم و در زمان پردازش نیز صرفه جویی شود. فرکانس را روی دو هرتز نگه دارید. این بدان معناست که ما هر 500 میلی ثانیه داده های حسگر را به مدل تغذیه می کنیم. توجه داشته باشید که این بدان معنا نیست که ما داده های سنسور را با همان سرعت می خوانیم. ما ممکن است داده ها را سریعتر بخوانیم تا میانگین آنها را قبل از تغذیه به مدل اندازه گیری کنیم. بنابراین ، طول نمونه ما 1/فرکانس یا 500 میلی متر خواهد بود. هر دو مورد – O_Temp و A_Temp را در بلوک داده های خام علامت بزنید زیرا ما می خواهیم مدل ما در دمای مختلف محیط کار کند.

4. ایجاد ویژگی ها

اکنون ما به ایجاد ویژگی هایی از داده های خام خود ادامه می دهیم. تحت طراحی ضربه ای ، هنگامی که ضربه ای را که تازه ایجاد کرده اید ذخیره کردید ، دایره کنار “Create impulse” باید سبز شود که نشان می دهد ضربه شما ایجاد شده است. بسته به بلوک هایی که اضافه کرده اید ، باید برگه های اضافی مانند “Raw data” را نیز مشاهده کنید. وقتی روی برگه Raw data کلیک می کنید ، صفحه زیر باید باز شود :

اگر دقیق نگاه کنید ، چیزی نیست جز O_Temp ، A_Temp یا 1 نمونه که ما در حال جمع آوری آن هستیم. به نظر می رسد این درست است زیرا ما از فرکانس 2 و اندازه پنجره 500 میلی ثانیه استفاده کرده بودیم. در برگه بالای صفحه “Generate features” را انتخاب کنید که به این صفحه منتهی می شود:

ایجاد ویژگی ها

شما هیچ نموداری نمی بینید زیرا ما هنوز هیچ ویژگی ایجاد نکرده ایم. روی دکمه “Generate features” کلیک کنید و خواهید دید که ویژگی implese از داده های جمع آوری شده شروع به یادگیری کرده است. اساساً یک الگوریتم K-means اجرا می کند و داده ها را با برچسب یکسان با هم خوشه بندی می کند. شما باید بتوانید یک نمودار سه بعدی در سمت راست مشاهده کنید ، با همه برچسب های مختلف در رنگ های مختلف. پس از انجام این کار ، اکنون می توانیم به آموزش مدل بپردازیم.

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

برگه NN Classifier را در سمت چپ انتخاب کنید. شما قادر خواهید بود پنجره زیر را مشاهده کنید ، تنظیمات پیش فرض را همانطور که هست نگه دارید یا آنها را کمی تغییر دهید. روی start training کلیک کنید و در عرض چند دقیقه باید 50 دوره را انجام دهید و دقت مدل را به شما نشان می دهد. از آنجا که این یک پروژه نسبتاً ساده است ، ما باید دقت بسیار بالای 98 را مشاهده کنیم.

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

6. آزمایش مدل بر روی نمونه های آزمایشی

پس از این ، می توانیم نحوه عملکرد مدل را با استفاده از برگه live classification بررسی کنیم.

آزمایش مدل بر روی نمونه های آزمایشی

می توانید با پیوست کردن دستگاه جمع آوری داده های ثبت شده با استفاده از فورواردر ، یک نمونه جدید بگیرید یا می توانید یک نمونه آزمایشی موجود را طبقه بندی کنید.

شما قادر خواهید بود ببینید که چگونه هر پنجره نمونه جدید/آزمایشی از نظر بصری و در قالب شبیه گزارش در بخش “Detailed result” طبقه بندی شده است.

Detailed result

7. محاسبه دقت تست

اکنون ما نحوه عملکرد مدل را بر روی داده های آزمایشی که به طور کلی جمع آوری کرده ایم ، خواهیم دید. برگه “Model Testing” را انتخاب کرده و دکمه “Classify all” را فشار دهید.

محاسبه دقت تست

شما باید دقت آزمون را در قالب یک ماتریس مشاهده کنید.

8. نسخه بندی و استقرار

نسخه بندی به شما کمک می کند چندین نسخه از یک مدل و پروژه مشابه ایجاد کنید. در نهایت ، به برگه Deployment می رویم. در بخش create a library گزینه کتابخانه آردوینو را انتخاب کرده و سپس به پایین بروید. گزینه های بهینه سازی موجود برای طبقه بندی NN را مشاهده خواهید کرد. دکمه Analyze optimizations را فشار دهید تا ببینید کدام بهینه سازی بهتر است. در مورد ما ، float32 عملکرد بهتری دارد بنابراین ما با استفاده از آن کتابخانه را ایجاد می کنیم.

نسخه بندی و استقرار

روی دکمه build کلیک کنید و یک فایل فشرده به طور خودکار شروع به بارگیری کند.

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

تبریک می گویم! شما با موفقیت اولین مدل edge impulse خود را ساخته اید!

استقرار مدل آموزش دیده در آردوینو نانو 33 IoT

اکنون از کتابخانه بارگیری شده برای طبقه بندی نمونه ها استفاده خواهیم کرد. اولین قدم این است که Arduino IDE را باز کنید ، به قسمت”Sketch” بروید ، “Include Library” را انتخاب کرده و یک فایل .zip وارد کنید. شما باید بتوانید کتابخانه را در پوشه examples  مشاهده کنید. فایل استنباط ما static_buffer است. اگر به خاطر داشته باشید ، در مرحله 4 که ما ویژگی ها را ایجاد کردیم ، می توانیم 2 نوع را مشاهده کنیم – raw و dsp یا processed که در مورد ما یکسان بودند. مثال static buffer از این ویژگی ها برای اجرای استنتاج در یک پنجره نمونه خاص استفاده می کند. از آنجا که از ویژگی های خام استفاده می کنیم ، می توانیم این مثال را مستقیماً با جایگزینی مقادیر کپی شده در آرایه ویژگی از رابط کاربری edge impulse با مقادیر اندازه گیری شده توسط سنسور MLX مورد استفاده ، به یک مثال استنباط زنده تبدیل کنیم. می توانید تمام کتابخانه های مورد نیاز را از فایل دانلودی انتهای صفحه بارگیری کنید.

استقرار مدل آموزش دیده در آردوینو نانو 33 IoT

بنابراین ، آرایه زیر

static const float features[] = {
    // copy raw features here (for example from the 'Live classification' page)
    // see https://docs.edgeimpulse.com/docs/running-your-impulse-arduino
};
Inside the static_buffer example has been replaced with
Object = mlx.readObjectTempF();
Ambient = mlx.readAmbientTempF();
 ei_printf("Edge Impulse standalone inferencing (Arduino)\n");
features[0] = Object;
features[1] = Ambient;
In our modified version

به ما امکان می دهد طبقه بندی خود را به صورت زنده در Arduino Nano 33 IOT اجرا کنیم. بقیه کد نیازمند درک عمیقی از Tf-lite و API های impulse edge است که خارج از محدوده این پروژه است. پس از اتمام تغییرات ، Arduino 33 IoT را در قسمت Board انتخاب کرده و کد را بارگذاری کنید. پس از بارگذاری کد ، مانیتور سریال را باز کنید و خروجی به صورت زیر ظاهر می شود-

خروجی پروژه در سریال مانیتور آردوینو

نحوه عملکرد پروژه تشخیص تب با آردوینو

همانطور که می بینید ، زمان استنتاج فقط 3 میلی ثانیه است که بسیار عالی است. مدل ما حتی در روزهای مختلف در دمای مختلف محیط بسیار خوب عمل می کند. به این ترتیب می توانید از Edge Impulse Studio برای آموزش یک مدل یادگیری ماشین سفارشی استفاده کنید.

موارد موجود در فایل : سورس کامل، فایل های کتابخانه

5 (1 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

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

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *