‏הצגת רשומות עם תוויות Deep Learning. הצג את כל הרשומות
‏הצגת רשומות עם תוויות Deep Learning. הצג את כל הרשומות

יום שני, 26 במרץ 2018

Deep Learning with MATLAB in R2018a

לפני מספר ימים שוחררה גרסת ה-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 והסביבות האחרות (עריכה - התמיכה כבר קיימת).

אז...מה נשתנה בתחום ה-Deep Learning בגרסת R2018a? להלן החידושים המרכזיים:
·         תצוגה גרפית של הרשת בעזרת ה-Network Analyzer App – לצורך איתור בעיות אפשריות לפני ביצוע האימון (לחצו פה)
·         ייצוא/ייבוא מודלים בין MATLAB ופורמט ONNX – ייצוא המודלים מ-MATLAB מאפשר שימוש בהם בתוך סביבות התומכות בפורמט זה, דוגמת TensorFlow, Caffe2, CNTK, MXNet, CoreML. ייבוא המודלים מאפשר להכניס לתוך MATLAB מודלים מסביבות כמו CNTK, PyTorch, Chainer, Caffe2. למידע נוסף - לחצו פה
·         יצירה, אימון וניתוח של רשתות 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 באתר MathWorks לחצו פה.

יום ראשון, 29 באוקטובר 2017

פי 7 יותר מהיר מ-TensorFlow, פי 5 מ-Caffe2, פי 2 מ-mxNet, שווה ערך ל-Tensor RT מבחינת מהירות ויעיל יותר ממנו בצריכת זיכרון – קבלו את ה-GPU Coder!

באמצע החודש נערך בתל אביב ה-GPU Technology Conference של חברת NVIDIA, במעמד מנכ"ל ומייסד החברה, ג'ן-סון הואנג, אשר אף ביקר בביתן ההדגמות של חברת סיסטמטיקס והביע את ההערכתו לשיתוף הפעולה המוצלח וארוך השנים בין החברה שלו לחברת MathWorks.


במהלך הכנס התכבדתי להרצות על יכולות ה-Deep Learning של סביבת MATLAB, בהרצאה אשר בעיקר סקרה את היכולת החדשה להמיר קוד MATLAB לקוד CUDA, לצורך הפעלתו על GPU-ים של חברת NVIDIA. יכולת זו מתאפשרת הודות לכלי החדש GPU Coder, שהושק לפני כחודש, לאחר תקופת בדיקות ארוכה, אשר כללה גם מספר Beta sites בישראל.

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

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

אז ככה, כפי שניתן לראות בגרף למטה (ניתן ללחוץ להגדלה), לפי ה-benchmarks, הקוד שנוצר על ידי ה-GPU Coder עבור פעולות הסקה (Inference) של Alexnet על desktop מהיר בערך פי 5 ממה שמאפשרת ספריית Caffe2 של פייסבוק, ופי 7 מאשר TensorFlow – עבור Batch Size של 128.
זה המקום להדגיש שכפי שניתן לראות בגרף - גם ריצה ב-MATLAB תוך שימוש ב-GPU, ללא יצירת קוד CUDA – מהירה יותר משתי הסביבות הללו – כי הן מבוססות Python, דבר שמוסיף להן הרבה overhead. מי שיותר מהיר מ-MATLAB זה mxNet, כי הוא מבוסס C++ ולא Python, אבל גם הוא נחות פי 2 בהשוואה לקוד שמייצר ה-GPU Coder.


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

אז זה הרגע לעבור לדבר קצת על כרטיסים, ולא על desktops.

שאלה שאנשים רבים מתעניינים בה, היא איך הקוד של ה-GPU Coder בהשוואה ל-Tensor RT – שזה runtime ואופטימייזר הסקה עתיר ביצועים של NVIDIA לתחום ה-Deep Learning המותאם עבור כרטיסי Jetson TX2. אז ככה, כפי שניתן לראות למטה (לחצו להגדלה), מבחינת מהירות – הקוד של ה-GPU Coder איטי מ-Tensor RT בכ-15%. לא הבדל גדול, אבל אני יכול לספר לכם שב-MathWorks פועלים כדי להעלים אותו.


אבל מה שעוד יותר מעניין – זה שכפי שניתן לראות למטה (לחצו להגדלה) – עד Batch Sizes של 64 ומטה – הקוד שנוצר על ידי ה-GPU Coder תופס פחות זיכרון! ויש משמעות מאוד גדולה לערכי Batch Sizes נמוכים שכאלה – כי זה מה שבדרך כלל משתמשים בו לפעולות הסקה ב-Real Time על כרטיס (ושוב - כרטיס, להבדיל מ-desktop, עליו כתבתי למעלה).


חשוב להבהיר ש-Tensor RT מיועד ליישומי Deep Learning, בעוד שה-GPU Coder מאפשר להשיג ביצועים טובים גם עבור יישומים נוספים, לא רק של Deep Learning. ולא חסרות דוגמאות שבהן מרכיב ה-Deep Learning הוא רק חלק מאפליקציה יותר גדולה, למשל של Computer Vision, ועם הכלי החדש ניתן להמיר לקוד CUDA יעיל גם את החלק של ה-Computer Vision.

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


המעוניינים במידע נוסף מוזמנים לסמינר חינמי חצי-יומי שיתקיים בהרצליה ב-21/11/17. למידע נוסף ורישום – לחצו פה.

קישורים שימושיים נוספים:

יום שני, 14 באוגוסט 2017

מהר יותר, נמוך יותר, חזק יותר! | יכולות משמעותיות חדשות בתחום ה-Deep Learning בסביבת MATLAB

פייר דה קוברטן, מי שהוביל את הרעיון לחדש את מסורת המשחקים האולימפיים, הוא זה שטבע את הסיסמה "מהר יותר, גבוה יותר, חזק יותר!". אבל הבלוג הזה לא עוסק בספורט, מה גם שהאולימפיאדה הבאה עוד די רחוקה. מה שכן מתקרב בצעדי ענק הוא השחרור של גרסת MATLAB חדשה, R2017b, אשר לפחות עבור העוסקים בתחום ה-Deep Learning - צפויה להיות גרסה די משמעותית. ובפראפראזה על הסיסמה שהגה הברון דה קוברטן – דברים הולכים לרוץ מהר יותר, תוך ניצול נמוך יותר של זיכרון, ותוך הפגנת סט יכולות חזק יותר מאי פעם!

יכולות ה-Deep Learning בסביבת MATLAB נסקרו בבלוג הזה לראשונה לפני כעשרה חודשים (קישור למטה). בכנס MATLAB & Simulink 2017 Israel Expo שהתקיים לפני כשלושה חודשים התכבדתי להעביר הרצאה בנושא, בה הדגמתי כיצד סביבת MATLAB מאפשרת להתמודד בקלות עם האתגרים השונים בביצוע משימות בעולם ה-Deep Learning (קישור להרצאה - למטה). כשבוע לאחר הכנס פרסמתי פה סקירה של החידושים בתחום בגרסת ה-MATLAB הנוכחית (קישור למטה), וכעת אני מתכבד לפרסם הצצה ראשונית ליכולות הצפויות בגרסת ה-MATLAB הבאה, R2017b, אשר צפויה להשתחרר בעוד כחודש. הסקירה הזו מבוססת בחלקה על עמוד ה-Deep Learning באתר חברת MathWorks (קישור למטה).


אז מה היכולות החדשות שמתוכננות לגרסה הקרובה?

GPU Coder – כלי חדש המאפשר המרה אוטומטית של קוד MATLAB לקוד CUDA אשר יכול לרוץ על מעבדים גרפיים של חברת nVidia. מדובר בהרחבה של כלי ה-MATLAB Coder (המאפשר להמיר קוד MATLAB לקוד C), אשר לפי ה-benchmarks מאפשרת לקוד לרוץ פי 5 יותר מהר מאשר מה שמאפשרת ספריית Caffe2, ופי 7 יותר מהר מאשר TensorFlow (בבדיקה על פעולות הסקה תוך שימוש ב-Alexnet; יודגש שגם ללא הכלי סביבת MATLAB מהירה יותר מאשר שני הכלים האחרים). בנוסף, על פי ה-benchmarks הכלי מאפשר ניצול של פי 3 פחות זיכרון מאשר TensorFlow דורש. ניתן למצוא למטה קישור לפוסט בנושא.

התממשקות עם TensorFlow - Keras לצורך ייבוא מודלים – בהמשך לתמיכה ב-Caffe אשר נוספה ב-R2017a (ראו למטה סקירה של החידושים בגרסה הנ"ל). כך ניתן ליהנות הן מהמודלים המעולים שפותחו בעבר (או יפותחו בהמשך) בסביבות אלה, והן מנוחות העבודה, הויזואליזציות והמהירות של סביבת MATLAB וכן בסופו של דבר לייצר בצורה אוטומטית קוד CUDA בעזרת הכלי המוזכר למעלה. היכולת צפויה להתווסף במהלך חודש אוקטובר (לחצו לקישור). בהקשר זה יש להזכיר שקיימת אפשרות להמיר מודלים מ-PyTorch ל-Keras (לחצו לקישור), ולכן כעת - באמצעות המרה כפולה - אפשר לעבור מ-PyTorch ל-MATLAB.

תמיכה בארכיטקטורות מתקדמות של רשתות
RNN היא רשת בעלת לולאות שמסוגלת להתמודד יותר בקלות ויותר בטבעיות עם מידע רציף, כמו וידאו, טקסט, ואודיו. כלומר – מאפשרת לנצל את המידע שנאסף במילה הקודמת במשפט או בפריים הקודם של הווידאו, על מנת להבין את המילה הבאה או הפריים הבא. בגרסה החדשה צפויה תמיכה ב-LSTM - מקרה מיוחד של RNN - אשר מצליח להשתמש במידע שנלמד בתחילת רצף ארוך - גם בשלב יותר מאוחר ברצף. משמש לתרגום, זיהוי כתב יד, זיהוי קול, סיווג תמונות, חיזוי תגיות ועוד.
DAG - רשת שבה הקלט של שכבה יכול להגיע ממספר שכבות, והפלט שלה יכול להגיע אל מספר שכבות, ללא משוב.
GoogLeNet רשת DAG קטנה, מהירה ומדויקת, אשר זכתה בתחרות ILSVRC בשנת 2014.
הנ"ל בהמשך לתמיכה ב-VGG שנוספה ב-R2017a והרחיבה את התמיכה ב-Alexnet
שימו לב שבמהלך חודש אוקטובר צפויה להתווסף גם תמיכה ב-ResNet50 (רשת מקבילית עמוקה מאוד, 177 שכבות, שאומנה באמצעות למעלה ממיליון תמונות, וזכתה ב-ILSVRC  לשנת 2015. לחצו לקישור) בתור Support Package. ובהמשך - תהיה גם תמיכה ב-ResNet101.
תמיכה ב-
InceptionV3 צפויה להתווסף בסביבות סוף השנה.

Custom layer – ממשק ליצירת סוגים חדשים של שכבות באמצעות שפת MATLAB.

Batch normalization – מאפשר להאיץ את תהליך האימון ולהפחית את הרגישות לאתחול, על ידי שימוש בשכבות אשר מנרמלות את ה-activations והגרדיאנטים המתקדמים ברשת, דבר ההופך את אימון הרשת למשימה פשוטה יותר.

סוגים חדשים נוספים של שכבות – Deconv layer ,MaxUnPooling layer (מה שמאפשר לייצר DeconvNet) ועוד...

Semantic Segmentation – סגמנטציה סמנטית הינה טכניקה להפרדה של אובייקט מהרקע ברמת הפיקסל תוך התייחסות זהה לאובייקטים מאותו קלאס (למשל – התייחסות אל שני כיסאות שונים בתור קלאס זהה). בגרסה הקרובה תתווסף אפשרות להוסיף שכבות ,FCN SegNet ו-PixelClassification (מצריך את ה-Computer Vision System Toolbox) ואפשר יהיה ליצור PSPNet (יצריך לבנות את הרשת, המעוניינים יכולים לקבל ממני דוגמה לשימוש ב-Alexnet בתור בסיס; כאמור – לאחר שחרור הגרסה מתוכנן שיחרור של תוסף של ResNet50, מה שיאפשר לשכפל די טוב את ה-PSPNet המקורי). 
בנוסף, לבעלי ה-Computer Vision System Toolbox - בגרסה יתווספו גם כל מיני פונקציות עזר וכל מיני מטריקות בתחום הסגמנטציה הסמנטית, לרבות IoU / Jaccard (מדד טיב בגילוי אובייקטים – היחס בין החיתוך של ה-bounding box של הגילוי עם זה של ה-ground truth, לבין האיחוד שלהם).

Labeling – כידוע, פרט ל-App לביצוע Labeling לסרטוני וידאו (המהווה חלק מה- Automated Driving System Toolboxקיים גם ה-App המסייע לביצוע Labeling לתמונות (אשר הינו חלק מה- Computer Vision System Toolbox). לאחרון תתווסף תמיכה בתיוג פיקסלים ואזורים עבור משימות סגמנטציה סמנטית. 

Early stopping via validation – יכולת ולידציה אוטומטית לרשת כל מספר איטרציות, ועצירת האימון כאשר מטריקות הולידציה מפסיקות להשתפר. הנ"ל יאפשר להכניס מידע ולידציה לתהליך האימון ולהציג ביצועים ב-training accuracy plot הן על מידע האימון והן על מידע הולידציה (ה-plot המשודרג גם צפוי להכיל לחצן "עצור").

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

Bayesian Optimization – מציאת הגדרות אופטימליות לאימון רשתות עמוקות (מצריך את ה-Statistics & Machine Learning Toolbox)


מה הלאה?

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

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

ואם יש יכולות חדשות בתחום ה-Deep Learning שהייתם רוצים לראות בסביבת MATLAB – אפשר לכתוב אותן בתגובה לפוסט זה. ב-MathWorks כבר החלו לעבוד על הגרסאות הבאות, וכמובן שהמטרה היא שהתוכנה תתאים כמה שיותר לצרכים של המשתמשים. אז קדימה, לא להתבייש :)


קישורים:

* הרשמה לסמינר שיתקיים בתאריך 21/11/2017

* פוסט מלפני כעשרה חודשים בנושא יכולות ה-Deep Learning בסביבת MATLAB
* פוסט בנושא GPU Coder
* וידאו - הרצאה מכנס MATLAB & Simulink 2017 Israel Expo

* קורס חינמי אונליין 
לחצו פה

* סקירה של החידושים בתחום בגרסת ה-MATLAB הנוכחית (R2017a)

* עמוד ה-Deep Learning באתר חברת MathWorks (מומלץ לנווט אל עמוד ה-Features באמצעות שורת התפריטים מתחת לפס הכחול אשר בחלקו העליון של העמוד)