چگونه یک خودرو خودران و هوشمند بسازیم؟ (پارت سوم)

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

سلاااااااااااااااااام!

خب در این بخش کاری می کنیم که خودروی خودران ما بتونه اطراف خودشو ببینه و قدرت فکر کردن داشته باشه تا قابلیت تصمیم گیری در مواقع مختلف رو داشته باشه!

خلاصه پارت سوم:

خب دوستان عزیز!، در این قسمت دیگه کاملا درگیر بخش نرم افزار خودرو می شیم و از قابلیت های نرم افزاری مثل OpenCV و TensorFlow که در اختیار داریم استفاده می کنیم تا به خودروی خودمون قدرت دیدن و تفکر ببخشیم تا بتونه اشیاء و موانع جلوی خودشو تشخیص بده. (خیلی باحاله مگه نه؟!)

راه اندازی OpenCV برای بینایی ماشین:

همونطور که می دونیم تنها سنسور تشخیص دهنده که روی خودرو نصب هست همون دوربین usb ماست که یک ویدئو زنده از جلوی خودرو در اختیار ما قرار میده که در واقع این ویدئو از رنج وسیعی از تصاویر پشت سر هم تشکیل شده. در اینجا ما از OpenCV استفاده می کنیم (یک کتابخانه قدرتمند بینایی ماشین رایگان و متن باز) تا بتوانیم این عکس ها را دریافت کنیم و اونهارو به زبان ماشینی تبدیل کنیم. بنابراین با این کتابخونه خودروی ما میتونه بفهمه که چی داره میبینه. برای نصب قابلیت OpenCV کدهای زیر (قسمت بولد یا پر رنگ شده) را اجرا کنید:

دوستان توجه کنید که همه کدهای زیر رو بر محیط لینوکس رزپبری پای باید بنویسید!

عکس ۱ : نصب OpenCV

تست OpenCV نصب شده:

در این قسمت یک تست ساده انجام میدیم تا ببینیم کتابخانه OpenCV نصب شده یا نه. ماژول پایتون برای OpenCV با نام CV2 شناخته میشه. اگر کامندها یا دستورات زیر را اجرا کردید و خطایی رخ نداد بنابراین نتیجه میگیریم که کتابخونه OpenCV به درستی نصب شده است. کتابخونه های numpy و matplotlib هم دو کتابخانه مفید هستند که ما در ترکیب با کتابخونه OpenCV یا همون CV2 برای پردازش تصویر و ران کردن الگوریتم های ریاضی استفاده می کنیم. (پس کدهای زیر رو ران کنید)

عکس ۲ : فراخوانی کتابخانه OpenCV

حالا اجازه بدید یک پردازش تصویری ساده انجام بدیم: (بازم کدهای بولد شده زیر را اجرا کنید):

عکس ۳ : کد پردازش تصویر ساده

اگر با اجرا کردن کدبالا تصویر زیر ظاهر شد که تصویر سمت چپ رنگی و تصویر سمت راستی سیاه و سفید است پس بدونید که کتابخانه OpenCV شما کار می کنه! (اوووووووووووووووف عجب صحنه دل نوازی)

عکس ۴ : خروجی کد بالا

برای خارج شدن از تست بالا دکمه q را بزنید. در واقع در کد بالا برنامه تصویر اصلی (Original) را از دوربین می گیرد و آن را تبدیل به یک عکس سیاه و سفید می کند (B/W). این فرایند تبدیل تصاویر بسیار مهمه چون که ما درپارت چهارم (پارت بعدی) ممکنه یک تصویر را به ۹ تا ۱۰ تصویر برای عملیات پردازشی تبدیل کنیم. (مثل تصویر زیر)

عکس ۵ : پردازش تصویر با OpenCV

راه اندازی TensorFlow برای CPU و EdgeTPU :

در حال حاضر کتابخانه Google TensorFlow پرطرفدارترین کتابخانه پایتون برای یادگیری عمیق می باشد که می تواند برای تشخیص تصویر (Image recognition)، تشخیص صورت (Face Detection) ، پردازش زبان (Language Processing) وسایر برنامه های پردازشی استفاده شود. به طور کلی دو روش برای نصب تنسورفلو بر روی برد رسپبری پای وجود دارد:

  • تنسورفلو برای CPU
  • تنسورفلو برای EdgeTPU

نصب تنسورفلو برای CPU:

اولین روش نصب TensorFlow نصب نسخه CPU آن است.لازم به ذکر است که ما از رزپبری پای برای اجرای یادگیری عمیق (مثلا Model Training) استفاده نمی کنیم.

چرا که CPU آن برای توسعه بک اند (الگوریتمهای تحلیلی و یادگیری) مناسب نیست ما به یک CPU سریع نیازمندیم تا بتواند پروسه یادگیری را سریع انجام دهد با این حال ما می تونیم از نسخه CPU برای تحلیل مدلهای یادگیری اولیه یا مدلهای پیشبینی در خودرو استفاده کنیم که خیلی بار محاسباتی ندارند و یه جورایی در بحث فرانت اند (غیر تحلیلی یا بار کم محاسباتی) استفاده می شوند.

در واقع با استفاده از CPU ما می توانیم مدل های سطحی (Shallow Models) را پیاده سازی کنیم (این مدلها در حالت آنلاین (real time) تقریبا ۲۰ تا ۳۰ لایه ای هستند) و برای مدلهای عمیق تر (که بالای ۱۰۰ لایه دارند) ما نیازه که از پردازنده های قویتری مثل Edge TPU استفاده کنیم. که باید جدیدترین ورژن TensorFlow رو دانلود و نصب کنید (مثلا ورژن شماره ۲.۰). برای اینکار کدهای بولد(پررنگ) شده در شکل زیر رو اجرا کنید.

عکس ۵: نصب تنسورفلو

حالا که کدهای بالارو اجرا کردیم بیاید تست کنیم ببینیم نصب درست انجام شده یا نه؟ برای اینکار تنسورلو رو مثل شکل زیر اضافه (import) کنید. وقتیکه تنسورفلو رو اضافه کردید چندتا اخطار (warning) دریافت می کنید که مهم نیستند و نادیده بگیرید اما اگه خطا (error) داشت یعنی درست نصب نشده. (اگه به خطایی برخورد کردید زیر همین بخش کامنت کنید تا ما کمکتون کنیم).

عکس ۶: اضافه کردن (import) تنسور فلو

نصب تنسورفلو برای EdgeTPU:

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

کدهای زیر رو اجرا کنید تا درایورها و APIهای edgetpu رو نصب کنید. حین اجرای کدهای زیر اگه از شما پرسیده شد enable the maximum operating frequency پاسخ y را بزنید. مدلهایی که ما استفاده می کنیم برای TPU سبک هستند و اونو داغ نمی کنن.

عکس ۷: نصب درایورهای تنسورفلو روی TPU

بعد از اینکه ریبوت کردید، حالا باید اونو تست کنیم با برنامه تشخیص اشیاء آنلاین. ما برای اینکار یک برنامه تشخیص شی دمو اجرا می کنیم به صورت زیر:

عکس ۸: اجرای برنامه تشخیص شی روی tpu

شما باید یک تصویر ویدئو زنده روی صفحه ببینید و حالا برنامه سعی میکنه اشیاء رو روی صفحه تشخیص بده در زمان تقریبا ۷-۸ فریم در ثانیه. توجه داشته باشید که مدل تشخیص شی COCO (Common Object in Context) میتونه ۱۰۰ تا شی معمول، مثلا انسان، صندلی، تلویزیون، کتاب، مبل، لپ تاپ، موبایل و غیره رو تشخیص بده. این مدل تشخیص اشیاء که ما استفاده کردیم اینجا اسمش هست: ssd_mobilenet_coco_v2 که شامل ۲۰۰ لایه است! (ما سعی کردیم مدل تشخیص اشیاء coco رو روی سی پی یو Pi’s CPU  رو اجرا کنیم که نصب طولانی هم داشت و فقط می تونست ۱ فریم بر ثانیه اجرا کنه اونم با ۱۰۰ درصد CPU و اینکه دمای CPU فورا خیلی بالا رفت بنابراین اجرای مدلهای یادگری عمیق توصیه نمیشه.) البته چیزی که ما الان اجرا کردیم از EdgeTPU یه چیز دمو و سادست که در پارت ششم یک مدل تشخیص علائم ترافیک رانندگی اجرا می کنیم.

عکس ۹: اجرای مدل CoCo دمو

توجه: اگه میخواید نصب آپدیت شده و زبان اصلی Coral EdgeTPU برای تشخیص شی رو ببینید میتونید وارداین لینک بشید.

و اما بعد…

تبریک می گیم! حالا ما هم مغز (Tensorflow) و هم چشم (دوربین و OpenCV) ربات رو راه انداختیم. حالا وقتشه که وارد پارت چهارم بشیم! که اونجا خودرو ما یاد میگیره به صورت خودکار مسیریابی کنه!

پایان پارت سوم!

با ما همراه باشید عزیراااااااااان!!!!!!!

پارت های منتشر شده:

چگونه یک خودرو خودران و هوشمند بسازیم؟ (پارت اول)

چگونه یک خودرو خودران و هوشمند بسازیم؟ (پارت دوم)

چگونه یک خودرو خودران و هوشمند بسازیم؟ (پارت سوم)

چگونه یک خودرو خودران و هوشمند بسازیم؟ (پارت چهارم)

چگونه یک خودرو خودران و هوشمند بسازیم؟ (پارت پنجم)

چگونه یک خودرو خودران و هوشمند بسازیم؟ (پارت ششم)

4 دیدگاه در “چگونه یک خودرو خودران و هوشمند بسازیم؟ (پارت سوم)

  1. سلام دوباره خسته نباشید
    یه سوال اساسی
    ایا میشه به جای روزپری و قطعه گوگل از لپ تاپم یا کامپیوتر دست دومم استفاده کنم ؟
    اگه آموزشی یا ویدیویی از یوتویوبی چیزی دارین ممنون میشم برام بفرساینش ؟

    1. سلام شدنش میشه ولی باید کانفیگ پردازشی بالایی داشته باشه و بهتره روی لینوکس بالا بیاد که در اون حالت باید خودتون رابط های نرم افزاری رو طراحی و اجرا کنید. در خارج از ایران چون کار منطقی نیست معمولا سورس آموزشی هم کمه! بردهایی مثل گوگل و nvidia مخصوص اینکارا طراحی شدن

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

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

قبلا حساب کاربری ایجاد کرده اید؟
گذرواژه خود را فراموش کرده اید؟
Loading...