شبکههای عصبی پیچشی چند وظیفهای (MTCNN) یکی از پیشرفتهترین انواع شبکههای عصبی پیچشی (CNN) هستند که برای انجام چندین وظیفه به صورت همزمان طراحی شده اند. این شبکهها به ویژه در زمینههای تشخیص چهره و شناسایی نقاط کلیدی چهره کاربرد دارند. با اوودونیکس همراه باشید تا با شبکههای عصبی پیچشی چند وظیفهای بیشتر آشنا شوید.
ساختار MTCNN
MTCNN از سه شبکه عصبی پیچشی جداگانه تشکیل شده است که به ترتیب زیر عمل میکنند:
1. شبکه پیشنهاد اولیه (P-Net):
• وظیفه: شناسایی نواحی مستطیلی که احتمالاً چهره در آنها قرار دارد.
• عملکرد: این شبکه با استفاده از فیلترهای کوچک، نواحی مستطیلی را در تصویر ورودی شناسایی میکند و نواحی با احتمال بالا را به عنوان پیشنهاد اولیه ارائه میدهد.
2.شبکه پالایش (R-Net):
• وظیفه: پالایش نواحی پیشنهادی از P-Net و حذف نواحی نادرست.
• عملکرد: این شبکه نواحی پیشنهادی را با دقت بیشتری بررسی میکند و نواحی نادرست را حذف میکند تا تنها نواحی با احتمال بالای چهره باقی بمانند.
3.شبکه خروجی (O-Net):
• وظیفه: شناسایی دقیق چهره و نقاط کلیدی آن.
• عملکرد: این شبکه نواحی پالایش شده را بررسی میکند و علاوه بر شناسایی چهره، نقاط کلیدی مانند چشمها، بینی و دهان را نیز شناسایی می کند.
MTCNN با ترکیب سه شبکه فوق، قادر است به صورت همزمان چندین وظیفه را انجام دهد. این شبکه ابتدا نواحی مستطیلی که احتمالاً چهره در آنها قرار دارد را شناسایی میکند، سپس این نواحی را پالایش میکند و در نهایت چهره و نقاط کلیدی آن را با دقت بالا شناسایی میکند.
کد mtcnn
بیاید نگاه دقیقتری به خوده کد mtcnn داشته باشیم:
وارد لینک mtcnn شوید تا کد را مشاهده کنید. تابع های فراوانی دارد اما از بی آنها باید ۴ تا از توابع را بلد باشیم که در کلاس mtcnn قرار دارند.
تابع min_face_size
1.دسترسی به ویژگی (Getter):
@property
def min_face_size(self):
return self._min_face_size
این بخش از کد یک متد getter تعریف میکند که مقدار متغیر خصوصی _min_face_size را برمیگرداند. با استفاده از دکوراتور @property، این متد به عنوان یک ویژگی قابل دسترسی است.
2.تنظیم ویژگی (Setter):
@min_face_size.setter
def min_face_size(self, mfc=20):
try:
self._min_face_size = int(mfc)
except ValueError:
self._min_face_size = 20
این بخش از کد یک متد setter تعریف میکند که مقدار متغیر _min_face_size را تنظیم میکند. دکوراتور @min_face_size.setter این متد را به عنوان setter برای ویژگی min_face_size تعریف میکند. در این متد، تلاش میشود تا مقدار ورودی mfc به عدد صحیح (integer) تبدیل شود. اگر این تبدیل موفقیتآمیز نباشد (یعنی اگر مقدار ورودی قابل تبدیل به عدد صحیح نباشد)، مقدار پیشفرض 20 به _min_face_size اختصاص داده میشود.
تابع detect_faces
وظیفه آن شناسایی چهرهها در یک تصویر و بازگرداندن لیستی از جعبههای محدودکننده (bounding boxes) و نقاط کلیدی چهرهها است.
ورودی:
• img: تصویر ورودی که باید پردازش شود. این تصویر معمولاً به صورت یک آرایه چندبعدی (مانند آرایههای NumPy) است که ابعاد آن به صورت (height, width, channels) تعریف میشود. این آرایه شامل مقادیر پیکسلی تصویر است.
خروجی:
• bounding_boxes: لیستی از جعبههای محدودکننده (bounding boxes) و نقاط کلیدی چهرهها که در تصویر شناسایی شدهاند. هر عنصر از این لیست یک دیکشنری است که شامل اطلاعات زیر میباشد:
• box: لیستی شامل مختصات جعبه محدودکننده به صورت [x, y, width, height] که x و y مختصات گوشه بالا-چپ جعبه و width و height عرض و ارتفاع جعبه هستند.
• confidence: مقدار اطمینان (confidence) مدل از شناسایی چهره در این جعبه.
• keypoints: دیکشنری شامل مختصات نقاط کلیدی چهره که شامل موارد زیر است:
• left_eye: مختصات چشم چپ به صورت (x, y).
• right_eye: مختصات چشم راست به صورت (x, y).
• nose: مختصات بینی به صورت (x, y).
• mouth_left: مختصات گوشه چپ دهان به صورت (x, y).
• mouth_right: مختصات گوشه راست دهان به صورت (x, y).
تابع mark_faces
وظیفه آن شناسایی چهرهها در یک تصویر و علامتگذاری آنها با استفاده از جعبههای محدودکننده و نقاط کلیدی است.
ورودی:
• image_data: دادههای تصویر به صورت بایت (bytes). این دادهها معمولاً از یک فایل تصویری خوانده شده یا از یک منبع دیگر به دست آمدهاند و به صورت بایت آرایهای (byte array) هستند.
خروجی:
• im_buf_arr: آرایه بایتی (byte array) که شامل تصویر علامتگذاری شده است. این تصویر شامل جعبههای محدودکننده و نقاط کلیدی چهرهها است که روی تصویر اصلی رسم شدهاند.
مقایسه دو تابع mark_faces و detect_faces
تابع detect_faces:
• ورودی: یک تصویر به صورت آرایه چندبعدی (مانند آرایههای NumPy).
• خروجی: لیستی از جعبههای محدودکننده و نقاط کلیدی چهرهها.
• وظیفه: شناسایی چهرهها در تصویر و بازگرداندن مختصات جعبههای محدودکننده و نقاط کلیدی چهرهها.
تابع mark_faces:
• ورودی: دادههای تصویر به صورت بایت (bytes).
• خروجی: آرایه بایتی (byte array) که شامل تصویر علامتگذاری شده است.
• وظیفه: شناسایی چهرهها در تصویر، رسم جعبههای محدودکننده و نقاط کلیدی روی تصویر، و بازگرداندن تصویر علامتگذاری شده.
نتیجهگیری
شبکههای عصبی پیچشی چند وظیفهای (MTCNN) با توانایی بالا در شناسایی و پردازش نواحی چهره و شناسایی نقاط کلیدی آن، یکی از ابزارهای قدرتمند در حوزه بینایی ماشین و یادگیری عمیق هستند. با پیشرفتهای مداوم در این زمینه، انتظار میرود که کاربردهای جدیدی برای این الگوریتمها به وجود آید که میتواند تاثیرات بزرگی در صنایع مختلف داشته باشد.
شبکههای عصبی پیچشی نوع پیشرفته(MTCNN)