تعیین جنسیت در تصاویر با یادگیری عمیق – به زبان ساده


هدف از این مطلب، آموزش ساخت مدلی برای تعیین جنسیت در تصاویر با یادگیری عمیق است. در واقع، هدف آن است که تصاویر به یک مدل یادگیری عمیق (در اینجا، شبکه عصبی پیچشی) داده شوند و مدل بتواند تشخیص بدهد که فرد حاضر در تصویر مرد یا زن است. با تنظیم دقیق یک «شبکه عصبی پیچشی» (Convolutional Neural Network) از نوع VGG16 که از پیش آموزش دیده و آموزش دادن آن با استفاده از تصاویر افراد مشهور انجام شده، مدل ساخته شده توانسته است به صحت ٪۸۶ در ارائه پاسخ صحیح روی «دادههای تست» (Test Data) دست پیدا کند. این بررسی موردی، مزیت استفاده از معماری مدلهای از پیش آموزش دیده را برای تکمیل ویژگیهای مجموعه داده نشان میدهد. کلیه پیادهسازیهای مورد استفاده در اینجا، با «زبان برنامهنویسی پایتون» (Python Programming Language) انجام شدهاند.
تعیین جنسیت در تصاویر با یادگیری عمیق
به طور معمول، انسان میتواند به راحتی بین مرد و زن موجود در تصویر زیر تمایز قائل شود، اما تشریح دقیق اینکه چرا میتواند چنین کاری را به این سادگی انجام دهد، دشوار است. بدون تعیین ویژگیهای دقیق، این تمایز میتواند برای رویکردهای یادگیری ماشین سنتی خیلی دشوار باشد. علاوه بر آن، ویژگیهایی که مرتبط با انجام این کار هستند همیشه دقیقا به یک شیوه بیان نمیشوند، بلکه برای هر انسانی کمی متفاوت به نظر میرسد.
الگوریتمهای یادگیری عمیق، راهکاری برای پردازش اطلاعات بدون ویژگیهای از پیش تعریف شده ارائه میکنند و پیشبینیهای دقیقی را با وجود تنوع در چگونگی بیان ویژگیها انجام میدهند. در این مقاله، یک شبکه عصبی پیچشی با هدف پیشبینی جنسیت افراد، روی تصاویر افراد مشهور اعمال شده است (سلب مسئولیت: نویسنده میداند که ظاهر شخص الزاما رابطه سببی با جنسیت او ندارد).
ابزارهای مورد استفاده
شبکههای عصبی پیچشی (ConvNets)، ابزارهایی را برای پیشبینی از روی تصاویر خام ارائه میکنند. یکی از قابلیتهای این الگوریتم، توانایی کاهش ابعاد تصویر با استفاده از توالی فیلترهایی است که به تعیین ویژگیهای متمایز کننده کمک میکنند. لایههای اضافی موجود در مدل، به کاربر برای تاکید بر رابطه اغلب غیرخطی بین ویژگیهای تعیین شده توسط فیلترها و برچسبهای تخصیص پیدا کرده به تصاویر کمک میکنند.
میتوان وزنهای اختصاص پیدا کرده به فیلترها و لایههای اضافی را برای کاهش خطای بین دستهبندیهای پیشبینی و مشاهده شده تنظیم کرد که پرداختن به آن به صورت جامع، از حوصله این مطلب خارج است. تعدادی ConvNets از پیش آموزش دیده، برای دستهبندی تصاویر چیزهای مختلف از هواپیما گرفته تا سگهای کورگی وجود دارند. میتوان با بهرهگیری از این شبکههای از پیش آموزش دیده، زمان محاسبات را کاهش داد و بر برخی از دیگر چالشهای موجود در مسیر حل مساله، از جمله ناکافی بودن نمونهها، با به کار گیری وزنهای مدل از پیش آموزش دیده و تنظیم دقیق آنها غلبه کرد.
مجموعه داده
مجموعه داده CelebA [+] حاوی 200K از تصاویر افراد مشهور برچسب زده شده با ۲۰ خصیصه شامل جنسیت است. تصاویر از شانه به بالا هستند، بنابراین بیشتر اطلاعات موجود در تصاویر مربوط به اجزای صورت و مدل مو هستند.

مدلسازی
در ادامه، گامهای مربوط به مدلسازی بیان شدهاند. برای راحتی کار، کد مربوط به مدل VGG16 که در اینجا مورد استفاده قرار گرفته، در ادامه قرار داده شده است.
استخراج ویژگی
در ادامه، از مدل VGG16 از پیش آموزش دیده استفاده خواهد شد و این مدل به طور دقیق تنظیم میشود تا به بهترین شکل، جنسیت را از روی تصاویر افراد مشهور تشخیص دهد.
از «include_top=False» برای حذف لایه کاملا متصل طراحی شده برای شناسایی طیفی از اشیایی که VGG16 برای شناسایی آنها طراحی شده است، استفاده میشود (برای مثال، سیبها، سگهای کورگی، قیچی)، و همچنین، وزنهای تخصیص داده شده به این مجموعه داده طی رقابتهای ImageNet، دانلود و برای ادامه راه استفاده میشوند.
جدولی که در ادامه آمده، معماری پیچشی برای VGG16 را نمایش میدهد؛ میلیونها وزن برای همه «پیچشها» (Convolutions) وجود دارد که کاربر میتواند از میان آنها انتخاب کند و یا مدل را با مقادیر از پیش آموزش داده به همان صورت فریز کرده و نگه دارد. با فریز کردن همه وزنهای مدل، خطر «کمبرازش» (Underfitting) وجود دارد، زیرا وزنهای از پیش آموزش داده شده، برای انجام یک کار خاص تخمین زده نشدهاند. از سوی دیگر، با آموزش دادن همه وزنها، خطر «بیشبرازش» (Overfitting) به وجود میآید زیرا مدل شروع به «حفظ کردن» تصاویر آموزشی داده شده به آن میکند و انطافپذیری مدل برای نمونههای جدید را از بین میبرد. بنا به دلایل بیان شده، با آموزش دادن آخرین بلوک از کد، موازنهای در این راستا انجام داده میشود.

اولین بلوکهای پیچشی در مدلهای VGG16، ویژگیهای عمومیتری مانند خطوط یا لکهها را شناسایی میکند، بنابراین هدف حفظ ویژگیهای مرتبط است. بلوکهای نهایی، مربوط به ویژگیهای خوش مقیاستر (برای مثال، زوایای مرتبط با نوک بال یک هواپیما) هستند، بنابراین وزنها با توجه به تصاویر افراد مشهور آموزش داده میشوند.
تلفیق مدل
استخراج ویژگی با بهرهگیری از پیچشها انجام و دو «لایه متراکم» (Dense Layer) به مدل اضافه میشوند که کاربر را قادر به انجام پیشبینی پیرامون تصاویر با توجه به ویژگیهای تعیین شده میکند.
کاربر میتواند از یک لایه متراکم مجرد استفاده کند، اما یک لایه اضافی پنهان امکان انجام پیشبینیها با توجه به تفسیرهای پیچیدهتر از ویژگیها را فراهم میکند. وجود لایههای متراکم زیاد، ممکن است موجب بیشبرازش شوند.
یک لایه نرمالسازی دسته (batch) که مقادیر فعالسازی لایه پنهان را مقیاس میدهد، برای کاهش «بیشبرازش» (Overfitting) و زمان محاسبات اضافه میشوند. آخرین لایه متراکم، پیشبینی پیرامون جنسیت را انجام میدهد (تصویر زیر).

با توجه به اینکه این امکان فراهم میشود که لایههای پیچشی و چگال مدل آموزش داده شوند، میلیونها وزن تخمین زده خواهند شد (تصویر زیر). با توجه به عمق شبکه ساخته شده، انتخاب بهترین نرخ یادگیری ثابت برای بهینهسازهایی مانند «گرادیان کاهشی تصادفی» (Stochastic Gradient Decent | SGD)، کاری هوشمندانه است؛ در عوض، از بهینهسازی ADAM استفاده میشود که نرخ یادگیری را برای ایجاد گامهای کوچکتر برای آموزش تنظیم میکند.
با استفاده از کتابخانه پایتون «کراس» (Keras)، «تولیدکنندههای داده» (Data Generators) برای «خوراک دادن» (Feed) به مدل راهاندازی میشوند و شبکه را برای مجموعه آموزش، برازش (Fit) میکنند.
پس از شش «دوره» (epochs)، مدل دارای صحت اعتبارسنجی بیشینه ٪۹۸ است. اکنون زمان اعمال مدل روی دادههای تست فرا رسیده است.
تست
یک مجموعه داده تست دارای ۵۰۰ تصویر به ازای هر جنسیت (۱۰۰۰ تصویر در کل) است.
مدل، احتمالهای پیشبینی شده برای هر تصویر را از طریق شبکه به دست میدهد و به سادگی میتوان بیشینه مقدار این احتمالها را به عنوان جنسیت پیشبینی شده در نظر گرفت.
مدل ساخته شده توانسته است که جنسیت افراد مشهور را با صحت ۹۸.۲٪ پیشبینی کند. این میزان از صحت، به توانایی انسان در تشخیص جنسیت بسیار نزدیک و قابل قیاس با آن است. پرسشی که در این وهله مطرح میشود آن است که آیا مدل به تصاویری غیر از تصاویر افراد مشهور نیز قابل تعمیم است؟ پاسخ به این پرسش، با سنجیدن چند تصویر از افراد غیر مشهور (نویسنده اصلی این مطلب) سنجیده شده است.
عملکرد مدل برای این تصویر خوب بوده و در واقع، مدل توانسته است جنسیت تصویر را ٪۹۹.۸ مرد تشخیص دهد.
مدل برای تصویر دوران جوانی نویسنده نیز به خوبی عمل کرده و با ۹۸.۶٪ جنسیت صاحب تصویر را مرد تشخیص داده است.
نتیجهگیری
پروژههای انجام شده، حاکی از قدرت ConvNets از پیش آموزش دیده و به دقت تنظیم شده برای حل مسائل یادگیری ماشین به ویژه در حوزه بازشناسی تصویر هستند. هر کاربرد، نیاز به رویکرد متفاوتی برای بهینهسازی فرایند مدلسازی دارد. به طور خاص، معماری مدل، نیاز به مهندسی شدن به شیوهای دارد که مشخصههای مجموعه داده را تکمیل کند.
اگر نوشته بالا برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای دادهکاوی و یادگیری ماشین
- مجموعه آموزشهای دادهکاوی یا Data Mining در متلب
- مجموعه آموزشهای آمار و احتمالات
- شبکه عصبی پیچشی (Convolutional Neural Networks) — به زبان ساده
- بازشناسی تصویر با Keras و شبکههای عصبی پیچشی — راهنمای کاربردی
- آموزش یادگیری ماشین با مثالهای کاربردی ــ بخش سوم
- یادگیری عمیق (Deep Learning) با پایتون — به زبان ساده
^^