TensorFlow هي أداة متعددة الاستخدامات لإنشاء نماذج التعلم الآلي.
في هذا المنشور ، سننظر في كيفية إنشاء نظام التعرف على الوجوه باستخدام TensorFlow ، وهو إطار عمل تعلم آلي مفتوح المصدر. سننتقل إلى العمليات الأساسية في إنشاء نظام ناجح للتعرف على الوجوه ، من جمع البيانات وإعدادها إلى تدريب وتقييم النموذج.
ستحصل على تجربة مباشرة مع TensorFlow لإنشاء التعرف على الوجه بمساعدة مقتطفات التعليمات البرمجية وأمثلة من العالم الحقيقي. اهلا وسهلا بكم لمتابعة ونحن نمضي قدما.
مقدمة إلى TensorFlow
TensorFlow هي مكتبة مجانية ومفتوحة المصدر. إنه صندوق أدوات رياضيات رمزي يستخدم تدفق البيانات والبرمجة القابلة للتفاضل. يمكنك التعامل مع مجموعة من المهام بها ، بما في ذلك المهام العميقة الشبكة العصبية تدريب.
TensorFlow قوي وقابل للتكيف. وبالمثل ، فهي أداة رائعة لتطوير و نشر نماذج التعلم الآلي. يمكنك بناء نماذج معقدة مع عدة طبقات وعمليات موتر. أيضًا ، يمكن ضبط النماذج المبنية مسبقًا في المكتبة لتلبية الاحتياجات الخاصة.
علاوة على ذلك ، TensorFlow لديها مجتمع مستخدم ضخم ومتوسع. لذلك ، هناك عدد كبير من المعلومات والمساعدة للأفراد الجدد على المنصة.
يشتهر TensorFlow بـ آلة التعلم جزئيًا لأنه يوفر سير عمل شامل. لذلك ، يمكنك بسهولة إنشاء النماذج وتدريبها ونشرها. يوفر أدوات واستراتيجيات لتحسين النماذج وتوسيع نطاقها لتناسب متطلبات محددة. وهي تختلف من المعالجة المسبقة للبيانات إلى نشر النموذج.
ما هو التعرف على الوجوه؟
التعرف على الوجوه هو أ رؤية الكمبيوتر مهمة تحدد هوية الشخص بناءً على وجهه. تتعرف هذه التقنية على سمات الوجه ، مثل شكل وملمس العينين والأنف والفم.
وتقارنها بقاعدة بيانات للوجوه المعروفة لتحديد التطابق. التعرف على الوجوه له استخدامات عديدة ، بما في ذلك أنظمة الأمان وتنظيم الصور والمصادقة البيومترية.
زادت دقة خوارزميات التعرف على الوجوه بشكل كبير في السنوات الأخيرة نتيجة للاختراقات في التعلم الآلي.
استيراد المكتبات الضرورية
قبل البدء في أي شيء ، نحتاج إلى استيراد المكتبات اللازمة لنموذجنا. يتم استيراد Tensorflow (tf) واستخدامه لإنشاء النموذج وتدريبه. <(ص>
"numpy" ينفذ العمليات الحسابية ومعالجة البيانات.
يتم استيراد "matplotlib.pyplot" كـ plt ويستخدم لـ مخططات البيانات والتصورات.
أخيرًا ، يتم استيراد "fetch lfw people" من sklearn. مجموعات البيانات والمستخدمة لتحميل مجموعة بيانات التعرف على الوجه. هذه الوظيفة جزء من مجموعة أدوات scikit-Learn. بفضل هذه الوظيفة ، لم يكن علينا تحميل مجموعة بيانات أخرى. تم بناء هذا بالفعل في sckit-Learn.
ويمنحك الوصول إلى مجموعة واسعة من ملفات مجموعات البيانات للتعلم الآلي التطبيقات. في هذا السيناريو ، نستخدم طريقة fetch lfw people لاسترداد مجموعة البيانات "Labeled Faces in the Wild" (LFW). يتضمن صورًا لوجوه الأشخاص بالإضافة إلى الملصقات التي تأتي معهم.
هذه المكتبات مهمة في تنفيذ وتقييم نموذج التعرف على الوجوه الخاص بنا.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
المعالجة المسبقة وتحميل مجموعة بيانات التعرف على الوجوه
في هذا الجزء ، نستخدم وظيفة "fetch lfw people" للمعالجة المسبقة لبيانات التعرف على الوجه. أولاً ، نستخدم إحضار الأشخاص lfw مع الخيار "عدد الوجوه لكل شخص = 60". يشير هذا إلى أننا نريد فقط تضمين الأشخاص في مجموعة البيانات الذين لديهم 60 صورة على الأقل. ومن ثم ، فإننا نضمن أن نموذجنا يحتوي على بيانات كافية للتعلم. أيضا ، هذا يقلل من خطر فرط التجهيز.
ثم يتم استخراج البيانات والتسميات من وجوه وجوه وتخصيصها للمتغيرين X و y. X هول.
نحن الآن جاهزون لتدريب نموذج التعرف على الوجه الخاص بنا باستخدام البيانات والعلامات المعالجة مسبقًا.
faces = fetch_lfw_people(min_faces_per_person=60)
X = faces.data
y = faces.target
target_names = faces.target_names
تقسيم مجموعات التدريب والاختبار
في هذه الخطوة ، قمنا بتقسيم مجموعة بيانات التعرف على الوجوه إلى نصفين باستخدام طريقة تقسيم اختبار القطار من اختيار sklearn.model. الهدف من هذا الانقسام هو تقييم أداء نموذجنا بعد التدريب
تقبل وظيفة تقسيم اختبار القطار كمدخلات للبيانات X وتسميات y. ويقسمهم إلى مجموعات تدريب واختبار. نختار حجم الاختبار = 0.2 في هذا المثال. هذا يعني أنه سيتم استخدام 20٪ من البيانات كمجموعة اختبار و 80٪ كمجموعة تدريب. علاوة على ذلك ، نستخدم الحالة العشوائية = 42 لضمان تقسيم البيانات باستمرار في كل مرة يتم فيها تنفيذ الكود.
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
تجهيز البيانات
الغرض من المعالجة المسبقة للبيانات هو تحضيرها للدخول في النموذج. تتم معالجة البيانات مسبقًا في هذا الكود عن طريق قسمة كل نقطة بيانات على 255.
ما الذي دفعنا لتحقيق ذلك؟ التطبيع هو إجراء معالجة مسبقة يستخدم في التعلم الآلي لضمان أن تكون جميع الميزات على نفس النطاق. في هذا السيناريو ، القسمة على 255 تقيس البيانات إلى نطاق من 0 إلى 1 ، وهي خطوة عادية لتطبيع بيانات الصورة.
يؤدي ذلك إلى تسريع تقارب النموذج ويمكن أن يزيد من أدائه.
X_train = X_train / 255.0
X_test = X_test / 255.0
خلق الوضع
نريد التعرف على الشخص الذي يظهر وجهه في الصورة. في هذه الحالة ، سنستخدم شبكة متصلة بالكامل ، تُعرف غالبًا باسم شبكة كثيفة. إنها شبكة عصبية اصطناعية تم استخدامها لإنشاء النموذج.
تم تصميم الشبكات العصبية الاصطناعية على غرار كيفية عمل الدماغ البشري وتنظيمه. وهي تتكون من عُقد معالجة المعلومات أو خلايا عصبية مرتبطة. كل خلية عصبية في طبقة في شبكة كثيفة مرتبطة بكل خلية عصبية في الطبقة التي فوقها.
النموذج يحتوي على أربع طبقات في هذا الرمز. ليتم إدخالها في الطبقة التالية ، يتم تسوية بيانات الإدخال في الطبقة الأولى في مصفوفة أحادية البعد. وفقًا لذلك ، ترتبط الخلايا العصبية 128 و 64 في الطبقتين التاليتين تمامًا.
وظيفة التنشيط ReLU هي وظيفة تنشيط فريدة تستخدمها هذه الطبقات. مع ذلك ، يمكننا جعل النموذج يتعلم الارتباطات غير الخطية بين المدخلات والمخرجات. تستخدم الطبقة الأخيرة وظيفة تنشيط softmax لعمل تنبؤات. وهي طبقة متصلة بالكامل بها العديد من الخلايا العصبية التي توجد بها فئات محتملة.
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(62 * 47,)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(len(target_names), activation='softmax')
])
تجميع النموذج
يتم تجميع النموذج باستخدام وظيفة "الترجمة". نحن بحاجة لإعداد النموذج للتدريب. لذلك ، سنحدد المُحسِّن ووظيفة الخسارة والمقاييس التي سيتم استخدامها لتقييم النموذج.
أثناء التدريب ، يكون المحسن مسؤولاً عن تغيير معلمات النموذج. يُعد مُحسِّن "adam" أسلوبًا شائعًا لتحسين التعلم العميق.
نستخدم وظيفة الخسارة لتقييم أداء النموذج على بيانات التدريب. نظرًا لأن التسميات المستهدفة عبارة عن أعداد صحيحة تعكس فئة الصورة بدلاً من المتجهات المشفرة ذات درجة حرارة واحدة ، فإن وظيفة الخسارة "المتقاطعة المتقطعة المتفرقة" مواتية.
أخيرًا ، نحدد المقاييس لتقييم النموذج ، وفي هذه الحالة ، "الدقة".
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
تدريب نموذجي
سوف نستخدم وظيفة "fit" لتدريب النموذج.
سنوفر بيانات التدريب (قطار X) والتسميات ذات الصلة (قطار y) ، بالإضافة إلى تحديد عدد العهود (التكرارات) للتشغيل كـ 10. يعدل إجراء التدريب أوزان النموذج لتقليل الخسارة (الفرق بين الملصقات المتوقعة والحقيقية) وتحسين دقة بيانات التدريب.
model.fit(X_train, y_train, epochs=10)
تقييم النموذج
الآن ، نحن بحاجة إلى تقييم النموذج المدرب على بيانات الاختبار. نحن نستخدم خسارة الاختبار ويتم استخدام دقة الاختبار لتقييم أداء النموذج. في اختبار بيانات الاختبار X واختبار ملصقات الاختبار y ، نحتاج إلى استدعاء "وظيفة تقييم النموذج"
تقوم الوظيفة بإخراج دقة الاختبار وفقدان الاختبار. تحتوي المتغيرات الخسارة ودقة الاختبار ، على التوالي ، على هذه القيم. أخيرًا ، نستخدم وظيفة "الطباعة" لإخراج دقة الاختبار.
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print("Test accuracy:", test_accuracy)
توقع الفئات والحصول على الفئات المتوقعة
باستخدام نموذج التدريب وبيانات الاختبار ، تقوم الخوارزمية بعمل تنبؤات. عندما يتم تمرير بيانات الاختبار إلى طريقة "model.predict" ، فإنها تنتج مجموعة من التنبؤات لكل صورة في مجموعة الاختبار.
ثم يتم استرجاع اسم الفئة المستهدفة لكل صورة من قائمة "أسماء الهدف" باستخدام وظيفة "np.argmax" لتحديد الفهرس بأكبر احتمالية متوقعة. ثم يتم استخدام هذا الفهرس لتحديد الفئة المتوقعة لكل صورة.
باستخدام قائمة الفهم ، تخضع جميع التنبؤات في مصفوفة "التنبؤات" لهذه الطريقة ، مما ينتج عنه قائمة "الفئات المتوقعة".
predictions = model.predict(X_test)
predicted_classes = [target_names[np.argmax(prediction)] for prediction in predictions]
تصور التوقعات
يمكننا الآن أن نرى كيف يبدو نموذجنا.
لتقييم مدى جودة أداء النموذج ، سيتم عرض أول 10 صور وتوقعاتها. سوف يرسم الصور بتدرج الرمادي ويعرض كلا من الفئة الفعلية للصورة والفئة التي تنبأ بها النموذج باستخدام وحدة matplotlib.pyplot.
تُستخدم وظيفة "imshow" بواسطة الحلقة for لرسم كل صورة من أول 10 صور لمجموعة الاختبار. تُستخدم أسماء الهدف [y test [i]] والفئات المتوقعة [i] لتحديد فئة الصورة الفعلية والفئة المتوقعة ، على التوالي. ثم يتم الإشارة إلى عناوين كل قطعة من خلال هذه التصنيفات.
أخيرًا ، يتم عرض المؤامرة باستخدام طريقة plt.show ().
for i in range(10):
plt.imshow(X_test[i].reshape(62, 47), cmap='gray')
plt.title(f"True: {target_names[y_test[i]]}, Predicted:{predicted_classes[i]}")
plt.show()
يتم إحتوائه
يوفر TensorFlow بيئة كاملة ومرنة لإنشاء نماذج التعلم الآلي.
من خلال ضبط النموذج لتلبية متطلبات معينة أو عن طريق إضافة تطورات جديدة في التعلم الآلي ، يمكن زيادة دقة النموذج بشكل أكبر.
من المرجح أن يتم استخدام TensorFlow والتعرف على الوجه بشكل متزايد في صناعات مثل أنظمة الأمان والمصادقة البيومترية والرعاية الصحية في المستقبل. سنشهد قريبًا ابتكارات رائعة.
اترك تعليق