بازشناسی تصویر با Keras و شبکه های عصبی پیچشی – راهنمای کاربردی


«بازشناسی تصویر» (Image Recognition) و «دستهبندی» (classification) زمینههای در حال رشد در حوزه «یادگیری ماشین» (Machine Learning) محسوب میشوند. به طور کلی، «بازشناسی شی» (Object Recognition)، یک ویژگی کلیدی در دستهبندی تصاویر به شمار میآید و فرصتهای تجاری برای این حوزه بسیار گسترده است. برای مثال، از دستهبندی تصاویر با اهداف زیر استفاده خواهد شد.
- جایگزینی «گذرواژه» (Password) با «بازشناسی چهره» (Facial Recognition)
- فراهم آوردن امکان تشخیص مانع برای وسایل نقلیه خودکار
- شناسایی ویژگیهای جغرافیایی از تصاویر ماهوارهای
موارد بیان شده تنها برخی از مثالهای متعددی هستند که نشان میدهد دستهبندی تصاویر چگونه آینده جهانی که بشر در آن زندگی میکند را تغییر خواهد داد. در ادامه، نحوه ساخت یک «دستهبند» (Classifier) تصاویر آموزش داده میشود.
دستهبندی تصاویر: خودروها و هواپیماها
در این مثال، دستهبندی تصاویر با استفاده از کتابخانه Keras انجام شده است. به طور مشخص، Keras برای ایجاد تمایز بین خودرو و هواپیما آموزش داده میشود. در ادامه، دو تصویری که انتظار میرود مدل بتواند آنها را از هم تفکیک کند ارائه شدهاند.


این مثال نسبتا ساده است و بنابراین از ۱۰۰ تصویر برای آموزش مدل استفاده شده است (۸۰ داده آموزش، ۲۰ داده آزمون). اگر هدف ساخت یک برنامه کاربردی باشد که بتواند چهرهها را با درجه بالایی از صحت شناسایی کند، نیاز به تصاویر بیشتری (صدها یا هزاران تصویر) دارد، زیرا شناسایی اشخاص از روی چهره آنها نسبت به شناسایی دو شی (در اینجا یک خودرو و یک هواپیما) کار دشوارتری است.
در راستای حل مساله مطرح شده، ابتدا کتابخانههای مورد نیاز «وارد» (Import) میشوند.
اکنون، آنچه «شبکه عصبی پیچشی» (convolutional neural network | CNN) نام دارد، راهاندازی میشود.
شبکه عصبی پیچشی چیست؟
«شبکه عصبی پیچشی» (Convolutional Neural Network) نوع خاصی از شبکههای عصبی است که برای تحلیل تصاویر بصری مورد استفاده قرار میگیرد.
- ابتدا، «پیچش» (Convolution) امکان استخراج ویژگیهای مناسب را از تصاویر ورودی فراهم میکند.
- در ادامه، «تجمع» (Pooling) امکان کاهشی ابعاد نقشه ویژگیها را به منظور حفظ مهمترین اطلاعات فراهم میکند.
- «مسطح کردن» (ٰFlattening) امکان سازماندهی حجمهای سهبُعدی را در یکبُعد فراهم میکند.
- شکل دادن لایههای کاملا متصل امکان حصول اطمینان از اتصال به همه فعالسازیها در لایه پیشین را فراهم میکند.
در ادامه، فرایند بیان شده پیادهسازی میشود.
اکنون، میتوان CNN را کامپایل کرد و دستهبند را آموزش داد. در اینجا از binary_crossentropy به عنوان «تابع زیان» (Loss Function) استفاده میشود. دلیل انتخاب «آنتروپی متقاطع دودویی» (Binary Crossentropy)، آن است که تصاویر بر پایه صفر و یک هستند، برای مثال 0 = car و 1 = plane. هنگامی که به «زیان» (Loss) ارجاع داده میشود، منظور درجه خطا در مدل است، شایان ذکر است که زیان بیشتر به معنای وجود خطای دستهبندی بیشتر است.
آموزش دستهبندی
اکنون زمان آن رسیده که CNN را کامپایل و دستهبند را آموزش داد. در اینجا، ۲۰ دوره (۲۰ پاس رو به عقب و رو به جلو که برای آموزش وزنهای شبکه عصبی مورد استفاده قرار میگیرد) در طول ۸۰ گام انتخاب میشود.
اکنون که مدل آموزش دید، میتوان زیان و صحت مدل را در طول ۲۰ دوره ترسیم کرد.
در ادامه، تصویر نمودار ارائه شده است.


در این مثال، میتوان مشاهده کرد که زیان و صحت، بین دوره دو و سه، به ترتیب کمینه و بیشینه شدهاند. بنابراین، مدل مجددا با دو دوره به جای بیست دوره، آموزش داده میشود.
با توجه به آنکه در اینجا با دادههای کاملا سادهای کار میشود، تنها نیاز به دو دوره برای آموزش دادن مدل به صورت موفقیتآمیز است. شایان توجه است که دورههای بیشتر منجر به بیش برازش میشوند.
دستهبندی تصویر
پس از آموزش مجدد، میتوان از تصاویر دیده نشده یک خودرو و یک هواپیما برای آزمودن مدل استفاده کرد.
در این مثال، هنگامی که تصویر خودرو به مدل داده میشود، مدل به درستی آن را به عنوان «۰» (خودرو) تشخیص میدهد.
اکنون، تصویر هواپیما به مدل داده میشود تا از این جهت نیز ارزیابی شود.
این بار، دستهبند به درستی تصویر هواپیما را تشخیص داد.
نتیجهگیری
در این راهنما چگونگی ساخت یک شبکه عصبی پیچشی و آموزش دادن آن برای دستهبندی تصاویر بیان شد. همچنین، روش ارزیابی صحت دستهبندی نیز مورد بررسی قرار گرفت.
اگر نوشته بالا برای شما مفید بوده، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای هوش محاسباتی
- مجموعه آموزشهای شبکههای عصبی مصنوعی
- مجموعه آموزشهای آمار، احتمالات و دادهکاوی
- مجموعه آموزشهای برنامهنویسی پایتون
- معرفی منابع آموزش ویدئویی هوش مصنوعی به زبان فارسی و انگلیسی
^^