Filter by دسته‌ها
chatGTP
ابزارهای هوش مصنوعی
اخبار
گزارش
تیتر یک
چندرسانه ای
آموزش علوم داده
اینفوگرافیک
پادکست
ویدیو
دانش روز
آموزش‌های پایه‌ای هوش مصنوعی
اصول هوش مصنوعی
یادگیری بدون نظارت
یادگیری تقویتی
یادگیری عمیق
یادگیری نیمه نظارتی
آموزش‌های پیشرفته هوش مصنوعی
بینایی ماشین
پردازش زبان طبیعی
پردازش گفتار
چالش‌های عملیاتی
داده کاوی و بیگ دیتا
رایانش ابری و HPC
سیستم‌‌های امبدد
علوم شناختی
دیتاست
رویدادها
جیتکس
کاربردهای هوش مصنوعی
کتابخانه
اشخاص
شرکت‌های هوش مصنوعی
محصولات و مدل‌های هوش مصنوعی
مفاهیم
کسب‌و‌کار
تحلیل بازارهای هوش مصنوعی
کارآفرینی
هوش مصنوعی در ایران
هوش مصنوعی در جهان
مقاله
 تشخیص اشیاء با استفاده از الگوریتم DETR فیس‌بوک

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

زمان مطالعه: 5 دقیقه

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

نتیجه‌گیری

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

 

میانگین امتیاز / 5. تعداد ارا :

مطالب پیشنهادی مرتبط

اشتراک در
اطلاع از
0 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
[wpforms id="48325"]