فهرست مطالب:

روبات تشخیص علائم راهنمایی و رانندگی رزبری پای 4: 6 قدم
روبات تشخیص علائم راهنمایی و رانندگی رزبری پای 4: 6 قدم

تصویری: روبات تشخیص علائم راهنمایی و رانندگی رزبری پای 4: 6 قدم

تصویری: روبات تشخیص علائم راهنمایی و رانندگی رزبری پای 4: 6 قدم
تصویری: ربات ترافیک یا تشخیص علایم راهنمایی رانندگی YouTube 2024, نوامبر
Anonim
روبات تشخیص علائم ترافیکی رزبری پای 4
روبات تشخیص علائم ترافیکی رزبری پای 4

این دستورالعمل بر اساس پروژه دانشگاه من است. هدف ایجاد سیستمی بود که در آن یک شبکه عصبی تصویر را تجزیه و تحلیل کند و سپس بر اساس تشخیص به یک ربات آردوینو بگوید که از طریق Ros حرکت کند.

به عنوان مثال اگر علامت گردش به راست تشخیص داده شود ، ربات به راست می چرخد ، اگر علامت گردش به چپ تشخیص داده شود ، ربات به چپ می چرخد ، اگر هیچ کدام شناخته نشود ، روبات به جلو ادامه می دهد. مجموعه داده ای که مورد استفاده قرار می گیرد ، نشان رسمی تردد از INI (2019) (Institut Fur Neuroinformatik) است ، این مجموعه داده دارای 43 کلاس است ، اما فقط دو کلاس مورد نیاز است. 00033 و 00034 پوشه در مجموعه داده علامت گردش چپ و راست است.

مرحله 1: الزامات

الزامات
الزامات
الزامات
الزامات
الزامات
الزامات

شرایط لازم برای این پروژه به شرح زیر است:

یک ربات آردوینو (اساساً arduino uno ، راننده موتور و موتور) (اگر از ربات استفاده نمی کنید نیازی نیست)

تمشک پی 4.

دوربین پی.

نرم افزار مورد نیاز:

پایتون 3

OpenCV 4.

جریان تنسوری

arduino IDE (اگر از ربات استفاده نمی کنید نیازی نیست)

Ros (اگر از ربات استفاده نمی کنید نیازی نیست)

ایده پایتون مورد علاقه شما هر چه باشد (در مورد تمشک pi ، من از Thonny استفاده می کنم).

برای راه اندازی OpenCV و Tensorflow ، دستورالعمل های Adrian را دنبال کنید. پیوند:

توصیه می کنم تا آنجا که ممکن است آموزشهای او را مشاهده کنید ، آنها واقعاً جالب هستند و هم برای مبتدیان و هم واسطه مفید هستند.

مرحله 2: آموزش داده ها

اسکریپت قطار برای دسترسی به مجموعه داده ای طراحی شده است که شامل 50،000 تصویر از 43 کلاس است. اسکریپت با استفاده از انواع کتابخانه ها در پایتون نوشته می شود: os - این برای پیوند دادن اسکریپت پایتون به دایرکتوری صحیح که مجموعه داده در آن قرار دارد ، است. Matplotlib - این برای نمایش داده ها از مدل آموزشی است. Tensorflow و keras - اینها کتابخانه هایی هستند که برای ایجاد مدل شبکه عصبی مصنوعی استفاده می شوند ، از آنها برای طراحی مدل استفاده می شود. Numpy - این کتابخانه برای تبدیل تصاویر به یک آرایه است که می تواند در مدل برای بازیابی یک پیش بینی قرار گیرد.

اسکریپت پیوست کد پایتون برای ساختن مدل از مجموعه داده است. این شامل دوبعدی کانولوشن با ورودی (5 ، 5) و فعال سازی ریلو و سپس تجمع است ، پس از انجام این کار ، ورودی از طریق یک کانولوشن دیگر با ورودی (3 ، 3) با همان فعال سازی و یکپارچه سازی عبور می کند. این آخرین بار قبل از صاف شدن اتفاق می افتد و سپس چگالی به میزان کلاسهای موجود اعمال می شود ، در این مورد 43.

گام بعدی تدوین مدل بود. این قسمتی است که بهینه ساز را تنظیم می کند ، یک sgd مناسب ترین بود زیرا این شبیه بهینه ساز مورد استفاده در تکلیف 1 بود. Sgd مخفف شیب گرادیان تصادفی است. همچنین در کامپایلر ضرر باید تنظیم شود ، انتخاب ضرر sparse_categorical_crossentropy بهترین تناسب است زیرا دسته ها به صورت اعداد صحیح هستند و مدل پیش بینی برای هر کلاس را به صورت شناور بین 0 تا 1. 1 ارائه می کند که 100٪ دقت دارد.

پس از اتمام کامپایلر ، باید یک ژنراتور برای مدل مورد استفاده قرار گیرد تا پردازش ورودی های تصویر را شروع کند. ژنراتور از چندین قسمت تشکیل شده است: training_set - این پیوند به مجموعه داده مورد استفاده برای آموزش است ، gav_per_epoch - این تعداد مراحل در هر دوره است که لازم است ، دوره ها - این چند بار برنامه از طریق مجموعه ای کامل از داده ها تکرار می شود ، validation_data - این پیوند به مجموعه داده مورد استفاده برای اعتبار سنجی است ، مراحل اعتبارسنجی - تعداد مراحل مورد استفاده برای اعتبار سنجی ، اعتبارسنجی در پایان هر دوره اتفاق می افتد.

به طور کلی ، یک پاک کردن کامل کل مجموعه داده باید در هر دوره کامل باشد. به عنوان مثال ، مجموعه داده ای از 1024 تصویر نیاز خواهد داشت: اندازه دسته = 32 ، مراحل در هر دوره = 32 ، دوره ها = 1. هر مرحله شامل کل اندازه دسته است ، بنابراین با اندازه دسته ای 32 مرحله 32 مرحله خواهد بود. بهتر است اندازه دسته ای بزرگتر از تعداد کلاس ها باشد ، زیرا اگر اندازه دسته کوچکتر باشد ، هر مرحله نمی تواند شامل یک تصویر از هر کلاس باشد.

پس از اتمام آموزش مدل ، با استفاده از matplotlib برنامه نمودار خروجی ها را ایجاد می کند ، این تاریخچه آموزش را از ابتدا تا انتها نشان می دهد. نمودار شامل دقت ، صحت اعتبارسنجی ، ضرر و زیان اعتبار است ، این نمودار در هر دوره تقسیم می شود تا نحوه پیشرفت آموزش را نشان دهد. مرحله نهایی این است که مدل را به عنوان یک فایل.h5 ذخیره کنید که بعداً برای فرایند پیش بینی قابل دسترسی است. صرفه جویی در مدل به این معنی است که هر بار که برنامه پیش بینی اجرا می شود ، برنامه آموزشی نیازی به اجرای مجدد ندارد. برنامه آموزشی می تواند تا 10 دقیقه در هر دوره بر روی یک تمشک پای طول بکشد.

پیوست اسکریپت آموزش:

مرحله 3: پیاده سازی پیش بینی های دوربین Pi

برنامه بعدی برنامه پیش نویس و ناشر است.

مرحله اول بارگذاری مدل با استفاده از model.load () است. مرحله دوم این است که فریم های دوربین pi را با استفاده از opencv تکرار کرده و سپس اندازه قاب را به همان اندازه اندازه های ورودی مورد استفاده در مرحله آموزش ، 32 32 32 پیکسل تغییر دهید. پس از انجام این کار ، قاب تغییر اندازه جدید در مدل با استفاده از model.predict () که ماتریسی را خروجی می دهد ، قرار می گیرد ، هر عنصر ماتریس از 0 تا 1 شناور است ، شاخص عنصر همان کلاسی است که نشان می دهد ، بنابراین اولین عنصر کلاس یک است و عدد پیش بینی قطعیت تصویر مربوط به آن کلاس است. به عنوان مثال.

توجه: اگر از طرف روبات استفاده نمی کنید. فقط خطوط را حذف کنید:

"واردات گل سرخ"

def talker (جهت):

پیام = رشته ()

pub = rospy. Publisher ('robot'، String، queue_size = 10)

rospy.init_node ("گوینده" ، ناشناس = درست)

پیام = جهت

rospy.loginfo (پیام)

pub.publish (پیام)"

"گوینده (جهت)"

پیوست اسکریپت دوربین Pi است.

مرحله 4: ربات آردوینو

آخرین مرحله اسکریپت برنامه ربات است.

این به زبان C ++ نوشته شده است و یک فایل.ino برای arduino uno است. این برنامه به کتابخانه ros نیاز دارد که می توانید آن را در مدیر کتابخانه ها در ide پیدا کنید. هنگامی که این فایل وارد می شود ، فایلهای نمونه ای وجود دارد ، من تصمیم گرفتم فایل led blink را گسترش دهم ، زیرا این یک هدف مشابه آنچه من نیاز دارم انجام می دهد. حلقه ادامه می یابد تا زمانی که برق قطع شود ، ابتدا به ربات موضوع گوش می دهد ، هنگامی که از آن موضوع دستور می گیرد دستور if را می بیند تا ببیند فرمان چه می گوید. اگر فرمان چپ باشد ، اسکریپت روش گردش به چپ را اجرا می کند ، اگر فرمان راست باشد ، روش گردش به راست را اجرا می کند و در غیر این صورت روش جلو را اجرا می کند. این سه روش بسیار شبیه یکدیگر هستند ، آنها به پین های دیجیتالی می گویند LOW (زمینی) یا 100 (PWM) این برای این است که ربات خیلی سریع عمل نکند و به راننده موتور بگوید فقط کمی از ولتاژ خروجی ترتیب این خروجی ها است که باعث می شود ربات به چپ و راست بپیچد یا به جلو حرکت کند ، این به دلیل جهت ولتاژ است که به موتورها می رود.

پیغام.ino برای arduino ضمیمه شده است.

مرحله 5: آزمایش

آزمایش کردن
آزمایش کردن
آزمایش کردن
آزمایش کردن
آزمایش کردن
آزمایش کردن

تصاویر پیوست شده است بنابراین پروژه از ابتدا تا انتها. تصویر اول آموزش در حال انجام را نشان می دهد. پس از اتمام کار ، یک چاپ از مدل ساخته شده نشان داده می شود. تصویر سوم یک پیش بینی از متن آموزش را نشان می دهد. این آخرین مرحله از آموزش آموزشی است. اگر به پوشه ای که اسکریپت آموزشی در آن است نگاه کنید ، یک نمودار و یک مدل ساخته شده است. نمودار باید مانند تصویر 4 در اینجا باشد ، این تاریخچه آموزش را از ابتدا تا انتها نشان می دهد.

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

گزارش دانشگاه من در مورد این پروژه ضمیمه شده است. لطفاً جزئیات بیشتر پروژه را بخوانید.

مرحله 6: همه فایلهای اضافی

همه فایلهای اضافی
همه فایلهای اضافی

برخی از این فایل های آزمایشی بود که من در طول راه ایجاد کردم.

توصیه شده: