כתבה זו הינה כתבת המשך (מומלץ קודם לקרוא את חלק א’) שמסקרת את הפרויקט שלי ושל אלון בורג על הסרת רקע מתמונה. בחלק זה נעסוק בעיקר במודל, בסוגיות שעלו ובתוצאות שקיבלנו.
מודל ה Tiramisu והאימון
השם המלא של המודל נקרא: 100 layers Tiramisu , והוא מכיל 9 מיליון פרמטרים (לשם השוואה VGG מכיל 130 מיליון פרמטרים).
המודל מבוסס על ארכיטקטורת DenseNet שבה כל השכבות מחוברות זו לזו. מודל ה Tiramisu מוסיף גם חיבורי מעקפים לשכבות ה Up-sampling כמו רשת ה Unet.
אימנו את המודל הזה על המאגר (המקוצץ) שלנו עם תמונות שהקטנו לגודל של 224×224 עם המאפיינים הבאים (כמו שמתואר במאמר המקורי):
פונקציית מחיר הינה Cross Entropy Lossסטנדרטית, האופטימייזר הינו RMSProp עם Learning Rate=1e-3, גודל ה-Batch הינו 500 תמונות כאשר חילקנו את המאגר של ה-11 אלף תמונות ל 70% אימון (Training) , 10% בדיקה (Testing) ו 20% אימות (Validation).
סוגיות שעלו
חיות – המודל שלנו לעיתים שגה כשסיווג חיות כבני אדם. אילו היינו מוסיפים מחלקה שלישית לאימון (ז”א רקע, בני אדם וחיות) זה כנראה היה נפתר.
חלקי גוף – את התמונות שלנו סיננו באמצעות קוד ולא הייתה לנו דרך לדעת אם תמונה מכילה פיקסלים של אדם לא שלם (ז”א רק יד או רגל). תמונות אלו כמובן אינן מטרתינו:
אחיזת חפצים – הרבה מהתמונות קשורות לספורט ולכן מכיל תמונות של אנשים שמחזיקים כל מיני דברים. המודל שלנו התבלבל ב-איך לסווג אותם. גם פה הוספת מחלקות נוספות כנראה היה פותר את הבעיה.
Ground Truth גס מידי – התמונות במאגר COCO לא תויגו פיקסל, פיקסל אלא עם מצולעים (polygons), מה שפגע באימון.
תוצאות
אחרי בערך 300 epochs (יותר מזה כבר הגענו ל Overfit) התוצאות שלנו היו משביעות רצון אך לא מושלמות, הגענו ל 84.6 IOU על קבוצת התמונות לבדיקה (Testing Set). כאשר נכון לכתיבת שורות אלו (2017) התוצאה הטובה ביותר (State of the art) לסגמנטציה של בני אדם הינה 85 IOU. לאובייקטים אחרים התוצאות כמובן טובות יותר או פחות, למשל לבתים וכבישים ניתן להגיע ל 90 IOU, לעומת זאת לעצים מגיעים ל 60 IOU.
להלן דוגמאות מוצלחות:
ניפוי ורישום (Debugging & Logging)
בנינו כלי ניפוי (מאוד חשוב!) כדי לבחון את התוצאות שלנו בכל שלב. להלן האתגרים ואיך התגברנו עליהם:
- בעיות מוקדמות – המודל לא מצליח להתכנס. יכול להיות מכל מיני סיבות כמו למשל באג בעיבוד מקדים (Pre-processing). הצגת התוצאות באופן ויזואלי עוזרת לפתור זאת. ראו פוסט זה בנושא.
- לדבג (לנפות) את הרשת עצמה – המדד העיקרי שלנו להצלחה היה IOU (ולא ה Loss), מה שעוזר זה להציג פרדיקציות (תוצאת סגמנטציה של הרשת) כל כמה איטרציות אימון (Epochs). בפוסט הזה תוכלו לקרוא עוד על איך לדבג מודלים.
- ניהול גירסאות – כשמאמנים מודל יש המון פרמטרים. חייב להודות שעוד לא מצאנו את השיטה האידיאלית מלבד פשוט לרשום את הקונפיגורציה ולשמור את המודלים\אימונים המוצלחים (*).
- כלי דיבוג (ניפוי) – כדי לשלב את הכול יצרנו Jupyter Notebook שאיפשרה לנו בצורה חלקה לטעון כל מודל וכל תמונה במהרה וכך לבחון כל תוצאה, כך יכולנו להשוות ולזהות בעיות.
אז הנה דוגמא לשיפור תוצאות לאחר משחקים עם הפרמטרים:
(*) שמירה אוטומטית של המודל הכי טוב עד עתה (לפי מדד IOU) עם פונקציית Keras נוחה:
callbacks = [keras.callbacks.ModelCheckpoint(hist_model, verbose=1,save_best_only =True, monitor= ’val_IOU_calc_loss’), plot_losses]
שמנו לב שישנם שגיאות שניתן לצפות כמו תמונות עם חלקי גוף “חתוכים”, בגדים מאוד כהים או מאוד בהירים (לעיתים מתפרשים כרקע), תמונות בתנאי תאורה או איכות ירודה ועוד…
כדי לשפר את הגירסה הבאה נעשה אוגמנטציה (Augmentation) לאותם מקרים קשים. להלן דוגמאות של מקרים קשים:
Matting
כאמור התוצאות אינן מושלמות בעיקר במקרים של שיער, קווי מתאר עדינים של בגדים, וכו’. ההפרדה בין רקע לאוביקט (הסגמנטציה) במקרים עדינים כאלו נקראת Image Matting ונחשבת לבעייה נפרדת בעולם הראייה הממוחשבת. להלן דוגמא לכך שפורסמה בכנס של אניבידיה.
בעיית ה Matting הינה בעיה קשה והקלט שלה כולל גם את התמונה וגם תמונת Trimapשהינה קווי מתאר של ה Egdes שלה (ראה בתרשים למעלה), מה שהופך אותה לבעיית מונחית למחצה (Semi-supervised).
ניסינו קצת לעשות Matting כאשר מודל הסגמנטציה שלנו שימש כ Trimap אך לא הגענו לתוצאות משמעותיות (אחת הבעיות היא שאין הרבה מאגרים רלוונטיים לאימון).
לסיכום
כמו שציינתי בהתחלה, המטרה שלנו הייתה ליצור מוצר deep learning משמעותי. ואכן הצלחנו ולמדנו מכך המון.
בעיקר למדנו ש deployment של מודל הוא הרבה יותר פשוט ממה שחשבנו בהתחלה, אך אימון מודל הוא עדיין תהליך מאתגר – שדורש תכנון, הבנה, תיעוד ותחקור משמעותי.
כמו כן, ראינו שיש צורך באיזון בין ניסוי כיוונים חדשים לבין מיצוי המיטב מגישות קיימות.
לסיכום, נהנינו מאוד מהפרויקט, שמספר חודשים קודם לכן נראה לנו כמו מדע בדיוני.
נשמח לדיונים ולענות לשאלות!