تحتوي مقالتي السابقة على نفس العنوان تقريبًا ، مع وجود الفرق الوحيد في أنني صنعت عدسات لـ Snapchat باستخدام حسابي dlib و openCV ، واليوم أريد أن أوضح كيف يمكنك تحقيق النتيجة باستخدام التعلم الآلي. سيسمح هذا النهج بعدم الانخراط في التصميم اليدوي للخوارزمية ، ولكن للحصول على الصورة النهائية مباشرة من الشبكة العصبية.
هنا هو ما نحصل عليه:
ما هو pix2pix؟
هذه طريقة لتحويل صورة إلى صورة باستخدام شبكات التنافس (المعروفة باسم pix2pix).
اسم "pix2pix" يعني أن الشبكة مدربة على تحويل صورة الإدخال إلى صورة الإخراج المقابلة لها. فيما يلي أمثلة على هذه التحولات:
أروع ميزة من pix2pix هو تعدد الاستخدامات . بدلاً من إنشاء خوارزمية جديدة أو نموذج جديد لكل مهمة من المهام المذكورة أعلاه ، يكفي استخدام مجموعات بيانات مختلفة لتدريب الشبكة.
على عكس الأساليب المستخدمة سابقًا ، يتعلم pix2pix حل المشكلات بشكل أسرع بكثير باستخدام مجموعة تدريب أصغر. على سبيل المثال ، تم الحصول على النتائج أدناه عند التدريب باستخدام وحدة معالجة الرسومات Pascal Titan X GPU على مجموعة من 400 زوج من الصور وفي أقل من ساعتين.
كيف يعمل pix2pix؟
يستخدم pix2pix شبكتين عصبيتين يتعلمان بشكل متوازٍ:
- مولد كهربائي
- الممي
يحاول المولد إنشاء صورة مخرجات من بيانات تدريب المدخلات ، ويحاول المميّز تحديد ما إذا كانت النتيجة حقيقية أم تم إنشاؤها.
عندما ينتج المولد صورًا لا يمكن تمييزها (تمييز) عن الصور الحقيقية ، نبدأ في تدريب المُمييز عليها وعلى الصور الحقيقية. عندما ينجح المُميِّز في تمييز الصور الحقيقية عن الصور المولَّدة ، نبدأ مرة أخرى في تدريب المولد حتى يتعلم مرة أخرى خداع المميّز.
يؤدي "سباق التسلح" هذا إلى حقيقة أنه يصعب على الشخص تمييز الصور الحقيقية عن تلك الناتجة.
ممارسة
سنقوم بتدريب مولد التصفية الخاص بنا على Snapchat على صور بحجم 256 × 256 (ستحتاج الأحجام الكبيرة إلى مزيد من ذاكرة الفيديو). لإنشاء مجموعة بيانات ، استخدم الكود من البرنامج التعليمي السابق .
قمت بتنزيل العديد من صور الوجه وقمت بتطبيق مرشح "Thug Life Glasses" على كل منها. سوف تتحول إلى شيء مثل هذه الأزواج:
لإنشاء النموذج ، خذ مستودع تخزين pix2pix استنادًا إلى TensorFlow. استنساخها وتثبيت Tensorflow.
سيكون الأمر لبدء التدريب كما يلي:
python pix2pix.py --mode train --output_dir dir_to_save_checkpoint --max_epochs 200 --input_dir dir_with_training_data --which_direction AtoB
تحدد المعلمة which_direction اتجاه التدريب. AtoB يعني أننا نريد تحويل الصورة A (يسار ، بدون نظارات) إلى صورة B (يمين ، مع نظارات). بالمناسبة ، لاحظ أن pix2pix يمكنه أن يتعلم بنجاح كيفية استعادة الصورة الأصلية من صورة باستخدام مرشح ، ما عليك سوى تغيير اتجاه التدريب.
يمكنك مراقبة تقدم التدريب باستخدام tensorboard ، والتي تحتاج إلى تشغيل الأمر:
tensorboard --logdir=dir_to_save_checkpoint
بمجرد أن ترى أن نتائج بيانات التدريب أصبحت جيدة جدًا ، يمكنك إيقاف التدريب واختبار النموذج الخاص بالبيانات التعسفية. يمكنك متابعة التدريب من نقطة التحكم الأخيرة كما يلي:
python pix2pix.py --mode train --output_dir dir_to_save_checkpoint --max_epochs 200 --input_dir dir_with_training_data --which_direction AtoB --checkpoint dir_of_saved_checkpoint
استنتاج
إن ظهور الشبكات التكميلية من نوع pix2pix يفتح آفاقًا كبيرة لحل عالمي وبسيط لجميع أنواع مهام معالجة الصور.