יום שני, 19 בספטמבר 2022

448 Synthetic data generation for Computer Vision models with Orly Zvitia


פודקאסט מספר 448 של רברס עם פלטפורמה - רן מארח (וירטואלית) את אורלי מחברת Datagen לשיחה על איך ולמה מייצרים דאטה סינטטי למודלים של Computer Vision, כדי שבסוף השיחה כולם ילכו לג’נרט דאטה סיננטי ויבינו עד כמה זה חשוב.





(רן) אבל לפני שנצלול פנימה - כמה מילים עליך, אורלי?
  • (אורלי) אז אי-שם בתחילת שנות האלפיים סיימתי צבא - והלכתי ללמוד הנדסה ביו-רפואית . . . .
    • בשנה השלישית של התואר הראשון עשינו קורס של עיבוד תמונה - ומאוד התלהבתי מהתחום הזה.
    • התמחיתי בעיבוד אותות ותמונות והמשכתי לתואר שני
    • בתואר השני נחשפתי לתחום של Machine Learning - וממש נדלקתי על הדבר הזה, בזה התמחיתי.
  • ומאז ועד היום אני מתעסקת ב-Computer Vision ו-Machine Learning בתעשייה.
    • עבדתי גם בחברות מאוד קטנות וגם בסטארטאפים וב-Corporates גדולים
    • הרבה שנים בניהול של קבוצות אלגוריתמיקה
  • אני חייבת לציין שכשאני למדתי Machine Learning באוניברסיטה, עוד לא היה Deep Learning
    • ויצא לי לצפות בכל התהליך המהפכני הזה שקרה, ממש מתוך התעשייה - וזה היה מדהים לראות.
(רן) היית עדה למהפכה . . . . אני מנסה לדמיין את עצמי כאזרח צרפתי במהפכה הצרפתית, צופה בדברים האלה . . . 
  • (אורלי) אני יכולה לתאר איך זה היה . . . . היינו עושים Hand-crafted features, היינו עובדים עם מודלים של SVM ו-Random Forest ו-K-Means  . . . 
  • ואז, כבר כשהייתי בתעשייה, יצא AlexNet - והוא ממש עבר את ה-State of the Art שהיה אז באחוזים ניכרים, אני לא זוכרת בדיוק בכמה - וזה היה נראה מאוד ברור שקורה משהו . . . 
  • אבל לפחות ממה שאני חוויתי, זה לא היה מעבר כל כך קל - כי עד אז באמת הייתה “אינטואיציה”
    • היינו עושים Hand-crafted features והיה נורא חשוב . . . 
    • אני זוכרת בדיונים שבהם אמרנו ש”אולי נלך ל-Deep” - והיו הרבה מתנגדים שאמרו “רגע - אבל איך אני אסביר ללקוח שלי מה הוספתי? איזה Feature שיפר את הביצועים?” . . . 
    • גם בתור עובדת וגם בתור מנהלת - בהתחלה זה היה ממש  . . . .
      • למה זה עובד? איך הרשת שם מקודדת את המידע הזה?”
    • וזה לקח זמן עד שהדבר הזה קצת . . . עד שאנשים קיבלו את זה, שזה Black-box, והסכימו “לשלם את המחיר” של ה-Explainability.
    • יש קצת אינטואיציה - וגם קצת פתרו את זה והבינו שהשכבות הראשונות מקודדות פילטרים פשוטים, ואחרי זה זה מתקדם לדברים סמנטיים יותר גבוהים . . . 
      • אבל די כאילו . . . בגלל שזה שבר את ה-State of the Art - ריסק את ה-State of the Art שהיה עד אז - אז פשוט הייתה מעיין קבלה של “סבבה, זה עובד - נוותר על ה-Explainability”.
      • וזה באמת נכון - ה-Deep Learning, כולנו כבר יודעים, השתלט לחלוטין על כל מה שיש ב-Computer Vision ולמעשה על כל מה שיש ב-Machine Learning אי-שם בכל תחום אחר . . . 
  • אבל הוא הביא איתו שני כאבים חדשים שלא היו קודם - 
    • אחד זה ה-Explainability 
    • והשני זה הצורך בהרבה Data ללמוד ממנו
      • כי מודלים קלאסיים יכולת לאמן גם עם עשרות, מאות ואולי אלפים - וזה היה מספיק
      • ומודלים של Deep Learning - את הגדולים והטובים אתה מאמן עם עשרות-אלפים, מאות-אלפים, מיליונים ואולי גם יותר . . . .
(רן) וגם תורם לא מעט לחימום כדור-הארץ, כדרך-אגב . . . . אבל מה לעשות? זה חלק מהסיפור . . . .
  • (אורלי) המטרה קידשה את האמצעים . . . .

(רן) אז Datagen - מהי Datagen? מה אתם עושים שם היום?
  • (אורלי) אז Datagen קיימת מ-2018 - אני הצטרפתי לפני קצת פחות משנה.
  • אני מנהלת את קבוצת האלגוריתמיקה - ומה שאנחנו עושים זה בעצם לייצר Data סינטטי לצורך אימון ובדיקה של מודלים של Deep Learning.
  • בעצם, הרעיון, אם לסכם אותו במשפט, זה לייצר סימולציה תלת-מימדית שבה אתה יכול לשלוט בכל מה שאתה רוצה
    • אתה יכול להחליט אם אתה Indoor או Outdoor
    • אילו אובייקטים יש - אם יש אובייקטים של בניינים, עצים, שולחנות כסאות . . . 
    • אתה יכול להחליט האם יש אנשים בסצינה, כמה אנשים יש בסצינה, אילו אנשים יש, מאיזו קבוצה דמוגרפית - נשים, גברים, קבוצה אתנית . . . 
      • מה הם עושים, לאן הם מסתכלים
        • לאן העיניים מסתכלות, האם הם באינטראקציה . . . .
    • המון המון Control-ים . . . .
    • ואז, כשאתה רוצה לייצר את ה-Data שאתה רוצה, אתה פשוט “מניח מצלמה בתוך הסצינה” ועושה תהליך שנקרא רינדור (Rendering) - שבעצם מייצר לך את התמונות
      • ובעצם, החוזק של ה-Data הסינטטי - וניגע בזה עוד מעט בהמשך - זה שאתה מקבל אוטומטית את כל המידע על הסצינה, ממש את הכל
      • וזה כח מאוד מאוד חזק.
  • נגיד רק קצת על המוצרים שלנו - כיום אנחנו מתמקדים בעצם בשני קווי מוצרים :
    • מוצר אחד זה מוצר של Faces, שזו פלטפורמה - וממש בימים אלו יש גם API - שהולך לספק תמונות פנים, עם כל ה-Controller-ים שהזכרתי קודם
      • והוא משרת את כל הלקוחות שמתעסקים באפליקציות שקשורות לפנים וזיהוי פנים
        • זה Face Detection ו-Face Recognition ו-Key-points Detection - קוראים לזה Facial Landmarks - ו-Head-pose Estimations ו-Gaze Estimations - שזה אומר “לאן האישונים… לאן העיניים מסתכלות?” - ו-Head reconstruction . . .
      • ואולי שכחתי  עוד כמה . . . 
    • וקו המוצרים השני - שאנחנו קוראים לו Humans in Context
      • שזה - כשמו-כן-הוא: בנאדם שנמצא בסביבה ובא באינטראקציה עם הסביבה
      • וגם שם יש Domain-ים - 
        • יש לנו Domain של In-Cabin - שם אתה תראה סרטונים קצרים של עשר שניות כל אחד
          • ב-In-Cabin ספציפית תראה בנאדם שיושב ברכב, נוהג ועושה משהו - או שהוא נוהג סתם או שהוא נרדם או שהוא שותה משהו . . . יוצא מהרכב, נכנס . . . .
        • יש לנו Domain של Fitness, שבו אתה תראה אנשים שעושים איזושהי פעילות ספורטיבית
          • זה יכול להיות סקווטים או מרימים משקולות . . . 
        • יש לנו Domain של Home Security, שבו אנחנו נראה . . . . 
          • נקודת-המבט זו בעצם מצלמה שמוצמדת למשקוף או לדלת-הכניסה של הבית ומצלמת את מי שמגיע לשביל הגישה
        • ויש עוד Domain של Communication - שזה בעצם Scenario “משרדי”
          • בנאדם שיושב, עובד מול מחשב, כותב על הלוח, מדבר בטלפון . . . 
      • וכמובן שכל Domain משרת את הלקוחות הרלוונטיים . . . .

(רן) אז המחשבה הראשונה שעולה לי זה - “יכול להיות שזה קל מדי?” . . .  אולי אנחנו ניגע בזה בהמשך. 
זאת אומרת, כשמסתכלים על תמונות “טבעיות” - שאנשים צילמו במצלמות שלהם - אז  זה מתאר את המציאות כי זאת המציאות [שאלה פילוסופית? …] . כשמג’נרטים (Generate) תמונות סינטטיות - יכול להיות שאנחנו “עושים למכונה את החיים קלים מדי” ומחביאים שם Feature-ים שאולי בנאדם אפילו לא רואה - אבל ככה נותנים לה רמזים? 
אני מניח שנגיע לזה בהמשך - אבל קודם בואי ניקח כמה צעדים אחורה . . . .
איך נראה Life-cycle של Computer-vision Researcher או של פרויקט כזה, שמתעסק ב-Computer-vision? איפה נכנס… אני מניח שאחר כך גם נגיע לאיפה נכנס Data סינטטי ב-Life-cycle הזה.
  • (אורלי) אז Flow של מהנדס Computer Vision מתחיל בערך ככה:
    • בא מהנדס, מתחיל בבוקר שמח ומאושר - בא למנהל ומקבל משימה.
      • ניקח לדוגמא Face Recognition, שזה פשוט תחום שעבדתי בו כמה שנים אז קל לי לתת ממנו דוגמאות . . . .
    • מקבל  משימה וצריך לעשות מנגנון של Face Recognition - כש-Face Recognition נחשבת בעיה שה-Data-set בשבילה יותר מורכב מ”סתם לאסוף תמונות”
      • כי צריך הרבה תמונות “שלי” והרבה תמונות “שלך” ובהרבה מאוד מצבים
    • והמודל אמור בעצם ללמוד לזהות אותי ואותך בכל מצב - וגם לא לבלבל בינינו.
    • ועכשיו בא המהנדס - הוא הולך מן הסתם ל-Google ומתחיל לחפש . . . . 
      • הוא מתחיל לחפש מאמרים שרלוונטיים לתחום, מתחיל לחפש Data-set-ים שיכולים להיות רלוונטיים
      • אם יש לו מזל אז הוא גם ימצא איזשהו מודל Pre-trained שהוא יכול להתחיל ממנו, אבל לא תמיד
        • ב-Face Recognition יש
      • והוא כמובן חייב גם לאסוף Data של Test  - שהוא כמה שיותר קרוב ל-Domain האמיתי שהמערכת שלו צריכה לתפקד בו.
    • ואז הוא מתחיל את האיטרציה הראשונה: 
      • הוא מאמן - או שהוא מפעיל את המודל ה-Pre-Trained שלו - על ה-Test
      • מקבל תוצאות שהן “בסדר” - אבל הן יכולות להשתפר בדרך כלל
      • ואז הוא צריך לעשות איזשהו שינוי - והוא מתחיל תהליך איטרטיבי . . . 
    • “שינוי” - אימון מחדש - לבדוק את התוצאות - וחוזר חלילה.
  • ותחת המסגרת של אילו שינויים אפשר לעשות בעצם יש שני קווים כאלה, שני תחומים גדולים - 
    • מה שהיו עושים פעם - בהתחלה, כשרק התחיל ה-Deep Learning - זה Model-Centric AI - משתי סיבות:
      • (א) כי הסיפור הזה של “לאסוף Data-set-ים גדולים'' זה כאב ראש, וצריך היה איזושהי מעבדה או חברה גדולה ש”תרים את הכפפה”, תאסוף את ה-Data ותעשה את הפעולות טיוב שצריך עשות בשביל להכין את ה-Data-set
      • ו[-ב-)]גם כי המודלים עצמם עוד לא היו ממש בשלים . . . .
  • אז אם היית מדבר עם מהנדס Computer Vision מנוסה לפני כמה שנים, הוא היה אומר לך “תראה - 80% זה  Data ו-20% אתה יכול  לעשות מניפולציות על המודל”
    • מה שנקרא ה-Model-Centric AI
    • אתה יכול לשנות את ה-Loss-Function, לשנות את הארכיטקטורה, להוסיף עוד שכבות, לייצר יותר נוירונים בכל שכבה, Dropout ו-Batch Normalization ו-Hyperparameter Tuning וכל מיני מושגים שאני מצטערת אם אני מפציצה אבל  . . . יש המון דברים שאפשר לעשות.
  • וספציפית, אם אותו מהנדס Computer Vision - שדיברנו על זה שהוא קיבל משימה של Face Recognition - היה בודק, אז הוא היה רואה שה-Data-Set-ים של Face Recognition - יש בהם Bias מובנה . . .
    • זה ממש תחום שמדברים עליו הרבה - גם באקדמיה ובמחקרים שהראו שה-Data Set-ים שאספו מהאינטרנט הם בעיקר מוטים כלפי אנשים לבנים . . . 
      • והייצוג של קבוצות אתניות אחרות - כמו אסייתים או אפרו-אמריקאים או הודים - הוא הרבה פעמים יותר קטן
    • ואם הוא יודע שהמערכת שלו צריכה עכשיו, למשל, לעבוד ב-Scenario שיש בו אוכלוסיה מעורבת - אז מה שהוא כנראה צריך לצפות שיקרה זה שיבוא בנאדם אסייתי - והמערכת תזהה אותו כאסייתי אחר
      • כי היא לא למדה פשוט להפריד בין אסייתיים . . . .
    • עכשיו - אם הוא לא יכול להביא עוד Data - ותיכף נדבר על מה קורה אם הוא כן מביא עוד Data - מה שהוא יכול לעשות זה מצד אחד “להדק את הספים” ולהגיד “אני עכשיו דורש Confidence מאוד מאוד גבוה”
      • ואז ביצועי המערכת, בכללי, יפגעו.
    • והוא יכול להחליט שהוא - נגיד שבמקביל ל-Face Recognition - שם איזשהו Block של Ethnicity” “Classifier, שאומר ש”אם אתה שייך לאחת מהאוכלוסיות שאני יודע שעבורן זה לא עובד טוב, אז שם אני דורש ממך Confidence מאוד גבוה”.
      • אבל זה רק “פלסטר” . . . . למה זה “רק פלסטר”? כי אמנם המערכת שלו לא תטעה, אבל היא גם לא תזהה . . . 
      • היא לא תזהה את האנשים מהאוכלוסיות האלה.
    • אז אפשר היה ''להשתמש בפלסטרים'' ואפשר היה להגיע לביצועים ולשפר ביצועים עם Model-Centric Iterations
      • עכשיו קצת פחות - כי המודלים כבר . . . יש רשתות מאומנות מצויינות עם ResNet-50 ועם Transformer-ים [לא כאלה], שזה קצת כבר מרגיש שזה “Mature”.

(רן) אז אומרת שהתחלנו במשהו שהוא Model-Centric - והכוונה ב-Model-Centric זה שאני יכול לכייל את הפרמטרים ככה שה-Performance של המודל שלי יהיה מצויין - אבל אחר כך, את אומרת, נעשה Shift ל-Data-Centric. מה הכוונה?
  • (אורלי) Data-Centric בעצם מתייחס להבנה שהמודל הוא טוב כמו ה-Data שהוא אומן עליו.
    • זאת אומרת שאם תיקח מודל מודרני - אז המודל הוא טוב, הוא די Mature והוא בסדר
    • עכשיו, המאמץ שלך הוא באיך להביא את ה-Data הנכון כדי לאמן את המודל.
  • אז אני די בטוחה שאם היום אני אשאל מהנדסי Computer Vision מנוסים, הם לא יגידו לי שזה 80% - הם יגידו שזה 90% ומעלה, עם המודלים החדשים.
  • עכשיו, בוא נגיד שאותו מהנדס Computer-Vision  שלנו רוצה להביא עוד Data - והוא יודע ש”חסרים לו אסייתים”, אז מה הוא יכול לעשות?
    • דבר ראשון שהוא יכול לעשות זה ללכת ולחפש Data-set אקדמי אחר - וזה יעשה לו כאב-ראש גדול . . . 
      • למה שזה יעשה לו כאב ראש גדול? כי ה-Data-set האקדמיים האחרים - אם הם מותרים לשימוש מסחרי, ובוא נניח שהם מותרים - אז גם בהם יש את אותו ה-Bias . . . .
      • והוא לא יודע - כי בדרך כלל Data-set אקדמי הוא תמיד מתוייג אך-ורק למטרה שלשמה הוא נבנה
        • ו-Data-set של Face-Recognition - יש בו תמונות של “אורלי” ושל “רן” ושל עוד אנשים אחרים, אבל אף אחד לא אומר לו מה ה-Attribute-ים האחרים של האנשים
        • אף אחד לא אומר לו מי אסייתי, מי גבר, מי אישה, מה הגילאים . . . .
      • ולכן - הוא יצטרך לעשות עבודה Engineer-ית לא-מאוד-נעימה של
        • גם להוציא משם את “האסייתים” באיזושהי דרך - לתייג ידנית
        • אבל גם מאוד סביר שיהיו לו כפילויות - כיוון שה-Data-set-ים האקדמיים הם כולם באים מהרשת ומכילים הרבה תמונות של Celebrities . . . 
    • עכשיו, גם אם הוא יערבב Data-set-ים - אז יש לו גם בעיה של חוסר-קונסיסטנטיות (inconsistency) בין מתייגים . . .
      • נגיד, תחשוב שאני עכשיו נותנת לך תמונה, ויש בה בנאדם - ואני אומרת לך “רן - סמן לי בבקשה פנים!”
      • אז אחד יבוא ויסמן פנים בצורה מאוד “Tight”, מאוד צמוד לאוזניים, ולא יכלול את השיער
      • ובנאדם אחר יגיד “לא - מבחינתי השיער זה גם חלק מהפנים”
      • ובנאדם אחר בכלל יקבל תמונה שבה אתה מסתיר אותי - ואז זה כבר מגיע למקרים שזה לא כל כך חד-משמעי מה צריך לשים שם, כאילו . . . 

(רן) כן . . . אז את אומרת שככה “סתם למצוא Data”, ככה “In the wild”, שהוא מאוזן - זה מאתגר . . . . זה מאוד מאוד מאתגר.
ומצד שני - חייבים Data, כי מהמודלים הצלחנו לסחוט, כנראה, את כל מה שאפשר . . . אולי עוד אפשר יהיה בעתיד ואולי נגלה, אבל נכון להיום, לפי מה שאנחנו יודעים, המודלים כבר עושים עבודה ממש-ממש טובה - ומה שחסר לנו זה “Data טוב”.
אוקיי - אז אני חושב שמפה הדרך ל-Data סינטטי כבר הרבה יותר ברורה . . .  המוטיבציה יותר ברורה.
  • (אורלי) כן . . . אבל אני רוצה להתחכם, אז אני אומרת ש”אני אצלם לבד!”
  • ולי יצא לעשות את זה, כשרציתי לעשות דברים כאלה, לפני שהיה את העולם של ה-Data הסינטטי - שהוא רק עכשיו הרי צובר תאוצה.
  • “אני אצא לצלם לבד” - או שאני אלך ואשלם למישהי טובה והיא תאסוף לי את ה-Data.
  • עכשיו, גם שם זה תהליך יקר, זה תהליך  שלוקח זמן - ואתה צריך להגדיר אותו היטב
    • והוא סובל מאותן בעיות של תיוג
    • וגם צריך לקבל Consent, כי תחשוב - אלו תמונות פנים, וה-GDPR והתקינה גם בארה”ב הולכת והופכת ליותר ויותר מחמירה 
  • אגב, אני יודעת להגיד ש-Data-set-ים של פנים, שפעם השתמשתי בהם לזיהוי פנים - בינתיים ירדו מהרשת
    • פשוט הם כבר לא זמינים, לאף אחד.
    • אז יש כאן בעיה . . . 
  • וגם לפעמים זה לא כל כך אפשרי, כי תחשוב שאני נגיד רוצה לאמן רכב אוטונומי [לדוגמא]
    • אז אני יכול לשים מצלמה באוטו ולנסוע ברחבי תל אביב
    • אבל אם המערכת שלי צריכה לעבוד במדבר, אז כנראה שאני בתל אביב לא אמצא גמל שחוצה את השביל . . . 
  • אז זה לא תמיד כל כך קל וזה צריך להיות ממש מותאם ל-Domain שהמערכת צריכה לעבוד בו בסוף.
(רן) כן, וחוץ מזה - לצלם Data זה יקר . . . זאת אומרת, מודלים לפעמים צריכים מיליונים של דוגמאות, וללכת ולצלם מיליון תמונות זה די הרבה עבודה. וגם אם את עושה את זה, אף אחד לא מבטיח לך שאת לא תייצרי Bias בעצמך - אם את מצלמת בתל אביב אז סביר להניח שלא יהיו הרבה אסייתים או כהי-עור או  . . .  אז גם פה.
  • (אורלי) מדוייק לחלוטין . . . 

(רן) בסדר . . . את יודעת מה? אולי רגע לפני שניכנס ל-Data סינטטי - האם בכל זאת יש שיטות לאוגמנטציה (Augmentation) של Data? זאת אומרת - לקחת Data-set קיים ואיכשהו “לייצר Balance” או לייצר עוד תמונות מתוך תמונות שכבר קיימות . . . שיטות כאלה פעילות היום?
  • (אורלי) יש מודלים שיודעים לייצר פנים - מודלים שמבוססים של GAN-ים 
  • אבל בסוף, אין לך שם . . . זה מאוד קשה לקבל שם שליטה - 
    • אם אני עכשיו, למשל שאלה שבדרך כלל תגיע מאנשי-מוצר, Product - “שומעת? הלקוח שואל מהו גודל הפנים המינימלי שאנחנו יודעים לזהות”
      • או “באילו זויות פנים את יודעת לעבוד?”  . . .
      • או “באילו תנאי-תאורה את יודעת לעבוד?” . . . 
    • וגם כשאתה מייצר את הדבר הזה, זה לא כל כך קל לך לשלוט ולהגיד “אני רוצה את זה ואת זה בדיוק”, או לייצר סדרות שהן ממש אינקרמנטליות (Incremental)
      • שיש בהן “הכל אותו הדבר חוץ מפרמטר אחד קטן” שאותו שינית בהדרגה, כדי ממש לעשות בחינת ביצועים אמיתית למודל שלך.
(רן) כן, הבנתי - את אומרת שזה לא רק . . . 
  • (אורלי) עשיתי את זה . . ממש עשיתי את זה וצילמתי את זה במשרד - וזה נותן המון המון ידע והמון המון כוח לאנשי מוצר.
(רן) . . .  זאת אומרת שזה לא רק שאני צריך הרבה מאוד Data והרבה Data “מאוזן” - זה שלפעמים יש Use-case-ים מאוד מאוד ספציפיים, שאפילו אין לי ב-Test . . . לא רק שאין לי ב-Training, גם אין לי ב-Test, ואני לא יכולה אפילו לדעת האם זה יעבוד או לא יעבוד עד שאני לא אקבל תמונה עם ''הזוית המסויימת הזאת'' ועם ''כמות האור הזאת'' ומאפיינים אחרים.

(רן) בסדר, אז את האתגר הבנו.
אז את אומרת שהפתרון שאתם מציעים זה בעצם פתרון של “אוקיי - בואו נייצר Data סינטטי”: ניתן את הספסיפיקציה (Specifications) ונבקש מהמכונה שתייצר אותו.
  • (אורלי) נכון . . . .
איך זה עובד?
  • (אורלי) אז קודם כל - זה עובד בלחיצת כפתור . . . . פשוט צריך לקפנג (Configure).
    • אגב, יש לנו Free-trial שיצא לא מזמן, אז למי שבאמת מעניין אותו - פשוט כנסו והרשמו.
    • זה מאוד יפה לראות - אני, כשרק ראיתי Data סינטטי בפעם הראשונה מאוד הופתעתי מכמה שזה יכול להיראות אמיתי
  • אז (א) - האינטראקציה (Interaction) עם המערכת היא נורא פשוטה: יש פלטפורמה שאתה יכול פשוט להיכנס וזה עושה לך Walk-through כזה
    • “תגדיר לי באיזו סצנה (Scene) אתה רוצה להיות”, “איזו התפלגות של בני אדם אתה רוצה?” וכו’
    • זה בלחיצת כפתור, ואז אתה פשוט מחכה - ובתוך יום-יומיים יש לך את ה-Data.
    • אז ברור שמבחינת זמן זה יותר מהיר - וגם מבחינת הכסף אני די בטוחה שזה יוצא יותר זול.
  • יתרונות אחרים של הדבר הזה הם שבגלל שאתה שולט בהכל, אז אתה יכול לצייר כל Edge-case שאתה רוצה, או שאתה חושד שאולי יש לך.
    • האמת היא שלפעמים אתה אפילו לא תחשוב - והמערכת . . . .
    • אתה תסכל ותגיד “אוקיי, זה מעניין - לא חשבתי על העניין הזה … בואו נראה האם המודל שלי עומד בזה או לא”
  • אתה יכול לייצר, די בקלות, Data שהוא Unbiased, נכון? כי אתה יכול להגיד “אוקיי - תביא לי עכשיו 100% אסייתיים” - ותקבל 100% אסייתיים, אז במובן הזה . . .

(רן) לפחות, דרך אגב, על ה-Bias שאת חושבת עליו . . . . זאת אומרת - תמיד יכול להיות שקיים גם Bias שבו לא התמקדת, לצורך העניין - אם לא כיסית איזושהי קבוצת אוכלוסיה. אבל לפחות על ה-Bias שאנחנו חושבים עליו - בשבילו אפשר לייצר Data כזה.
אבל איך אנחנו יודעים שבאמת . . . זאת אומרת לצורך העניין - ביקשתי “אסייתי” ויצא לי משהו אחר. איך אנחנו יודעים ש”באמת” זה עובד? אולי זה קצת מתקשר לשאלה שלי ממקודם, של “אולי זה קל מדי?” זאת אומרת, Data סינטטי - אולי יש בו Pixel-ים חבויים, אולי יש בו מאפיינים שאיכשהו ה-Deep Neural Network תופסת “בפנים”, וזה עוזר לה לזהות את התמונה בגלל איזה-שהם ארטיקפטים (Artifacts) שהם אולי לא נראים לעין - אבל במציאות זה לא יעבוד: יכול להיות שבמציאות, מן הסתם אם הארטיקפטים (Artifacts) לא קיימים . . . 
אז איך מייצרים, בעצם, Data סינטטי שהוא “נאמן למציאות” ככל שניתן?
  • (אורלי) אז שאלת כמה שאלות . . . . יכול להיות שיהיה צריך לחזור כי אני אשכח בדרך, אז תחזיר אותי בחזרה.
  • אז קודם כל, מה שאתה מתייחס אליו זה בעצם נושא קיים, Issue קיים, שעוד נדבר עליו במהשך - שקוראים לו Domain Gap.
    • יש Domain Gap ב-Data סינטטי - אם תסתכל על תמונות אתה ממש תראה שזה לא תמיד, אגב, לרעת ה-Data הסינטטי . . . .
      • כי ה-Data מאוד “נקי”, והרזולוציה שם יכולה להיות מדהימה
      • זאת אומרת שאתה ממש יכול לראות נקבוביות של העור וזיפים . . . . אלו דברים שב-Data “האמיתי” אתה בדרך כלל לא תראה כי הוא הרבה יותר “רועש”.
  • עכשיו, השאלה היא פרקטית, נכון? אני צריך לעבוד על ה-Data של ה-Test שלי בסוף . . . .
    • אז אם יש לך Test-set שמייצג את ה-Domain שלך - אז שום דבר לא “יתחבא”, נכון?
    • בסופו של דבר, היום - ונדבר על זה עוד בהמשך - אנחנו לא מאמנים רק על Data סינטטי
      • מה שאנחנו אומרים זה “תאמן על הרבה Data סינטטי - ואם אין לך הרבה Data אמיתי” - שזה הכאב הגדול פה, קשה נורא להשיג Data “אמיתי”
      • “… ובבעיות שאין להן Data-set-ים מוכנים, קח קצת Data אמיתי, ותן “דחיפה” לרשת שלך, שלמדה כבר את כל ה-Domain עם Data סינטטי - 
      • תן לה “דחיפה”, כדי שהיא תשלים את מה שהיא צריכה לכיוון של איך שנראה ה-Data האמיתי”.
  • אז הרעיון לחיזוק של הדבר הזה הוא ב-Mix - נדבר על זה עוד קצת בהמשך.

(רן) האם זה נכון גם לקחת Data סינטטי ולהשתמש בו לצורך Test?
  • (אורלי) חד-משמעית כן - וגם על זה נדבר עוד קצת בהמשך.
  • תחשוב שבעצם אתה רוצה לבחון את המערכת שלך - ויש Case-ים שלא הצלחת לכסות אותם.
  • יש לנו ממש מאמר שהוצאנו ב-NeurIPS, לדעתי לפני שנתיים, שהוא ממש מראה - ואפשר לשים לו רפרנס אם תרצו [כמובן שנרצה . . . הנה - Using Synthetic Images To Uncover Population Biases In Facial Landmarks Detection]
    • והוא ממש מראה שבאמצעות Data סינטטי, שאנחנו מייצרים אותו Unbiased, אפשר לגלות Bias-ים במודלים Pre-trained מוכנים.
      • כמו שהיית מגלה אותם  . . .  אולי אפילו אם תשים edge-cases חדשים, שאין לך ה-Test, אתה גם תגלה שאתה “לא עובד” או לא . . . 
      • שה-Performance לא מספיק טוב, בהקשר שלהם.

(רן) אוקי . . . אז איך זה עובד, ברמה הטכנית? זאת אומרת - לחצתי על כפתור, ועכשיו השרתים שלך עובדים. מה הם עושים שם? מייצרים כאלה תמונות סינטטיות, נאמנות למציאות . . . 
  • (אורלי) יש לנו מנוע גרפי, שאנחנו משתמשים בו.
  • המנוע הגרפי הזה בעצם מקבל את כל הסצינה התלת-מימדית והוא בעצם מרדנר (Rendering), עושה תהליך שקשור ב-Computer Graphics [להרחבה - 363 GPU @ Nvidia] - מרנדר (Render) תמונה.
    • הקבוצה של המתכנתים אצלנו גם דואגת לזה שאנחנו נקבל יחד עם פעולות הרינדור גם Modalities נוספים
    • זאת אומרת - לא רק את מה שאתה קינפגת (Configure) אתה תקבל, אלה עוד מידע
      • למשל - תקבל מפת סגמנטציה (Segmentation) מדוייקת של כל הסצינה
      • תקבל מפת עומק, שאומרת לך על כל פיקסל - באיזה מרחק הוא נמצא מהמצלמה.
      • או תקבל מפת Normal, שאומרת לך עבור כל פיקסל מה כיוון ה-Normal של אותו פיקסל 
        • ולדברים האלו יש היום הרבה מאוד כוח . . . .
      • או שנגיד - תקבל את כל ה-Key Points של הפנים של הבנאדם
    • וזה פשוט קוד שכותבים אותו - זה ממש עבודה ב-Computer Graphics.
(רן) הבנתי, זאת אומרת שבמקרה הזה לא מעורבת רשת עמוקה, לא מעורב GAN - את אומרת שזו פשוט עבודה של Computer Graphics . . . 
  • (אורלי) איפה כן זה מעורב? ביצירה של ה-Content עצמו.
  • כדי לייצר זהויות שהן נאמנות למציאות ומספיק ריאליסטיות - וגם לא דומות לאף דמות שקיימת במציאות, כי אז זה אסור - שם מעורב AI, ביצירה של ה-Content עצמו מעורב AI.
(רן) כן . . . . זאת אומרת שלא לוקחים, לצורך העניין, תמונה של ברק אובמה ו”מלבישים” אותה בתוך חדר השינה שלך . . . זה לא מה שעושים. אתם בעצם מייצרים את הדמויות באופן . . . 
  • (אורלי) לא . . .  ממש מודלים תלת-מימדיים, שזו בעצם העבודה או חלק מהעבודה אצלנו בקבוצה.
  • זה בעצם איך מייצרים Motion - 
    • איך מייצרים “בנאדם הולך בתוך סביבה”? 
    • איך מייצרים “בנאדם עושה אינטראקציה עם איזשהו אובייקט?” - נגיד “מחזיק טלפון”
    • איך מייצרים בכלל Identities שהם שונים?
(רן) כן . . . .
  • (אורלי) וזה גם - אגב, שאלת שאלה גם מקודם - זה צריך להיות Controlled, כי האחריות שלי זה לספק “אסייתי” שהוא אכן “אסייתי”: 
    • זו האחריות וזאת העבודה שלנו לוודא, שמה שאתה אמרת שאתה חושש ממנו לא קורה.
    • זה כן נעשה עם Computer Vision
(רן) אז לצורך העניין, אתם עושים QA אחר כך - אחרי שה-Data נוצר - הולכים ולצורך העניין מסווגים אותו בודקים שזה אכן יצא מתאים לפרמטרים שביקשתי.
  • (אורלי) כמובן - לא מוציאים אליך משהו שהוא לא בדוק . . . 
  • אגב, אני חייבת להגיד ש . . . 
(רן) . . . זה קצת מזכיר חלק מהתהליך שקורה ב-GAN - שיש חלק שמייצר את ה-Content וחלק אחר שבודק ומעביר עליו ביקורת, רק שבמקרה שלכם, החלק שמייצר הוא יותר אלגוריתמי ופחות  . . . .
  • (אורלי) קודם כל, לא הכל אלגוריתמי כי במנועים הגרפיים שאנחנו עובדים איתם יש דרכים מאוד טובות, פרוצדורליות, “לייצר סביבות”
  • אבל תחשוב - איזה Variance של Identities אני צריכה לתת?
    • אני צריכה לתת 50,000 זהויות שונות . . . אין את זה באף מנוע גרפי.
  • אני צריכה לייצר Variance “אמיתי” של תנועה - 
    • זאת אומרת שזה לא רק בנאדם שהולך ואולי אפשר לעשות את זה בכל מנוע גרפי
    • זה המון אנשים שהולכים בהמון צורות - ובהמון מסלולים.
  • אז המקום שלנו, בתור מהנדסי Computer Vision בחברה, זה לתת את ה-Variance הזה
    • ממש להגיד “אנחנו צריכים את זה ב-Scale, אנחנו צריכים לייצר את זה”.

(רן) אוקיי, אם אני עכשיו בא לעבוד עם Data סינטטי - אילו דברים חשוב שאני אשים לב אליהם? זאת אומרת, איזה-שהם מאפיינים, אולי “פחים” קטנים שאולי קיימים ב-Data סינטטי ויכול להיות שפחות קיימים ב-Data “אמיתי”.
  • (אורלי) אז בגדול, יש שני דברים שונים בין Data סינטטי ל-Data ''אמיתי''
    • אגב, הם יכולים להיות שונים גם בין Data אמיתי ל-Data אמיתי [אחר] - הם לא מיוחדים, אבל ספציפית בגלל שאנחנו מדברים על Data סינטטי אז נזכיר אותם בהקשר הזה.
    • באחד כבר נגענו קודם - שזה ה-Domain Gap שלנו.
      • ה-Domain Gap מתבטא בזה שאתה פשוט מסתכל על התמונה והיא לא נראית לך בדיוק כמו Data אמיתי… 
    • והדבר השני זה Label Gap - ו-Label Gap זה משהו שקשור בזה שהדיוק או האופן שבו אני מגדירה את ה-Ground Rules שלי יכול להיות שונה בין Data סינטטי לאמיתי, במובן ש . . . 
    • ניקח דוגמא: אני לוקחת מפת סגמנטציה (Segmentation) של פנים, ולי יש סגמנט שקוראים לו Eyelids - עפעפיים - שב-Data-set-ים האקדמיים, או לפחות ב-Data-set שאתה עובד איתו בתור לקוח,  אין אותו.
    • דבר שני שיכול לקרות זה שנגיד שיש לנו סגמנטציה של “צוואר” - והמעבר בין “צוואר” לבין “פנים” זה לא מעבר שהוא מוגדר היטב - 
      • אתה תסמן אותו טיפה יותר למעלה, עם Contour טיפה אחר, ואני אסמן אותו טיפה יותר למטה
      • זה גם כן דבר שיכול לקרות.
    • אז אלו שתי הבעיות.
  • נדבר על הדרך להתגבר עליהן, או שאתה . . . .
(רן) כן . . .  אז איך מתגברים עליהן?
  • (אורלי) אז על ה-Domain Gap  . . . בכלל, שתיהן - יש שני סוגים של Domain Gaps, ובגדול הדרך להתגבר עליהם זה לעשות Finetune . . . . או עם Finetune או עם אוגמנטציות (Augmentations).
  • אז אוגמנטציה - זה שייך למשפחה של שיטות שקוראים להן Domain Randomization
    • כלומר - אני לא יודעת מה ה-Target Domain שלי, ואני עכשיו מתחילה “להתפרע”, אם להגיד את זה בשפה פשוטה.
    • ללכת על כל מיני כיוונים, לייצר את האוגמנטציות
      • ואז אני מאמנת את הרשת שלי עם האוגמנטציות האלה, בתקווה שאחת מהאוגמנטציות הללו מכסה את ה-Domain האמיתי.
  • ו-Finetune זו שיטה של Domain Adaptation - כלומר, אתה ממש אומר לרשת “יפה! התאמנת על Data סינטטי, מצויין - עכשיו הנה, אני מראה לך את ה-Domain האמיתי ובבקשה לעשות את האדפטציה שאת צריכה לטובת ה-Domain הזה”.
  • וה-Finetune היא גם דרך להתגבר בעצם על ה-Label Gap שתיארתי מקודם.
  • עכשיו רק עוד הערה אחת - יש מצבים שבהם אימנת מודל דווקא על Data אמיתי, ואתה רוצה לעשות לו Finetune עם Edge-cases, שאתה לוקח מתוך ה-Data הסינטטי
    • ושם צריך לשים לב לנקודה של Catastrophic Forgetting - כי הרשת מאוד מהר “שוכחת” את מה שהיא התאמנה עליו.
      • אז במצב כזה, זה מאוד מאוד חשוב, תוך כדי ה-Fine-Tune  הזה . . . . יש שתי דרכים, בגדול, להתגבר על זה:
      • אחת זה לתת Mix-ים מההתחלה - זאת אומרת לאמן את הרשת . . . .
(רן) רגע . . . בואי נתעכב רגע על המושג עם השם המפחיד הזה: Catastrophic Forgetting”. מהי הקטסטפרופה הזאת? מה  . . . .
  • (אורלי) זה אני המצאתי . . . זה מאמרים . . . 
(רן) כן, בהחלט  . . .
  • (אורלי) סתם . . . 
(רן) מה זה אומר?
  • (אורלי) Catastrophic Forgetting זה אומר שכשאנחנו עושים Finetune לרשת, אז הרשת פשוט מתאימה את עצמה - את המשקלים שלה - בצורה מאוד חזקה ל-Data שאתה מראה לה עכשיו.
    • היא “תשכח” . . . . נגיד, המשקלים שלה עוברים התאמה חדה, באופן כזה שה-Data הגדול והחשוב יותר, שהתאמנת עליו קודם - לא יהיו לך עליו כבר יותר ביצועים, אתה תספוג דגרדציה (Degradation) ב-Performance על ה-Data שהתאמנת עליו במקור.
  • לי זה ממש קרה - חוויתי על בשרי באחד מהמקומות שעבדתי בהם.
    • אימנתי מערכת שעושה Face Detection - וראיתי שהביצועים שלי על תמונות שהן Low-light, שהן קצת חשוכות, הם פחות טובים
    • ואמרתי “נו, ברור - זה קל! אני אקח קצת תמונות, נעשה Finetune לרשת”
    • ובעצם, מה שעשיתי כדי לוודא שלא קוראית לי התופעה הזאת - שזה Catastrophic Forgetting, כי אכן קרה לי אותה - זה להשאיר Data-set אחד גדול כדי שהוא ייצג לי את כל ה-Domain
      • ובמקביל - לבדוק איך הביצועים שלי רק על Data של תמונות שהן Dark.
    • ומה שראיתי זה שמאוד מהר - זה ממש קרה אחרי שני Epoch -ים , שלושה Epoc-ים - אני ראיתי ממש “נחיתה” בביצועים על ה-Data-set הכללי.
    • זה היה Catastrophic . . . זה באמת היה Catastrophic . . . 
    • והדרך להתגבר על זה . . . . 
      • אז א’ - צריך להיות  מאוד מודעים לדבר הזה - כי אם לא מודעים לזה, אז זה כאילו משהו “שמתחבא לך” ואתה בסוף מאוד מופתע.
      • אז פשוט צריך, קודם כל, שיהיה לך Test מסודר - ה-Test הוא סוג של “תעודת ביטוח” 
        • אני צריכה שב-Test יהיו את כל המקרים, שאני אוכל לסמן עליהם “v”.
      • אז אני הרבה פעמים, עושה את ה-”Unit Test-ים" האלה אני קוראת להם - ממש את המקרים שספציפית בא-לי לשים אליהם תשומת לב מיוחדת.
    • אז מה שעשיתי בסופו של דבר כדי להתגבר על זה זה פשוט לתת לרשת, בזמן ה-Finetune עם התמונות “החשוכות” שלי, גם Data שהוא רגיל, Data שהוא “נורמלי”
      • והגעתי לאיזשהו Trade-off כזה - 80% Data רגיל ו-20%  . . . . 
      • ממש בעדינות, וזה היה כזה “ניסוי וטעיה” - קצת לזה וקצת . . . 
      • ובסוף הגעתי לאיזשהו Trade-off, שכן הייתה בו ירידה מסויימת - אבל קטנה - בנתונים
        • לטובת זה שהשתפרתי על תמונות חשוכות.
    • אז זה Catastrophic Forgetting
    • דרך שניה, אגב, כדי להתגבר על הדבר הזה - או פשוט לא להגיע אליו - זה לא לעשות את זה ב-Finetune אלא פשוט לעשות Mix מההתחלה.
      •  להכניס את ה-Data שאתה רוצה ולאמן את כל הרשת מחדש, ואז היא “רואה” את זה בצורה יחסית מאוזנת.
(רן) כן, אז את אומרת שגם במקרה של Data סינטטי, את מציעה פשוט לעשות Mix בין כל ה-Batch-ים - זאת אומרת, שלא יהיה רצף של Batch-ים של Data סינטטי שיכולים לייצר את ה-Catastrophic Forgetting.
  • (אורלי) במיוחד . . .  נכון
  • במיוחד אם המודל שלך התאמן על Data “אמיתי” - שמייצג את ה-Domain האמיתי - ומה שאתה לוקח מה-Data הסינטטי זה פשוט “רמזים ל-Edge-cases” שלא היו לך מסווגים שם בצורה טובה.
    • כי אז - בגלל ה-Domain Gap - יש סכנה שהרשת תעשה התאמה חזקה מדי לכיוון ה-Data הסינטטי.
  • ויש עוד משהו מעניין שאפשר לעשות עם Data סינטטי, אגב - בהקשר של אוגמנטציות (Augmentations) . . . .
    • קודם הזכרתי שאנחנו מקבלים בעצם Multi-Modalities
    • אז בגלל ש . . . נניח שחסר לי עכשיו תמונות של אנשים עם איפור” או תמונות של אנשים עם כובעים” 
    • אז בגלל שיש לי עוד Modalities שהם סגמנטציה (Segmentation) ומפות עומק
      • וזה דברים שאנחנו עושים כאן, שנותנים שיפור יפה של כמה אחוזים בביצועים
    • יש לי כבר מפת סגמנטציה (Segmentation) - אז אין לי שום בעיה “לצבוע” רק את השפתיים, או לשנות רק את הצבע של ההגה לצבע אחר
    • ואם יש לי מפות עומק אז גם אין לי שום בעיה לייצר אפקטים של אובייקט שנמצא “קרוב למצלמה” או “בפוקוס” - וכל השאר שם הוא “מטושטש”.
    • וזה חוזק מאוד גדול - זאת אומרת, ה-Data הסינטטי מביא איתו סוג של, נקרא לזה, “אוגמנטציות תלת-מימדיות” . . . .



האזנה נעימה ותודה רבה לעופר פורר על התמלול!