TensorFlow הוא כלי רב תכליתי ליצירת מודלים של למידת מכונה.
בפוסט זה, נבחן כיצד ליצור מערכת זיהוי פנים עם TensorFlow, מסגרת למידת מכונה בקוד פתוח. נעבור על התהליכים החיוניים ביצירת מערכת זיהוי פנים מוצלחת, מאיסוף והכנת נתונים ועד להכשרה והערכת מודל.
תקבל ניסיון ממקור ראשון עם TensorFlow כדי ליצור זיהוי פנים בעזרת קטעי קוד ודוגמאות מהעולם האמיתי. אתם מוזמנים לעקוב בהמשך הדרך.
מבוא ל- TensorFlow
TensorFlow היא ספריית קוד פתוח בחינם. זהו ארגז כלים מתמטי סמלי המשתמש בזרימת נתונים ובתכנות שניתן להבדיל. אתה יכול להתמודד עם מגוון משימות עם זה, כולל עמוק רשת עצבית האימונים.
TensorFlow הוא חזק וניתן להתאמה. כמו כן, זהו כלי נהדר לפיתוח ו פריסת מודלים של למידת מכונה. אתה יכול לבנות מודלים מסובכים עם כמה שכבות ופעולות טנזור. כמו כן, ניתן לכוונן דגמים מובנים מראש בספרייה לצרכים ספציפיים.
יתר על כן, ל- TensorFlow יש קהילת משתמשים ענקית ומתרחבת. אז, יש שפע של מידע ועזרה לאנשים שחדשים בפלטפורמה.
TensorFlow פופולרי עבור למידת מכונה בין השאר משום שהוא מספק זרימת עבודה מקצה לקצה. אז אתה יכול בקלות לבנות, לאמן ולפרוס מודלים. הוא מספק כלים ואסטרטגיות לשיפור והגדלת מודלים כדי להתאים לדרישות ספציפיות. זה משתנה מעיבוד מוקדם של נתונים ועד פריסת מודל.
מהו זיהוי פנים?
זיהוי פנים הוא א ראיית מחשב משימה המזהה זיהוי של אדם על סמך פניו. טכניקה זו מזהה תכונות פנים, כגון הצורה והמרקם של העיניים, האף והפה.
וזה משווה אותם למסד נתונים של פרצופים ידועים כדי לזהות התאמה. לזיהוי פנים יש מספר שימושים, כולל מערכות אבטחה, ארגון תמונות ואימות ביומטרי.
הדיוק של אלגוריתמי זיהוי פנים גדל משמעותית בשנים האחרונות כתוצאה מפריצות דרך בתחום למידת מכונה.
ייבוא ספריות נחוצות
לפני שמתחילים משהו, עלינו לייבא את הספריות הדרושות למודל שלנו. Tensorflow (tf) מיובא ומנוצל כדי ליצור ולהכשיר את המודל. <(p>
"numpy" מבצע חישובים מתמטיים ועיבוד נתונים.
"matplotlib.pyplot" מיובא כ-plt ומשמש עבור תרשימים והדמיות נתונים.
לבסוף, "הבא אנשים lfw" מיובא מ-sklearn. מערכי נתונים ומשמשים לטעינת מערך הנתונים של זיהוי הפנים. פונקציה זו היא חלק מערך הכלים scikit-learn. הודות לפונקציה הזו לא היינו צריכים להעלות מערך נתונים נוסף. זה כבר מובנה ב-sskit-learn.
וזה נותן לך גישה למגוון רחב של מערכי נתונים עבור למידת מכונה יישומים. בתרחיש זה, אנו משתמשים בשיטת אחזר lfw people כדי לאחזר את מערך הנתונים "פרצופים מתויגים בטבע" (LFW). הוא מורכב מתמונות של פרצופים של אנשים וכן את התוויות הנלוות אליהם.
ספריות אלו הן קריטיות ביישום ובהערכה של מודל זיהוי הפנים שלנו.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
עיבוד מוקדם וטעינה של ערכת הנתונים של זיהוי פנים
בחלק זה, אנו משתמשים בפונקציית "הבא lfw people" כדי לעבד מראש את נתוני זיהוי הפנים. ראשית, אנו משתמשים באחזור lfw אנשים עם האפשרות "מיני פרצופים לאדם=60". זה מצביע על כך שאנו רוצים לכלול רק אנשים במערך הנתונים שיש להם לפחות 60 תמונות. לפיכך, אנו מבטיחים שלמודל שלנו יהיו נתונים נאותים ללמוד. כמו כן, זה מוריד את הסכנה של התאמת יתר.
לאחר מכן, הנתונים והתוויות מאובייקט ה- faces נשלפים ומוקצים למשתנים 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')
])
קומפילציה של המודל
המודל מורכב באמצעות פונקציית "קומפילציה". אנחנו צריכים להכין את המודל לאימון. לכן, נגדיר את האופטימיזציה, פונקציית ההפסד והמדדים שישמשו להערכת המודל.
במהלך האימון, האופטימיזר אחראי על שינוי הפרמטרים של הדגם. אופטימיזציית "אדם" היא טכניקת אופטימיזציה של למידה עמוקה פופולרית.
אנו משתמשים בפונקציית ההפסד כדי להעריך את ביצועי המודל על נתוני האימון. מכיוון שתוויות היעד הן מספרים שלמים המשקפים את המחלקה של התמונה ולא וקטורים מקודדים חדים, פונקציית האובדן "קצוצה קטגורית דלילה" היא חיובית.
לבסוף, אנו מגדירים את המדדים להערכת המודל, במקרה זה, "דיוק".
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
אימון מודל
נשתמש בפונקציית "התאמה" כדי להכשיר את המודל.
אנו נספק את נתוני האימון (רכבת X) והתוויות קשורות (רכבת y), כמו גם נגדיר את מספר העידנים (איטרציות) שיפעלו כ-10. הליך האימון משנה את משקלי הדגם כדי להפחית הפסד (ההבדל בין תוויות חזויות ואמיתיות) ולשפר את הדיוק של נתוני האימון.
model.fit(X_train, y_train, epochs=10)
הערכת מודל
כעת, עלינו להעריך את המודל המאומן על נתוני הבדיקה. אנו משתמשים באובדן הבדיקה ודיוק הבדיקה משמשים להערכת ביצועי המודל. במבחן X של נתוני הבדיקה ותוויות הבדיקה y test, עלינו לקרוא "פונקציית model.evaluate"
הפונקציה מפיקה את דיוק הבדיקה ואובדן הבדיקה. המשתנים בודקים אובדן ודיוק הבדיקה, בהתאמה, מכילים ערכים אלה. לבסוף, אנו משתמשים בפונקציית "הדפסה" כדי להפיק את דיוק הבדיקה.
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 וזיהוי פנים ישמשו ככל הנראה יותר ויותר בתעשיות כמו מערכות אבטחה, אימות ביומטרי ושירותי בריאות בעתיד. בקרוב נראה חידושים מרתקים.
השאירו תגובה