דואגים שתמיד תישארו מעודכנים: מה חדש ב-AI עם MATLAB?

כמה מתסכל זה יכול להיות שאנחנו נכנסים לדוקומנטציה של MATLAB כי אנחנו לא זוכרים איך קוראים לפונקציה מסוימת, ובסוף במקום להשתמש בה בקלות אנחנו רואים הודעה אזהרה אדומה שהפונקציה הזו היא – not recommended – ובמקומה מוצע עבורנו פתרון חדש שבכלל איננו מכירים או יודעים איך להשתמש בו:

היום אנחנו כאן כדי להסביר על קצה המזלג על השינויים והחידושים שהתרחשו בגרסה האחרונה – 2024a עם כלי ה-Deep Learning של MATLAB.

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

dlnetwork object:

מדובר באובייקט של MATLAB מגרסת 2019b שעבר כמה שדרוגים משמעותיים כך שיהיה שימושי עבורנו כאובייקט שמחזיק בתוכו את הרשת שבנינו.

עד היום התעסקנו בשני סוגי רשתות בסיסיות ומוכרות במטלב:

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

תמונה 1. דוגמה ל- Seriesnetwork

  • DAGnetwork object – רשת עם ארכיטקטורת שכבות מורכבת יותר מאשר ה- seriesnetwork שבה לשכבות יש כניסות משכבות מרובות ופלטים למספר שכבות. דוגמה לרשת מסוג זה ניתן לראות בתמונה מספר 2.

תמונה 2. דוגמה ל- DAGnetwork

מגרסת 2024a ההמלצה של MathWorks היא להשתמש רק באובייקט dlnetwork שמכיל בתוכו גם את ה- seriesnetwork וגם את ה- DAGnetwork. נשים לב כי אם יש לנו כבר רשת מסוג DAG או series אנחנו יכולים בקלות להמיר אותה ל- dlnetwork באמצעות הפונקציה: dag2dlnetwork.

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

תמונה 3. כיצד ניתן לבצע שינויים ברשת או להמיר אותה מבלי להשתמש ב-  layergraph

למידע נוסף בנוגע לאובייקט dlnetwork ניתן לקרוא עוד בדוקומנטציה.

פונקציית trainnet:

אם האובייקט ששומר בתוכו את הרשת השתנה מן הראוי שגם פונקציית האימון תשתנה בהתאם לכך שתקבל לתוכה את האובייקט הספציפי הזה. עד היום היינו רגילים להשתמש ב- trainNetwork בצורה כזו שהיינו מכניסים את הדאטא של האימון ואת השכבות של הרשת (בין אם בצורה של layers או בצורה של layerGraph) וכמובן את המאפיינים של האימון. הפונקציה החדשה שמומלץ להשתמש בה הוצגה לראשונה בגרסת 2023b ונקראת trainnet. היא יכולה לקבל dlnetwork או layers (ממש כמו ב- trainNetwork) ואחד היתרונות העיקריים שלה הוא שהיא גם נותנת לנו לבחור את פונקציית ה- loss שלנו. אנחנו יכולים לבחור את אחת מהפונקציות המוכרות ש-MATLAB מציע למשל mse, crossentropy וכו' או לייצר פונקציית loss בעצמנו שמתאימה לצרכים ולדאטא שלנו ולהשתמש בה.

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

  1. הפונקציה trainnet תומכת באובייקטים מסוג dlnetwork והם תומכים במגוון גדול של ארכיטקטורות של רשתות שאפשר לייצר בעצמנו, להשתמש ברשתות קיימות ומוכרות ב-MATLAB או אפילו לייבא מבחוץ (tensorflow, pytorch וכו').
  2. באמצעות פונקציית trainnet אנחנו יכולים לשלוט בחישובי ה- loss מה שעוזר לנו עוד קצת לשלוט בתהליך האימון והלמידה בייחוד כאשר אפשר לייצר פונקציות loss משל עצמנו שמתאימות לדאטא שלנו בלבד.
  3. שימוש ב- trainnet הינו מהיר יותר משימוש ב- trainNetwork.

למידע נוסף בנוגע לפונקציית trainnet ניתן לקרוא עוד בדוקומנטציה.

Transfer learning:

עד היום על מנת לבצע transfer learning היינו משתמשים בשם הרשת שאותה אנחנו רוצים לאמן מחדש למשל:

אך שימוש בצורה כזו יוצר לנו seriesnetwork או DAGnetwork.  לכן, נוצרה פונקציה חדשה שנקראת imagePretrainedNetwork שמכילה בתוכה את כל סוגי הרשתות המוכרות שאנחנו יכולים להשתמש בהם (נשים לב כי כדי להשתמש ברשתות אלו עדיין נצטרך להוריד את ה- support package שלהן) ובאמצעות שימוש בפונקציה זו נקבל רשת שהינה אובייקט מסוג dlnetwork.

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

Predictions:

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

טבלה 1. השוואה בין פונקציית minibatchpredict ל – predict

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

  1. פונקציית predict
  2. פונקציית minibatchpredict

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

לגבי השילוב בין MATLAB ו­-Python

כמו שכבר כולם יודעים השילוב בין MATLAB ו­-Python הולך ומשתפר כל גרסה כך שלאט לאט נהיה יותר קל לעבוד עם שתי התוכנות יחד. כיום ניתן לייבא ולייצא רשתות בצורה קלה מ- Tensorflow ומ – ONNX גם עבור סביבות אחרות. גם מ- Pytorch ניתן לייבא רשתות ישירות לתוך MATLAB ללא בעיה (תמונה 4).

בגרסת 2023b נוצרו שתי פונקציות שעוזרות בייבוא הרשתות לתוך מטלב:

  1. importNetworkFromTensorFlow
  2. importNetworkFromONNX

הפונקציה importNetworkFromPyTorch שמייבאת רשתות מ- pytorch הוצגה מוקדם יותר בגרסת 2022b.

תמונה 4. – ייבוא וייצוא רשתות

אז היום כבר אין תירוצים, מי שמשתמש ברשתות מPython יכול לייבא אותן בקלות לתוך MATLAB ולעבוד עליהן משם.

למידע נוסף בנוגע לשימוש ברשתות מיובאות ב-MATLAB ניתן לקרוא כאן.

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

הזדמנות טובה לשמוע ולהכיר אותנו מקרוב– היא להגיע לכנס שלנו שמתקיים ב 24.9.24 במלון דניאל, שם תוכלו ללמוד ולהתעדכן , ונמשיך להתקדם משם 😊  

 Online Gerber Compare

השוואה בין גרסאות ו/או רוויזיות (מהדורות) מאפשרת לנו לעקוב אחרי כל שינוי ויכולה להקל עלינו ולחסוך זמן רב. מהסיבות הללו Altium מציעה כמה אפשרויות השוואה בין קבצים שונים והיום נציג אחד מהם, הלא הוא ה-Online Gerber Compare.

היות ואנחנו מדברים על – Gerbers Compare נזכיר בקצרה את אחת מהדרכים לבצע השוואת קבצי הייצור ללקוחות שמנהלים בענן את הגירסאות ואת המהדורות שלהם. ניתן לביצוע ע"י כניסה לפלטפורמת הענן Altium 365, בחירה  בפרוייקט כלשהו בעל רוויזיות, ואז נבחר בתפריט ה – Releases.

נבחר באחת מהגרסאות שיצרנו ונלחץ על-3 נקודות לפתיחת תפריט, שם תופיע לנו האפשרות לבצע Compare בין קבצי Gerber של ה-Release השונים.

כעת נחזור לנקודה שלשמה התכנסנו – Online Gerber Compare.

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

למעלה: אתר השוואת קבצי הייצור (קישור בסוף הבלוג)

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

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

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

כאן המקום לציין כי חברת Altium מאפשרת להשתמש בשירות החינמי שלה ואת הקבצים שמועלים אינה שומרת בשרתי החברה – לאחר ההשוואה הקבצים נמחקים מהאתר.

היכנסו לשירות Gerber Compare

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

תודה שקראתם ונתראה בבלוג הבא,

אביעד סרור.

הרובוט התת-מימי מיפן שנבחר לפרויקט השנה בתוכנת SOLIDWORKS

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

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

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

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

מנהל הצוות Haruomi Sakamoto וחברי הצוות הנוספים Megumu Isshiki, Takumi Moriyama, Fuka Masai, Makoto Otsuka מהמוסד האקדמי  Kobe City College of Technology יצרו את הרובוט מתוך מחשבה על ילדים ועל הסביבה.

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

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

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

הבלוג נכתב במקור ע"י מארי פלנשרד ופורסם בתאריך 22 ביולי 2024  בבלוג האקדמיה הרשמי של SOLIDWORKS. מוזמנים לקרוא בלוגים נוספים: https://blogs.solidworks.com/teacher/

גם אתם סטודנטים ותיכננתם פרויקט מקורי ומעניין בתוכנת SOLIDWORKS?

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

סיסטמטיקס מלווה את כל משתמשי פתרונות SOLIDWORKS, גם באקדמיה.

יצירת קוד C בצורה אוטומטית – איך מתחילים?

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

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

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

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

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

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

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

מיני-קורס זה הוא פרקטי, Hands-on, קצר (לוקח כ-שעה) ובו תגלו על תהליך המרת הקוד מ-MATLAB ל-C, ובפרט תלמדו כיצד:

  • להכין קוד MATLAB להמרה לקוד C
  • לייצר קוד C מפונקציות ב-MATLAB
  • לקרוא לקוד C מתוך MATLAB (MEX)
  • לתקן בעיות תאימות נפוצות,
  • ועוד!


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

(כל זה, מבלי לדבר כלל על יצירת קוד אוטומטי לשפות נוספות כמו CUDA,HDL,…)

בסרטון הבא תוכלו לראות את חברת Check Cap משתפת אתנו על המוצר C-Scan, אותו הצליחה להביא לחיים בין היתר באמצעות שימוש בכלי ה-MATLAB Coder:

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

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

למידע נוסף:

  1. MATLAB Coder – Product Page
  2. Get Started with MATLAB Coder – Documentation page

Altium – Max Current and Resistance

כולנו יודעים מה זה NET, כיצד לנתב אותו ועל החשיבות הקריטית שלו כדי לקבוע לנו את איכות האות, ה-NET בעצם קובע איך והאם בכלל המעגל שלנו יעבוד. זאת הסיבה שתוכנת Altium מציעה אפשרויות משחק שונות בכל הקשור ל-NETS (דוגמת קביעת אימפדנס ב-Layer Stack Manager, קביעת חוקים למיניהם ועוד..) ועל ידי כך שליטה טובה ככל האפשר הן ב-NETS והן באיכות האות המתאימה ביותר.

בעדכוני הגרסה האחרונים Altium הוסיפה יכולת חישוב חדשה שעוזרת לנו לשלוט ב-NETS שלנו ברמה גבוהה ולדעת את ה-Max Current וה- Resistance של NET ספציפי! היכולת החדשה עוזרת לנו לא רק לתכנן אלא אפילו לעזור לנו לעשות DEBUG (במידה מסוימת כמובן) ולהעריך הספקים או נפילות מתח על כל NET.

איך היא יודעת?

השאלה המתבקשת כמובן היא – לפי מה התוכנה יודעת לקבוע את המקסימום זרם ואת ההתנגדות של Net מסויים? והתשובה היא, לפי ה- Layer Stack Manager.
Altium יודעת לשאוב את המידע שהמשתמש הכניס בניהול שכבות ולחשב את ההתנגדות והזרם המקסימלי לאותו נט ספציפי.

Altium משתמשת בנוסחאות שנקבעו בתקן IPC-2221A (תקן שקובע את הסטנדרט של ה-PCB) לחישוב הערכים באובייקטים Arc, Track ו- Via ולהלן הנוסחאות:

זרם מקסימלי (Max Current) :
I = k * ΔT0.44 * A0.725

כאשר :

I = זרם [Amps]
A = ששטח חתך (רוחב * עובי המוליך שמוגדר ב-layer stack או Abarrel כמו שמוצג למטה )
ΔT = עליית טמפרטורה מעל טמפ' סביבה
k  = ערך קבוע , לפי:

   k = 0.048 עבור שכבות חיצוניות.
   k = 0.024 עבור שכבות פנימיות.

התנגדות (Resistance):
R = (ρ * L / A

כאשר:

R = התנגדות  [Ω]
ρ = התנגדות סגולית נחושת[Ω*mm2/m]
L = אורך המוליך [m] (או אורך Via )
A = שטח חתך – T * W [mm2] (או Abarrel כמו שמוצג למטה)
T = עובי המוליך[mm]
W = רוחב המוליך [mm]

הנחות כלליות:

  • 22°C = טמפרטורת הסביבה
  • 20°C = עליית טמפרטורה מותרת.
  • copper wall thickness = 0.018mm  (מוצג בתמונה למטה).
  • 0.017Ω*mm2/m = התנגדות סגולית של נחושת.

Abarrel = AViaHoleSize – AFinishedHoleSize

Abarrel = [ π * (ViaHoleSize/2)] – [ π * ((ViaHoleSize – 2 * ViaWallThickness)/2)2 ]

Abarrel = π (ViaHoleSize ViaWallThickness – ViaWallThickness2)

Via Length = המרחק בין אמצע שכבת הכניסה לאמצע שכבת היציאה.

חשוב לשים לב – שאורך ה-Via תלוי ב-net ובשכבות שהוא מתחבר ל-tracks שלהם. אורך של Via מסומנת שלא מתחברת ל-net יוגדר מקצה-השכבה התחלתית לקצה-שכבה סופית(ולא מהאמצע) כמו כן, במידה ו-via תתחבר ל-net מסוים אבל לא ל-tracks, אורך ה-via יוגדר כ-0.

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

תודה שקראתם ונתראה בבלוג הבא,

אביעד סרור.