مقدمه
سامانه بینایی انسان محرک های ورودی خود را با دقت و سرعت بالایی پردازش می کند. نشان داده شده است که پیچیدگی های موجود در محرک های بصری از جمله زاویه دید، شدت روشنایی محیط، میزان آشنایی و … باعث افزایش زمان پردازش می شود. این زمان پردازش بیشتر ناشی از بار محاسباتی بیشتر است و فرضیه های گوناگونی برای توجیه این پدیده وجود دارد. یکی از مهمترین فرضیه ها پردازش های بازگشتی و وجود فیدبک ها است و از دیگر فرضیهها میتوان به وجود مدلهایی برای بازسازی تصاویر اشاره کرد.
از سوی دیگر مدل های تولید کننده از جمله شبکه های تولید کننده رقابتی، در این زمینه موفقیتهای چشمگیری داشتهاند.(بلاگ پست مربوط به آن)
در این راستا می توان تغییراتی مانند برطرف کردن پوشیدگی(Occlusion) در تصاویر به منظور افزایش نرخ بازشناسی اشیاء یا رنگی کردن آن یا افزودن ویژگی های مختلف به تصویر را اعمال کرد که این مهم بوسیله شبکه های عصبی ژرف و بدون اعمال هیچگونه ابزارهای مرسوم پردازشی غیر خودکار بدست می آید.
مجموعههای داده مورد استفاده
در رنگی کردن تصاویر سیاه و سفید از مجموعه داده CelebA (از اینجا دانلود کنید) استفاده شد و برای آزمایش دوم هم مجموعههای داده Cifar10 و Dogs vs. Cats (به ترتیب از اینجا و اینجا دانلود کنید) مورد استفاده قرار گرفت.
آماده کردن مجموعههای داده
برای آزمایش اول، تعداد 1000 نمونه از مجموعه داده CelebA انتخاب شد و به نسبت 70 به 30 به مجموعه آموزش و آزمون تقسیم شد. برای هر 1000 نمونه جفت های عکس رنگی و سیاه و سفید همان عکس به صورت به چسبیده با ابعاد 256 در 256 تهیه شد.
نمونه جفت تصویر رنگی و سیاه و سفید
برای آزمایش دوم، برای هر دو مجموعههای داده Cifar10 و Dogs vs. Cats جفت های تصاویر دارای پوشیدگی و بدون پوشیدگی به صورت به هم چسبیده با ابعاد 256 در 256 ایجاد شد ولی تعداد نمونه های آموزش برای Cifar10 تعداد 1000 تا و برای Dogs vs. Cats تعداد 600 تا بود.
نمونه جفت تصویر دارای پوشیدگی و بدون پوشیدگی
معماری مدل
در این دو آزمایش از معماری pix2pix (بلاگ پست مربوط به آن) استفاده شده که کد آن توسط گوگل در فریمورک تنسورفلو در گیتهاب آن ارائه شده است.
معماری Generator
در این شبکه از ساختار Encoder-Decoder استفاده شده است. در ابتدا تعدادی لایهی convolution در لایههای اول به منظور کوچک کردن طول و عرض و بزرگ کردن عمق، و بعد تعدادی لایهی TransposeConvolution برای بزرگ کردن طول و عرض و کوچک کردن عمق تا رسیدن به سایز اولیه میباشد، بدین صورت عکس ورودی را تا یک جایی کوچک شده و سپس به ابعاد اولیه می رسد.
ایدهی استفاده شده در این شبکه، وجود skip connection است ، به این صورت که از لایه ی n ام encoder به لایه n ام decoder یک connection وجود داردکه برای انتشار گرادیانها میباشد که اصطلاحا به آن U–Net می گویند.
معماری Discriminator
این شبکه وظیفهی این را دارد که تشخیص دهد که عکس ورودی از عکسهای مجموعه آموزش است یا اینکه به وسیله Generator تولید شده است.
در این شبکه میتوانیم در خروجی به جای داشتن یک سیگموید از یک ماتریس 30 در 30 در 1 استفاده میکنیم. توضیحات مربوط به ساختار این شبکه و توابع خطا Generator و Discriminator را میتوانید در اینجا بخوانید.(کد مربوط به ساختار این مدل)
علاوه بر مدل pix2pix، از یک autoencoder تماما کانولوشنی هم به منظور رفع پوشیدگی در تصویر استفاده شده است. نحوه آموزش این autoencoder، به این صورت بود که عکس دارای پوشیدگی به عنوان ورودی به شبکه داده میشد و به عنوان لیبل همان عکس، بدون پوشیدگی استفاده میشد و انتظار میرفت که نگاشت به این این دو حالت را یاد بگیرد. کد مربوط به جزییات پیاده سازی این شبکه را میتوانید در اینجا ببینید.
نتایج
نتایج زیر بر روی دیتاست Cifar10 به دست آمده است:
تست مدل روی 10000 نمونه بدون پوشیدگی: 88.22 درصد دقت
تست مدل روی 10000 نمونه با پوشیدگی: 39.44 درصد دقت
تست مدل روی 10000 نمونه آکلود شده که به خودرمز نگار داده شده و بعد با مدل تست شده: 52.30 درصد دقت
تست مدل روی 1000 نمونه آکلود شده که به مدل pix2pix داده شده و بعد با مدل تست شده: 11.80 درصد دقت
احتمال میرود که دلیل افت دقت در زمانی که از pix2pix استفاده میکنیم، تغییر سایز عکس اصلی که 32 در 32 است به 256 در 256 باشد.
نمونههایی از تصاویر در آزمایش رفع پوشیدگی
نمونههایی از تصاویر در آزمایش رنگی کردن
کلیه کدهای مربوط به تولید مجموعههای داده و آموزش شبکه را میتوانید در گیتهاب ببینید.
شبکه های اجتماعی