מה חדש בתחום ה-Deep Learning בסביבת MATLAB בגרסת R2021a?

גרסת R2021a של כלי MathWorks, אשר שוחררה בחודש שעבר, כוללת 1,451 יכולות חדשות בכלים הקיימים בסביבות MATLAB ו-Simulink, תיקוני באגים ואף שלושה כלים חדשים (לסקירת של יכולות הגרסה – לחצו פה). מבחינת תחום ה-Deep Learning – כמו בגרסה הקודמת (לחצו לסקירה) – גם בגרסה הראשונה לשנת 2021 התחום זכה להשקעה רבה.

פוסט זה מורכב משלושה חלקים – בחלק הראשון תוכלו לקרוא על החידושים בתחום הלמידה העמוקה בגרסת R2021a. בחלק השני תמצאו ריכוז של היתרונות העיקריים של MATLAB בעולם זה. ובחלק השלישי לרשותכם הפניות לסמינרים מקצועיים מקוונים, קורסי Hands-On חינמיים, סיפורי משתמשים ישראלים ודרכים לקבלת מידע נוסף.

אזמה חדש בתחום ה-Deep Learning בגרסת R2021a?

להלן החידושים המרכזיים:

  1. TensorFlow Importer – הכנסה ישירה של מודלים מסביבת TensorFlow (גרסה 2) לסביבת MATLAB, בנוסף לתמיכה שהיתה (וממשיכה להיות) קיימת בפורמט ONNX (ואף השתדרגה בגרסה החדשה, עם תמיכה בשכבות נוספות ובייצוא של אובייקטי layerGraph ו-dlnetwork). כך ניתן ליהנות גם מההיצע של מודלים שפותחו בסביבות למידה עמוקה אחרות וגם מהיתרונות של ביצוע למידה עמוקה בסביבת MATLAB, לרבות:
    * המרה אוטומטית של רשת לקוד C++/C/CUDA/HDL יעיל (לסרטון הדגמה קצר של המרת רשת לקוד CUDA – לחצו פה),
    * שילוב במודל מערכתי גדול בעזרת סביבת Simulink
    * יכולות ויזואליזציה וניתוח.
    לפוסט הסוקר הכנסה של רשת מ-TensorFlow אל MATLAB וניצול של היתרונות הנ"ל של ביצוע למידה עמוקה בסביבת MATLAB  – לחצו פה.

    להורדה חינמית של התוסף החדש ומידע נוסף – לחצו פה (להורדה חינמית של חבילת התמיכה ב-ONNX ומידע נוסף על כך – לחצו פה).

    דרכים שונות להעברת רשתות בין סביבות למידה עמוקה שונות לבין MATLAB (ניתן ללחוץ על התמונה להגדלה)

  2. שיפורים לממשקי ה-Labeling – בסביבת MATLAB קיים אוסף עשיר של ממשקי תיוג מעולים:
    * Image Labeler – ממשק תיוג תמונות – למידע נוסף על ממשק זה – לחצו פה.
    * Video Labeler – ממשק תיוג קבצי וידאו ורצפי תמונות – למידע נוסף על ממשק זה – לחצו פה.
    * Ground Truth Labeler – ממשק תיוג ליישומי נהיגה אוטונומית – למידע נוסף על ממשק זה – לחצו פה.
    * Lidar Labeler – ממשק תיוג ענני נקודות Lidar – למידע נוסף על ממשק זה – לחצו פה.
    * Signal Labeler – ממשק תיוג אותות – למידע נוסף על ממשק זה – לחצו פה.
    * Audio Labeler – ממשק תיוג קבצי אודיו – למידע נוסף על ממשק זה – לחצו פה.
    למידע על בחירת ממשק התיוג המתאים ליישום שלכם, כולל השוואה בין הממשקים השונים – לחצו פה.
    בגרסה החדשה הוכנסו לממשקי התיוג הנ"ל מספר שיפורים, וביניהם:
    בשלושת הממשקים הראשונים נוספה תמיכה ב-Instance Labeling באמצעות פוליגונים, לצורך ביצוע Instance Segmentation עם Mask R-CNN. הנ"ל משלים את התמיכה שכבר היתה קיימת בסביבת MATLAB עבור אימון Mask R-CNN (לדוגמה חדשה בנושא – לחצו פה). בנוסף, בשלושת הממשקים הללו נוספה גם אפשרות לשימוש ב-Superpixels כדי להאיץ תהליכי תיוג ברמת הפיקסל. שימוש בשיטת האוטומציה הזו, שעיקרה הוא תיוג משותף של איזורים בתמונה שערכי הפיסקלים בהם דומים, מקצר את הזמן הנדרש לתיוג עבור סגמנטציה סמנטית. למידע נוסף – לחצו פה.
    ב-Image Labeler נוספה תמיכה בתיוג תמונות ענק, כולל כאלה שלא נכנסות בזיכרון, וזאת על ידי טעינתן אל הממשק בתור Blocked Images. הנ"ל שימושי במיוחד עבור תמונות רפואיות ברזולוציה גבוהה וכן צילומי אוויר. יש אפשרות לבצע אוטומציה לתהליך התיוג. בנוסף, יש כעת ב-Labeler חלון Overview שמאפשר להבין על איזה איזור בתמונה אנו מתבוננים כעת ואילו איזורים עוד לא תייגנו (דבר שהוא שימושי גם עבור תמונות שאינן תמונות ענק). למידע נוסף – לחצו פה.
    ב-Ground Truth Labeler אפשר כעת לבצע אוטומציה המשלבת מספר אותות, כלומר ניתן לכתוב אלגוריתמי אוטומציה הניגשים למספר אותות, וכך למשל אם יש לנו מידע LIDAR ומידע וידאו מכוילים, אלגוריתם שמזהה אוביקט עניין במידע ה-LIDAR יביא גם לסימון האוביקט במידע הוידאו. הדבר מקל על תהליך התיוג, כיוון שהוא מאפשר כתיבת אלגוריתם אוטומציה ל-Domain אחד, והעברה של הגילויים אל Domain אחר. לדוגמה – לחצו פה.
    ב-Lidar Labeler נוספה אפשרות להשתמש בפונקציית קריאה מותאמת אישית על מנת לטעון כל ענן נקודות שהוא לתוך הממשק (מידע נוסף), וכן נוספה אפשרות להגדיר איזור עניין בתוך ענן הנקודות ולתייג אובייקטים בתוכו (מידע נוסף). הפיצ'ר האחרון שימושי במיוחד כאשר מדובר בענן נקודות גדול ומעוניינים להתמקד באיזור ספציפי שלו. פרט לכך, יש כעת דוגמה לאוטומציה של תהליך תיוג של מידע LiDAR בעזרת אלגוריתם מותאם אישית המשלב שימוש ברשת גילוי האוביקטים PointPillars (מידע נוסף).
    ב-Signal Labeler נוסף Dashboard שמאפשר לעקוב אחר התקדמות משימת התיוג ומספק מידע לגבי הסטטיסטיקה והפילוג של ה-Label-ים כך שניתן יהיה להשתמש ב-Data בצורה אופטימלית ללמידת מכונה ולמידה עמוקה. הניתוחים שהפיצ'ר החדש מספק מאפשרים לוודא שהתיוג הגיוני (למשל, שיש אותו מספר של איזורי P, QRS ו-T בסיגנל ECG, שמשכי האיזורים הללו סבירים וכו'), וכן לקבל תובנות בנוגע לחוסר איזון ב-Data ועוד. למידע נוסף – לחצו פה. בנוסף, יש כעת בממשק תמיכה באותות מרוכבים (שימושי לעוסקים בתחום התקשורת והמכ"ם, לחצו פה לדוגמה בנושא תיוג אותות מכ"ם) ותמיכה באותות אודיו. פרט לכך, ניתן כעת לסמן Labels (בציר הזמן) ישירות בעזרת הספקטרוגרמה.

    חלק מהשיפורים בכמה מממשקי התיוג (ניתן ללחוץ על התמונה להגדלה): Instance Labeling (למעלה משמאל), תמיכה בתיוג תמונות ענק כולל חלון Overview (למעלה מימין), שימוש ב-Superpixels כדי להאיץ תהליכי תיוג ברמת הפיקסל (למטה מימין) ו-Dashboard שמאפשר לעקוב אחר התקמות משימת תיוג אותות ומספק מידע לגבי הסטטיסטיקה והפילוג של ה-Label-ים (למטה משמאל)

  3. יכולות חדשות לממשק ניהול הניסויים – כזכור, לפני כשנה נוסף ה-Experiment Manager App, ממשק שמאפשר לתכנן תרחישי אימון של רשתות למידה עמוקה, להריץ אותם, לנתח את התוצאות ולהשוות בין אימונים שונים, והכל מבלי לכתוב הרבה שורות קוד. בעזרת הכלי אפשר לסרוק תחום ערכים של היפרפרמטר, לבחון את ההשפעה של שימוש ב-Data Sets שונים, או לבדוק מה מניבות ארכיטקטורות שונות עבור אותו מידע אימון. הממשק כולל כלי ויזואליזציה שימושיים כמו Training Plots, מסננים, מטריצות Confusion ואפשרות להגדיר מטריקה מותאמת אישית לצורך הערכת הביצועים.
    בגרסה החדשה מנהל הניסויים תומך באימונים מותאמים אישית, דבר שמאפשר שימוש בתוכניות מותאמות אישית עבור שינוי קצב הלמידה, וכן שימוש ב-Framework המורחב של ה-Deep Learning Toolbox (זה שבעזרתו ניתן לאמן רשתות סיאמיות ו-GAN-ים). לדוגמה לשימוש ב-Experiment Manager לאימון GAN – לחצו פה.
    הודות לחידוש המוזכר לעיל, ניתן כעת להשתמש בממשק גם עבור ניהול ניסויים מתחומים נוספים, ולא רק מתחום ה-Deep Learning. למשל, ביצוע של ניסויי Reinforcement Learning (סריקת היפרפרמטרים, שימוש בסוכני Reinforcement Learning שונים, והשוואת פונקציות תגמול וסביבות שונות).

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

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

  4. שדרוג ליכולות ההמרה של רשתות בצורה אוטומטית לקוד C++/C/CUDA/HDL
    * יצירת קוד HDL
     – כזכור, מהגרסה הקודמת ניתן לבנות אבטיפוס של רשת למידה עמוקה ולהוריד אותה בקלות ל-FPGA או SoC בעזרת כלי ה-Deep Learning HDL Toolbox. כדי לטרגט רכיבים דלי הספק וזיכרון ממשיך לעמוד לרשות המשתמשים ממשק הקוונטיזציה Deep Network Quantizer, שמסייע לוודא שאין חריגה מדרישות הדיוק הרצויות. לסרטון קצר (5 דקות) בו מודגם תהליך הההורדה ל-FPGA של רשת לאיתור פגמים ברכיבים, לרבות ניתוח הביצועים שלה על החומרה וביצוע קוונטיזציה ל-int8 – לחצו פה.
    לתמיכה ביצירת קוד מתוך רשתות טוריות נוספה בגרסה החדשה תמיכה ביצירת קוד מתוך רשתות DAG. בנוסף, הורחבה רשימת השכבות הנתמכות. לרשימה העדכנית של הרשתות והשכבות הנתמכות, כמו גם של חומרות Xilinx ואינטל הנתמכות – לחצו פה.
    * יצירת קוד CUDA – כלי ה-GPU Coder מאפשר להמיר בצורה אוטומטית קוד MATLAB ומודלי Simulink לקוד CUDA מהיר וחסכוני בזיכרון לצורך מימוש על מערכות Embedded.

    בגרסה החדשה נוספו עוד שכבות לרשימת השכבות אשר נתמכות על ידי כלי ההמרה הנ"ל, דבר שמאפשר להמיר בקלות עוד רשתות עמוקות מקוד MATLAB לקוד הפועל על כרטיסי GPU של Nvidia. לרשימה המלאה של רשתות מאומנות, שכבות וקלאסים אשר ניתן להמיר אותם לקוד CUDA בצורה אוטומטית – לחצו פה.
    פרט לכך,
    נוספה תמיכה בהמרה לקוד CUDA של פונקציות נוספות מהכלים Wavelet Toolbox ,Computer Vision Toolbox ו-MATLAB. הנ"ל מאפשר לייצר קוד CUDA לאלגוריתם המלא, הכולל עוד מרכיבים מעבר לחלק של ה-Deep Learning. לרשימה המלאה של הפונקציות שנתמכות – לחצו פה.
    לסיום, יצויין כי נוספה אפשרות לשליטה על המספר המרבי של בלוקים עבור Kernel, דבר שאמור להביא לשיפור ביצועים.
    (חידושים נוספים מוזכרים בסעיפים 5, 10 ו-17 בפוסט זה).
    * יצירת קוד ++C/C – כלי ה-MATLAB Coder מאפשר להמיר קוד MATLAB לקוד ++C/C יעיל, ובפרט מאפשר להמיר רשתות למידה עמוקה לקוד עבור מעבדים של אינטל ופלטפורמות ARM.
    החל מהגרסה החדשה ניתן לייצר קוד גם עבור רשתות LSTM קונבולוציוניות (רשתות המכילות שכבות קונבולוציה ו-LSTM). לדוגמה העושה שימוש ב-MKL-DNN של אינטל – לחצו פה (ניתן להשתמש גם בספריית ARM Compute).
    כמו כן, נוספו שכבות נוספות לרשימת השכבות אשר נתמכות, דבר שמאפשר להמיר בקלות עוד רשתות עמוקות מקוד MATLAB לקוד ++C. לרשימה המלאה של רשתות מאומנות, שכבות וקלאסים אשר נתמכים – לחצו פה.

    בנוסף, יש כעת תמיכה ביצירת קוד ++C/C גנרי (כלומר – שאינו תלוי בספריות של צד שלישי) עבור מגוון שכבות, כולל שכבות שהוגדרו אישית על ידי המשתמש. ניתן לראות את רשימת השכבות הללו ברשימה שהובאה בקישור האחרון, בטבלה השניה, תחת העמודה ++Generic C/C. למידע נוסף – לחצו פה.
    פרט לכך, נוספה תמיכה בהמרה לקוד ++C/C של פונקציות נוספות ואובייקטים נוספים מכלים כמו Wavelet Toolbox ,Signal Processing Toolbox ,Image Processing Toolbox ,Computer Vision Toolbox ,MATLAB ואחרים. הנ"ל מאפשר לייצר קוד ++C/C לאלגוריתם המלא, הכולל עוד מרכיבים מעבר לחלק של ה-Deep Learning. לרשימה המלאה של הפונקציות שנתמכות – לחצו פה.
    (חידוש נוסף מוזכר בסעיף הבא).

    מגוון האפשרויות להורדת רשת למידה עמוקה לחומרת Embedded (ניתן ללחוץ על התמונה להגדלה)

  5. יכולות למידה עמוקה חדשות בסביבת Simulink  – כזכור, בגרסה הקודמת התווספה לסביבת התכנון מבוסס-מודל Simulink ספריית בלוקים בשם Deep Neural Networks, שהכילה בלוקים של Simulink לביצוע סיווג של תמונה באמצעות רשת מאומנת ולביצוע חיזוי של תגובה (אקטיבציות) של רשת מאומנת. בגרסה החדשה נוספו שני בלוקים חדשים, לביצוע סיווג וחיזוי של תגובה בעזרת RNN מאומנת. כל הנ"ל מאפשר שילוב קל של רכיב למידה עמוקה בתוך מערכת הממודלת ב-Simulink, דבר שמאפשר ביצוע סימולציה ובדיקות של רכיב זה ברמת המערכת המלאה בסביבה זו, שיכולה לכלול רכיבים ממגוון תחומים (מערכות בקרה, מידול פיזיקלי של מערכות מכאניות/חשמליות וכו').
    כמו הבלוקים שהתווספו בגרסה הקודמת, גם הבלוקים החדשים נתמכים להמרה אוטומטית לקוד C++/CUDA. יחד עם התמיכה שכבר היתה קיימת בהמרה לקוד CUDA של מודלי Simulink המכילים בלוק MATLAB Function (שיכול להכיל רשת גילוי אובייקטים, LSTM וגם קוד MATLAB שאינו קשור לתחום הלמידה העמוקה), מתאפשרת האצה של סימולציות Simulink תוך שימוש ב-GPU, יצירת exe לצורך בניה מהירה של אבטיפוס להרצה על GPU, והורדה של מודל Simulink ל-Embedded GPU כמו Jetson ו-DRIVE. לסרטון קצר (2 דקות) המדגים יצירה של קוד CUDA מתוך מודל Simulink המכיל רכיב של למידה עמוקה – לחצו פה.

    ספריית Deep Neural Networks בסביבת Simulink. הבלוקים החדשים לביצוע סיווג וחיזוי של תגובה בעזרת RNN מאומנת מוקפים בירוק (ניתן ללחוץ על התמונה להגדלה)

  6. תוספת של עשרות דוגמאות ממגוון תחומי יישום – יחד עם הדוגמאות החדשות, קיימות כעת ב-Help מעל 250 דוגמאות מתועדות היטב לביצוע למידה עמוקה בסביבות MATLAB ו-Simulink עבור מגוון תחומי יישום – עיבוד תמונה וראיה ממוחשבת, עיבוד Lidar, עיבוד אודיו ואותות אחרים, ניתוח טקסט, בקרה (Reinforcement Learning), נהיגה אוטונומית, תקשורת, הנדסת מערכת (Simulink) ועוד. לעמוד הבית של תחומי היישום השונים, ממנו ניתן להגיע לפקודות חשובות, Apps רלוונטים ודוגמאות שימושיות עבור תחום היישום שלכם – לחצו פה. ולדוגמאות רשמיות שממשיכות להתווסף כל הזמן – היכנסו ל-Repositories שלנו לתחום הלמידה העמוקה ב-GitHub (לחצו פה). בכוונת MathWorks להגביר את תדירות השחרור של מודלים מאומנים דרך GitHub, דבר שיאפשר לכל אחד ואחת שימוש במודלים העדכניים ביותר מהמחקר – עבור Transfer Learning ,Inference, תהליכי תיוג אוטומטים ויצירת קוד.

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

  7. למידה שיתופית (Federated Learning) – מהגרסה החדשה ניתן לאמן רשת על מידע מבוזר, מבלי להעביר אותו למיקום מרכזי, אפילו אם הפילוג של מקורות מידע מסויימים לא תואם את הפילוג הכללי של המידע (מכונה גם "מידע שאינו IID"). הטכניקה מאמנת מספר מודלים במקביל, כל אחד בהתאם למקור מידע אחר, והמודל הראשי לומד מכל המודלים המקומיים הללו באמצעות שקלול מחזורי של הפרמטרים שמתעדכנים בהם. הנ"ל שימושי במקרים של כמויות מידע גדולות או בעיות פרטיות שעלולות לצוץ במקרה של העתקת מידע האימון. לדוגמה – לחצו פה. לסרטון בנושא למידה שיתופית – לחצו פה.
  8. פתרון משוואות דיפרנציאליות  – ניתן לבצע אימון של Neural ODEs כך שילמדו את הדינמיקה של מערכת פיזיקלית. Neural ODEs הן פעולות מבוססות למידה עמוקה המוגדרות על ידי פתרון של משוואה דיפרנציאלית רגילה. ניתן להשתמש בהן כדי למדל בעיות פיזיקליות מורכבות, וזאת ללא יותר מידי חישובים בהשוואה לאלה שכרוכים במציאת פתרונות נומריים, אך תוך שמירה על הפיצ'רים העיקריים. לדוגמה – לחצו פה.
    בנוסף, ניתן כעת לעשות שימוש בנגזרות מסדר גבוה על מנת לפתור משוואות דיפרנציאליות חלקיות, אשר כאמור ניתנות למידול באמצעות למידה עמוקה. הנ"ל יכול לשמש לפתרון בעיות בתחומים שונים, כמו מכניקת זורמים, אקוסטיקה לא ליניארית, דינמיקת גזים, זרימת תנועה ועוד…על מנת לאפשר חישוב של נגזרות מסדר גבוה בעת אימון באמצעות לולאת אימון מותאמת אישית, יש להגדיר בתור True את האופציה EnableHigherDerivatives בפונקציית dlgradient, אשר מבצעת את חישוב הגרדיאנטים באמצעות Automatic Differentiation (אוסף של טכניקות להערכה נומרית של הגרדיאנטים המשמש כדי לאמן רשתות Deep Learning מורכבות ללא צורך בחישוב ידני של הנגזרות). הנ"ל מאפשר לפתח מודלים כמו Wasserstein GANs אשר דורשים חישוב של נגזרות מסדר שני (לחצו לדוגמה).

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

  9. GAN APIs – ממשקי תכנות יישומים לשימוש ב-GAN-ים עבור מגוון יישומים Supervised ו-Unsupervised (בנוסף לתמיכה ביישומי Semi-Supervised שנוספה בגרסה הקודמת), הדבר מאפשר גם לאנשים שאינם מומחים בתחום לנצל שיטות כמו Pix2pixHD ,UNIT ,CycleGAN ו-PatchGAN, ואפילו לייצר קוד Embedded עבור הרשתות שהם יצרו ושינו. UNIT-GAN יכולה לשמש, למשל, להפיכת תמונות שצולמו ביום לתמונות שנראות כאילו צולמו בשעת בין ערביים (לחצו לדוגמה), או לייצור תמונות CT ברזולוציה גבוהה מתוך תמונות ברזולוציה נמוכה. Pix2Pix יכולה לייצר תמונות על סמך מפות סגמנטציה (לחצו לדוגמה).

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

  10. גילוי אוביקטים בעזרת YOLOv3 ,YOLOv4 ו-EfficientDet-D0 – בהמשך לדוגמאות שסופקו בגרסאות הקודמות, שוחררה חבילת תמיכה (חינמית) עבור גילוי אובייקטים בתמונות בעזרת YOLOv3 (אשר בהשוואה ל-YOLOv2 – מאפשר גילוי מדויק יותר, גם של אובייקטים קטנים במיוחד). החבילה מכילה את המודלים המאומנים DarkNet-53 ו-YOLOv3-Tiny, אשר אומנו על מאגר המידע COCO, וכן API שמאפשר לכל אחד ואחת לבצע בקלות התאמה אישית לצרכי גילוי אוביקטים ו-Transfer Learning עם המידע שמעניין אותו/אותה. לפקודה הרלוונטית ודוגמאות לשימוש בה – לחצו פה. להורדת חבילת התמיכה – לחצו פה. בנוסף, ניתן למצוא ב-GitHub את גלאי האוביקטים החד-שלבי YOLOv4 (קישור), אשר אפשר להשתמש בו כמו שהוא וכן להשתמש בו לצורך Transfer Learning או אוטומציה של תהליכי תיוג, והוא אף נתמך להמרה אוטומטית לקוד CUDA. גם גלאי האובייקטים החד- שלבי EfficientDet-D0 (קישור), אשר אומן על למעלה מ-80 סוגי אובייקטים (לקוחים ממאגר COCO 2017), נמצא כעת ב-GitHub, ואפשר להשתמש בו כפי שהוא וכן להשתמש בו לצורך Transfer Learning ולהמירו אוטומטית לקוד CUDA.
  11. יצירה מהירה של רשת המכילה מבנה שחוזר על עצמו – ניתן להשתמש בפונקציה blockedNetwork כדי לייצר בזריזות רשת בעלת בלוק של שכבות שחוזר על עצמו (למשל, מודול של מקודד שמבצע סדרה של פעולות downsampling או מודול של מפענח שמבצע סדרה של פעולות upsampling).
  12. טעינה מהירה של רשתות מאומנות ב-MATLAB Online – שירות MATLAB Online, המאפשר שימוש ב-MATLAB וכלים משלימים נוספים דרך הדפדפן, מבלי להתקין שום דבר ומבלי לשלם כל תשלום נוסף, טוען כעת רשתות מאומנות
    דוגמת  alexnet ,googlenet ,vgg16 ,resnet50 ,xception ,inceptionv3 ,squeezenet ,nasnetlarge עד פי 10 יותר מהר מאשר בעבר. למידע נוסף על MATLAB Online – לחצו פה.
  13. יכולות ויזואליזציה חדשות – ליכולות הויזואליזציה העשירות של סביבת MATLB בתחום הלמידה העמוקה (מפורטות בחלק השני של פוסט זה) נוספה בגרסה החדשה פונקציית gradCAM שמאפשרת לקבל הסברים לגבי חיזויים של רשת באמצעות טכניקת Gradient-Weighted Class Activation Mapping. כך ניתן לגלות בקלות אילו איזורים בתמונה 2D/3D השפיעו יותר מאחרים על התוצאה הסופית של בעיית סיווג, רגרסיה וסגמנטציה סמנטית (לדוגמה לשימוש בפקודה עבור בעיית סיווג – לחצו פה; ועבור בעיית סגמנטציה סמנטית – לחצו פה). פרט לכך, טכניקת LIME שנוספה בגרסה הקודמת מאפשרת כעת שימוש במפות סגמנטציה מותאמות אישית (שימושי במשימות בהן מעורבות תמונות לא טבעיות, כמו ספקטרוגרמות או תוכניות אדריכליות). לדוגמה – לחצו פה.

    שימוש בטכניקת Grad-CAM כדי למצוא את מידת ההשפעה של החלקים השונים בתמונה על סיווג התמונה לקלאס "גולדן רטריבר" על ידי googlenet

  14. תמיכה מלאה של כלי עיבוד האות (Signal Processing Toolbox ,Audio Toolbox ,Wavelet Toolbox) בכל תהליך הפיתוח של אלגוריתמי בינה מלאכותית בגרסה החדשה הושלם השיפור של תהליך העבודה מתיוג אותות אל אימון, בדגש על ניהול קל של ה-Data:
    * פונקצית folders2Labels אשר מייצרת רשימת Label-ים מתאימה עבור קבצי מידע, לפי שמות התיקיות שבהן הקבצים נמצאים,
    * פיצול וספירה של Label-ים עם הפונקציות splitlabels ו-countlabels,
    * מתודת createDatastores באוביקטי labeledSignalSet ליצירת signalDatastore ו-labelDatastore הניתנים לשילוב ושאפשר להפעיל עליהם טרנספורמציות,
    * פקודת writeall לכתיבה מהירה של מידע מ-signalDatastores לקבצים.
    הנ"ל מתווסף למפורט למעלה בנוגע ליכולות חדשות בהקשר של תיוג ולמפורט למטה בנוגע להפעלה של מודלים ויצירת קוד.
  15. Differentiable Signal Processing – כל יישום בתחום עיבוד האות שמשתמש בבינה מלאכותית מכיל שלב של עיבוד מקדים של המידע ו/או חילוץ פיצ'רים, לפני הגשה של המידע לרשת. השלב הזה מכיל מגוון פרמטרים והגדרות שיש לבחור להם ערכים שיאפשרו ביצוע של הדברים הרצויים, על מנת שהרשת תתפקד היטב. כדי להימנע מטעויות בעת השיתוף של המודלים, מומלץ להעביר את השלב הזה לתוך הרשת, וכך לקבל מודל עצמאי שמכיל את כל הדרוש. בגרסה החדשה נוספה פונקציה ראשונה שתומכת בגישה הזו, dlstft, אשר מבצעת Differentiable Short-Time Fourier Transform. לדוגמה העושה שימוש בפונקציה זו – לחצו פה.
  16. מודלי בינה מלאכותית נוספים לניתוח אותות אודיו, דיבור ואותות אקוסטיים אחרים  ניתן להפעיל בקלות (פקודה אחת) עוד מודלים של למידת מכונה ורשתות עמוקות מאומנות עבור אותות אלה. מדובר ברשתות CREPE ו-OpenL3 שהתווספו בגרסה החדשה אל VGGish ו-YAMNet שהתווספו בגרסה הקודמת. לרשימת הפקודות לפי הרשתות השונות – לחצו פה (ניתן לראות בה שגם עבור שתי הרשתות האחרונות נוספו פקודות חדשות לעיבוד מקדים של אות האודיו, לפני הכנסתו לרשת. עבור שתי הרשתות הראשונות נוספו מגוון פונקציות, למשל אחת שמאפשרת הערכה של התדר היסודי באות אודיו (גובה, Pitch) באמצעות CREPE ואחת שמאפשרת חילוץ Embeddings של אותות אודיו באמצעות OpenL3). אפשר להשתמש ברשתות גם לצורך ביצוע Transfer Learning.
  17. יכולות למידה עמוקה חדשות בתחום ה-LiDAR – רשת PointPillars תומכת כעת בגילוי אובייקטים מסוגים שונים במידע Lidar ממגוון חיישנים (Ouster ,Velodyne ,Pandar). לדוגמה – לחצו פה. הרשת גם ניתנת כעת להמרה אוטומטית לקוד CUDA (לחצו לדוגמה). לסרטון קצר (5 דקות) על שימוש ברשת – לחצו פה.
    גם לרשת הסגמנטציה הסמנטית SqueezeSegV2 נוספה תמיכה בריבוי קלאסים (לחצו לדוגמה).
    ניתן גם לבצע כעת סגמנטציה סמנטית של ענני נקודות LiDAR בזמן אמת בעזרת SalsaNext (הדור הבא של SalsaNet) והמרה אוטומטית לקוד CUDA (לחצו למידע נוסף).

    בנוסף, יש כעת דוגמה לשימוש ברשת ++PointNet עבור סגמנטציה סגמנטית למידע LiDAR שנרכש מהאוויר (Aerial LIDAR), אשר לצורך עבור מיפוי מבנים וערים, מיפוי טופוגרפי אחר, ניהול אסונות וכו'…הרשת מחלקת את ענן הנקודות לאיזורים מקומיים חופפים ואז מפעילה את PointNet על כל אחד מהם. לדוגמה – לחצו פה.

    סגמנטציה סמנטית בעזרת ++PointNet למידע LiDAR שנרכש מהאוויר

  18. יכולות חדשות בתחום ה-Reinforcement Learning – ל-Toolbox הייעודי לתכנון ואימון Policies בעזרת אלגוריתמי למידת חיזוק (למידה באמצעות חיזוקים) עבור בקרים ומערכות קבלת-החלטה אוטונומיות נוסף ה-Reinforcement Learning Designer App – ממשק שמאפשר להגדיר ולפתור בעיות RL בצורה ויזואלית ואינטראקטיבית, מבלי לכתוב קוד. הממשק מאפשר לייבא סביבה שקיימת ב-Workspace או לייצר סביבה מוגדרת מראש, לייבא או לייצר בצורה אוטומטית סוכן (DQN ,DDPG ,PPO ,TD3), לאמן ולסמלץ את הסוכן מול הסביבה, לנתח את תוצאות הסימולציה ולתקן את פרמטרי הסוכן, ולייצא את הסוכן הסופי להמשך שימוש ולהטמעה. לסרטון הדגמה (6 דקות) – לחצו פה. לדוגמה כתובה – לחצו פה.
    בנוסף, יש כעת תמיכה בשימוש ב-RNNs לצורך הגדרת Policies ופונקציות ערך גם עבור סוכנים מסוג PG ,DDPG ,AC ,SAC ו-TD3 (בנוסף לתמיכה בכך שכבר היתה קיימת עבור סוכני PPO ו-DQN). הנ"ל שימושי במיוחד במקרים בהם לסביבה יש מצבים שאינם נכללים בוקטור התצפיות.
    למעוניינים/ות ללמוד על תחום ה-RL, וכיצד להשתמש בסביבת MATLAB עבורו – מומלץ הקורס המזורז והחינמי ששוחרר לפני כשלושה חודשים. ניתן למצוא עליו מידע נוסף בפוסט הזה.

    ה-Reinforcement Learning Designer App – ממשק שמאפשר להגדיר ולפתור בעיות RL בצורה ויזואלית ואינטראקטיבית, מבלי לכתוב קוד (ניתן ללחוץ על התמונה להגדלה)

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

לסיכום, היכולות החדשות בתחום ה-Deep Learning בסביבת MATLAB יחד עם היכולות שהיו קיימות בכלי בעבר ושקיימות בכלים משלימים, הופכות את MATLAB לפלטפורמה מובילה בתחומי ה-Data Science and Machine Learning, כפי שגם קבעה בחודש שעבר, שנה שנייה ברציפות, חברת המחקר והייעוץ בטכנולוגיית המידע Gartner, אשר מייעצת באופן אובייקטיבי ליותר מ-15,000 חברות ברחבי העולם (לחצו לקריאת הניתוח של Gartner).

בין היתרונות של MATLAB בעולם ה-Deep Learning:

  • Labeling מהיר ונוח, באמצעות מגוון Apps. מאפשר לסמן bounding boxes בתמונות/וידאו או לבצע תיוג ברמת הפיקסל לצורך סגמנטציה סמנטית ואף לבצע אוטומציה לתהליך ולהשתמש באלגוריתמים מותאמים אישית וכן לתייג ענני נקודות מ-Lidar, קטעי אודיו ואותות אחרים.
  • ממשקי משתמש אינטראקטיביים החוסכים את הצורך בכתיבת קוד (עבור בניה נוחה של רשת חדשה או עריכה קלה של רשת מוכנה, ביצוע של אוגמנטציות, הרצת אימון, ניהול ניסויים, קוונטיזציה, תכנון ואימון של סוכני Reinforcement Learning).
  • מהירות אימון (ניתן להאיץ את התהליך עוד יותר באמצעות שימוש פשוט ונוח בחומרות נוספות כמו מספר GPUs, חוות מחשבים וענן) ומהירות Inference.
  • אפשרות להמיר בצורה אוטומטית את קוד ה-MATLAB ומודלי ה-Simulink לקוד CUDA מהיר וחסכוני בזיכרון לצורך מימוש על מערכות Embedded או לקוד ++C עבור מעבדים של אינטל ופלטפורמות ARM או לקוד HDL עבור FPGAs ו-SoCs (כדי לטרגט כאלה רכיבים דלי הספק וזיכרון, אפשר להיעזר בממשק הקוונטיזציה Deep Network Quantizer המוזכר לעיל והמודגם פה, שעוזר לוודא שלא חורגים מדרישות הדיוק הרצויות). ניתן גם לשלוח את האלגוריתם השלם לרוץ על PC אחר, מערכת אנטרפרייז, Edge Device או ענן.
  • אפשרות לייבא לתוך MATLAB מודלים שפותחו ואומנו בסביבות Deep Learning אחרות ולייצא מודלים מ-MATLAB אליהן (באמצעות פורמט ONNX או דרך Importer-ים ישירים, למשל ל-TensorFlow).
  • נוחות עבודה – הודות לשימוש בסביבת פיתוח עשירה המיועדת למהנדסים ומדענים.
  • כל תהליך הפיתוח בתחום הלמידה העמוקה יכול להתבצע בסביבה משולבת אחת (משלב היצירה/ההכנה של ה-Data, דרך אימון הרשת ועד להורדתה אל חומרה), אשר גם כוללת כלים מתחומים נוספים, ובכך מאפשרת לפתח מוצר שלם (כלומר – לא לבצע רק Deep Learning, אלא הרבה מעבר לכך, ולבצע deployment ליישום כולו).
  • אפשרות לביצוע סימולציה ובדיקות ברמת המערכת המלאה בעזרת סביבת Simulink, אשר יכולה לסייע גם ביצירה/סימולציה של ה-Data הדרוש (קישור למידע נוסף).
  • תוכנה בעלת שלבי פיתוח "מסודרים" וצוותי הנדסת איכות מקצועיים (בקשות ליכולות חדשות נבחנות, ככל שמתגלים באגים הם מטופלים, וכל הכלים מהתחומים הנוספים שהוזכרו לעיל עובדים יחד זה עם זה).
  • ממשק יציב, תאימות לאחור ותמיכה מלאה במערכת ההפעלה Windows בנוסף לתמיכה במערכות הפעלה אחרות.
  • יכולות ויזואליזציה ודיבאגינג – צפיה ב-Activations, הצגת Deep Dream Images, צפיה במשקולות, בחינה של התקדמות האימון בכיוון הנכון, תצוגה גרפית של הרשת וניתוח שלה לצורך איתור בעיות אפשריות לפני ביצוע האימון, הצגת Class Activation Mapping ושימוש בטכניקת Grad-CAM, ניתוחי Occlusion Sensitivity, שימוש בטכניקת LIME, יצירת Confusion Matrices מתקדמות וכו'…
  • תיעוד מקיף וברור ומאות דוגמאות מוכנות לשימוש במגוון תחומי יישום, כמיטב המסורת של סביבת  MATLAB. לעמוד הבית של תחומי היישום השונים, ממנו ניתן להגיע לפקודות חשובות, Apps רלוונטים ודוגמאות שימושיות עבור תחום היישום שלכם – לחצו פה. ול-Repositories שלנו לתחום הלמידה העמוקה ב-GitHub – לחצו פה.
  • תמיכה טכנית מקצועית בטלפון 03-7660111 או באתר, לבעלי רישיון תחת חוזה שירות, ושירותי ייעוץ לפרויקטים מורכבים.

מה הלאה?

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

להרצאה בעברית בנושא "למידה עמוקה עם קוד פתוח או עם MATLAB? או גם וגם?", הכוללת גם סיפור משתמש בנושא "Style Transfer לקבצי וידאו", בו מודגמת הכנסה של רשת אל MATLAB מסביבת למידה עמוקה אחרת והתאמה שלה, לרבות המרה אוטומטית שלה לקוד CUDA, מתוך כנס AI שנערך בתאריך 28/6/21 – לחצו כאן.
להרצאה בעברית (24 דקות) הסוקרת את החידושים בתחום הבינה המלאכותית בסביבת MATLAB, ששודרה בתאריך 17/3/21 – לחצו כאן.
לצפיה בסמינר מקוון בעברית בנושא "Deep Learning בסביבת MATLAB עבור יישומי ראיה ממוחשבת", שהתקיים ב-23/4/20 – לחצו כאן.
לוובינר בעברית בנושא "אימון רשתות למידה עמוקה באמצעות MATLAB עבור יישומי ראיה ממוחשבת", ששודר ב-5/5/20 – לחצו פה.
לוובינר בעברית בנושא "גילוי אובייקטים באמצעות למידה עמוקה בסביבת MATLAB", ששודר בתאריך 14/5/20 – לחצו פה.
לוובינר בעברית בנושא "ביצוע רגרסיה באמצעות למידה עמוקה בסביבת MATLAB", ששודר בתאריך 21/5/20 – לחצו כאן.
לוובינר בעברית בנושא "סגמנטציה סמנטית", ששודר בתאריך 21/4/21 – לחצו כאן.

לוובינר בנושא "לימוד מכונה ולמידה עמוקה לישומי עיבוד תמונות רפואיות", שהוקלט בתאריך 20/5/20 – לחצו כאן.
לצפיה בוובינר בעברית בנושא "Deep Learning של אותות מכ"מ לצורך סיווג מטרות באמצעות MATLAB ", שהוקלט ב-7/4/20 – לחצו כאן.
לוובינר בנושא סיווג של אותות בעזרת Wavelet Scattering ,CNN ו-LSTM והמרה אוטומטית של קוד MATLAB לקוד CUDA, שהוקלט ב-13/5/20 – לחצו פה.
לוובינר בעברית בנושא "המרת רשתות למידה עמוקה לקוד CUDA/C++/C  והפעלתו על מערכות Embedded", ששודר בתאריך 19/8/20 – לחצו כאן.
לוובינר בעברית בנושא "Style Transfer בעזרת למידה עמוקה בסביבת MATLAB", ששודר בתאריך 8/9/20 – לחצו פה.
לוובינר בעברית בנושא "סיווג של מודלים תלת מימדיים בעזרת למידה עמוקה בסביבת MATLAB", ששודר בתאריך 27/12/20 – לחצו פה.
לוובינר בעברית בנושא "גילוי אובייקטים במידע Lidar באמצעות למידה עמוקה", ששודר בתאריך 26/7/21 – לחצו פה.
להרצאת אורח בנושא "Image Processing Workflows for AI" ששודרה בתאריך 25/8/20 – 
לחצו פה.
אתם גם מוזמנים להצטרף לשאר האירועים הציבוריים החינמיים שעורכת חברת סיסטמטיקס – לחצו לרשימת האירועים המקצועיים הקרובים.

לפוסטים נוספים בנושא Deep Learning בבלוג זה – לחצו כאן.

רוצים לעבור קורס מזורז בעבודה על Deep Learning  בסביבת MATLAB  ללא התחייבות, בזמנכם החופשי, ומבלי להתקין שום דבר על המחשב? אתם מוזמנים לנסות את ה-Hands On Tutorial החינמי באתר MathWorks . לא צריך רישיון ל-MATLAB  בשביל לעבוד איתו, הכל מבוצע דרך הדפדפן. ה-Hands On אמור לקחת לכם כשעתיים, וניתן לעצור אותו בכל שלב ולהמשיך כאשר אתם רוצים. לכניסה – לחצו פה.
רוצים לעבור קורס מזורז שיאפשר לכם להיכנס לעולם ה-Reinforcement Learning? אתם מוזמנים לנסות את ה-Hands On Tutorial החינמי המקביל, הממוקד לתחום זה. לכניסה – לחצו פה.

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

לצפיה בסיפורי משתמשים ישראלים – לחצו פה או פה או פה.

לשיחה עם מהנדס מכירות לצורך קבלת מידע נוסף ו/או תיאום פגישת הדגמה ללא התחייבות – התקשרו לטלפון
03-7660111 או מלאו את הטופס כאן או שלחו מייל אליי ל- royf@systematics.co.il.

הפכו את התמונות שלכם לריאליסטיות יותר באמצעות חומרי PBR

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

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

PBR (Physically Based Rendering) Materials

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

בואו נראה דוגמה ביחד:

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

 

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

בשלב הבא ניגש אל תוכנת ה Visualize, נעבור ללשונית Appearance ונלחץ על ה + ע"מ להוסיף את החומר החדש.

בחלון הגדרות החומר בלשונית GENERAL ניתן לחומר שם, "Gold", ונבחר תחת Appearance Type את PBR Material.

בהגדרת ה Workflow ישנן 2 אופציות:

  • Metallic / Roughness– הגדרה המיועדת לחומרים מתכתיים.
  • Specular / Glossiness– הגדרה המיועדת לכל שאר החומרים (לא מתכתיים).

במקרה שלנו מדובר על מתכת (זהב) ולכן נבחר ב Metallic / Roughness.
את שאר ההגדרות נשאיר לאחר כך.

נעבור ללשונית Texture ונלחץ על ה + עבור טקסטורת ה COLOR. ניגש אל תיקיית החומר שהורדנו ושם נבחר בתמונת הטקסטורה המתאימה ל COLOR.

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

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

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

  • Metallic: הגדרה זו קובעת למעשה כמה מתכתי ייראה החומר, אותו הברק שחסר לזהב שלנו. לחומרים מתכתיים נבחר בערך 1 ולחומרים לא מתכתיים נבחר 0.

  • Roughness: הגדרה הקובעת כמה מחוספס יהיה המשטח. משטחים מחוספסים מפזרים את האור המוחזר ליותר כיוונים מאשר משטחים חלקים. עבור משטחים מחוספסים נבחר בערך של 1 ובעבור משטחים חלקים נבחר בערך של 0.
  • Clearcoat – מעניק ברק לצבע, בדומה ל"פוליש" בצבע מתכתי.
  • Clearcoat Roughness – כמה חלק או מחוספס יהיה החומר אחרי ה"פוליש", ערך של 0 יגדיר חלקות וברק חזק יותר.
  • Solid – מגדיר האם החומר מתייחס רק למשטח אותו בחרנו או לכל הגוף (חד צדדי אל מול דו צדדי). אם נגדיר אותו SOLID נוכל לקבוע גם שקיפות של החומר.
    • Transparency – מכיוון והגדרנו שהחומר הוא על כל הגוף נוכל לקבוע את רמת השקיפות של החומר.
    • IOR – מקדם השבירה של האור בתוך החומר.
    • Transparency Color – הגוון שמקבל האור שעובר דרך החומר.
    • Color Density – קובע את צפיפות החומר, ככל החומר צפוף יותר כך הצבע עמוק יותר.
  • Emission – מגדיר לחומר "פליטת אור", מיועד לחומרים זוהרים.
  • Brightness – בהירות הצבע.

טיפ: לאחר כל העבודה הקשה שעשינו נוכל לשמור את החומר (Appearance) שיצרנו אל ספריית התוכנה שלנו ולשימוש חוזר בעתיד. לצורך כך נסמן את החומר בלשונית ה Appearances ובתפריט למעלה נלחץ Export, ונשמור אותו בתוך תיקיית ה PBR Materials.

ספריות חומרי PBR מומלצות:

וורדפרס ‹שגיאה

באתר זה אירעה שגיאה קריטית.

מידע נוסף על ניפוי תקלות בוורדפרס.