מערכות לומדות מסוג GAN מאפשרות ליצור פרצופים אנושיים. כיצד נוכל ליצור בעזרת ה-GAN פרצוף ראליסטי שדומה לאדם מסוים אמיתי, ואולי אפילו מצויר? האם נוכל ליצור פרצוף אמיתי מהאווטאר שלנו?
מערכות בינה מלאכותית מסוג generative adversarial networks - GAN יודעות לייצר תמונות של דברים שאינם קיימים במציאות [1]. מערכות אלו לומדות ליצור תמונות שדומות לתמונות שמראים להן: חתולים, כלבים, תמונות נוף, יצירות אמנות, פרצופי אנושיים ועוד. המערכות יודעות לקבל מערך מספרים באורך קבוע (נקודה במרחב רב ממדי) ולייצר ממנו תמונה. ישנן אינספור נקודות שיוצרות אינספור תמונות אפשריות.
איך נמצא תמונה שדומה לתמונת פנים נתונה בכל הבלא-GAN הזה? כדי למצוא את התמונה הדומה ביותר לתמונה נתונה מבין התמונות שה-GAN יוצר נצטרך לעבור על כל התמונות שהמערכת יכולה לייצר ולבחור את הדומה ביותר. אבל זה בלתי אפשרי בפועל: מערכת ה-GAN יכולה לייצר אינספור פרצופים שונים, ולא נוכל לעבור על כולם. למרבה המזל, המערכת לא רק יודעת ליצור פרצופים מנקודות במרחב, אלא גם לסדר אותם. אם נשנה מעט את מיקום הנקודה שיצרה פנים מסוימות, הפנים שנקבל ישתנו במעט גם הן.
כדי שנוכל למצוא פרצופים שדומים לנו נצטרך קודם להחליט איך מודדים דמיון בין פרצופים. זוהי בעיה מורכבת למדי. אפשרות ראשונה היא לחשב את הפרש הצבעים בין כל הפיקסלים, אך זו לא נותנת תוצאות טובות, כי לא כל הפיקסלים שווים בחשיבותם, וההבדלים במרחקים בין הפיסקלים אינם מייצגים בצורה אינטואיטיבית מה צריך לשנות. כשמביטים על תמונה של פנים, אנחנו יכולים לתאר אותה לפי מאפיינים כמו צבע עיניים, צורת אף, מבנה פנים, צבע שער, תסרוקת, הבעה, משקפיים ועוד. אנחנו גם יכולים להשוות את אורך השער, רוחב האף וכדומה. אם כן אולי נוכל לייצר רשימת מאפיינים מספריים המתארים את התמונה ולהשוות לפיהם?
ישנן מערכות לומדות היודעות להפוך תמונה לרשימה קצרה של מאפיינים מספריים. רשימת המאפיינים מתארת למחשב בצורה תמציתית מה רואים בתמונה. בעזרת מערכות אלו הופכים את תמונת הפנים שלנו ואת התמונה שיצרה המערכת היוצרת לרשימות מאפיינים ומודדים את הדמיון ביניהן.
אם כן נחפש תמונה שדומה לתמונה נתונה - נתחיל מתמונה שרירותית שמתאימה לנקודה במרחב, ונתקדם לעבר פרצוף שדומה לזה שאנחנו מחפשים בעזרת שיטה הנקראת "התפשטות לאחור" (Backpropagation), המשמשת ללימוד מערכות של למידה עמוקה. שיטה זו מאפשרת להבין מה הכיוון, שאליו נזוז כדי להגיע לנקודה סמוכה, שתקרב אותנו הכי הרבה לתמונה שדומה לנו, כשכל נקודה מייצגת תמונה. נראה כאילו המערכת ״מקפצת״ בין נקודות, ובכל שלב היא מחליטה לאן לקפוץ הלאה, לפי השיפור בתוצאות שתרמו הצעדים הקודמים. גם חיפוש של תמונות שאינן אנושיות במערכת היוצרת יעלה תמונה שאינה אנושית שדומה להם.
כעת, כיצד נוכל למצוא תמונת פנים מציאותית שדומה לאווטאר שלנו? PULSE הוא אלגוריתם שהתפרסם במאמר שיצא השנה. הוא מאפשר לקחת פרצוף מטושטש ברזולוציית 16X16 ולהפוך אותו לפנים ברזולוציה גבוהה. פרצוף מפוקסל יכול להתאים להמון פרצופים ברזולוציה גבוהה, ואי אפשר לדעת בוודאות איך יראה האדם לאחר התהליך. לכן, האלגוריתם מחזיר השלמה שאינה בהכרח זהה לאדם המקורי.
PULSE מחפש תמונות של פנים אנושיות הנוצרות על ידי ה-GAN, שכאשר מורידים להן את הרזולוציה מקבלים פרצוף דומה לזה שהכנסנו. בשיטה זו מידת הדמיון בין התמונות מחושבת לפי המרחק בין פיקסל לפיקסל בתמונות כאשר מורידים את הרזולוציה שלהן ל-16X16.
בשימוש מגניב במיוחד לאלגוריתם הופכים דמויות של משחקי מחשב ישנים ואווטארים לתמונות של אנשים שנראים אמיתיים [2].
כן, גם אני נפלתי לטרנד האווטארים: בניתי אווטאר לתאומות מהסרט "הניצוץ". לאחר מכן, בעזרת האלגוריתם, יצרתי לאווטאר דמות אנושית שדומה לו. את התוצאה אפשר לראות בתמונת הנושא של הפוסט. רוצים גם? בעזרת מחברת קוד [3] שכתבו Alex Damian ו-Sachit Menon תוכלו גם אתם לייצר אדם שדומה לאווטאר שלכם (מדריך קצר בהמשך). פרסמו בתגובות בפייסבוק מה יצא לכם!
מדריך למציאת כפיל:
1. קחו תמונת פנים המביטות ישירות למצלמה. התמונה לא חייבת להיות ראליסטית אך עדיף לבחור תמונה בעלת פרופורציות פנים קרובות עד כמה שניתן לפרופורציות אנושיות.
2. גיזרו את התמונה בצורת ריבוע, שיכיל רק את הפנים, הצוואר והשער, פחות או יותר כמו בדוגמה.
אפשר לגזור את התמונה בעזרת התוכנה הזו.
3. היכנסו לאתר שבו נמצא הקוד
לִחצו על חץ ההרצה הנמצא ליד צמד המילים Let's ROCK!
תקפוץ לכם הודעת הזהרה, לחצו על RUN ANYWAY.
אשרו שאתם לא רובוטים.
4. כעבור מספר שניות, בתחתית חלון ההרצה, יופיע לחצן לבחירת קבצים. העלו אליו את תמונת הפנים הגזורה. כאשר הפעולה תסתיים תקבלו פרצוף אנושי שדומה לתמונה שהכנסתם.
כדי להגיע לתוצאה טובה יותר, לפני שתלחצו על לחצן ההרצה הגדילו את מספר צעדי המערכת המופיע ב-Advanced settings. ברירת המחדל היא 100 צעדים. ככל שמספר הצעדים גדול יותר, כך התהליך ייקח זמן רב יותר.
כאן לדוגמה שיניתי את מספר הצעדים ל-2000 ואת אפסילון ל-0.1. אפשר לראות שצורת הפנים דומה יותר, מרכז העיניים באותו מקום, האף נגמר באותו מקום וגובה הפה זהה.
הערות וקריאה נוספת:
[1] כתבה על GAN ליצירת פרצופים מזויפים
[2] ציוץ עם לינק לקוד של PULSE והמון דוגמאות משעשעות במיוחד
[3] Face Depixelizer