مقدمه و نقشه راه پروژه
به این راهنمای تخصصی خوش آمدید. در این مقاله آموزشی، ما مرزهای پردازش سیستمهای نهفته (Embedded Systems) را جابهجا کرده و یک معماری کاملاً صنعتی برای اجرای شبکههای عصبی بینایی ماشین روی میکروکنترلرهایی با منابع محدود طراحی خواهیم کرد. هدف نهایی، پیادهسازی سیستمی است که با دریافت بیوقفه دادههای تصویری، حضور انسان (Human Presence Detection) را با بالاترین دقت و پایداری تشخیص دهد.
ما در این مسیر، یک اکوسیستم کامل را به کار میگیریم: پلتفرم Edge Impulse برای مهندسی داده و آموزش مدل، نرمافزار STM32CubeMX برای پیکربندی دقیق سختافزار بر اساس استاندارد CMSIS-PACK، و رویکرد برنامهنویسی Bare-Metal مجهز به تکنیکهای پیشرفته مدیریت حافظه (Zero-Copy) و فیلترهای پایداری زمانی.

بخش اول: معماری سختافزار و تحلیل قطعات
انتخاب صحیح سختافزار، زیربنای یک سیستم هوش مصنوعی پایدار در لبهی شبکه (Edge) است.
۱. میکروکنترلر STM32F4 هسته اصلی پردازش ما، میکروکنترلر STM32F4 (مجهز به هسته ARM Cortex-M4) است که دارای واحد پردازش سیگنال دیجیتال (DSP) و واحد ممیز شناور (FPU) سختافزاری است. وجود این واحدها برای اجرای سریع محاسبات ماتریسی در شبکههای عصبی کاملاً حیاتی است. افزون بر این، وجود رابط سختافزاری اختصاصی دوربین (DCMI) در این تراشه، بار پردازشی خواندن پیکسلها را از دوش CPU برمیدارد. با کلاک تنظیمشده روی ۱۶۸ مگاهرتز، این میکروکنترلر بستری بینقص برای اجرای مدلهای TinyML فراهم میکند.
۲. ماژول دوربین OV2640 دوربین OV2640 یک سنسور تصویر ۲ مگاپیکسلی است. ما این دوربین را با استراتژیهای زیر پیکربندی میکنیم:
- رزولوشن QQVGA (160x120): این رزولوشن بهینهترین حالت برای تولید کادر مربعی شبکه عصبی است و سایز بافر تصویر را به زیر ۲۰ کیلوبایت کاهش میدهد.
- پروتکل I2C: تنظیمات دوربین از طریق پروتکل I2C در رجیسترهای سنسور نوشته میشود. (برای پایداری بیشتر باس I2C، از توابع مموری و سیگنال Repeated-START استفاده میکنیم).
- گذرگاه DCMI: پیکسلهای تصویر از طریق یک گذرگاه موازی به همراه سیگنالهای همگامسازی (VSYNC ،HSYNC و PIXCLK) به میکروکنترلر ارسال میشوند.
- فرمت YUV422: این فرمت، اطلاعات روشنایی تصویر (Y) را از اطلاعات رنگ (U و V) جدا میکند. از آنجا که شبکه ما خاکستری است، میتوانیم با استخراج مستقیم بایتهای Y، تصویر را بدون محاسبات سنگین ریاضی به سیاه و سفید تبدیل کنیم.
- حالت Snapshot: دوربین طوری تنظیم میشود که تنها با فرمان میکروکنترلر یک فریم تصویر (عکس) را ثبت و ارسال کند.
بخش دوم: مهندسی دادهها و استودیو Edge Impulse
هوش مصنوعی بدون دادههای مهندسیشده، کارایی ندارد. در این بخش مدل خود را آموزش میدهیم.
گام ۱: آمادهسازی دیتاست استاندارد (Visual Wake Words)
به جای جمعآوری دستی تصاویر که ممکن است به سوگیری مدل منجر شود، از دیتاست استاندارد VWW استفاده میکنیم. با استفاده از یک اسکریپت پایتون سفارشی، دقیقاً ۵۰۰۰ تصویر تصادفی برای کلاس Human و ۵۰۰۰ تصویر برای کلاس Background جداسازی میشود. این کار محدودیتهای زمانی آموزش روی سرور را دور زده و از Overfitting (بیشبرازش) جلوگیری میکند.
گام ۲: خط لوله پردازش (طراحی Impulse)
- ابعاد ورودی (96*96): رزولوشن روی ۹۶ در ۹۶ پیکسل تنظیم میشود. این ابعاد یک تعادل عالی بین دقت مدل و مصرف حافظه (RAM) در میکروکنترلر ایجاد میکند.
- طیف خاکستری (Grayscale): تغییر عمق رنگ به خاکستری، حجم محاسبات و حافظه مورد نیاز مدل را به یکسوم کاهش میدهد.
- استراتژی تغییر سایز (Fit Shortest Axis / Center Crop): برخلاف روش مخرب Squash که هندسه تصویر را فشرده و دفرمه میکند، ما از روش Center Crop استفاده میکنیم. این الگوریتم ابتدا بزرگترین مربع ممکن را از مرکز تصویرِ 160x120 برش داده و سپس آن را به 96*96 کوچک میکند تا تناسب اندام انسان کاملاً حفظ شود.
گام ۳: آموزش شبکه با MobileNetV1 0.2
در بخش Transfer Learning، از معماری پیشرفته MobileNetV1 0.2 استفاده میکنیم. این مدل کوانتیزهشده (int8) فوقالعاده سبک است.
- فعالسازی Data Augmentation: برای مقاومسازی مدل در برابر چرخش، تغییرات نوری و نویز.
- آزادسازی وزنها (base_model.trainable = True): با فعال کردن این گزینه، وزنهای از پیش آموزشدیده شبکه از حالت انجماد خارج شده و خود را به طور کامل با فضای بدون رنگ (خاکستری) دیتاست ما تطبیق میدهند.
گام ۴: استقرار و خروجی CMSIS-PACK مدل آموزشدیده را به عنوان یک فایل فشرده با پسوند .pack خروجی میگیریم. این فایل شامل تمام کدهای شبکه عصبی، وزنها و الگوریتمهای پردازش سیگنال است. کامپایلر اختصاصی EON در این مرحله روشن است تا کدها فشردهتر و بهینهتر شوند.
بخش سوم: پیکربندی سختافزار در STM32CubeMX
نرمافزار STM32CubeMX برای میزبانی از سختافزار دوربین و مدل هوش مصنوعی پیکربندی میشود.
- وارد کردن پکیج هوش مصنوعی با استفاده از استاندارد CMSIS-PACK، مدل آموزشدیده شما به عنوان یک افزونه رسمی (Middleware) به میکروکنترلر شناسانده میشود. فایل .pack به محیط CubeMX معرفی شده و از بخش Software Packs به پروژه اضافه میگردد.
۲. پیکربندی I2C و DCMI
- ارتباط I2C: سرعت پروتکل I2C روی حالت Standard Mode (100000 Hz) تنظیم میشود. سرعتهای بالاتر در فواصل طولانی سیمکشی ممکن است باعث اعوجاج سیگنال شوند.
- واحد DCMI: این سختافزار اختصاصی برای دریافت دادههای ویدیویی با سرعت بسیار بالا طراحی شده است.
- حالت Capture Mode روی Snapshot تنظیم میشود. حالت پیوسته (Continuous) باعث میشود دوربین بیوقفه فریمها را به سمت رم سرازیر کرده و باعث سرریز حافظه شود.
- گزینه Synchronization Mode روی Hardware تنظیم میشود تا میکروکنترلر از سیگنالهای VSYNC و HSYNC تبعیت کند.
- حالت JPEG Mode نیز غیرفعال (Disable) میماند.
۳. پیکربندی حافظه و DMA اگر CPU بخواهد تکتک بایتهای دوربین را در RAM بنویسد، سیستم کاملاً قفل (Block) میشود.
- تنظیمات DMA: درخواست DMA با جهت Peripheral to Memory و حالت Normal ایجاد میشود.
- پهنای داده (Data Width): هم برایPeripheral و هم Memory روی Word (32-bit) قرار میگیرد. DCMI دادهها را ۸ بیت ۸ بیت میگیرد، اما با این تنظیم، آنها را بستهبندی کرده و هر ۴ بایت را با یک دستور وارد RAM میکند که باعث کاهش ۷۵ درصدی ترافیک گذرگاه حافظه میشود.
- وقفهها: در بخش NVIC Settings، وقفههای DCMI global interrupt و DMA stream interrupt فعال میشوند.
بخش چهارم: توسعه کد و جریان دادهها در برنامهنویسی
کدنویسی این سیستم در زبان C/C++ بر اساس معماری غیرمسدودکننده (Non-blocking) و کاملاً امن مدیریت میشود. گامهای اصلی نرمافزاری به شرح زیر است:
- آمادهسازی دادهها (Zero-Copy):
- درخواست یک Snapshot از دوربین ارسال میشود.
- پس از دریافت داده خام (38.4 کیلوبایت برای QQVGA YUV422)، بافر تصویر در حافظه RAM ایزوله میشود.
- تغییر ابعاد و استخراج ویژگی (Center Crop):
- الگوریتم نرمافزاری با پرش از روی بایتهای رنگ (U و V)، تنها بایتهای روشنایی (Y) را استخراج میکند.
- همزمان با استخراج بایتهای سیاه و سفید، ابعاد تصویر فشرده میشود. الگوریتم اختصاصی Fit Shortest Axis، با استفاده از ریاضیات نقطه ثابت (Fixed-Point)، مربع مرکزی تصویر را بریده و به ابعاد 96*96 تغییر میدهد تا هیچ رم اضافی اشغال نشود.
- استنتاج شبکه عصبی (Inference):
- دادههای تصفیهشده به عنوان ویژگیهای ورودی تحویل کتابخانه Edge Impulse میشوند.
- توابع شتابدهنده CMSIS-NN، الگوهای تصویر را تحلیل کرده و گزارش احتمالاتی (مثلاً کلاس Human با دقت ۸۵٪) را صادر میکنند.
- فیلتر هوش مصنوعی و تحلیل خروجی (Temporal Filter):
- خروجی لحظهای هوش مصنوعی قابل اتکا نیست و ممکن است دچار خطای موقت شود. یک سیستم فیلتر زمانبندی نرمافزاری طراحی میشود.
- پنجره لغزان (Sliding Window): سیستم تنها زمانی رله خروجی را فعال میکند که مثلاً در ۷ فریم از ۱۰ فریم اخیر، انسان شناسایی شده باشد.
- هیسترزیس (Hysteresis): یک تایمر ضد-پرش (مثلاً ۵ ثانیهای) اضافه میشود تا اگر مدل برای یک لحظه انسان را گم کرد، سیستم بلافاصله دستگاهها را خاموش نکند.
نتیجهگیری
با یکپارچهسازی سختافزار قدرتمند STM32F4، پلتفرم Edge Impulse، و تکنیکهای پیشرفته برنامهنویسی Bare-Metal (مانند Zero-Copy و فیلترهای پایداری)، موفق شدیم یک سیستم تشخیص انسان صنعتی و بلادرنگ خلق کنیم. این معماری، گواهی بر قدرت واقعی TinyML در هوشمندسازی تجهیزات بدون نیاز به اینترنت و پردازندههای گرانقیمت است.
دانلود اسکریپت پایتون
امیدواریم از این آموزش استفاده برده باشید!
با سایر آموزش های اصفهان درایو همراه باشید!










