v4.5.6¶
v4.5.6 היא גרסת הראייה הממוחשבת הגדולה. מודול ה-C של TensorFlow tf הוחלף בחבילת ml חדשה, אגנוסטית למנוע, הנשענת על TensorFlow Lite Micro (TFLM); המרת תמונה→tensor עברה אל image.to_ndarray(), ולוחות דו-ליבתיים עברו אל Open-AMP. ישנם מספר שינויים שוברי-תאימות — קראו אותם להלן לפני שדרוג סקריפטים של ML.
עיקרי הדברים¶
חבילת
mlחדשה — מודול ה-tfהישן נכתב מחדש לחבילתmlאגנוסטית למנוע (ml.Model,ml.preprocessing,ml.utils,ml.apps);tfנשמר כ-alias.מנוע TFLM — ה-
libtfהמיושן הוחלף ב-TensorFlow Lite Micro המבוסס upstream: הסקה מהירה יותר בכ-20% וספריות קטנות יותר.Open-AMP דו-ליבתי — GIGA ו-Portenta H7 משתמשים כעת ב-Open-AMP/RPMsg לתקשורת בין הליבות M7/M4 (מנגנון ה-CM4 הישן הוסר).
Bluetooth מובנה — קושחת Bluetooth של CYW43 הופעלה ב-Nicla Vision, ב-Portenta H7 וב-GIGA.
MicroPython 1.23.0, ulab 6.5.2 (עם תמיכה ב-ndarray ארבע-ממדי).
שובר-תאימות: ה-API של ה-ML השתנה באופן מהותי, ומפלי Haar מושבתים כברירת מחדל ברוב הלוחות — ראו את השינויים שוברי-התאימות.
תכונות חדשות¶
חבילת
ml—ml.Modelעםpredict()(roi,callback, רשימת ריבוי-קלטים), מאפייני shape/dtype/scale/zero-point לכל tensor,ml.preprocessing.Normalization,ml.utils(NMS) ו-ml.apps(מזהה מילות מפתחMicroSpeechבפייתון טהור עםlisten()וזרימה לא-חוסמתtimeout=-1, בנוסף ל-draw_predictions()).מערכת מודלים מובנית — מודלים הרשומים ב-
models/index.txtמוטמעים באופן מותנה לפי הלוח (FOMO בכל לוחות ה-ML, מודלי שמע בלוחות עם מיקרופונים).image.to_ndarray(dtype, buffer=...)— המרת תמונה ל-ndarray של ulab (אופציונלית במקום).Image()ממערכים גולמיים — ארגומנטי המילת-מפתח החדשיםshape=,strides=,scale=בונים תמונות grayscale/RGB565 מרשימות פיקסלים גולמיות.draw_circle()עם החלקת קצוות (anti-aliased).מודול
sslמוקפא לתוך הקושחה ב-GIGA, Nicla Vision, Portenta H7, Nano RP2040 Connect, OpenMV 4/4P/PRO/PT, RT1060 ו-Pico.שמע — ל-
audio.init()נוסף ארגומנט המילת-מפתחsamples=(דגימות PDM לכל ערוץ);gain_dbחל כעת על מיקרופוני DFSDM (לדוגמה Nicla Vision).פרוטוקול ניפוי שגיאות — פקודת
GET_STATEחדשה מחזירה דגלי run/text/JPEG, גאומטריית פריים וטקסט במנה אחת, וכך מצמצמת הלוך-ושוב מול המארח.דוגמת vuart של Open-AMP לתקשורת בין הליבות.
שינויים ושיפורים נוספים¶
MicroPython עודכן ל-1.23.0; ulab ל-6.5.2 עם תמיכה ב-ndarray ארבע-ממדי.
הסקה מהירה יותר — מנוע ה-ML שומר מצב/זיכרון מתמשך בין קריאות (מהיר יותר בכ-20%, תומך במודלים מסוג LSTM).
get_similarity()יושמה מחדש על מנוע ה-draw_image(תמיכה רחבה יותר בפורמטים/פעולות).morph()ומשפחת המסנןmean()עברו לפענוח ארגומנטים מסוג מילת-מפתח;mask=מקבל כעת תמונה ניתנת לשינוי.פריסת הזיכרון עוצבה מחדש — אזורי DMA מיושרים בחזקת-2, בלוקי GC ניתנים לסידור מחדש, ערמות מרובות; פחות פיצול ערמה מוקדם בלוחות עם זיכרון RAM נמוך; RT1060 מקבל ערמת GC נוספת.
WiFi (CYW43) מבוטל כעת באתחול-רך (soft-reset); תצוגת SPI-TV מרוקנת מהמטמון רק את אזור חוצץ הפריימים (frame buffer) לעדכונים חלקים יותר.
תיקוני באגים¶
מצלמה וחיישנים:
תוקן ביטול-מטמון מקרי של ה-CPU בנתיב חוצץ הפריימים/חיישן ב-STM32 וב-i.MX RT, שעלול היה לשבש נתוני תמונה.
תוקנו קריאות I2C תרמיות של MLX90640/MLX90641 בלוחות i.MX RT (העברות גדולות מחולקות כעת למקטעים).
ראייה ממוחשבת (machine learning):
תוקנו ב-
ml.Modelהטיפול ב-load_to_fb, קביעת גודלbytearrayשל הקלט, בדיקותndimשל ndarray ואימות פורמט/צורת התמונה ב-Normalization.
תמונה / מערכת:
נוסף קבוע רמז-הציור החסר
image.BLACK_BACKGROUNDובדיקת שפיות של אורך חוצץ תמונה/tensor.תוקנו מצביעי שורש GC של FIR ושל שמע, שעלולים היו לגרום לאוסף לשחרר חוצצים בשימוש.
דוגמת Servo Shield משתמשת כעת ב-
SoftI2Cכך שהיא עובדת בלוחות OpenMV RT.
תמיכת חומרה ולוחות¶
Arduino GIGA — תמיכת חיישני HM01B0 / HM0360; Open-AMP דו-ליבתי.
Bluetooth — קושחת BT של CYW43 ב-Nicla Vision, ב-Portenta H7 וב-GIGA.
Portenta H7 — Open-AMP M7/M4 RPMsg.
OpenMV RT1060 — בלוקי ערמת GC נוספים (יותר זיכרון פייתון).
שינויי API שוברי-תאימות¶
שבירות API גלויות-למשתמש בין v4.5.5 ל-v4.5.6. היקף: מודולי C של פייתון ב-modules/ וספריות פייתון ב-scripts/libraries/.
כל שינוי מתויג לפי השפעתו:
major — רוב הסקריפטים שהשתמשו בו זקוקים לעריכות.
minor — API צר; משפיע רק על סקריפטים שהשתמשו בו.
behavior — אותו API, תוצאות שונות; בדקו מחדש סקריפטים מכווננים.
tooling — משפיע על מנגנוני דו-ליבה / לוח, לא על ה-API של פייתון.
השינויים מקובצים לפי השפעה בסדר זה. אם אתם רק רוצים להסב את הקוד שלכם, דלגו אל רשימת ההסבה בסוף. כל hash של commit מקשר ל-diff שלו ב-GitHub.
מודול tf הוחלף בחבילת ml (major)¶
מודול ה-C של TensorFlow tf נכתב מחדש לחבילת ml אגנוסטית למנוע (tf נשמר כ-alias תואם-לאחור, אך קוד חדש צריך להשתמש ב-ml). הפונקציות ברמת המודול tf.load, tf.load_builtin_model והמתודות detect()/segment()/הסיווג הוסרו — בנו ml.Model וקראו ל-predict(). ml.Model(path) מחזיר כעת רק את המודל (ללא tuple מסוג (labels, model)); התוויות הן מאפיין model.labels. predict() מחזיר כעת ndarrayים של ulab (לא tuple-ים של מספרים עשרוניים), תומך במודלי ריבוי-קלטים (העבירו רשימה), ו-NMS עבר אל ml.utils; נרמול הקלט עבר אל ml.preprocessing.Normalization. ה-ml.py הישן הוא כעת ml.apps.
Commits: c7228cbb4, 6c212409c, 3e37f46db, 9a186f4e2, 70b89f474, 3f8491cb0, 4506682c2, 8b38f3837
image.unpack() הוסר — השתמשו ב-to_ndarray() (major)¶
ה-image.unpack() קצר-המועד הוסר; במקומו המירו תמונה ל-tensor באמצעות image.to_ndarray(dtype, buffer=...), והחילו נרמול scale/mean/stdev עם ml.preprocessing.Normalization במקום נתיב שינוי-קנה-המידה של התמונה המובנה הישן.
ארגומנט scale של מערך-גולמי ב-Image() (minor)¶
בעת בניית Image ממערך פיקסלים גולמי, ארגומנט ה-scale מקבל כעת טווח (min, max) במקום (scale, add).
Commit: 7b79fb4c7
מפלי Haar מושבתים כברירת מחדל ברוב הלוחות (behavior)¶
כדי לפנות שטח זיכרון פלאש (flash), זיהוי פנים באמצעות מפל Haar (find_features() / image.HaarCascade()) מושבת כעת כברירת מחדל ב-Arduino GIGA, Nicla Vision, Portenta H7, OpenMV 3, OpenMV 4 / 4 Plus / PRO ו-OpenMV Pure Thermal. סקריפטים המשתמשים במפלי Haar בלוחות אלה חייבים לבנות מחדש את הקושחה כשהתכונה מופעלת.
Commit: 6ce27c910
הפסקת סקריפט ושינוי קנה-מידה של tensor (behavior)¶
מנפה ה-USB מפסיק כעת סקריפט פעיל באמצעות תכונת ביטול-ה-VM של MicroPython במקום קפיצת PendSV מאולצת (נקי יותר, אך נקודת ההפסקה שונה). שינוי-קנה-המידה של הקלט SCALE_S128_127 תוקן כך שימפה 0–255 ל-−128–127 ללא הגבר (gain) שגוי — מודלים הנשענים על שינוי-קנה-המידה הישן (השגוי) יפיקו תוצאות שונות.
מעבד-המשנה CM4 הוחלף ב-Open-AMP (tooling)¶
מנגנון קושחת מעבד-המשנה CM4 המיושן ב-GIGA / Nicla Vision / Portenta H7 הוסר והוחלף ב-Open-AMP/RPMsg. קוד דו-ליבתי חייב לעבור למודל Open-AMP (סופקה דוגמת vuart).
רשימת הסבה¶
להסבה נקייה ל-v4.5.6, העבודה הטיפוסית היא:
הסבת קוד ML אל
ml: בנוml.Model(path), קראו ל-predict(), קראו אתmodel.labels, צפו לפלטיndarray, והעבירו את הנרמול אלml.preprocessing.Normalizationואת ה-NMS אלml.utils(שינוי חבילת ה-ml).החליפו את
image.unpack()ב-image.to_ndarray()(הסרת ה-unpack).עדכנו כל ארגומנט
scaleשל מערך-גולמי ב-Image()לטווח(min, max)(שינוי ה-scale של Image).אם אתם משתמשים במפלי Haar בלוח מושפע, בנו מחדש כשהתכונה מופעלת (שינוי מפל ה-Haar).
אמתו מחדש מודלים שהיו תלויים ב-
SCALE_S128_127(שינוי קנה-המידה).העבירו קוד דו-ליבתי אל Open-AMP (שינוי ה-CM4).