data augmentation

Dataloop – המזון של תעשיית ה AI

המרואיין: ערן שלמה (CEO)

כמה אנשי פיתוח ? איך מחולקים ?

שמונה אנשי פיתוח, מחולקים לשני Front End לארבע Back End  לאחד  SDKואלגוריתמאי. ונשמח לשמוע מאנשי FrontEnd ואלגוריתמיקה.

רקע

אנחנו בונים AI שעוזר לייצר את המזון או האנרגיה לתעשיית ה AI (שהוא הרי Data מתוייג).

במהותה מערכת AI היא מערכת לומדת ורובנו עוסקים בתלמיד בתהליך זה, שהוא למעשה המכונה. העיסוק שלנו בדאטאלופ מרוכז סביב המורים, אותם אנשים שמייצרים דוגמאות (תיוגים) ולמעשה מעבירים דרכן את האינטיליגנציה שלהם למכונה.

התהליך הוא קשה ומורכב, טכנולוגית, אופרטיבית, פיתוחית ואלגוריתמית, ואחרי מאות סטים שיצרנו מאפס למדנו ש 80% מהסטים סובלים מבעיות איכות, דאטא איכותי הוא מאוד יקר והזמן לייצר אותו קשה לחיזויי, ממש כמו קוד.

הצורך לשלב אינטילגנציה אנושית יחד אם אינטילגנציה מלאכותית בצורה שתהיה צפוייה, מוגדרת היטב ומדוייקת מעסיק את רוב זמננו.

החזון שלנו היא מערכת AI שמורכבת בחלקה ממכונה ובחלקה מבני אדם ומאפשרת ללקוחות שלנו לשלב אינטילגנציה אנושית יחד עם למידת המכונה שלהם בצורה חלקה כאשר הם לא יצטרכו לנהל ולהיות מעורבים בתהליך, והמערכת שלהם תלמד ותשתפר באופן תמידי ואוטומטי.

אנחנו מקבלים מחברות שמתעסקות ב Computer Vision מאגרי תמונות ומספקת Training Sets (ז”א תמונות מתוייגות) ואם צריך גם מודלים מאומנים.

 

הייתי ממליץ לכל איש אלגוריתמיקה להעביר בעצמו יום תיוג. אחרי 3-4 שעות נהיה לך מודל בראש אוטומטי של תיוג, אתה מתחיל להבין את הדאטא שלך טוב יותר ורואה איפה אתה עצמך לא בטוח מה התשובה לשאלה שאתה שואל. בדרך כלל תהליך פיתוח הסט הוא איטרטיבי כך שהאלגוריתמאים מעדנים ומדייקים את ההוראת לאורך הזמן. אם לתת טיפ למי שמאמן מודלים, הגדרת התיוג שלכם בצורה שתהיה מדוייקת וחזרתית מצד המתייגים תתרום לביצועי המודלים שלכם יותר מכל משתנה אחר במערכת.

אנחנו רואים מורכבות הולכת וגוברת, הצורך לייצר אינטיליגנציה שמחקה בני אדם בצורה טובה יותר עולה ואיתן מורכבות התיוגים והמודלים. עולם התיוג כבר איננו אינו רק לשים מלבן על כלב וחתול, בפועל ישנם צוותים שלוקח שבועות ללמד אותם תיוגים מורכבים.

בתהליך הזה יש ניהול מאוד משמעותי וקשה שדורש הרבה זמן. להרבה מחברות התיוג יש בעיה קשה של אמינות, לא עומדים במחירים, בלוחות זמנים ובכ”א אפילו נתקלנו באי סדרים על גבול ההונאה.

עבודת התיוג מאוד סיזיפית ולכן צוותי תיוג לרוב מתחלפים מהר. הניהול של צוותים מתחלפים חייב להיות מאוד יעיל. למשל הגדרת המשימה צריכה להיות מתוחזקת באופן מסודר ובצורה מדוייקת, כאשר אנשים חדשים צריכים לייצר את אותו הסט כמו קודמיהם.

מהם המוצרים בחברה ?

יש לנו מערכת (תוכנת ווב) שמאחדת את האדם שמתייג, את האלגוריתמאי, את מנהל הפרויקט\איסוף נתונים, ואת איש ה-IT. הפלטפורמה מאפשרת לכולם לדבר ולהסתנכרן על ה Data  ועל ההנחיות המפורטות של משימת התיוג. כמו כן אנחנו מכניסים הרבה אוטומציה לתהליך ולניהולו.

המערכת שלנו מכילה דאטאבייסים עם המון מטה-דאטא. ז”א לא רק את התמונות והתיוגים אלא גם נתונים על עבודת התיוג לכל תמונה. (משך התעכבות, תנועות עכבר, וכו…)

יש מערכת של ניהול איחסון גם אם זה בעננים אחרים.

 

אילו חלקים במוצר מצריכים אלגוריתמיקה ?

אנו חברה שלא רק מנהלת את תהליך התיוג של ה Data בפלטפורמת תוכנה נוחה אלא גם אנו מאמנים מודלים משלנו שיעזרו בניהול תהליך התיוג:

מודל שיחזה טעויות תיוג

לרוב לצוותים הללו יש איש  QA שעובר מדגמית (ביחס של 1:10) והוא יקר יותר.אנחנו מאמנים מודל להיות QA שמציע ל QA האנושי הצעות שיותר סביר שבעלות טעות ובכך לחסוך את זמן העבודה שלו.

למשל יש עשרת אלפים מלבנים של כלב\חתול שאתה בוטח בהם (כי עליהם עבר האיש QA) ובתשעים אלף אחרים אינך בוטח.אנו מאמנים מסווג לארבע מחלקות:Good/Bad Dog Annotation, Good/Bad Cat Annotation. בכדי לאמן מודל כזה ביעילות אנו עושים אוגמנטציות למשל ע”י הזזה של המלבן מדוגמאות שאתה בטוח לגביהן בכדי לקבל דוגמא של Bad Dog/Cat.

יש עוד המון טריקים שעושים, למשל אנחנו מבצעים סדרת טרנספומציות על תמונה וסדרות של טרנספורמציה על האנוטציות ומאמנים מודל על ההסכמה בינהם.

מודל שיחזה עלות תיוג

בעיה קשה נוספת בניהול מתייגים קשורה בהערכת עלות העבודה. חברות ה AI יודעים לדבר לפי יחידות (כמות תמונות) וחברות התיוג עובדות לפי שעות. ההערכה מבוססת על מדגם קטן ראשוני. ואז אחרי שמסכימים על מחיר ומתחילים בעבודה רואים שהקצב שונה מהצפוי. ואז החברה המתייגת תעלה את המחיר או שפשוט תעזוב (בתרבות ההודית הם בד”כ לא אומרים שהם לא יעמדו בזה אלא פשוט יאחרו או יתנו תפוקות לא טובות ועם טעויות רבות).

אנחנו שומרים את כל הנחיות המשימות ויודעים להמיר את המשימות לזמן. אימנו מודל שחוזה כמה זמן ייקח לתייג. (מתוך המון מאגרי נתונים מגוונים שתייגנו בעבר). כבר דחינו ספקים שנתנו הצעה זולה מידי כי כבר ידענו שזה לא יעבוד (יודעים פר מדינה שכר והכל). מטרתנו שהם צמד אחד ירוויחו בכבוד ומצד שני לא ביוקר מידי כדי שהכל יעבוד כמו שצריך.

מודל שייעל את התיוג

 

 

אימון מודלים כדי שיציעו הצעות למתייגים כדי לייעל את התהליך. למשל אולי המודל כבר מצליח 80% במשימתו אז נשתמש בו וזה יחסוך זמן תיוג.

מה עובד לכם טוב ?

גילינו דבר מעניין:

יש לנו המון דאטא, ומסתבר שיש קורלציה חזקה בין איפה קשה לאנשים ואיפה למכונה. אולי כי הבעיה לא מוגדרת היטב, אולי כי התיוגים פחות טובים אבל זו עובדה!

אנחנו יודעים בדיוק מה המתייג עושה וכמה הוא מזיז את העכבר, אם הוא בילה יותר או פחות על איזה מחלקה. ולכן יש לנו את היכולת לראות את הקשיים שבתהליך התיוג. הצלחנו מספר פעמים לחזות את הקשיים של המודל לפני שאפילו הלקוח שלנו אימן אותו.

על בסיס זה אנו יכולים לתת את התובנות שלנו ללקוחות שלנו, למשל איזה דאטא נוסף כדי להשיג כי בו האלגוריתם יתקשה?

מה מאתגר אתכם ?

יצרת שפה משותפת בין בני אדם למכונות שתמנע המון קשיי תקשורת

בעיות שפתרתם בדרך יצירתית ?

כל יום אחת אחרת, רובן סובבות סביב שיפור עלויות בעשרות מונים או בדיקות איכות.

מהם אתגרי העתיד ?

בעתיד נאפשר ללקוחות לבנות Pipelnes של מודלים שלנו או של הלקוח שיכולים לעשות את החישו

בים אצלנו וכך הלקוח לא יצטרך לנהל שרתים.

Posted by תמיר נווה in companies

ניתוח תלת מימד של CT לצורך ניבוי סרטן ריאות

מיועד ל- מתחילים (כתבה קצת טכנית)

נכתב על ידי תמיר נווה

בכתבה זו אספר על בעיית עיבוד סריקות CT (שהינן תמונות תלת מימדיות) ובפרט אספר על תחרות ה-Kaggle לזיהוי סרטן ריאות: Data Sciense Bowl 2017 ועל הפתרונות המנצחים בתחרות זו מתוך ה-1972 צוותים שהשתתפו בתחרות.

האלגוריתם שזכה מקום ראשון (של צוות grt123 בתוצאה של loss=0.39975) נמצא כאן וכמובן הוציאו על זה מאמר.

תיאור הבעיה

מאגר הנתונים הנתון באתגר הינו מעל אלף Dicoms (סטנדרט של תמונות\סרטונים רפואיים) של סריקות CT תלת מימדיות של חלל החזה של אנשים בסיכון גבוה לסרטן ריאה.

המטרה לחשב פרדיקציה לחלות בסרטן. פרדיקציה זו נעשית כיום ע”י רופאים בהתבסס על בחינת הגושים שרואים בסריקת בית החזה של הנבדק.

בעיה מסוג זה מקוטלגת כ- MultipleInstance Learning, שהינה אופיינית לעולם המדיקל ונחשבת קשה. זו בעיה בה יש כמה מופעים שונים של ארוע\אוביקט כלשהוא (הגושים במקרה שלנו) וכל אחד מהם לבדו לא בהכרח מעיד על פרדיקציה חיובית. ז”א מדובר בחיזוי תופעה שיכולה להתקיים בכמה אופנים שונים.

אומרים על למידה עמוקה שזו קופסא שחורה, רק צריך להשיג מספיק דוגמאות מתוייגות ולאמן מודל והבעיה כבר תיפתר מעצמה… אז אולי זה נכון כשיש באמת המון דוגמאות מתוייגות אבל בחיים האמיתיים כמו בחיים האמיתיים אין אף פעם מספיק דוגמאות מתויגות והבעיה לא נפתרת בקלות. ז”א אם מאמנים מודל לקבל את כל סריקות ה CT במלואן כדי להחזיר פרדיקציה לגבי הסבירות לחולי בסרטן זה פשוט לא יעבוד כי הקשר בין מיליוני הערכים המספריים שיש בסריקת ה CT המלאה לבין הערך המספרי (הבודד) של הפרדיקציה, הוא קשר עקיף מדי. מהות הפתרון הוא איזה חלק מהמידע להעביר למודל, ו\או איזה עיבוד מקדים יש לעשות כדי לסנן מידע מיותר לצורך הפרדיקציה.

העיבוד המקדים מבוסס על הידע שלנו שקיום מחלת הסרטן קשור בקיום הגושים, ובמאפייניהם (עד כמה הם ממאירים).

היופי בבעיות Vision הוא שניתן ממש לראות אותם – וזה מאוד חשוב לראות ולחשוב איך אני כבעל מוח אנושי מצליח (או מנסה להצליח אפילו שאיני רופא מומחה) לפתור אותם. זה נותן אינטואיציה לבניית האלגוריתם.

אז בואו קצת נבין איך זה נראה. מראה הגושים יכול להיות מאוד שונה ממקרה למקרה:

לקוח מ Evaluate the Malignancy of Pulmonary Nodules Using the 3D Deep Leaky Noisy-or Network

למעלה מוצגות תמונות חתך של סריקות CT שונות כאשר הגושים מוקפים בריבועים, בשורה התחתונה רואים בהגדלה את הגושים השונים.

סריקת ה-CT מכילה הרבה יותר מידע מתמונת חתך בודדת כפי שניתן לראות בסרטון הבא של תמונת CT תלת מימדית: (למעשה מנפישים אותה כתלות בכל אחד משלושה צירים)

על ה-DB

המידע שיש ב Dicom הינו צילום תלת מימדי וניתן להתייחס ולהציג אותו בעצם כמו סרטון שחור לבן (המיוצג ע”י מטריצה תלת מימדית או בהכללה טנזור). כאשר ציר הזמן הוא אחד מצירי העומק של סריקת ה-CT.

כל מכונת סריקה מייצרת סריקה בקצב דגימה שונה בציר העומק ולכן המרווח בין זוג תמונות חתך עוקבות (slice thickness) הוא שונה. וזו תופעה איתה יש להתמודד (בשלב העיבוד המקדים Pre-Processing).

הגושים (Nodules) אותם יש לחפש הינם בגודל טיפוסי של 1x1x1 סמ”ר  בעוד סריקת CT ממוצעת הינה בגודל 30x30x40 סמ”ר ולכן מדובר בחיפוש מחט בערימת שחת. אם נשווה לעולם היותר מוכר (לי) של דו מימד, זה כמו לחפש אוביקט בעל שטח של בערך 30 פיקסלים (ז”א בערך 5×5 פיקסלים) בתמונה בגודל 1000×1000. התיוג של ה DB מבוסס על שקלול אבחנות של כמה רופאים.

הרחבת DB תלת מימדי (Augmentation)

לפני שאסכם את הפתרונות של שני המקומות הראשונים בתחרות אדבר על Augmentation בעולם התלת מימד, מה ששני הפתרונות שיתוארו בהמשך השתמשו.

בעולם התלת מימדי יש לנו יותר אפשרויות של הרחבה מאשר בדו מימד.

תמונה דו מימדית ניתן לסובב ארבע פעמים בתשעים מעלות, ולעשות אותו הדבר עם תמונת המראה שלה, ובכך להכפיל פי שמונה את ה-DB מבלי להיכנס לסיבוכים כמו הרעשה, הוספת תאורה, סיבוב בזוויות לא ישרות וכו’… לתמונות תלת מימדיות ניתן להפעיל את אותו העקרון ולהרחיב את המאגר פי 48.

אם יש בקוביה גוש, גם יהיה גוש בכל אחת מה 48 סיבובים\היפוכים שלה:

תודה ל Дейка2

חשוב להזכיר גם את הקונספט (שהיה בשימוש בתיאור האלגוריתם של המקום השני בתחרות) אוגמנטציה בזמן בדיקה Test time augmentation הכוונה שאת האוגמנטציה ניתן לנצל גם בזמן ה Testing, ז”א להזין למודל כמה מהטרנספורמציות הללו (באופן אקראי) ולשקלל את הפרדיקציות שלו עבור התוצאה הסופית.

על הפתרון שזכה במקום הראשון

הפתרון מחולק לשלב ראשון של זיהוי הגושים ומאפייניהם ולשלב שני של פרדיקציה לסבירות קיום המחלה על בסיס תוצאות השלב הראשון. (לא כל גוש מעיד על קיום מחלת הסרטן)

עיבוד מקדים (Pre-Processing)

לפני השלב הראשון יש כמו תמיד עיבוד מקדים שמטרתו לייצר אחידות בין הסריקות ולהסיר את כל מה שמחוץ לריאות. העיבוד המקדים כולל המרת התמונות ל- (Hounsfield Scale=HU) שהינו נירמול רמות הצבע כמקובל בסריקות CT, המרה לתמונה בינארית (לפי סף) ומחיקת כל מה שאינו בתוך ה- Connected Component  העיקרי בתמונה (שהינו הריאות). כמו כן פעולות מורפולוגיות בכדי ליצור מסיכה (mask) שבעזרתה ניקח מהתמונה המקורית רק את אזור הריאות.

שלב ראשון – גילוי מועמדים

השלב הראשון ממומש באמצעות מה שהכותבים מכנים N-Net = Nodule Net שהינה רשת 3D RPN מבוססת U-Net אשר מחזירה מלבנים (Bounding Boxes) סביב הגושים עם סף גילוי נמוך כדי לקבל כמה שיותר מועמדים גם אם אינם משמעותיים להחלטה הסופית. רשת זו מאמנים עם הרבה אוגמנטציות (Augmentation) של היפוכים (Flips), סיבובים, שינויי גודל והזזות קטנות. אגב, על רשת ה U-Net ניתן לקרוא בבלוג זה כאן.

בשלב השני לוקחים את חמשת הגושים החשודים ביותר שאותרו בשלב הראשון ובאמצעות אלגוריתםLeaky noisy-or model (יוסבר בהמשך) מחשבים פרדיקציה לקיום המחלה. אלגוריתם זה מניח שיש “זליגה” קלה של הסתברות לקיום האירוע (המחלה) גם אם אין אף תופעה (גוש) המרמז על כך.

חפיפה בין המודלים

לכל אחד מהשלבים (הראשון והשני) יש מודל אחר. האחד מחזיר מלבנים והשני מסווג קיום או אי קיום סרטן (Detection & Classification) והאימון מתבצע לסירוגין בין שני המודלים (Epoch לזה ו Epoch לזה) כאשר עיקר המשקולות של שתי המודלים משותפים. שיטה זו עוזרת למנוע Overfitting (שהרי מקטינה את כמות המשקלים לאימון).

המודל השני (שכאמור חופף חלקית עם המודל הראשון) מוסבר בתרשים הבא:

לקוח מ Evaluate the Malignancy of Pulmonary Nodules Using the 3D Deep Leaky Noisy-or Network

חלק עליון בתרשים (a):

לוקחים את החלק המרכזי (Crop בגודל 96x96x96) מתמונת הגוש (הקוביה) שיצא מהשלב הראשון מזינים אותו לרשת ה N-Net (המודל הראשון) ולוקחים את השכבת הקונבולוציה האחרונה שלו כפיצ’ר בגודל 24x24x24x128 ממנו לוקחים רק את המרכז בגודל 2x2x2x128 עושים עליו max-pooling ונשארים עם פיצ’ר וקטור בגודל 128 לכל גוש מועמד.

חלק תחתון בתרשים (b):

ומשם עוד Fully-connected, Max-pooling, Sigmoid activation בכדי להגיע לפרדיקציה הסופית (המשקללת את המידע מחמשת הפיצ’רים של הגושים העיקריים).

שלב שני – שיקלול הנתונים של כל גוש (Leaky Noisy-or Method)

השיקלול יכול להיות Max Pooling אבל אז אין קשר בין המידע של כל גוש. כי הרי סריקה עם שני גושים שמנבאים סרטן ב 50% תביא לתוצאה סופית של 50% (המקסימום בין 50 ל 50 הוא 50) אבל סביר שרופא שינתח סריקה כזו יחליט שיש סבירות גבוה מ 50% לסרטן.

שיקלול שכן לוקח בחשבון את סך הפרדיקציות מכל גוש הינו Noisy-Or ההופכי למכפלת ההסתברויות של העדר סרטן: (ההסתברות שהראשון מעיד על סרטן או שהשני או שהשלישי…)

אך מה קורה אם גוש ממאיר ביותר התפספס בגילוי בשלב הראשון ?

לצורך כך משתמשים במודל ה- Leaky Noisy-or method שמניח שייתכן והפרדיקציה חיובית על אף שאף גוש לא ניבא זאת. הפרמטר Pd נלמד גם כן בשלב האימון. (ז”א הוא תלוי תמונה ולא תלוי גוש)

זה אכן המודל שהביא לתוצאה הטובה ביותר.

באימון המודלים משתמשים בין השאר ב Gradient clipping וב- Batch normalization.

על הפתרון שזכה במקום השני

לאלגוריתם (ולצוות) שלקח את המקום השני בתחרות יש שתי כתבות מפורטות של כל אחד מהמפתחים  Daniel Hammackו Julian de Wit.

כל אחד מהם פיתח מודל קצת שונה ובשלב מתקדם בתחרות הם החליטו להתאחד (על בסיס הכרות קודמת) והאלגוריתם אותו הם שלחו הוא בעצם ממוצע בין הפרדיקציה של כל אחד משני המודלים של שניהם. אנסה בקצרה לתאר את השיטות שלהם.

גם פה נעשה עיבוד מקדים שמייצר אחידות בין הסריקות. לכל סריקה לעשות Rescale כך שכל Voxel  (פיקסל תלת מימדי) שלה ייצג גודל של 1mmx1mmx1mm. (גודל זה נקבע באמצעות ניסוי וטעייה כפשרה בין דיוק תוצאות לזמני חישוב)

לגבי עיבוד רק של אזור הריאות, אחד מהם ויתר לגמרי והשני עשה משהו חלקי של הסרת אזורים בהם בטוח אין גוש. אך שניהם לא “הישקיעו” בחלק הזה כמו שתואר בפתרון המנצח.

מציאת הגושים הינו שלב ראשוני וקריטי אך כיוון שהמטרה הוא לתת פרדיקציה של סרטן, יש חשיבות רבה לסוג הגוש. האם הגוש ממאיר ? מה גודלו ? מהו המרקם והצורה שלו ? (למשל אם הוא מחוספס יותר זה רע…)

מה שהם עשו זה השתמשו במאגר נתונים המקורי שממנו נגזר המאגר של התחרות שנקרא LIDC-IDRI שמכיל בנוסף לסריקות ולגושים אותם איבחנו רופאים, גם מאפיינים אותם איבחנו הרופאים לכל גוש. למשל גודל, מידת הממאירות, חיספוס וכו’… מידע זה שהוסר מהמאגר שבתחרות היווה נקודת מפתח להצלחה.

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

לקוח מ 2nd place solution for the 2017 national datascience bowl

הם ערכו מספר בדיקות קורלציה בין המאפיינים של הגושים כדי לנסות להסיק מסקנות מועילות. אחד הדברים המעניינים שראו זה שמיקום הגוש (יותר קרוב לראש או יותר קרוב לרגליים) הינו בעל קורלציה גבוה לרמת הסיכון, ואף מצאו שקשר זה מוכר וקיים בספרות הרפואית.

טכניקת אימון אותה שווה להזכיר בה הם השתמשו נקראת Curriculum Learning. הרעיון הוא קודם לאמן דגימות קטנות ופשוטות ואז לאמן עם הדוגמאות הקשות. גישה זו אינטואיטיבית לנו הלומדים האנושיים כי תמיד הורגלנו ללמוד את הפשוט (כיתה א’) ואז כשזה מוטמע במוחנו, ללמוד את הנושאים היותר מסובכים (כיתה ב’ וכו’…). לפי התיאור שלהם הם קודם אימנו עם קוביות בגודל 32x32x32 ואז אימנו עם קוביות בגודל 64x64x64.

קישורים

  1. למי שמחפש מאגרי נתונים ובעיות בתחום הרפואי חייבים להכיר את: Grand-Challenges
  2. LUNA16  הינה תחרות לזיהוי גושים (Nodules) בכמעט אלף תמונות CT
  3. מאגר LIDC-IDRI בתחום סרטן הריאות
  4. MicroDicom – כלי חינמי מומלץ לראות Dicoms

Posted by תמיר נווה in deep

Transfer Learning – הכללת ידע

מיועד ל- כל אחד (כתבה לא טכנית)

נכתב על ידי tomer peled

מוטיבציה

למידה עמוקה (Deep Learning) שינתה את העולם בעזרת מפגש של טכנולוגיה ותיקה (Neural Networks) שהחלה בשנות החמישים והבשלה של תנאים: כח מחשוב, כמויות גדולות של Data זמין וסטנדרטיזציה של שיטות עבודה – Benchmarks סטנדרטים, קוד פתוח. אך כמויות גדולות של Data רלוונטי לא בהכרח זמינות עבור כל בעיה.

למרבית המזל קרוב מאד לפריצת התחום של למידה עמוקה, התברר גם שזמינות כמויות גדולות של Data אינה הכרחית בהרבה מקרים, מאחר ש TransferLearning (המרת למידה) התגלתה כיעילה במיוחד להרחבת מרחב הפתרונות של למידה עמוקה.

הגדרה

הכללת ידע או העברת לימוד – תחום מחקר בלמידת מכונה המתמקד בשימור הידע הניצבר בפיתרון בעיה אחת וישומו לפיתרון בעיה אחרת הקשורה אליה, לדוגמא ניצול הידע שניצבר מלימוד זיהוי מכונית לצורך זיהוי משאית. [תרגום מויקיפדיה]

Transfer Learning

בשני מאמרים פורצי דרך [5], [4] הוכח שרשת שלמדה לפתור בעייה מסוימת – למשל סיווג תמונות מ 1000 קטגוריות המצויות ב ImageNet, יכולה בתהליך פשוט של Fine Tuning לעבור התאמה  לפתרון בעיה אחרת כגון סיווג אנשים (שלא מופיעים כקטגוריה ב ImageNet), מוצרים מחנות מכוונת או סיווג סצינות.

למעשה רוב העבודה שנעשית היום בלמידה עמוקה מבוססת על Tranfer-Learning ומאפשרת לחסוך לימוד על חומרה מרובת GPU במשך שבועות כמו שנעשה על ImageNet.

למה זה עובד ?

אם רשת למידה עמוקה אופיינית כוללת שכבות מרובות של אבסטרקציה ולבסוף שכבת החלטה (סיווג או רגרסיה), הטענה היא שהאבסטרקציה היא גנרית ודומה מאד עבור בעיות שונות.

האבסטרקציה בשלבים הראשונים תלוייה בסוג התמונות ולכן תהיה דומה למשל עבור כל התמונות הטבעיות להבדיל מתמונות רנטגן או אולטרסאונד.

אז איך עושים את זה ?

תהליך ה Transfer Learning כולל לימוד מחדש של שכבת ההחלטה (סיווג או רגרסיה), תוך הקפאת (Trainable= 0, Freeze)  הלימוד בשאר השכבות. ולעיתים לאחר מכן גם לימוד של השכבות העליונות בקצב לימוד (Learning Rate) נמוך.

  • הדרך הפשוטה ביותר – ולעיתים זה כל מה שנידרש היא להשתמש ברשת מאומנת מראש על בעיה אחרת כגון ImageNet כ feature-extractor (מחלץ תכונות) ולאמן מסווג למשל Linear-SVM או SoftMax התכונות שחולצו מהתמונות שלנו.
  • הרחבה אפשרית לשיפור ביצועים נקראת כוונון עדין fine-tuning. כלומר התאמה קטנה של המשקלות בשאר הרשת.
    • מקובל להקפיא את הלימוד בשכבות הנמוכות של הרשת. מאחר שההכללה בלימוד על בסיס נתונים גדול כ Image-Net טובה מההכללה שתתקבל על סט תמונות קטן ומגוון פחות וכן ה features בשכבות אלו מבטאים אבסטרקציה כגילוי שפות וכתמים המשותפים לכלל הבעיות.
    • את השכבות העליונות ברשת מאמנים בקצב לימוד (Learning-rate) נמוך על מנת לשמור על השפעה קטנה.
    • לעיתים מאמנים בו זמנית את השכבות העליונות ברשת בקצב נמוך ואת המסווג בקצב גבוה יותר.

מקורות


Posted by tomer peled in deep

לחולל DATA חדש כדי לשפר סיווג (הרחבת Data בעזרת GAN)

מיועד ל- מתחילים (כתבה קצת טכנית)

נכתב על ידי תמיר נווה

מה עושים כשאין מספיק Data ?

כשרוצים לאמן רשת Deep Learning ואין מספיק Data ישנם מספר שיטות מה לעשות, העיקריות הינן:

  • – Data Augmentation (למשל בתמונות: סיבובים, הזזות, הרעשות, מחיקות, שינויי הארה)
  • – הקטנת המודל
  • – יצירת DB סינטטי
  • – עזרה לאימון ע”י Data Preprocessing (למשל בתמונות Cropping מתוך הבנה מה חשוב ומה מיותר בתמונה על מנת לסווג)

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

רציתי להתעמק ולהבין למה שזה יעבוד ועד כמה זה בכלל משפר תוצאות ?

גיגול קצר הביא אותי לשני המאמרים האלו: (ששניהם אגב יצאו במרץ 2018 ואף אחד מהם לא מצטט את השני)

DATA AUGMENTATION GENERATIVE ADVERSARIAL NETWORKS

GAN-based Synthetic Medical Image Augmentation for increased CNN Performance in Liver Lesion Classification

בחרתי להתעמק במאמר הראשון מבין השניים (שנקרא בקיצור DAGAN), כי הם מצרפים לו קוד שאפילו רץ לי במכה ראשונה 🙂

בתמונות פנים הבאות ניתן לראות שהתמונות האמיתיות (לקוחות מ VGG-Face) הם רק בעמודה השמאלית הן של הגברים והן של הנשים, ובכל השאר העמודות התמונות מג’נרטות\מזויפות. (ז”א תוצר של DAGAN)

תודה ל DATA AUGMENTATION GENERATIVE ADVERSARIAL NETWORKS

איך בדיוק קורה הקסם ?

הרעיון לקבל תמונה ממחלקה מסוימת ולחולל על בסיסה תמונות נוספות מאותה מחלקה באמצעות Wasserstein GAN (שהינו שיכלול של אלגוריתם GAN).

מדובר על Database המחולק לכמה מחלקות ומטרתנו להגדיל את ה DB כדי לשפר רשת סיווג (אחרת).

הרשת שמגדילה את ה DB מורכבת מGeneratror  ו Discriminator.

רשת ה Generator מנסה לשנות\לעוות את התמונה בכל אופן שמצליחה כל עוד התמונה נשארת באותה מחלקה. רשת ה Discriminator תפקידה לקבל זוג תמונות מאותה מחלקה ולהחליט אם הם באמת שייכות לאותה מחלקה או שאחת מהן מזויפת (ז”א תולדה של ה Generator).

התרשים הבא (לקוח מהמאמר) והוא מסביר הכל:

תודה ל  DATA AUGMENTATION GENERATIVE ADVERSARIAL NETWORKS

מאמנים רשת Generator (צד שמאל בתרשים) המקבלת רעש גאוסיאני (z) ותמונה אמיתית (xi) ממחלקה c ועל בסיסם לג’נרט תמונה מזויפת (xg). ובמקביל לאמן רשת Discriminator (צד ימין בתרשים) להבדיל בין זוג תמונות אמיתי (xi, xj) ממחלקה c לבין זוג תמונות שאחת מהן אמיתית ואחת מזויפת (xi,xg) כאשר השניה (xg) נוצרה על בסיס הראשונה (xi).

בצד שמאל (הג’ינרוט) משתמשים במקודד-מפענח כאשר המפענח מקבל שירשור של הטלה לינארית ל z (הרעש המוגרל) ושל xi (התמונה האמיתית).

המימוש המוצע

הכותבים מימשו את הרעיון באופן הבא:

ה Generator (המחולק לEncoder  ול- Decoder) ממומש ע”י שילוב של UNet ושל ResNet והכותבים קוראים לו UResNet:

תודה ל DATA AUGMENTATION GENERATIVE ADVERSARIAL NETWORKS

ה Discriminator ממומש ע”י DenseNet.

סדרי גודל ותוצאות

ראשית נציין עובדה חשובה שכשהשוו תוצאות של ה classifier, בתוצאות ללא ה Gan Augmentation הם כן השתמשו ב Augmentation קלאסי (שכלל: סיבובים של 90 מעלות, הזזות, הוספת רעש לבן), ובתוצאות ים ה Gan Augmentation הם עשו גם Augmentation  קלאסי, מה שאומר שהגישה של ה Gan Augmentation באמת תרמה ביחס להוספת תמונות באופן רגיל.

הבחינה נעשתה על שלושה אתגרי קלאסיפיקציה:

האחד במאגר Omniglot שהינו מאגר של עשרות אלפי תמונות של 1623 אותיות שונות מחמישים שפות שונות בכתב יד. השני ממאגר תמונות פנים VGG-Face והשלישי ממאגר תמונות כתב יד EMNIST שהינו הרחבה של MNIST  הפופולארי.

השיפור בביצועי הקלאסיפיקציה משמעותי:

הבעיה עם Augmentation רגיל   עם Gan Augmentation 
Omniglot 69% 82%
EMNIST 73.9% 76%
VGG-Face 4.5% 12%

 

הריצה מאוד ארוכה אגב: 500 epochs על עשרות אלפי תמונות, חייבים כמה GPUים כדי להריץ בזמן סביר.

קישורים

ניתן להשתמש ב-DAGAN להרחבת DB כלשהוא של תמונות, כקופסה שחורה באמצעות הקוד הבא:

https://github.com/AntreasAntoniou/DAGAN

Posted by תמיר נווה in deep

Random Erasing Data Augmentation – הרחבת מידע בעזרת מחיקה אקראית

מיועד ל- מתחילים (כתבה קצת טכנית)

נכתב על ידי Yanai Ankri

 הרחבת מאגר הנתונים – Data Augmentation

אחת השיטות האפקטיביות בלמידה עמוקה להגדיל את כמות הדוגמאות איתן מאמנים רשת, נקראת Data Augmentation. הגדלת ה DB תורמת לאימון מודל מוצלח יותר וכללי יותר ובפרט להימנע מתופעת ה-overfit (כשהמודל לומד טוב מידי את הדוגמאות שמביאים לו באימון אך לא לומד על המקרה הכללי).

מאגרי נתונים הינם מצרכים מבוקשים ויקרים, אך בדרכים סינטטיות ניתן להגדיל את הקיים. הדרכים המקובלות הינן הרעשה או הפעלת טרנספורמציות כאלו שלא ישנו את התוכן החשוב במידע. למשל בעולם התמונות נהוג לסובב, לחתוך, לשנות רמת הארה\בהירות וכו’. בכתבה זו אציג את שיטת המחיקה האקראית הלקוחה ממאמר זה.

data augmentation

https://zhuanlan.zhihu.com/p/44363288

המוטיבציה לשיטת המחיקה האקראית

במשימות לסיווג תמונה או גילוי אובייקט בתמונה, רשתות לעיתים קרובות מסתמכות על חלק אחד דומיננטי המאפיין את האובייקט. למשל אם המשימה היא לסווג תמונה האם קיים בה אדם או לא, סביר שהרשת תקבל את רוב ההחלטה על סמך מציאת הפנים של אותו אדם, מהסיבה הפשוטה שזה חלק גוף הכרחי לקיומו של אדם, הוא ייחודי בצורתו ונדיר שיהיה מוסתר. כך למרות שהרשת היתה יכולה ללמוד חלקי גוף אחרים כמו ידיים או רגליים, היא “מסתפקת” בחיפוש אחר פנים, ומקבלת את ההחלטה על סמך מציאתם. רשת כזו תתקשה למצוא אדם כאשר הפנים שלו מסובבות או מוסתרות ע”י אובייקט אחר, למרות שלנו כבני אדם קל מאוד לזהות את שאר חלקי הגוף שמרמזים שהאדם נמצא בתמונה.

בתמונות הבאות מתוך המאגר של nanit אפשר לזהות בקלות את התינוק, אך לרשת שמסתמכת בעיקר על תווי הפנים יהיה קל לזהות את התינוק בתמונה השמאלית וקשה לזהות אותו בתמונה הימנית, למראות מאפיינים מובהקים כמו ידיים ורגליים.

image recognition 

הרחבה באמצעות מחיקה אקראית

במאמר מציעים לתקוף את הבעיה בצורה ישירה: אם הרשת מסתמכת על אזור מסוים, נבצע הרחבה ע”י מחיקה אקראית של אותו אזור מהתמונה. כלומר בהסתברות כלשהי למשל 50%, בתמונה הנכנסת לאימון יוסתר החלק הדומיננטי. ההסתרה יכולה לעשות ע”י צביעת הפיקסלים בצבע אחיד כלשהו או בצביעת כל פיקסל באזור בצבע אקראי. כך הרשת תיאלץ ללמוד גם חלקים אחרים באובייקט על-מנת למזער את שגיאת האימון.

בשיטה זו קיימת בעיה חדשה: איך יודעים איזה חלק יהיה הדומיננטי באובייקט? וגם אם נגלה או ננחש אותו, יש סכנה שחלק אחר יהפוך לדומיננטי והבעיה תחזור על עצמה. הפתרון הוא להסתיר כל פעם חלק אחר בתמונה באופן אקראי. בכל איטרציית אימון מלאה (epoch) נבחרים חלק מהתמונות באופן אקראי, ובכל תמונה מוגרל מלבן שערכי הפיקסלים שלו מוסתרים באופן שתואר קודם.

תודה ל Random Erasing Data Augmentation

רצוי שהמלבן שנבחר למחיקה ישקף באופן הטוב ביותר את האינפורמציה שרוצים למחוק. אם למשל יודעים שראש אדם הוא בקירוב ריבועי, כלומר יחס גובה-רוחב קרוב ל-1, ושהגודל שלו נע בין 30 ל-100 פיקסלים, נבחר מלבן אקראי שעונה על התנאים האלו. אם ידוע לנו מראש היכן האובייקט הרלוונטי, בעיקר במשימות גילוי, נבחר מלבן בתוך האובייקט. הנקודה הנכונה רלוונטית בעיקר כאשר האובייקט מהווה חלק קטן מהתמונה, ובחירת מלבן אקראי מתוך כל התמונה תפספס בחלק גדול מהמקרים את המטרה, תרתי משמע.

בתמונה הבאה אפשר לראות כמה דרכים לבחור את המלבן המוסתר. באופן אקראי מכל התמונה, מתוך האוביקטים בלבד, או שילוב: גם מתוך כל התמונה וגם מתוך האוביקטים. הדרך השלישית נתנה את התוצאות הטובות ביותר.

תודה ל Random Erasing Data Augmentation

תוצאות

להלן תרשים המתאר את שיפור הביצועים באימון מודל ResNet על מאגר תמונות Cifar-10 עם ובלי שיטת המחיקות האקראיות (Random Erasing). ניתן לראות איך ללא השגת תמונות נוספות אמיתיות לאימון, הרשת מצליחה בזיהוי בשגיאה נמוכה באופן משמעותי:

תודה ל Random Erasing Data Augmentation

קישורים

לקוד –  https://github.com/zhunzhong07/Random-Erasing

למאמר – https://arxiv.org/abs/1708.04896

Posted by Yanai Ankri in deep