Deep Learning with MATLAB in R2018a Release
גם בגרסת R2018a נמשכים המאמצים של MathWorks לתת ערך מוסף משמעותי למשתמשים ב-MATLAB בתחום ה-Deep Learning!
לפני מספר ימים שוחררה גרסת ה-MATLAB הראשונה לשנה זו, R2018a, והיא כוללת יכולות חדשות רבות ותיקוני באגים בכלים הקיימים, ואף מספר כלים חדשים (לסקירת יכולות הגרסה – לחצו פה). תחום ה-Deep Learning קיבל תשומת לב רבה בגרסה הקודמת (לחצו לסקירה), וגם בגרסת R2018a נמשכים המאמצים של MathWorks לתת ערך מוסף משמעותי למשתמשים ב-MATLAB בתחום זה.
כזכור – כבר בגרסה הקודמת היו ל-MATLAB יתרונות רבים בהשוואה לחלופות החינמיות, למשל:
- תיוג מהיר ונוח, באמצעות Apps (לחצו למידע על ה-Image Labeler, המאפשר לתייג תמונות בקלות ואף לבצע תיוג ברמת בפיקסל לצורך סגמנטציה סמנטית; או לחצו למידע על ה-Ground Truth Labeler, המאפשר לתייג במהירות וידאו או סדרות של תמונות)
- מהירות אימון (ראו בתחתית הפוסט שנפתח על ידי לחיצה פה)
- מהירות Inference (לחצו לפוסט בנושא)
- אפשרות להמיר בצורה אוטומטית את קוד ה-MATLAB לקוד CUDA מהיר וחסכוני בזיכרון לצורך מימוש על מערכות Embedded (לחצו לפוסט בנושא ה-GPU Coder)
- נוחות עבודה – הודות לשימוש בסביבת פיתוח שנועדה למהנדסים ומדענים
- תמיכה מלאה במערכת ההפעלה Windows – בנוסף לתמיכה במערכות הפעלה אחרות
- יכולות ויזואליזציה ודיבאגינג – צפיה ב-activations, הצגת Deep Dream Images, צפיה במשקולות, בחינה של התקדמות האימון בכיוון הנכון וכו'…
- תיעוד מפורט, כמיטב המסורת של תוכנת MATLAB
- תמיכה טכנית מקצועית בטלפון 03-7660111 לבעלי רישיון תחת חוזה שירות
וכל זאת – מבלי להתפשר על האפשרות לייבא מודלים שפותחו ואומנו בסביבות החינמיות (Keras,Caffe, PyTorch). בקרוב, אגב, גם מתוכננת תמיכה ב-ONNX לצורך ייצוא של המידע מ-MATLAB אל הסביבות האחרות וייבוא שלו אל MATLAB מתוכן (עריכה – התמיכה כבר קיימת).
אז… מה נשתנה בתחום ה-Deep Learning בגרסת R2018a? להלן החידושים המרכזיים:
- תצוגה גרפית של הרשת בעזרת ה-Network Analyzer App– לצורך איתור בעיות אפשריות לפני ביצוע האימון (לחצו פה)
- ייצוא/ייבוא מודלים בין MATLAB ופורמט ONNX– ייצוא המודלים מ-MATLAB מאפשר שימוש בהם בתוך סביבות התומכות בפורמט זה, דוגמת TensorFlow, Caffe2, CNTK, MXNet, CoreML. ייבוא המודלים מאפשר להכניס לתוך MATLAB מודלים מסביבות כמו PyTorch, Chainer, Caffe2 ו-CNTK. למידע נוסף – לחצו פה.
- יצירה, אימון וניתוח של רשתות DAG– אימון מהיר יותר (בעזרת GPUs), חישוב והצגה של activations של שכבות ביניים, החלפה פשוטה יותר של שכבות בעת עריכת רשתות מסוג זה
- המרה של קוד MATLAB לקוד CUDA – אפשר כעת להמיר גם רשתות DAG ולייצר קוד CUDA מתוך רשתות נפוצות נוספות כמו GoogLeNet, ResNet (50/101), SegNet ו-SqueezeNet (לטעינת הרשת האחרונה בצורה נוחה – לחצו פה). לרשימת הרשתות והשכבות הנתמכות על ידי ה-GPU Coder – לחצו פה. בנוסף, יש כעת אפשרות להשתמש ב-TensorRT בעת יצירת קוד CUDA, בהמשך לרמיזה שנרמזה בבלוג זה בעבר (לחצו לקריאה, לפני הגרף השני), מה שיאפשר קבלת קוד CUDA מהיר במיוחד
- תמיכה ביצירת קוד עבור חומרות נוספות – ה-GPU Coder מסוגל כעת לייצר קוד C עבור רשתות גם עבור מעבדים של אינטל (Intel Xeon CPU, למשל) ופלטפורמות (ARM (Neon, דבר שיאפשר, למשל, לטרגט טלפון אנדרואיד
- יכולות חדשות באפליקציות התיוג –ה-Ground Truth Labeler תומך כעת בסגמנטציה ברמת הפיקסל, ב-Sub-Labels וכן בצירוף Attributes ל-labels (הנ"ל יכולים להיות ערכים נומרים ועשויים לסייע בתרחישי תיוג לצורך משימות רגרסיה). גם הוא וגם ה-Image Labeler מקלים כעת עוד יותר על ביצוע תיוג ברמת הפיקסל, באמצעות אופציית ה-Smart Polygon המאפשרת לעדן את הסגמנטציה בתוך איזור עניין על ידי סימון פיקסלים בתור רקע או אובייקט
- ולידציה של Custom Layers – כזכור, החל מהגרסה הקודמת ניתן לייצר סוגים חדשים של שכבות באמצעות שפת MATLAB, והחל מהגרסה הנוכחית – ניתן לבצע ולידציה אוטומטית לטיפוסי המידע והמימדים, לבחון תאימות מבחינת עבודה עם GPU ולוודא שהגרדיאנטים הוגדרו כנדרש
- תמיכה של רשתות CNN במידע תמונתי בעל יותר מ-3 ערוצים (מולטיספקטרלי)
- שיפור מהירות ריצה על CPU באימון ו-Inference
- אופטימייזרים חדשים– Adam ו-RMSProp (בנוסף ל-SGDM)
- המימד השלישי של הקלט לא חייב להיות רק 1 או 3
- הקפאת שכבות– נוספה הפקודה freezeWeights שגורמת לכך שהפרמטרים של שכבות שרוצים להקפיא – פשוט לא יתעדכנו במהלך האימון. ומכיוון שלא מחשבים את הגרדיאנטים של השכבות האלה – האימון יהיה מהיר יותר. ואגב, אם ה-data set החדש שבו משתמשים ב-transfer learning הוא קטן, אז הקפאה של השכבות הראשונות יכולה למנוע overfitting שלהן אליו.
- שימוש בטכניקת Gradient Clipping כדי למנוע "התפוצצות" של הגרדיאנטים ברשתות עמוקות במיוחד (שימושי לרוב בעבודה עם RNNs)
- LSTM– תמיכה ברשתות LSTM עם שכבת רגרסיה בקצה; תמיכה ברשתות LSTM דו-כיווניות (כדי ללמוד מכל ההקשר של הרצף)
מה הלאה?
ההשקעה של MathWorks בתחום ה-Deep Learning נמשכת, וצפויים חידושים משמעותיים גם בגרסת R2018b שמתוכננת לחודש ספטמבר. אם יש יכולות שאתם זקוקים להן והן עדיין לא נכללות בכלים – אתם מוזמנים לכתוב זאת למטה בתגובה ואשמח לבדוק האם הן מתוכננות (ובמידה ולא – אעביר אותן לצוות הפיתוח על מנת שישקול לעבוד עליהן).
רוצים להתנסות בעבודה על Deep Learning בסביבת MATLAB ללא התחייבות, בזמנכם החופשי, ומבלי להתקין שום דבר? אתם מוזמנים לנסות את ה-Hands On Tutorial החינמי באתר MathWorks. לא צריך רישיון ל-MATLAB בשביל לעבוד איתו, הכל מבוצע דרך הדפדפן. ה-Hands On אמור לקחת לכם כשעתיים, וניתן לעצור אותו בכל שלב ולהמשיך כאשר אתם רוצים. לכניסה – לחצו פה.
מעוניינים להשתתף בכנס מקצועי בנושא Deep Learning, בו ירצו מומחים מהתעשייה והאקדמיה? בתאריך 7/5/18 מתוכנן כנס באיזור הרצליה, ההשתתפות ללא עלות, אך דרושה הרשמה מראש. לרישום מוקדם – שלחו לי מייל עם שמכם המלא ומספר הנייד (לחצו פה).
אשמח ללינק עבור:
המצגות מהכנס המקצועי בנושא Deep Learning
הקוד לדוגמא מהכנס.
ובמידה ויש- גם וידאו מהכנס.
הי אפרת בקרוב נפרסם לינק יחד עם כל החומרים הנלווים. נשלח גם אליך.
תודה
גם אני אשמח לקבל המצגות
הי מיכאל להלן הלינק להורדת המצגות: https://systematics.sharefile.com/d-s2f707dedf2c438fb
הליק להורדה
https://systematics.sharefile.com/d-s2f707dedf2c438fb
תודה על העדכונים. כמה שאלות-
1- האם יש ב2018a אפשרות/יש תכנון לגרסה הבאה לאפשר יותר מכניסה אחת לרשת?
2- ב2017b המימד השלישי בקלט תמיד חייב להיות 1 או 3, זה תוקן ב2018a? או שיתוקן בהמשך?
3- בסגמנטציה סמנטית אין כרגע דרך הגיונית לעבוד עם מטריצות במקום עם תמונות, כי מצופה שהלייבל יהיה וקטור של קטגוריות ולא מטריצה של קטגוריות (עובד רק אם הלייבל הוא תמונה). כפועל יוצא אין דרך לעשות סגמנטציה סמנטית כשהפלט תלת מימדי. האם יש/מתוכנן שיפור בגרסאות הבאות?
4- האם יש כוונה להכניס את הארכיטקטורה של UNET בדומה לsegnet עם הפונקציה segnetLayers?
תודה!
גילי שלום,
לגבי 1 – עובדים על זה, נשמח לקבל את ה-use case שלך על מנת להבטיח שהפיצ'ר יענה על צרכיך. אנא שלחי לי ל-
royf@systematics.co.il
לגבי 2 – תוקן ב-R2018a. ערכתי את הפוסט לבלוג בעקבות שאלה זו שלך 🙂
לגבי 3 – בודק.
לגבי 4 – עובדים על תמיכה ב-U-Net בתור מודל מאומן, בדומה לתמיכה שלנו ב-AlexNet, GoogLeNet ואחרים. בגרסה הקרובה אמורה להתווסף הפונקציה unetLayers. זה מה שחיפשת?
רועי
הערת המשך לגבי 4 – יש דוגמה לבניית U-Net באמצעות קוד, בשתי דרכים:
1. דמו שמגיע עם R2018a עם זוגות תמונות קלט/פלט במימדים זהים. קישור:
https://www.mathworks.com/help/images/multispectral-semantic-segmentation-using-deep-learning.html?searchHighlight=createUnet&s_tid=doc_srchtitle
השתמשי בזה לעבודה על תמונות שאת מצליחה להכניס לזיכרון.
2. שחזור הארכיטקטורה של המאמר המקורי לצורך סגמנטציה של תמונות גדולות במיוחד, כולל cropping של שכבות וצעדי קדם-עיבוד ופוסט-עיבוד. השתמשי בזה לעבודה על תמונות שאת לא מצליחה להכניס לזכרון (טיפוסי לתמונות רפואיות). קישור:
https://systematics.sharefile.com/share/view/s380bfcd3cb448408
– לשימושך גם תשובתו של Birju Patel ובה U-Net שעובד כבר החל מגרסת R2017b:
https://www.mathworks.com/matlabcentral/answers/334265-how-can-i-merge-concatenate-feature-maps-from-two-different-cnn-layers-in-my-architecture
לגבי 3 – תמיכה בדבר שאת מבקשת קשורה לתמיכה המתוכננת שלנו בשכבות
3D Conv / Deconv / Pooling.
בהתחלה זה כנראה יצריך מהמשתמשים מאמץ מסוים, בהמשך זה צפוי להיות יותר פשוט.