فهرست مطالب:

تشخیص تصویر با برد K210 و Arduino IDE/Micropython: 6 مرحله (همراه با تصاویر)
تشخیص تصویر با برد K210 و Arduino IDE/Micropython: 6 مرحله (همراه با تصاویر)

تصویری: تشخیص تصویر با برد K210 و Arduino IDE/Micropython: 6 مرحله (همراه با تصاویر)

تصویری: تشخیص تصویر با برد K210 و Arduino IDE/Micropython: 6 مرحله (همراه با تصاویر)
تصویری: تشخیص اتصالی روی برد 2024, ژوئن
Anonim
Image
Image

من قبلاً یک مقاله در مورد نحوه اجرای نسخه نمایشی OpenMV در Sipeed Maix Bit نوشتم و همچنین یک ویدیو از نسخه ی نمایشی تشخیص شی با این برد تهیه کردم. یکی از سوالات متعددی که مردم پرسیده اند این است - چگونه می توان شیئی را تشخیص داد که شبکه عصبی برای آن آموزش ندیده است؟ به عبارت دیگر چگونه می توانید طبقه بندی کننده تصویر خود را بسازید و آن را با شتاب سخت افزاری اجرا کنید.

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

گرفتمت! در این مقاله من به شما آموزش می دهم که چگونه با استفاده از آموزش انتقال در Keras طبقه بندی سفارشی تصویر خود را ایجاد کنید ، مدل آموزش دیده را به فرمت.kmodel تبدیل کنید و آن را بر روی صفحه Sipeed (می توانید هر تخته ، Bit/Dock یا Go) با استفاده از Micropython یا آردوینو IDE و فقط تخیل شما محدود کننده وظایفی است که می توانید با این دانش انجام دهید.

UPDATE MAY 2020: با توجه به اینکه مقاله و ویدئوی من در زمینه تشخیص تصویر با تخته های K210 هنوز بسیار محبوب هستند و در بین نتایج برتر در YouTube و Google ، تصمیم گرفتم مقاله را به روز کنم تا اطلاعات مربوط به aXeleRate ، چارچوب مبتنی بر Keras برای AI را در Edge I develop.

aXeleRate ، اساساً بر اساس مجموعه اسکریپت هایی است که برای آموزش مدل های تشخیص تصویر/تشخیص شی استفاده کردم - در یک چارچوب واحد ترکیب شده و برای گردش کار در Google Colab بهینه شده است. استفاده از آن راحت تر و به روزتر است.

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

مرحله 1: CNN و یادگیری انتقال: نظریه ای

CNN و یادگیری انتقال: نظریه ای
CNN و یادگیری انتقال: نظریه ای

شبکه های عصبی کانولوشن یا CNN یک کلاس از شبکه های عصبی عمیق است که بیشتر برای تجزیه و تحلیل تصاویر بصری کاربرد دارد. ادبیات زیادی در اینترنت در مورد این موضوع وجود دارد و من در قسمت آخر مقاله پیوندهایی را ارائه می دهم. به طور خلاصه ، می توانید CNN را به عنوان یک سری فیلترها ، روی تصویر اعمال کنید ، هر فیلتر به دنبال ویژگی خاصی در تصویر است - در لایه های متحرک پایین ، معمولاً خطوط و اشکال ساده و در لایه های بالاتر ویژگی ها وجود دارد. می تواند خاص تر باشد ، به عنوان مثال اعضای بدن ، بافتهای خاص ، قسمتهایی از حیوانات یا گیاهان و غیره وجود مجموعه ای از ویژگیها می تواند به ما نشان دهد که شیء موجود در تصویر چه چیزی می تواند باشد. سبیل ، دو چشم و یک بینی سیاه؟ باید گربه باشه! برگهای سبز ، تنه درخت؟ شبیه درخت است!

امیدوارم اکنون در مورد اصل کار CNN ایده گرفته باشید. به طور معمول یک شبکه عصبی عمیق به هزاران تصویر و ساعت آموزش نیاز دارد (بستگی به سخت افزاری که برای آموزش استفاده می کنید) دارد تا فیلترهایی را برای تشخیص انواع اشیاء مورد نظر شما ایجاد کند. اما یک راه میانبر وجود دارد.

مدلی که برای تشخیص بسیاری از اشیاء متداول مختلف (گربه ، سگ ، لوازم خانگی ، وسایل حمل و نقل و غیره) آموزش دیده است ، در حال حاضر تعداد زیادی از این فیلترهای مفید "توسعه یافته" وجود دارد ، بنابراین ما برای یادگیری تشخیص اشکال و قطعات اصلی به آن نیاز نداریم. دوباره از اشیاء ما فقط می توانیم چند لایه آخر شبکه را مجددا آموزش دهیم تا کلاسهای خاصی از اشیا را که برای ما مهم هستند تشخیص دهند. به این "یادگیری انتقال" می گویند. شما به طور قابل توجهی به داده های آموزشی بسیار کمتری نیاز دارید و زمان را با آموزش انتقال محاسبه می کنید ، زیرا شما تنها چند لایه آخر شبکه را آموزش می دهید ، که شاید از چند صد نورون تشکیل شده است.

عالی به نظر می رسد ، درست است؟ بیایید ببینیم چگونه آن را پیاده سازی کنیم.

مرحله 2: محیط خود را آماده کنید

محیط خود را آماده کنید
محیط خود را آماده کنید

دو روش برای استفاده از aXeleRate وجود دارد: اجرا به صورت محلی در دستگاه اوبونتو یا در Google Colab. برای اجرا در Google Colab ، به این مثال نگاه کنید:

طبقه بندی تصویر دفترچه یادداشت Colab

آموزش مدل خود به صورت محلی و صادرات آن برای استفاده با شتاب سخت افزاری نیز اکنون بسیار ساده تر است.

محیط کار من Ubuntu 16.04 ، 64bit است. می توانید از ماشین مجازی برای اجرای تصویر اوبونتو استفاده کنید زیرا ما از GPU برای آموزش استفاده نمی کنیم. با برخی تغییرات می توانید اسکریپت آموزش را در ویندوز اجرا کنید ، اما برای تبدیل مدل باید از سیستم لینوکس استفاده کنید. بنابراین ، محیط ترجیحی برای اجرای این آموزش Ubuntu 16.04 است که به صورت بومی یا در ماشین مجازی اجرا می شود.

بیایید با نصب Miniconda ، مدیر محیط پایتون ، شروع کنیم. ما محیطی جداگانه ایجاد می کنیم ، بنابراین به طور تصادفی چیزی را در محیط سیستم پایتون شما تغییر نمی دهیم.

نصب کننده را از اینجا بارگیری کنید

پس از اتمام نصب ، یک محیط جدید ایجاد کنید:

conda create -n ml پایتون = 3.7

بیایید محیط جدید را فعال کنیم

conda activation ml

پیشوندی قبل از bash shell شما با نام محیط ظاهر می شود و نشان می دهد که اکنون در آن محیط کار می کنید.

مرحله 3: AXeleRate و Run Tests را نصب کنید

AXeleRate و Run Tests را نصب کنید
AXeleRate و Run Tests را نصب کنید

با استفاده از aXeleRate را روی دستگاه محلی خود نصب کنید

pip install git+https://github.com/AIWintermuteAI/aXeleRate

برای بارگیری نمونه ها اجرا کنید:

git clone

می توانید تست های سریع را با tests_training.py در پوشه aXeleRate اجرا کنید. این برنامه آموزش و استنباط را برای هر نوع مدل اجرا می کند ، مدلهای آموزش دیده را ذخیره و تبدیل می کند. از آنجا که این دوره فقط برای 5 دوره آموزش داده می شود و مجموعه داده ها بسیار کوچک است ، نمی توانید مدلهای مفیدی را بدست آورید ، اما این اسکریپت فقط برای بررسی عدم وجود خطا است.

مرحله 4: مدل را دوباره آموزش دهید ، مدل Keras را به.kmodel تبدیل کنید

مدل را دوباره آموزش دهید ، مدل Keras را به.kmodel تبدیل کنید
مدل را دوباره آموزش دهید ، مدل Keras را به.kmodel تبدیل کنید

برای این مثال اسباب بازی ، ما مدل را برای تشخیص بابا نوئل و آردوینو اونو آموزش می دهیم. بدیهی است که شما می توانید کلاس های دیگر را انتخاب کنید. مجموعه داده را از اینجا بارگیری کنید. یک کپی از فایل classifier.json در پوشه config ایجاد کنید ، سپس آن را مطابق با فایل پیکربندی موجود در تصویر تغییر دهید - مطمئن شوید که مسیر پوشه های آموزش و اعتبار سنجی صحیح است!

دستور زیر را از پوشه aXeleRate اجرا کنید:

python axelerate/train.py - c configs/santa_uno.json

آموزش شروع خواهد شد. اگر دقت اعتبارسنجی (معیار اعتبار سنجی ما) برای 20 دوره بهبود نیافته باشد ، آموزش زودهنگام متوقف می شود. هر زمان که دقت اعتبار سنجی بهبود یابد ، مدل در پوشه پروژه ذخیره می شود. پس از اتمام آموزش ، aXeleRate به طور خودکار بهترین مدل را به فرمت های مشخص تبدیل می کند - می توانید "tflite" ، "k210" یا "edgetpu" را انتخاب کنید.

مرحله 5: مدل را روی Sipeed Maix Bit اجرا کنید

مدل را روی Sipeed Maix Bit اجرا کنید
مدل را روی Sipeed Maix Bit اجرا کنید
مدل را روی Sipeed Maix Bit اجرا کنید
مدل را روی Sipeed Maix Bit اجرا کنید
مدل را روی Sipeed Maix Bit اجرا کنید
مدل را روی Sipeed Maix Bit اجرا کنید

دو روش برای اجرای مدلی که اکنون در سخت افزار Sipeed Maix دارید وجود دارد: سیستم عامل micropython و Arduino IDE. استفاده از سخت افزار Micropython آسان تر است ، اما بخش قابل توجهی از حافظه موجود را اشغال می کند ، بنابراین فضای کمتری برای مدل باقی می ماند. آردوینو IDE اساساً کد C است که بسیار کارآمدتر است و دارای حافظه کوچکتر است. مدل من فقط 1.9 مگابایت است ، بنابراین هر دو گزینه برای آن کار می کند. با Micropython می توانید از مدل هایی به بزرگی 2.9 مگابایت استفاده کنید ، برای هر چیز بزرگتر که باید از Arduino IDE استفاده کنید.

OpenMV IDE را از اینجا و حداقل سیستم عامل micropython را از اینجا بارگیری کنید.

سیستم عامل را با ابزار kflash_gui رایت کنید. شما همچنین می توانید انتخاب کنید که مدل آموزش دیده را نیز فلش کنید ، همانطور که در تصویر نشان داده شده است. یا آن را در کارت SD کپی کنید (در این صورت.kmodel را در ریشه کارت SD کپی کرده و کارت SD را در Sipeed Maix Bit وارد کنید)

OpenMV IDE را باز کرده و دکمه اتصال را فشار دهید. اسکریپت santa_uno.py را از پوشه example_scripts باز کرده و دکمه شروع را فشار دهید. شما باید در حال مشاهده یک جریان مستقیم از دوربین باشید و اگر سریال Terminal را باز کنید ، با نمره اطمینان ، بهترین نتیجه تشخیص تصویر را خواهید داشت!

برای استفاده از Arduino IDE ، ابتدا باید روش افزودن بردهای Sipeed به Arduino IDE را دنبال کنید ، که در اینجا مستند شده است. نسخه Arduino IDE شما باید حداقل 1.8.12 باشد. پس از افزودن تخته ها ، طرح mobilenet_v1_transfer_learning.ino را باز کرده و در Sipeed Maix Bit بارگذاری کنید. نام مدل روی کارت SD را به "model" تغییر دهید (یا یک کپی با این نام ایجاد کنید). می توانید نام برچسب ها را در names.cpp تغییر دهید. این جریان زنده دوربین را روی صفحه Sipeed Maix به همراه نتیجه تشخیص تصویر برتر نشان می دهد.

مرحله 6: نتیجه گیری

در اینجا چند مطلب دیگر برای مطالعه در مورد CNN ها و انتقال یادگیری آورده شده است:

آموزش انتقال با استفاده از Mobilenet و Keras در این آموزش از نسخه تغییر یافته کد آن مقاله استفاده می شود.

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

آموزش ، تبدیل ، اجرای MobileNet در Sipeed MaixPy و MaixDuino! آموزش تیم Sipeed در مورد نحوه آموزش کلاسهای Mobilenet 1000 از ابتدا (بدون آموزش انتقال). می توانید مدل آموزش دیده آنها را بارگیری کرده و امتحان کنید!

امیدوارم بتوانید از دانش موجود برای ساخت پروژه های فوق العاده با دید ماشین استفاده کنید! شما می توانید تخته Sipeed را در اینجا خریداری کنید ، آنها جزء ارزان ترین گزینه های موجود برای ML در سیستم های جاسازی شده هستند.

توصیه شده: