تشخیص اشیا
آموزش‌های پایه‌ای هوش مصنوعیآموزش‌های پیشرفته هوش مصنوعیبینایی ماشینپایتون و ابزارهای یادگیری عمیق

تشخیص اشیاء با استفاده از الگوریتم DETR فیس‌بوک

    0

    پیش از این سعی کردیم افراد حاضر در تصاویر بی­‌کیفیتی که از اینترنت گرفته شده‌­اند را تشخیص دهیم. برای این کار از سیستم محبوب تشخیص اشیاء YOLO استفاده کردیم. این بار قصد داریم الگوریتم DETR را بررسی کنیم. هدف ما تشخیص افراد در تصاویر خام ویدئویی بود. ولی همان­‌طور که در نمونه­ پایین مشاهده می‌­کنید، به خاطر کیفیت پایین تصویر قادر به تشخیص همه‌ افراد نبودیم.

    DETR

    خروجی YOLO بعد از بازیابی یک فریم و تشخیص خودکار افراد موجود در آن – عکس مربوط به تصویر ویدئویی از منطقه ای پرتردد در استکهلم می‌باشد. همانطور که می‌بینید این الگوریتم از تشخیص چندین نفر باز مانده است.

    اخیراً به مقاله­‌ای جالب از طرف تیم تحقیقاتی فیسبوک برخوردم. گروه فیسبوک، الگوریتم DETR یا ترنسفرمر تشخیص Detection TRansformer را در دسترس عموم قرار داده است. DETR یک الگوریتم تشخیص اشیاء است که قابلیت استفاده در کتابخانه‌ پای تورچ را نیز دارد.

    در این نوشتار سعی داریم عملکرد DETR را روی چند تصویر باکیفیت و بی­‌کیفیت امتحان کنیم.

    مقدمه‌­ای بر DETR

    DETR

    این تصویر معماری DETR را نشان می دهد.
    DETR می‌تواند (به صورت موازی) با ترکیب یک شبکه عصبی پیچشی (CNN) متداول با یک معماری ترنسفرمر، مجموعه‌ نهایی تشخیص‌ها را پیش‌بینی کند. طی مرحله‌ آموزش، فرآیند تطبیق دوبخشی پیش‌بینی‌ها را منحصراً به کادرهای محصورکننده حقیقت پایه اختصاص می‌دهد. آن پیش‌بینی‌هایی که با هیچ کادری از حقیقت پایه جفت نمی‌شوند، در کلاس “بدون شیء” یا تهی (Ø) قرار می‌گیرند.

     

    DETR می‌­تواند ۹۱ کلاس را، از انسان گرفته تا مسواک، تشخیص دهد. اجازه دهید قدرت DETR را در یک تصویر به عنوان نمونه نشان دهیم. بدین منظور این گام‌­ها را روی GPU (واحد پردازش گرافیکی) انجام می‌دهیم:

    1. مدل DETR را نمونه‌­سازی و وارد GPU می‌­کنیم.
    2. طبقاتی که DETR می‌­تواند تشخیص دهد را تعریف می­‌کنیم.
    3. تصویر را بارگزاری کرده و آن­ را نرمال­‌سازی می‌­کنیم. در این مرحله باید به این مسئله دقت کنیم که تصویر فرمت RGB داشته باشد (۶۰۰×۸۰۰).
    4. به کمک سامانه ­Cuda تصویر را وارد GPU می­‌کنیم.
    5. تصویر خود را وارد مدل کرده و این پیش‌­بینی‌­ها را دریافت می‌­کنیم:

    i: کادرهای محصورکننده­ اطراف اشیایی که تشخیص داده شده‌اند؛

    ii: احتمالات مربوط به پیش‌بینی برای هرکدام از ۱۰۰ تصویر مشخص شده.

    برای مورد ii، برای هر کدام از تصاویر تشخیص داده شده یک توزیع از مقادیر مربوط به هر کلاس در دست داریم. بعد از نرمال­‌سازی آن با (برای نمونه) یک تابع بیشینه‌‎­هموار softmax، برای هر تصویر یک بردار اندازه (۱, N_CLASSESکه در آن N_CLASSES = 91) و احتمالات را به دست می‌­آوریم. شکل خروجی: (۱۰۰,۹۱).

    1. سپس عملیات argmax را برروی هر ردیف از خروجی­‌های قبلی اجرا می‌­کنیم تا شاخص مربوط به کلاس را به دست بیاوریم که احتمال جدا کردن شیء را از طبقات دیگر به حداکثر می­‌رساند. توجه داشته باشید اگر قرار است فقط به استفاده از argmax توجه داشته باشیم، نیازی نخواهد بود که از قبل با استفاده از تابع بیشینه­‌هموار نرمال‌­سازی انجام دهیم (argmax شاخص احتمال بیشینه­ در بردار احتمالات همه­ طبقات است). شکل خروجی: (۱۰۰,۱).
    2. حالا که کلاس پیش‌­بینی شده برای هر شیء تشخیص داده شده را داریم، می‌­توانیم بر روی تصویر، کادر محصورکننده رسم کنیم تا شیء و کلاس مربوط به آن مشخص شوند. مختصات این کادر یکی از خروجی­‌های DETR در گام پنج است.

    طراحان DETR یک co-lab را فراهم آورده‌­اند تا نشان دهند استفاده از آن چقدر آسان است. آن‌­ها بیان می‌­کنند:«DETR با استفاده از نرمال‌­سازی استاندارد ImageNet، کادرهای محصورکننده‌ای تولید می‌کند که مختصات تقریبی آن‌ها به فرمت [w,h,مرکزy,مرکزx] مشخص می‌شود ( [مرکزy,مرکزx] مختصات مرکز کادر، w عرض و h ارتفاع آن هستند). از آن­جایی که مختصات به ابعاد تصویر بستگی داشته و مقادیر بین ۰ تا ۱ را به خود می­‌گیرد، پیش‌­بینی‌­ها را به مختصات دقیق تصویر تبدیل کرده و آن­ را به منظور تصویری‌­سازی، وارد فرمت [x0,y0,x1,y1]  می­‌کنیم.»

    عملکرد DETR برروی تصاویر با کیفیت و بی‌­کیفیت

    ما از منبع کدی که در co-lab قرار داده شده استفاده کردیم تا بتوانیم همه­ عملیات را برروی GPU انجام دهیم. این قسمت از نوشتار را با تجزیه و ­تحلیل خروجی DETR از یک تصویر باکیفیت شروع می­‌کنیم.

    DETR

    تصویر اصلی که در آن چند دانش‌آموز و یک معلم حضور دارند.

    با پیاده‌­سازی گام­‌های ۱ تا ۷ که بالاتر توضیح دادیم، می‌­توانیم با استفاده از DETR در چنین تصویری به تشخیص اشیاء بپردازیم.

    DETR

    خروجی DETR زمانی‌که هر ۱۰۰ شیء موجود در تصویر اصلی را تشخیص می‌دهد.
    بالای کادرهای مستطیل‌شکلی که می‌بینید، میزان احتمال شیء مشخص‌شده درج شده است. هرچقدر این احتمال به ۱ نزدیک‌تر باشد، می‌توانیم اطمینان بیشتری به صحت پیش‌بینی مدل داشته باشیم.

    حال می‌­توانیم بسته به هدفمان اشیاء را فیلتر (جدا) کنیم. برای مثال هدف ما این­جا تشخیص افراد است. بنابراین علاوه بر اجرای قدم‌های ۱ تا ۷، باید تنها کادرهایی را رسم کنیم که عنوان مربوط به آن‌ها «فرد» است.

    DETR

    خروجی DETR زمانی‌که افراد را در تصویر اصلی شناسایی می‌کند. بالای کادرهای مستطیلی شکل احتمال پیش‌بینی شیء تشخیص‌ داده شده را داریم. هرچه این مقدار به ۱ نزدیک‌تر باشد، احتمال این‌که مدل درست تشخیص داده باشد بیشتر است. در این تصویر می‌توان دید مدل از پیش‌بینی‌ها بسیار مطمئن است.

    حالا می­‌خواهیم عملکرد DETR را برروی فریمی گرفته‌­شده از تصاویر ویدئویی خامی بررسی کنیم که بی‌کیفیت هستند. برای این قسمت از نمونه تصاویری استفاده می‌­کنیم که از دوربینی در گوتنبرگ سوئد گرفته شده است. در نمونه اول ۱۷ فرد دیده می‌­شوند (توسط انسان).

    همان‌طور که در شکل پایین مشاهده می‌کنید، می­‌توان افراد را به صورت دستی تشخیص داد. اما این کار در عمل زحمت و وقت زیادی خواهد برد. به همین دلیل از ابزاری هم­چون DETR استفاده می­‌کنیم که در تشخیص اتوماتیک افراد مفید واقع می‌­شود.

    DETR

    تشخیص دستی افراد در تصویر ویدئویی از گاتنبرگ سوئد.
    در این تصویر ۱۷ نفر دیده می‌شوند.

    می­‌خواهیم بدانیم مدل ما می‌­تواند چند نفر را با درصد اطمینان قابل قبولی پیش­‌بینی کند. می‌­توان این سطح اطمینان را به عنوان یک هایپرپارامتر قابل تغییر در نظر گرفت. در تصویر پایین دو خروجی از DETR را نشان می‌­دهیم؛ سطح اطمینان در اولی ۷۰% در نظر گرفته شده است.

    DETR

    خروجی DETR از فریم اول تصاویر ویدئویی از گوتنبرگ سوئد.
    در این خروجی مدل توانسته است ۱۲ نفر را تشخیص دهد (با حداقل سطح اطمینان ۷۰%)

    سطح اطمینان برای دومین خروجی پایین­‌تر آمده و روی ۱۰% تنظیم شده است. در این مورد، مدل از پیش‌­بینی­‌های خود اصلاً اطمینان ندارد زیرا حداقل احتمال پیش­بینی ۰.۱۰ است.

    تا این‌جا دریافتیم که سطح اطمینان یا احتمال کلاس پیش‌­بینی شده برای یک شیء، هایپرپارامتری کلیدی است. برخی از افرادی که در خروجی اول تشخیص داده نشدند، با احتمال پایین­تر از ۰.۷۰ توسط DETR تشخیص داده شده‌اند. برای روشن­‌سازی این مطلب اجازه دهید در همین تصویر سطح اطمینان را از ۰.۷۰ به ۰.۶۰ تغییر دهیم.

    DETR

    خروجی DETR از فریم اول تصاویر گرفته شده از گوتنبرگ سوئد
    در این خروجی مدل توانست ۱۸ نفر را تشخیص دهد (با حداقل سطح اطمینان ۶۰%).

    با این درصد اطمینان هنوز هم شاهد عدم تطابق‌­هایی در پیش‌بینی‌ها هستیم. دور اشیاء (در این­جا افرادی) که مدل با سطح اطمینان بالاتر از ۶۰% نتوانسته تشخیص دهد را دایره و روی مثبت‌های کاذب False positve (اشیائی که مدل تشخیص داده اما فرد نیستند) خط قرمز می­‌کشیم.

    DETR

    خروجی DETR از فریم اول تصاویر گرفته شده از گوتنبرگ سوئد
    در این تصویر مدل توانسته است ۱۲ نفر را تشخیص دهد (با حداقل سطح اطمینان ۷۰%). سپس به صورت دستی دور افرادی که تشخیص داده شده‌اند دایره و روی مثبت‌های کاذب خط قرمز کشیدیم.

    مقایسه­ بین YOLO و DETR به زبان ساده

    همانطور که در قسمت مقدمه گفتیم، پیش از این با سیستم YOLO کار کردیم تا افراد را در فریم­‌های مختلف گرفته شده از تصاویر ویدئویی خام تشخیص دهیم. همان‌طور که دیدیم، مدل نتوانست افرادی را که تشخیصشان کار دشواری نبود، شناسایی کند. می­‌توانیم از این مثال در مقایسه­ بین YOLO و DETR استفاده کنیم. برای انجام این مقایسه دو فریم را که به صورت تصادفی از تصاویر ویدئویی گرفته شده‌­اند به کار می­بریم.

    این بار می‌­خواهیم اجرای YOLO در پای تورچ را به کار ببریم. بدین منظور از سیستم تشخیص‌ اشیا که پیشنهاد کرده‌اند در یک مسئله‌ تشخیص شیء عمومی (بدون جدا کردن کلاس «انسان») استفاده خواهیم کرد.

    همان گام­‌های ۱ تا ۷ را که در قسمت معرفی DETR بیان شد اجرا می­‌کنیم.

    ابتدا فریم­‌ها (گرفته شده از ویدئویی در استکهلم سوئد) را بازیابی می­‌نماییم. تصویر پایین یک تصویر بی­‌کیفیت است که تشخیص افراد در آن حتی برای انسان­‌ها هم دشوار است.

    DETR

    فریم اصلی شماره ۱ از تصاویر ویدئویی در استکهلم

    سپس با استفاده از YOLO شروع به تشخیص اشیاء موجود در تصویر می­‌نماییم. جالب بود که این الگوریتم نتوانست هیچ فردی را تشخیص دهد.

    DETR

    عملکرد YOLO در تشخیص شیء روی فریم شماره ۱ از تصاویر ویدئویی در استکهلم

    حال بیاییم با استفاده از DETR به تشخیص افراد بپردازیم. همانطور که در تصویر پایین مشاهده می­‌کنید، این بار افراد به آسانی و با حداقل سطح اطمینان ۰.۷۰ تشخیص داده شدند.

    DETR

    عملکرد YOLO در تشخیص افراد روی فریم اول از تصاویر ویدئویی در استکهلم

    اکنون همین کار را بر روی فریم دیگری امتحان می­‌کنیم.

    DETR

    فریم اصلی شماره ۲ از تصاویر ویدئویی از استکهلم

    در این تجربه نسخه چهارم الگوریتم YOLO توانست یک فرد را با سطح اطمینان ۰.۳۲ تشخیص دهد. از این­که چرا هیچ شیء دیگری در این فریم تشخیص داده نشده چیزی نمی­‌دانیم. همانطور که می­‌بینید همین یک مورد هم اشتباه تشخیص داده شده است. بر همین اساس باید از یک معماری دیگر با پارامترهای وزنی متفاوت استفاده کنیم. (شاید در یکی از مقاله­‌های آینده پارامترهای لازم برای چنین وظیفه‌­ای را مورد مطالعه قرار دهیم).

    DETR

    عملکرد YOLO در تشخیص اشیاء روی فریم ۲ از تصاویر ویدئویی استکهلم

    از سوی دیگر DETR عملکرد خوبی در مسئله‌ تشخیص فرد از خود نشان داد؛ نتیجه را در تصویر پایین مشاهده می­‌کنید.

    DETR

    عملکرد YOLO در تشخیص افراد روی فریم ۲ از تصاویر ویدئویی استکلهم

    بدیهی است این طرح آزمایشی از دقت کافی برخوردار نیست. به منظور مقایسه­ این دو معماری (YOLO و DETR) باید دیتاست بزرگ‌‎تری از تصاویر برچسب­‌دار داشته باشیم. پژوهشگران تیم تحقیقاتی فیس‌بوک تجزیه و تحلیل بسیار دقیق‌­تر و کامل­تری را انجام داده‌اند؛ در این قسمت جدولی از مقاله­ منتشر شده توسط این تیم را مشاهده می‌کنید که شبکه‌­های Faster R-CNN، ResNet-50 و ResNet-101 را مقایسه کرده است.

    تشخیص اشیا

    جدول ۱
    تشخیص اشیاء پیوسته با استفاده از ترنسفرمرها
    جدول بالا عملکرد ستون مهره معماری‌های Faster R-CNN، ResNet-50 و ResNet-101 را روی مجموعه‌ اعتبارسنجی COCO مقایسه می‌کند. قسمت بالایی جدول عملکرد مدل‌های Faster R-CNN را در کتابخانه‌ Detectron2 نشان می‌دهد؛ بخش دوم جدول عملکرد Faster R-CNN را با اصل GIoU (38)، تکنیک داده‌افزایی Random Crops و مدت زمان آموزش ۹ برابری، نشان می‌دهد. مدل‌های DETR در مقایسه با مدل‌های faster R-CNN که به عنوان خط پایه در نظر گرفته شده‌اند، عملکرد خوبی از خود نشان دادند. به بیان دقیق‌تر، این مدل‌ها در عین داشتن AP_sپایین‌تر، AP_L را به شدت تقویت کرده‌اند. به منظور اندازه‌گیری معیارهای FLOPS و FPS مدل‌های Faster R-CNN و DETR از روش Torchscript استفاده می‌کنیم. نتایجی که در اسمشان R101 وجود ندارد، مربوط به ResNet-50 هستند.

    نتیجه‌گیری

    در این مطلب به معرفی مختصر DETR پرداختیم که یک الگوریتم تشخیص‌­گر افراد با قابلیت کاربرد بسیار آسان است. سپس عملکرد آن ­را بر روی تصاویر باکیفیت و بی­‌کیفیت مشاهده کردیم. در آخر نیز DETR را با الگوریتم محبوب دیگری به نام YOLO مقایسه نمودیم.

     

    فریمورک های هوش مصنوعی و کتابخانه های معروف

    مقاله قبلی

    آینده‌آزمایی شهرها با راهکارهای هوشمند به اقلیم ؛ راه‌حل افزایش پایداری شهرها

    مقاله بعدی

    شما همچنین ممکن است دوست داشته باشید

    نظرات

    پاسخ دهید

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