فكرة المشروع بالتفصيل
المشكلة الأساسية أن الرسم يختلف تمامًا عن الصورة الحقيقية من حيث:
الألوان (الرسم غالبًا أبيض وأسود)
مستوى التفاصيل
الإضاءة
زاوية الوجه
أسلوب الرسم
لذلك لا يمكن استخدام نموذج تصنيف عادي.
الحل كان استخدام شبكة سيامية (Siamese Network)، وهي نوع من الشبكات العصبية المصممة لمقارنة صورتين بدلاً من تصنيف صورة واحدة.
?️ كيف تعمل الشبكة السيامية؟
الشبكة تتكون من:
فرعين (Branch 1 و Branch 2)
كل فرع عبارة عن شبكة CNN متطابقة في البنية والأوزان
كل فرع يستقبل صورة (واحد للرسم، وواحد للصورة الحقيقية)
خطوات العمل:
إدخال الرسم في الفرع الأول
إدخال الصورة الحقيقية في الفرع الثاني
كل فرع يحول الصورة إلى Embedding (تمثيل رقمي مميز للوجه)
حساب الفرق بين الـ embeddings باستخدام L1 Distance
تمرير الناتج إلى طبقة تصنيف نهائية تعطي:
1 → نفس الشخص
0 → شخص مختلف
بمعنى آخر: النموذج لا يتعلم شكل الوجه فقط، بل يتعلم كيفية قياس التشابه بين وجهين.
?️ الأدوات والتقنيات المستخدمة
Python
TensorFlow / Keras لبناء وتدريب النموذج
OpenCV لمعالجة الصور
CUFS Dataset (يحتوي على صور حقيقية ورسومات لنفس الأشخاص)
بنية Siamese Neural Network
استخدام L1 Distance لقياس الفرق بين التمثيلات
تصنيف ثنائي (Matching / Non-Matching)
?️ معالجة البيانات (Preprocessing)
قبل التدريب قمت بـ:
تحويل الصور إلى grayscale
توحيد أبعاد الصور (Resize)
تطبيع القيم (Normalization)
إنشاء أزواج:
أزواج متطابقة (نفس الشخص)
أزواج غير متطابقة (أشخاص مختلفين)
هذه الخطوة كانت مهمة جدًا لأن الشبكة تتعلم من المقارنة بين الأزواج وليس من الصور الفردية.
? التدريب والنتائج
تم تدريب النموذج على مئات أزواج الصور (Sketch–Photo pairs).
ومع الوقت، تعلم النموذج استخراج ملامح الوجه المهمة مثل:
المسافة بين العينين
شكل الأنف
هيكل الفك
نسب الوجه العامة
حتى لو:
تغيرت الإضاءة
اختلف أسلوب الرسم
كان هناك اختلاف بسيط في الزاوية
استطاع النموذج التمييز بين الشخص الصحيح وغير الصحيح.
? ماذا تعلمت من المشروع؟
? فهم عملي لفكرة Contrastive Learning
? كيفية بناء شبكة سيامية من الصفر
? التعامل مع datasets حقيقية
? إنشاء أزواج بيانات للتدريب
? كيفية مقارنة embeddings بدلًا من تصنيف مباشر
? تطبيق الذكاء الاصطناعي في مجال التحقيقات والتعرف على الأشخاص