Segmentation

ניהול צי של רחפני צילום – vHive

המרואיין: תומר דניאל (CTO)

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

אנחנו סטארט אפ קטן וצומח, כרגע כל הפיתוח מונה 7 מהנדסים, מהם שניים עוסקים באלגוריתמים והשאר מפתחים מנוסים בתחומם – Back End, מובייל ו-Web. אנחנו עובדים במתודולוגית Agile בספרינטים מוכווני לקוח ומחשבה רבה על איכות.

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

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

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

המוצר שלנו עתיר באלגוריתמיקה; אנחנו מפתחים אלגוריתמים גיאומטרים לתכנון והטסה של סקרי צילום אווירי מרובי רחפנים, תוך שימוש באלגוריתמי אופטימיזציה למציאת פתרון אופטימלי במהירות תחת מספר רב של אילוצים  ממספר גדול של קונפיגורציות על בסיס constraint based programming וב mixed integer programming בו האתגר הוא התכנסות מהירה.

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

מה עובד לכם טוב ? (דוגמאות לאלגוריתמים)

לדוגמא, לצורך יצירת מודל תלת מימדי מדויק נדרש לעגן את התמונות במרחב בדיוק גבוה. לשם כך מניחים בשטח אובייקטים הנקראים Ground Control Points שהמיקום שלהם ידוע ברמת דיוק גבוהה. בתהליך יצירת המודל התלת מימדי נדרש לסמן את האובייקטים בתמונות. בנינו אלגוריתם מבוסס DL, שמזהה את האובייקטים בתמונות (מבוסס על Faster R-CNN) ומאפשר לחסוך מהמשתמש שעות רבות של תיוג התמונות ולקבל מודל תלת מימדי איכותי.

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

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

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

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

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

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

ספר על משימת איסוף ה DB אצלכם ? (מי עושה ? מי בודק ? מי מתייג ? מי מנהל ?)

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

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

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

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

ניווט בתוך הסימפונות – BodyVision

המרואיין: דימה סזגנוב (VP R&D)

רקע

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

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

שני צוותי פיתוח 5-6 אנשים כל אחד. הצוותים הם feature teams – מאורגנים סביב יכולות במוצר וגם full stack במובן שהצוות מסוגל לסגור feature קצה לקצה, כולל איפיון, אלגורימים, bench tests, אינטגרציה, UI\UX, בדיקות תוכנה. הרכב הצוותים מאוד דינאמי ומשתנה לפעמים כל ספרינט.

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

לחברה שני מוצרים:

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

LungVision Tool – הינו כלי מכני, או קטטר, שמאפשר גישה פיזית לכל נקודה בתוך הראות.

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

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

משמעות ה Fusion הינה רגיסטרציה (ע”י מציאת פיצ’רים תואמים) בין תמונות ממקורות שונים. (CT,xray,… )

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

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

אנחנו מצליחים לחבר את צוות הפיתוח לשטח ולמשתמשים באופן יום יומי.

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

אחת הבעיות למשל שאנו פותרים כדי לתכנן את הפרוצדורה היא לזהות את נתיבי האוויר שבריאות. אנו עושים סגמנטציה על סריקת ה CT ומשתמשים הן באלגוריתם קלאסי מבוסס Gradient Vector Flow והן בגישות למידה עמוקה כמו U-Net ובפרט בגירסה מתקדמת של U-Net המתאימה למקרה שלנו.

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

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

איזון בין השקעה במחקר (לטווח ארוך) לבין פיתוח (לטווח קצר)

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

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

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

ספר על משימת איסוף ה DB אצלכם ? (מי עושה ? מי בודק ? מי מתייג ? מי מנהל ?)

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

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

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

Scale-up של המוצר והתאמתו לקהל רחב של משתמשים – המוצר צריך להיות אמין ואינטואיטיבי לשימוש.

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

 

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

מסייע ויזואלי לתמיכה טכנית – Techsee

המרואיין: רונן רוזנברג (CTO)

רקע

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

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

בחברה סה”כ 47 אנשים מתוכם 22 אנשי פיתוח ומתוכם 8 עוסקים באלגוריתמים.

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

Eve –Self Service

מסייע טכני ויזואלי. זו למעשה אפליקציית מוביל\וואב שבאמצעות Computer Vision AI&Augmented Reality מסייעת למשתמש הלא טכני לבצע פעולות התקנה או תיקון למוצרים ביתיים.

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

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

TechSee Live Contact Centers

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

סרט של לקוח שלנו שמשתמש במוצר זה:

איזה חלק במוצר מצריך אלגוריתמיקה?

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

משתמשים בין השאר ב PSPNET לסגמטציה ועשינו לה התאמות ואופטימיזציות שתעבוד מהר ומדויק גם בארכיטקטורה רזה במיוחד. לגבי מציאות רבודה (Augmented reality) כל נסיון להשתמש בחבילות תוכנה מוכנות כדוגמת ARKit/ARCore נכשל בשטח כישלון חרוץ, אז פיתחנו משהו מתקדם שמשלב AI עם הספריות הקיימות. אנו נהנים משני העולמות!

מה קל לכם? (אלגוריתמית)

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

מה קשה לכם? (אלגוריתמית)

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

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

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

ספר על משימת איסוף ה DB אצלכם? (מי עושה? מי בודק? מי מתייג? מי מנהל?)

פיתחנו מגוון כלים לתיוג תמונות, חלקם אוטומטיים וחלקם ידניים.

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

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

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

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

ניקוי רקע מתמונות (מודל ה- Tiramisu) – חלק ב’

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

נכתב על ידי shgidi

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

מודל ה Tiramisu והאימון

השם המלא של המודל נקרא: 100 layers Tiramisu , והוא מכיל 9 מיליון פרמטרים (לשם השוואה VGG מכיל 130 מיליון פרמטרים).

המודל מבוסס על ארכיטקטורת DenseNet שבה כל השכבות מחוברות זו לזו. מודל ה Tiramisu מוסיף גם חיבורי מעקפים לשכבות ה Up-sampling כמו רשת ה Unet.

https://arxiv.org/pdf/1611.09326.pdf

אימנו את המודל הזה על המאגר (המקוצץ) שלנו עם תמונות שהקטנו לגודל של 224×224 עם המאפיינים הבאים (כמו שמתואר במאמר המקורי):

פונקציית מחיר הינה  Cross Entropy Lossסטנדרטית, האופטימייזר הינו RMSProp עם Learning Rate=1e-3, גודל ה-Batch הינו 500 תמונות כאשר חילקנו את המאגר של ה-11 אלף תמונות ל 70% אימון (Training) , 10% בדיקה (Testing) ו 20% אימות (Validation).

סוגיות שעלו

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

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

http://cocodataset.org/#home

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

http://cocodataset.org/#home

Ground Truth גס מידי – התמונות במאגר COCO לא תויגו פיקסל, פיקסל אלא עם מצולעים (polygons), מה שפגע באימון.

http://cocodataset.org/#home

תוצאות

אחרי בערך 300 epochs (יותר מזה כבר הגענו ל Overfit) התוצאות שלנו היו משביעות רצון אך לא מושלמות, הגענו ל 84.6 IOU על קבוצת התמונות לבדיקה (Testing Set). כאשר נכון לכתיבת שורות אלו (2017) התוצאה הטובה ביותר (State of the art) לסגמנטציה של בני אדם הינה 85 IOU. לאובייקטים אחרים התוצאות כמובן טובות יותר או פחות, למשל לבתים וכבישים ניתן להגיע ל 90 IOU, לעומת זאת לעצים מגיעים ל 60 IOU.

להלן דוגמאות מוצלחות:

שמאל: תמונה מקורית, אמצע: ground truth, ימין: התוצאה שלנו http://cocodataset.org/#home

ניפוי ורישום (Debugging & Logging)

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

  1. בעיות מוקדמות – המודל לא מצליח להתכנס. יכול להיות מכל מיני סיבות כמו למשל באג בעיבוד מקדים (Pre-processing). הצגת התוצאות באופן ויזואלי עוזרת לפתור זאת. ראו פוסט זה בנושא.
  2. לדבג (לנפות) את הרשת עצמה – המדד העיקרי שלנו להצלחה היה IOU (ולא ה Loss), מה שעוזר זה להציג פרדיקציות (תוצאת סגמנטציה של הרשת) כל כמה איטרציות אימון (Epochs). בפוסט הזה תוכלו לקרוא עוד על איך לדבג מודלים.
  3. ניהול גירסאות – כשמאמנים מודל יש המון פרמטרים. חייב להודות שעוד לא מצאנו את השיטה האידיאלית מלבד פשוט לרשום את הקונפיגורציה ולשמור את המודלים\אימונים המוצלחים (*).
  4. כלי דיבוג (ניפוי) – כדי לשלב את הכול יצרנו Jupyter Notebook שאיפשרה לנו בצורה חלקה לטעון כל מודל וכל תמונה במהרה וכך לבחון כל תוצאה, כך יכולנו להשוות ולזהות בעיות.

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

http://cocodataset.org/#home

(*) שמירה אוטומטית של המודל הכי טוב עד עתה (לפי מדד IOU) עם פונקציית Keras  נוחה:

callbacks = [keras.callbacks.ModelCheckpoint(hist_model, verbose=1,save_best_only =True, monitor= ’val_IOU_calc_loss’), plot_losses]

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

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

אל תנסו את האפליקציה שלנו בלילה J http://cocodataset.org/#home

Matting

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

http://cocodataset.org/#home

בעיית ה Matting הינה בעיה קשה והקלט שלה כולל גם את התמונה וגם תמונת  Trimapשהינה קווי מתאר של ה Egdes שלה (ראה בתרשים למעלה), מה שהופך אותה לבעיית מונחית למחצה (Semi-supervised).

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

לסיכום

כמו שציינתי בהתחלה, המטרה שלנו הייתה ליצור מוצר deep learning משמעותי. ואכן הצלחנו ולמדנו מכך המון.

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

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

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

נשמח לדיונים ולענות לשאלות!

Posted by shgidi in deep

ניקוי רקע מתמונות (מודל ה- Tiramisu) – חלק א’

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

נכתב על ידי shgidi

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

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

במהלך 2017, עשיתי את קורס fast.ai יחד עם אלון בורג, וקיבלנו הזדמנות לעשות מוצר AI: ההתקדמות המשמעותית של ה Deep Learning איפשרו לבצע דברים שלא היו אפשריים קודם, וכלים חדשים אפשרו לפתח מודלים ואפשר גישה אליהם בקלות הרבה יותר גדולה מבעבר.

המטרות שהגדרנו עבור המוצר הן:

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

להלן הרשמים שלי מהפרויקט.

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

תודה ל http://www.worldbuzzhub.com/cute-animals-selfies/

בכתבה זו נעסוק בחלק האלגוריתמי בלבד, למי שמתעניין ב deployment (הפיכת האלגוריתם לשימוש מבצעי) מוזמן ללמוד מהפוסט על צד השרת (server side) ו- הפוסט על צד המשתמש קצה (client side)

פילוח סמנטי (Semantic Segmentation)

פילוח סמנטי (Semantic Segmentation) היא אחת משלושת הבעיות הידועות ביותר בראייה ממוחשבת  יחד עם סיווג תמונות (Image Classification), וזיהוי אוביקטים (Object Detection). בעיית הפילוח הסמנטי היא למעשה גם בעיית קלאסיפיקציה למחלקות אבל של כל פיקסל בתמונה (ולא של התמונה כולה).

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

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

בפוסט הזה ניתן לראות רשת סגמנטציה מבוססת VGG:

http://warmspringwinds.github.io/tensorflow/tf-slim/2016/11/22/upsampling-and-image-segmentation-with-tensorflow-and-tf-slim/

http://warmspringwinds.github.io/tensorflow/tf-slim/2016/11/22/upsampling-and-image-segmentation-with-tensorflow-and-tf-slim/

ואחרי Bilinear Upsampling:

http://warmspringwinds.github.io/tensorflow/tf-slim/2016/11/22/upsampling-and-image-segmentation-with-tensorflow-and-tf-slim/

סגמנטציה מבוססת FCN

במאמר FCN= Fully Convolutional Networks for Semantic Segmentation החוקרים שיפרו את השיטה ע”י הוספת חיבורים נוספים בין השכבות. החיבורים בין שכבות מההתחלה, האמצע והסוף מגבירות את הדיוק של הפרטים הקטנים בתמונה.

האיור הבא מתאר את הארכיטקטורה אך מציג רק שכבות Pooling, Prediction, שאר השכבות מושמטות:

תודה ל-“Fully Convolutional Networks for Semantic Segmentation”

והתוצאות של שיטה זו אכן לא רעות בכלל:

תודה ל-“Fully Convolutional Networks for Semantic Segmentation”

הצלחה זו פתחה פתח לחוקרים נוספים לפתח מודלים נוספים ומשופרים לבעיית הסגמנטציה שמבוססים גם הם על Up-sampling ומעקפים Skip-connections. להלן קישורים רלוונטיים: 1, 2, 3.

ניסיון ראשון עם UNET  ו Tiramisu

לצורך הפרויקט הסרת רקע שלנו החלטנו להתמקד בשלושה מודלים: FCNUnet , ו  Tiramisu.

(על רשת ה UNET תוכלו לקרוא גם בעברית פה)

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

Semantic Object Classes in Video: A High-Definition Ground Truth Database (pdf) Pattern Recognition Letters (to appear) Brostow, Fauqueur, Cipolla (bibtex)

לאחר כמה אימונים ראשוניים ראינו שה Tiramisu יותר עדין מ Unet ויותר מסוגל לתפוס גבולות חדים.

בחירה והכנה של ה DB לאימון

לבעיית הסגמנטציה יותר קשה לתייג ולכן למצוא מאגרי תמונות (מתוייגות). הפופולארי ביותר הינו מאגר  COCO המכיל 80K תמונות מ-90 קטגוריות שונות, מאגר VOC Pascal המכיל 11K תמונות מ-20 מחלקות שונות, ומאגר חדש יותר בשם  ADE20K. בחרנו לעבוד על COCO כי הוא מכיל יותר תמונות עם קטגוריית “אדם” (Person) מה שרלוונטי לבעיה שלנו.

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

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

אז השתמשנו ב API של מאגר COCO וקיצצנו את המאגר ל 11 אלף תמונות בהם השתמשנו לאימון, באופן הבא:

סינון רק תמונות שיש בהם אנשים (נשארנו עם 40K  תמונות) ואז סינון רק לתמונות המכילות 1-2 אנשים לכל היותר (כמו בתמונות סלפי),

ולבסוף סינון לתמונות בהן בין 20% ל 70% מהפיקסלים מתוייגים כדמות אדם. (ז”א להפטר מתמונות בהם האנשים קטנים מידי או גדולים מידי שכנראה אינן סלפי קלאסי)

דוגמאות לסינון שלנו:

שמאל: תמונה טובה לנו, אמצע: יותר מידי אנשים, ימין: דמות אדם קטנה מידי http://cocodataset.org/#home

עיברו לכתבת ההמשך כדי ללמוד על המודל שבחרנו ועל כל ההרפתקאות שבדרך לאימון המודל…

Posted by shgidi in deep

רשת ה U-Net: סגמנטציה של תמונות מיקרוסקופיות

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

נכתב על ידי Hen Grinberg

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

תודה ל MathWorks https://www.mathworks.com/help/vision/ug/semantic-segmentation-basics.html

שני בסיסי הנתונים (datasets) הנפוצים עבור משימה זו הם VOC2012 ו MSCOCO .

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

רשתות קונבולוציה מלאות (fully convolutional networks)

בשנת 2014 הופיעה פרדיגמה / ארכיטקטורה חדשה שפותחה על ידי מספר חוקרים באוניברסיטת ברקלי שנקראת “רשתות קונבולוציוניות מלאות” (FCN=fully convolutional networks). פרדיגמה זו שונה מכל מה שהיה לפניה בכך שהיא מחליפה  שכבות מחוברות באופן מלא (fully connected layers) בשכבות קונבולוציה וע”י כך מאפשרת לקבל בכניסה לרשת תמונות בגדלים שונים. כמו כן היא גם הרבה יותר מהירה משיטת סיווג קטעי תמונה. מאז, כמעט כל השיטות שהביאו לביצועים הטובים ביותר עבור בעיה זו השתמשו בארכיטקטורה זו.

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

אחת השיטות להתמודד עם בעיה זו הינה ארכיטקטורת מקודד-מפענח (encoder-decoder). המקודד מפחית בהדרגה המימד המרחבי (spatial dimension) באמצעות שכבות אגרגציה ואילו המפענח מגדיל בהדרגה את המימד המרחבי. ישנם בדרך כלל קשרי דילוג (skip connections) בין המקודד למפענח עבור שכבות מקבילות, על מנת לעזור למפענח לשחזר את התמונה לגודלה המקורי ולספק מידע אודות המיקום המדויק של כל פיקסל בתמונה המקורית. רשת פופולרית שפועלת על פי ארכיטקטורה זו היא U-Net.

תודה ל U-Net: Convolutional Networks for Biomedical
Image Segmentation

כיצד עובדת רשת U-Net?

הרשת מורכבת משני חלקים  – החלק המצמצם (החלק השמאלי בתרשים) והחלק המרחיב (החלק הימני בתרשים). החלק המצמצם בנוי לפי ארכיטקטורה קונבולוציונית טיפוסית, פרוצדורות  של 2 קונבולוציות בגודל 3×3  ללא שכבת אפסים מסביב לתמונה (padding) שאחריהן באה פונקציית אקטיבציה מסוג RELU, כאשר לאחר הקונבולוציה השניה מפעילים שכבת max pooling בגודל 2×2 עם קפיצות של 2 פיקסלים בכל פעם (stride=2) שמחזירה את הערך הגבוה ביותר בכל ריבוע בגודל 2×2 בתמונה. המטרה של שכבת הmax pooling  הינה להקטין את גודל התמונה. אחרי כל פרוצדורה מספר מפות הפיצ’רים (feature maps) גדל פי 2 וגודל התמונה קטן פי 2.

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

בשלב הבא משרשרים בין מפות פיצ’רים מקבילות של המפענח והמקודד (skip connections) כאשר מקטינים את גודלן של כל מפות הפיצ’רים של המקודד (encoder) על מנת שיהיו בעלות גודל זהה לאילו של המפענח (decoder). מטרת פעולת השרשור הינה לשפר את משימת המיקום של הפיקסלים בתמונה המורחבת (localization). בשלב הבא ישנן 2 קונבולוציות בגודל 3×3  ולאחר כל אחת מהן ישנה פונקציית אקטיבציה מסוג RELU. 

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

האימון והתוצאות

את הרשת הם מאמנים עם מאגר תמונות מתויגות (ז”א לאיזו מחלקה שייך כל פיקסל) עם פונקציית מחיר softmax cross entropy כאשר נותנים משקל גבוה יותר לפיקסלים בגבולות של המחלקות ומשקל המאזן תדירויות פיקסלים ממחלקות שונות:

w_{c}(x) נועד לאזן פיקסלים ממחלקות בתדירויות שונות, ו d_{1}(x), d_{2}(x) הינם המרחק מפיקסל x לגבול של המחלקה הקרובה ביותר או השניה הקרובה ביותר בהתאמה.

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

קישורים

הסברים, קוד ומודל להורדה של U-Net:

https://lmb.informatik.uni-freiburg.de/people/ronneber/u-net/

מימוש של רשתU-Net  ב Tensorflow:

https://www.kaggle.com/vijaybj/basic-u-net-using-tensorflow

Posted by Hen Grinberg in deep