API تنسورفلو (Tensorflow) – آشنایی با پلتفرم شناسایی اشیای گوگل
روشهای بسیار مختلفی برای بازشناسی تصویر (Image Recognition) وجود دارد. گوگل اخیراً API جدیدی برای شناسایی تصاویر به نام تنسورفلو (Tensorflow) منتشر ساخته است که موجب بهبود دید رایانهای در همهجا میشود. هیچیک از پیشنهادهایی که گوگل ارائه میکنند را نمیتوان سرسری گرفت. بنابراین تصمیم گرفتیم این API جدید را بررسی کنیم و بر روی برخی از ویدیوهای یوتیوب مورد استفاده قرار دهیم. نتایج را در ادامه میبینید.
شناسایی اشیا با استفاده از API تنسورفلو
کد کامل این پروژه را میتوانید در این ریپو گیتهاب ببینید.
در ادامه تجربه کار با این API را توضیح میدهیم. نخست آن را معرفی میکنیم.
تعریف API
در برنامهنویسی کامپیوتر، یک رابط کاربردی برنامهنویسی (API) مجموعهای از زیرروال ها (Subroutine)، تعاریف، پروتکلها و ابزارها به منظور ساخت یک نرمافزار کاربردی است.
معرفی API
این API بر روی مجموعه داده COCO (اشیای رایج در زمینه) تمرین داده شده است. این مجموعه داده از تصاویر ۳۰۰ کیلوبایتی از ۹۰ شیئی که در تصاویر روزمره پر استفاده هستند، تشکیل یافته است. نمونههایی از اشیا در ادامه ارائه شدهاند.
API تنسورفلو ۵ مدل متفاوت دارد که تعادلی بین سرعت اجرا و دقت قرار دادن مستطیلهای تشخیص برقرار میسازند. به جدول زیر توجه کنید.
نام مدل | سرعت | mAP CoCo | خروجی ها |
ssd_mobilenet_v1_coco | بالا | 21 | مستطیلهای تشخیص |
ssd_inception_v2_coco | بالا | 24 | مستطیلهای تشخیص |
rfcn_resnet101_coco | متوسط | 30 | مستطیلهای تشخیص |
faster_rcnn_resnet101_coco | متوسط | 32 | مستطیلهای تشخیص |
faster_rcnn_inception_resnet_v2_atrous_coco | پایین | 37 | مستطیلهای تشخیص |
در جدول فوق منظور از mAP «میانگین متوسط دقت» (mean average precision) است که برابر با حاصلضرب دقت در یادآوری شناسایی مستطیلهای تشخیص است. mAP معیار ترکیبی خوبی برای درک حساسیت شبکه به اشیای مطلوب و میزان دقت در اجتناب از شناسایی موارد نادرست است. هرچه امتیاز mAP بالاتر باشد، شبکه دقیقتر است، اما این امتیاز بالا به بهای کاهش سرعت اجرا به دست میآید.
در این لینک میتوانید اطلاعات بیشتری در مورد این مدلها به دست آورید.
استفاده از مستندات
ابتدا سبکترین مدل (ssd_mobilenet) بررسی شد. گامهای اساسی موارد زیر بودند:
- دانلود مدل فریز شده (Pb — Protobuf.) و بارگذاری آن در حافظه
- استفاده از کد کمککننده (helper) درونی برای بارگذاری برچسبها، دستهها، ابزارهای تصویرسازی و غیره.
- شروع یک نشست جدید و اجرای مدل بر روی تصویر
مراحل فوق در مجموع چندان پیچیده محسوب نمیشوند. مستندات API راهنمای خوبی برای طی مراحل اصلی است.
این مدل، عملکرد بسیار خوبی بر روی تصویر نمونه داشت که در ادامه ارائه شده است.
اجرا بر روی ویدیو
در ادامه عملکرد این API را بر روی برخی از ویدیوها بررسی کردیم. بدین منظور از کتابخانه Moviepy استفاده کردیم. مراحل اصلی به صورت زیر بودند:
- استفاده از تابع VideoFileClip برای استخراج تصاویر از ویدیو
- از تابع fl_image به منظور شناسایی همه تصاویر استخراج شده از ویدیو استفاده کردیم. این یک تابع جالب است که میتواند یک تصویر را بگیرد و تصویر اصلاح شده را جایگزین آن کند.
- در نهایت همه تصاویر اصلاح شده، در یک ویدیوی جدید ترکیب شدند.
اجرای این کد بر روی کلیپ ۳ تا ۴ ثانیهای در حدود یک دقیقه زمان برد. اما از آنجا که در این بررسی از یک مدل فریز شده که در حافظه بارگذاری شده بود، استفاده کردیم، میتوانستیم آن را بر روی یک رایانه که gpu ندارد نیز اجرا کنیم.
نتیجه کار بسیار شگفتانگیز بود. تنها با اندکی کدنویسی میتوان مستطیلهای تشخیص را با دقتی عالی بر روی تعداد زیادی از اشیای متداول ترسیم کرد. پرندگان در ویدیوی زیر به طور کلی شناسایی نشدند.
مراحل آتی
ایدههای مختلفی برای بررسی بیشتر این API میتوان مطرح کرد:
- امتحان مدلهای دقیقتر و با سربار (overflow) بیشتر برای مشاهده میزان تفاوت عملکرد
- یافتن روشهایی برای سرعت بخشیدن به API و تسهیل استفاده از آن برای شناسایی بیدرنگ اشیا بر روی دستگاههای همراه
- گوگل همچنین قابلیت استفاده از این مدلها برای انتقال یادگیری را نیز فراهم کرده است. یعنی میتوان مدلهای فریز شده را بارگذاری کرد و یک لایه خروجی دیگر با دستههای تصویری متفاوت به آن افزود.
اگر به این مطلب علاقمند هستید، احتمالا مطالب زیر نیز برای شما مفید خواهند بود:
- آموزش پردازش تصویر با OpenCV
- آموزش پردازش ویدئو
- آموزش طبقه بندی و بازشناسی الگو با شبکه های عصبی LVQ در متلب
==