التعرف على الوجوه باستخدام التعلم العميق

التعرف على الوجوه

أثارت شركة Apple حماساً كبيراً لدى جمهورها عندما أعلنت عن هاتفها الجديد المزود بتقنية بصمة الوجه والذي يستيطع التعرف على صاحبة بمجرد نظره إليه. قد يبدو الأأمر مذهلاً للوهلة الأولى إلا أن الموضوع يُختصر إلى عدد من المراحل وعدد من التقنيات و بمعرفتها يمكنكم بناء تطبيقات مماثلة !

يعدّ موضوع التعرف على الوجوه أحد أكثر مسائل الرؤية الحاسوبية Computer Vision نشاطاً اذ تصدر كل عام أوراق علمية جديدة توصف طرقاً أكثر فعالية في التعرف على الوجوه. حقق الباحثون تقدماً كبيراً في السنوات الأخيرة (منذ عام 2014) في هذا المجال وقد وثق المراسل Ashlee Vance في وكالة Bloomberg حادثة جرت في الصين حيث تمكنت كميرات المراقبة من التعرف على سائح استرالي وإعطاءه مخالفة نتيجة لمشيه على العشب في حديقة عامّة علماً بأن السائح قام بمسح جواز سفره مرة واحدة عند دخوله للحدود ولم يتم أخذ أي صورة رسمية أخرى له ! تشير هذه الحادثة إلى درجة التقدم في مجال التعرف على الوجوه حيث تمكن النظام الصيني من التعرف على شخص في قائمة تضم مليارات الأشخاص وباستخدام صورة واحدة له فقط.

إن المقال التالي مبني على مشروع التخرج الذي أعددته لنيل الإجازة في هندسة البرمجيات في المعهد العالي للعلوم التطبيقية والتكنولوجيا، يتضمن المشروع بناء إطار عمل متكامل لحل مسألة التعرف على الوجوه والعديد من الطرق لحل المسألة في الصور و الفيديو، سأكتفي في المقال بعرض المراحل الرئيسية وأمثلة عنها وسأقوم مستقبلاً بتوفير عرض أكثر تفصيلاً للمشروع ككل.

الفيديو التالي هو لاختبار المشروع على المشهد الافتتاحي لمسلسل friends الشهير. في هذه الحالة زودنا النظام بثلاثة صور لكل من الشخصيات الرئيسية (صور حديثة وليست من زمن تصوير المسلسل) وهي صور عشوائية من الانترنت وبظروف إضاءة متنوعة واستطاع النظام التعرف على جميع الشخصيات في فيديو بدقة منخفضة (وهي إحدى أهم الصعوبات التي تواجه أنظمة التعرف على الوجوه)

نلاحظ في الفيديو أن النظام يعطي الاسم unkown للأشخاص غير الموجودين في قاعدة المعطيات الخاصة به وكذلك يتجاهل الوجوه الصغيرة الظاهرة في الفيديو. إضافة لذلك يصحح النظام قراراته حول هوية الأشخاص الظاهرين في الفيديو وذلك باستعمال تقنية الملاحقة (لن نتطرق إليها الآن)https://www.youtube.com/embed/kSNk_1QLzbQ?showinfo=0

لنبدأ الآن في شرح العملية :

كيف نتعرف على الوجوه؟

كما ذكرنا فإن المسألة تقسم إلى عدد من المسائل الجزئية، أولها الكشف عن الوجوه، وتهدف إلى تحديد الوجوه في الصور والثانية هي رصف Align الوجوه وفيها نعيد الوجوه المكتشفة إلى حالة موحدة بحيث يكون الوجه مواجها للكميرا بشكل مستقيم ومباشر في المرحلة الثالثة نقوم باستخراج ترميز للوجه انطلاقاً من الصورة، أخيراً وفي المرحلة الرابعة نستعمل الترميز للتعرف على وجه ضمن قائمة من الوجوه المسجلة مسبقاً في النظام.

هل يبدو هذا معقداً ؟ سنبسط الأمور سوية

كشف الوجوه Face Detection

تتعدد الطرق المستخدمة لكشف الوجوه في الصورة، سنقدم لكم MTCNN وهي طريقة تستخدم شبكات عصبونية تلافيفية Convolution Neural Networks CNN لكشف الوجوه في الصورة أي تحديد مربع في الصورة يحيط بالوجه واستخراج أحداثيات العيون والفم والأنف. يتم أولاً تدريب الشبكة باستخدام مجموعة كبيرة من الصور والتي تم تحديد الوجوه فيه بشكل يدوي ومن ثم تستخدم هذه الشبكة لاكشتاف الوجوه في صور جديدة . إن مايميز MTCNN هو قدرتها على اكتشاف الوجوه وتحديد إحداثيات علامات الوجه (العينان والأنف والفم) في وقت واحد وبسرعة عالية وحتى لو كان الوجه الظاهر في الصورة صغيراً

يمكن للمهتمين الإطلاع على الورقة العلمية الأصلية وعلى تنجيز الطريقة على github في الروابط التالية:

رابط الورقة العلمية هنا

رابط التنجيز على github هنا

رصف الوجوه Face Alignment

تهدف المرحلة إلى إعادة الوجوه المئلة إلى مسقط مباشر مواجه للكميرا، لعل أفضل طريقة لشرح الموضوع هي باستخدام المثال التالي

الصورة إلى اليسار هي الورة الأصلية فيما الصورة إلى اليمين هي الصورة بعد تنفيذ الرصف، تتم العملية بحساب زاوية ميلان الوجه باستخدام أماكن العينين ومن ثم تدوير الصور وإعادة مركزتها إعتماداً على مكان الأنف. تفيد العملية في توحيد مظهر الوجوه المكتشفة عند تمريرها إلى المرحلة التالية.

ترميز الوجوه Face Embedding

حقق الباحثون في شركة غوغل نقلة نوعية في هذه المرحلة في العام 2015 عندما قدموا تابع الخسارة الثلاثي Triplet Loss Function والذي نستطيع باستخدامه تدريب شبكة CNN على إيجاد ترميز للوجوه، والترميز هو عبارة عن شعاع من n قيمة يمثل الوجه. سمي النموذج المستعمل ب Facenet وهو من أفضل الطرق المستعملة على أنه ليس الوحيد فهناك Arcface و Cosface اللذين حققا نتائج أفضل في الاختبارات، يحقق الترميز الخاصة التالية: ترميز وجهين لنفس الشخص أقرب من ترميز وجهين لشخصين مختلفين. يمكن بالتالي استعمال هذه الترميز للتعرف على هوية الشخص على اعتبار أن أي صورة جديدة لنفس الشخص سيكون لها ترميز قريب (كمسافة إقليدية) من ترميز صور نفس الشخص وبعيد عن صور وجوه أشخاص آخرين . يمكن استعمال هذا الترميز لتقدير عمر وجنس صاحب الصورة كما يمكن استعماله للتعرف على هوية صاحب الصورة. يمكن للمهتمين الإطلاع على الروابط التالية:

ورقة Facenet الأصلية هنا

تنجيز Facenet على github هنا

التعرف على الوجوه Face Recognition

بعد استخراج ترميز الوجه يمكن مقارنته بترميز وجوه معروفة لدينا وتتم عملية المقارنة بحساب المسافة الإقليدية بين الوجه المكتشف والوجوه الموجودة في النظام ومن ثم ترتيب النتائج تصاعدياً. في حال كانت أقرب نتيجتين لنفس الشخص ولنقل أن اسمه x فإن الوجه الجديد المكتشف هو أيضاً ل x . أمّا في حال كانت أقرب نتيجتين تنتميان لشخصين مختلفين x و y نقوم بمقارنة الفرق بين النتيجتين مع عتبة قرار ذات قيمة ثابتة فإذا كان الفرق بينهما أصغر منها فهذا يعني أن الوجه الجديد قد يكون ل x أو لy والنظام غير واثق من قراره وبالتالي يعطي الوجه الجديد صفة unkown، أما في حال كان الفرق أكبر من العتبة فإن الوجه الجديد ينتمي للشخص ذو الوجه الأقرب وهو x .

ختاماً

الآن أصبحت جميع المراحل جاهزة يمكنكم بناء نظام التعرف على الوجوه الخاص بكم!

للتواصل حول تفاصيل أكثر للمشروع يمكن مراسلتي على البريد الالكتروني ali.mhd.work@gmail.com

أو عبر حساب Linkedin هنا