درک دنیای بصری برای انسانها آنقدر ساده است که تقریبا تمامی عکسالعملهای ما نسبت به محیط بصری اطراف بهصورت ناخودآگاه انجام میگیرد. وقتی چیزی را میبینیم، اغلب اوقات برای تشخیص آن نیازی به مطالعه (ذهنی) نداریم. اما این مسئله در مورد کامپیوترها بسیار پیچیده است. تشخیص چهرهی انسان از دیگر اجسام و موجودات محیط، برای کامپیوترها یک مشکل بسیار بزرگ محسوب میشود.
علاوه بر این، حل این مسئله نیز نیازمند تلاش و هزینه بسیار بالایی خواهد بود. امروزه تکنولوژی تشخیص چهره و بینایی کامپیوتر از اصلیترین نیازهای علم و صنعت بهشمار میآیند. پیشرفت بسیاری از تکنولوژیهای امروزی از جمله خودروهای بدون راننده، نرمافزارهای تشخیص چهره، کارخانههای هوشمند که بتوانند وجود خطا و ناهماهنگی در خط تولید را تشخیص دهند و نرمافزارهایی که به شرکتهای بیمه امکان پردازش و دستهبندی اتوماتیک اسناد را بدهند، همگی به پیشرفت سیستم تشخیص تصویر و بینایی کامپیوتر بستگی دارند.
تعلیم بینایی به کامپیوتر سخت و پرهزینه است
یکی از راههای موثر برای حل این مشکل بهکارگیری فرادادهها برای دیتاهای بدون ساختار است. شاید استخدام یک متخصص برای طبقهبندی و جداسازی آرشیو فیلمها از آرشیو موسیقی کمی سخت بهنظر یرسد اما بهکارگیری همین افراد متخصص برای آموزش سیستم مسیریابی یک خودروی بدون راننده جهت تشخیص عابرین پیاده از دیگر خودروها و یا شناسایی، دستهبندی و فیلترکردن تصاویر روزانه میلیونها کاربر شبکههای اجتماعی تقریبا غیرممکن است.
بنابراین اولین راهحل این مشکل استفاده از شبکههای عصبی است. با اینکه از لحاظ تئوریک استفاده از شبکههای نورونی مرسوم جهت تحلیل تصاویر ممکن است، اما از لحاظ عملی و محاسباتی بسیار پرهزینه خواهد بود. برای مثال تحلیل یک تصویر نسبتا کوچک (50 × 50 پیکسل) نیازمند 900 داده ورودی و بیش از نیم میلیون پارامتر خواهد بود. شاید انجام این کار برای ماشینهای محاسباتی امکانپذیر باشد اما زمانی که بخواهیم تصاویر بزرگتر (500 × 500 پیکسل) را تحلیل و پردازش کنیم، تعداد ورودی و شبکههای نورونی مورد نیاز برای انجام این کار تقریبا غیرقابل شمارش خواهد بود.
چاره چیست؟
خوشبختانه با اعمال یک سری تغییرات در ساختار شبکههای عصبی، میتوان تصاویر بزرگتر را نیز پردازش کرد. این نوع شبکههای عصبی تغییر یافته را “شبکههای عصبی پیچیده” (CNNs) مینامند. یکی از مزایای شبکههای عصبی، کاربردپذیری آنها در مصارف مختلف است؛ اما پس از بهکارگیری آنها در پردازش تصاویر میبینیم که این مزیت به یک مشقت تبدیل میشود. اما با طراحی شبکههای عصبی مختص پردازش تصاویر، میتوانیم این ماموریت غیرممکن را تا حدی ممکن بسازیم.
یکی از مزیتهای شبکههای عصبی پیچیده، تشخیص دو پیکسل مجاور یکدیگر به عنوان دو پیکسل مرتبط است به همین دلیل برای پردازش پیکسلهای مجاور از یک سلول عصبی استفاده میشود. به بیان فنیتر، شبکههای عصبی پیچیده با فیلتر و تلفیق پیکسلهای مجاور در تصاویر، پردازش تصاویر از لحاظ حجم محاسباتی را تا حد زیادی کاهش میدهند. این در حالی است که در شبکههای عصبی معمولی برای پردازش هر پیکسل از یک سلول عصبی استفاده میشود که همین مسئله یکی از دلایل اصلی افزایش تعداد نورونهای عصبی مورد نیاز برای پردازش تصویر خواهد بود. ناگفته نماند که افزایش تعداد نورونهای عصبی موجب افزایش بار محاسباتی و درنتیجه کاهش دقت در محاسبات خواهد شد.
شبکههای عصبی پیچیده به جای اتصال هر ورودی به یک نورون، با محدود کردن روابط بین پیکسلهای تصاویر، هر نورون را مسئول پردازش یک دسته از پیکسلها میکند (3×3 یا 5×5 پیکسل برای هر نورون). بدین ترتیب، هر نورون مسئولیت پردازش بخش کوچکی از تصویر را به عهده میگیرد. این ساختار کم و بیش به ساختار عصبی نورونهای مغز که در آن هر سلول عصبی مسئولیت پاسخگویی به بخش خاصی از بدن را به عهده میگیرند، شباهتهایی دارد.
ساختار درونی شبکههای عصبی
فیلترینگ پیکسلها چگونه انجام میگیرد؟ راز انجام این کار در اضافه شدن دو لایه جدید به این شبکهی عصبی است: لایههای درهم پیچیده و لایههای ادقام کننده. در پایین مراحل پردازش را بهطور کامل شرح دادهایم. این مراحل در اصل به یک شبکه عصبی طراحی شده جهت تشخیص اینکه یک زن سالخورده در تصاویر وجود دارد یا خیر، مربوط میشود. قدم اول مربوط به لایهی درهم پیچیده است که این قدم خود شامل چند مرحله مجزا میشود.
1. ابتدا تصویر یک پیرزن را به یک سری قطعات 3×3 پیکسلی تبدیل میکنیم.
2. در قدم بعدی هریک از این قطعات را برای پردازش به درون یک نورون عصبی تک لایه میفرستیم.
3. سپس مقادیر خروجی را به شکلی که از لحاظ عددی محتوای قسمت خاصی از تصاویر را معرفی میکنند، دستهبندی میکنیم. هر پیکسل وظیفه تعریف ارتفاع، طول و رنگ (سه بعد مختلف) را برعهده دارد. بنابراین در این مورد، هر قطعه تعریفی 3×3×3 خواهد داشت. در ضمن برای پردازش ویدئوها، بُعد زمان نیز درنظر گرفته میشود.
حال نوبت به لایهی ادغام کننده میرسد که این دستههای سهبعدی یا چهار بعدی را دریافت کرده سپس آنها را به دستههایی با سایز و ابعاد کوچکتر تبدیل میکند. محصول بهدست آمده، دستههای ادغام شدهای هستند که تنها شامل بخشهای با اهمیت میشوند و بخشهای مشابه به یکدیگر و کماهمیت حذف شدهاند. این مرحله موجب کاهش حجم محاسبات تا بیشترین حد ممکن خواهد شد.
در مرحله پایانی، دستههای تغییر سایز یافته (کوچک شده) را به عنوان ورودی برای شبکههای عصبی استفاده میکنیم. از آنجایی که سایز دادههای ورودی در مرحله اول و دوم تاحد قابل توجهی کاهش داده شد، شبکههای عصبی معمولی هم میتوانند بدون هیچ دردسری این دادهها را پردازش کنند. خروجیهای بهدست آمده از این مرحله پایانی نشان دهنده مقدار کارایی سیستم در تشخیص تصاویر فرد سالخورده داخل تصاویر خواهد بود.
بهکارگیری شبکههای عصبی
ساخت شبکههای عصبی پیچیده ممکن است زمانبر و بسیار پرهزینه باشد. ناگفته نماند که اخیرا رابطهای برنامهنویسی مختلفی برای سازمانها طراحی شدهاند که به آنها امکان پردازش و تشخیص چهره را بدون نیاز به سیستم بینایی کامپیوتر شخصی یا تخصص در بخش یادگیری ماشینی را میدهد. در پایین مهمترین برنامههای کاربردی در این بخش را برایتان نام بردهایم.
Google Cloud Vision: این محصول شرکت گوگل که برپایه فریمورک TensoFlow و رابط برنامهنویسی REST عمل میکند، قادر است اشیاء و چهره افراد را تشخیص دهد. این رابط میتواند با استفاده از موتور جستجوی تصویری گوگل، تصویر مشابه به یکدیگر در سراسر وب را جستجو و پیدا کند.
IBM Watson Visual Recognition: این برنامه که به عنوان بخشی از پروژه Watson Developer Cloud شناخته میشود، از امکانات پیشفرض خوب و کارآمدی برخوردار است. این برنامه نیز همچون رابط کاربری گوگل از سیستم OCR و تشخیص NSFW برخوردار است. Clarif.ai میگوید: این سرویس تازه وارد به عرصه تشخیص تصاویر است که از رابط برنامه نویسی REST نیز پشتیبانی میکند. یکی از نکات جالب این برنامه، پشتیبانی از ماژولهای مختلفی است که میتوانند در ساخت الگوریتمهایی که قابلیت تشخیص شرایط مختلف از جمله جشن عروسی، مسافرت و غذا و رستوران را دارند، کمک کنند.
با اینکه این رابطهای برنامهنویسی و طراحی برای کاربردهای عمومی مناسب هستند، اما برای انجام وظایف تخصصی احتمالا به تهیه تجهیزات و دستگاههای حرفهای نیاز خواهد بود. خوشبختانه کتابخانههای الکترونیکی امروزی با ارائه دیتاها بهصورت از پیش محاسبه و بهینه شده، کار را برای دانشمندان امروزی بسیار آسان کردهاند و متخصصین میتوانند بدون نیاز به محاسبه و پردازش گام به گام دادهها، با خیال راحت بر روی آموزش مدلها تمرکز کنند. بسیاری از این مراکز از جمله TensorFlow، DeepLearning4J، Torchو Theano سالهاست که با موفقیت و در زمینههای مختلف مورد استفاده قرار میگیرند.