۴ آبان ۱۴۰۵ shraiwi.com ۳ دقیقه مطالعه

پیاده‌سازی بینایی ماشین شتاب‌یافته با SIMD روی میکروکنترلر ارزان‌قیمت ESP32-S3

پیاده‌سازی بینایی ماشین شتاب‌یافته با SIMD روی میکروکنترلر ارزان‌قیمت ESP32-S3 — SIMD-accelerated computer vision on a $2 microcontroller

خلاصه

این مقاله نشان می‌دهد چگونه می‌توان با استفاده از دستورات ۱۲۸ بیتی SIMD در میکروکنترلر دو دلاری ESP32-S3، الگوریتم تشخیص گوشه FAST را شتاب‌داد. این بهینه‌سازی عملکرد پردازش تصویر را به طور چشمگیری افزایش داده و پردازش فریم‌های ویدئویی را در لبه (Edge) مقرون‌به‌صرفه می‌کند.

میکروکنترلر ESP32-S3 با وجود قیمت بسیار پایین، یک تراشه قدرتمند محسوب می‌شود که از یک پردازنده دو هسته‌ای با فرکانس تا ۲۴۰ مگاهرتز، ارتباطات وای‌فای و بلوتوث، و مجموعه‌ای از امکانات جانبی بهره می‌برد. بررسی مستندات این تراشه نشان می‌دهد که از مجموعه محدودی از دستورات برداری یا همان SIMD پشتیبانی می‌کند. در همین راستا، یک توسعه‌دهنده با نوشتن نسخه شتاب‌یافته‌ای از الگوریتم تشخیص گوشه FAST (FAST feature detector) با استفاده از این دستورات اسمبلی، موفق شده عملکرد پردازش تصویر را به حدود دو برابر حالت مرجع برساند و یک فریم QVGA را در حدود ۶ میلی‌ثانیه پردازش کند.

چالش‌ها و محدودیت‌های معماری

نوشتن کد اسمبلی برای این تراشه بدون چالش نبوده و با محدودیت‌های عجیبی در مجموعه دستورات (ISA) همراه است:

  • عدم پشتیبانی از خواندن‌های ناهم‌تراز (Misaligned reads): از آنجا که سخت‌افزار اجازه خواندن مستقیم داده‌های ناهم‌تراز را نمی‌دهد، نویسنده مجبور شد از دستورات ویژه تراشه برای استخراج بخش‌های مورد نظر از ث شناسه‌های مجاور استفاده کند.
  • دستورات مقایسه علامت‌دار (Signed): دستورات مقایسه در ESP32-S3 تنها روی اعداد ۸ بیتی علامت‌دار کار می‌کنند، در حالی که داده‌های پیکسلی به صورت بدون علامت (Unsigned) ذخیره می‌شوند.
  • مشکلات مقادیر اشباع‌شونده (Saturating arithmetic): عملیات ریاضی در بخش SIMD این تراشه از نوع اشباع‌شونده هستند؛ به این معنا که تلاش برای کم کردن عدد ۱۲۸ از بایت‌ها جهت تبدیل محدوده [0, 255] به [-128, 127] با زیرسرریز مواجه شده و مقادیر بالا کلاپ می‌شوند.

ترفند بیتی برای حل مشکل محدوده اعداد

برای دور زدن محدودیت تفریق بدون استفاده از دستور تفریق، نویسنده از یک ترفند هوشمندانه بیتی استفاده کرد. تفریق عدد ۱۲۸ معادل با جمع کردن با مقدار منفی ۱۲۸ است. این کار را می‌توان با معکوس کردن بیت پرارزش (Most Significant Bit) به کمک عملگر XOR با ماسک 0x80 (0b10000000) به سادگی انجام داد (x ^ 0x80). با این ترفند، داده‌های پیکسلی بدون علامت به محدوده مناسب برای مقایسه و محاسبات تبدیل شدند.

نتایج و نگاه جامعه توسعه‌دهندگان

با اعمال این ترفندها و دور زدن محدودیت‌های سخت‌افزاری، توان عملیاتی الگوریتم FAST از ۵.۱ مگاپیکسل بر ثانیه به ۱۱.۲ مگاپیکسل بر ثانیه رسید که بهبودی چشمگیر محسوب می‌شود. این میزان پردازش برای کارهای بی‌درنگ (Realtime) بینایی ماشین و پردازش جریان ویدئویی VGA روی یک سخت‌افزار ارزان‌قیمت بسیار ایده‌آل است.

بحث‌های پیرامون این پروژه در هکرنیوز نیز جالب توجه بود. برخی کاربران اشاره کردند که کار با دستورات SIMD در ESP32-S3 به دلیل مستندات محدود، پیچیده است. همچنین مقایسه قدرت پردازشی این تراشه ارزان با کامپیوترهای قدیمی‌تر، پیشرفت عظیم سخت‌افزارهای امروزی را به نمایش می‌گذارد.

این مطلب به‌صورت کاملاً خودکار و با هوش مصنوعی از مقالهٔ اصلی و بحث هکرنیوز تهیه شده و ممکن است خطا داشته باشد. حقوق مطلب اصلی متعلق به نویسندهٔ آن است. قوانین و گزارش مشکل

این خبر را با دیگران به اشتراک بگذارید

خبرهای فناوری در قالب پست و ویدیوی کوتاه، در اینستاگرام هکرنیوز بلاگ. به‌زودی
هر خبر به محض انتشار، به‌همراه پادکست روزانه در کانال تلگرام هکرنیوز بلاگ.