v4.5.6

v4.5.6 คือรุ่นสำหรับ machine learning ครั้งใหญ่ โมดูล C tf ของ TensorFlow ถูกแทนที่ด้วยแพ็กเกจ ml แบบ engine-agnostic ใหม่ที่รองรับ TensorFlow Lite Micro (TFLM) การแปลงภาพเป็น tensor ย้ายไปที่ image.to_ndarray() และบอร์ดแบบ dual-core ย้ายไปใช้ Open-AMP มีการเปลี่ยนแปลงที่ไม่เข้ากันย้อนหลังหลายรายการ — โปรดอ่านด้านล่างก่อนอัปเกรดสคริปต์ ML

ไฮไลต์

  • ใหม่ ml แพ็กเกจ — โมดูล tf เดิมถูกเขียนใหม่เป็นแพ็กเกจ ml แบบ engine-agnostic (ml.Model, ml.preprocessing, ml.utils, ml.apps); tf ยังคงใช้งานได้เป็น alias

  • TFLM backendlibtf ที่ล้าสมัยถูกแทนที่ด้วย TensorFlow Lite Micro จาก upstream: การอนุมานเร็วขึ้น ~20% และไลบรารีขนาดเล็กลง

  • Open-AMP dual-core — GIGA และ Portenta H7 ใช้ Open-AMP/RPMsg สำหรับการสื่อสารระหว่างคอร์ M7/M4 แล้ว (กลไก CM4 เดิมถูกลบออก)

  • Bluetooth บนบอร์ด — เปิดใช้งาน CYW43 Bluetooth เฟิร์มแวร์บน Nicla Vision, Portenta H7 และ GIGA

  • MicroPython 1.23.0, ulab 6.5.2 (รองรับ ndarray แบบ 4 มิติ)

  • Breaking: ML API เปลี่ยนแปลงไปอย่างมากและ Haar cascades ถูกปิดใช้งานโดยค่าเริ่มต้นบนบอร์ดส่วนใหญ่ — ดูการเปลี่ยนแปลงที่ไม่เข้ากันย้อนหลัง

คุณสมบัติใหม่

  • ml แพ็กเกจml.Model พร้อม predict() (roi, callback, รายการ multi-input), แอตทริบิวต์ shape/dtype/scale/zero-point ต่อ tensor, ml.preprocessing.Normalization, ml.utils (NMS) และ ml.apps (MicroSpeech แบบ Python ล้วนสำหรับการจับคำสำคัญ พร้อม listen() และ streaming แบบ non-blocking timeout=-1 รวมถึง draw_predictions())

  • ระบบโมเดลในตัว — โมเดลที่ระบุใน models/index.txt จะถูกฝังตามเงื่อนไขต่อบอร์ด (FOMO บนบอร์ด ML ทั้งหมด, โมเดลเสียงบนบอร์ดที่มีไมโครโฟน)

  • image.to_ndarray(dtype, buffer=...) — แปลงภาพเป็น ulab ndarray (รองรับการแปลงในตำแหน่งเดิม)

  • Image() จากอาร์เรย์ดิบ — อาร์กิวเมนต์คีย์เวิร์ดใหม่ shape=, strides=, scale= สร้างภาพ grayscale/RGB565 จากรายการพิกเซลดิบ

  • draw_circle() แบบ anti-aliased

  • โมดูล ssl ถูก frozen ลงในเฟิร์มแวร์บน GIGA, Nicla Vision, Portenta H7, Nano RP2040 Connect, OpenMV 4/4P/PRO/PT, RT1060 และ Pico

  • Audioaudio.init() รองรับคีย์เวิร์ด samples= (ตัวอย่าง PDM ต่อช่อง); gain_db ใช้งานได้บนไมโครโฟน DFSDM แล้ว (เช่น Nicla Vision)

  • โปรโตคอล Debug — คำสั่ง GET_STATE ใหม่ส่งคืนแฟล็ก run/text/JPEG, geometry ของเฟรม และข้อความในแพ็กเก็ตเดียว ลดการรับ-ส่งข้อมูลซ้ำจากฝั่ง host

  • ตัวอย่าง Open-AMP vuart สำหรับการสื่อสารระหว่างคอร์

การเปลี่ยนแปลงและปรับปรุงอื่น ๆ

  • MicroPython อัปเดตเป็น 1.23.0; ulab เป็น 6.5.2 พร้อมรองรับ ndarray แบบ 4 มิติ

  • การอนุมานเร็วขึ้น — ML backend เก็บ state/memory ถาวรระหว่างการเรียกใช้งาน (~20% เร็วขึ้น รองรับโมเดลแบบ LSTM)

  • get_similarity() ถูกนำมาใช้ใหม่บน backend draw_image (รองรับรูปแบบ/การดำเนินการที่หลากหลายขึ้น)

  • morph() และตระกูลฟิลเตอร์ mean() ย้ายไปใช้การแยกวิเคราะห์อาร์กิวเมนต์แบบคีย์เวิร์ด; mask= รับภาพที่แก้ไขได้แล้ว

  • รูปแบบ memory layout ถูกปรับใหม่ — บริเวณ DMA จัดเรียงแบบ power-of-2, บล็อก GC ที่จัดลำดับใหม่ได้, heap หลายชุด; ลดการกระจัดกระจายของ heap ในช่วงต้นบนบอร์ด RAM น้อย; RT1060 ได้รับ GC heap เพิ่ม

  • WiFi (CYW43) ถูก deinitialize เมื่อ soft-reset; SPI-TV display flush เฉพาะบริเวณ framebuffer จาก cache เพื่ออัปเดตที่ราบรื่นขึ้น

การแก้ไขบัก

กล้องและ sensor:

  • แก้ไขการ invalidation แคช CPU โดยไม่ตั้งใจใน framebuffer/sensor path บน STM32 และ i.MX RT ซึ่งอาจทำให้ข้อมูลภาพเสียหาย

  • แก้ไขการอ่าน thermal I2C ของ MLX90640/MLX90641 บนบอร์ด i.MX RT (การถ่ายโอนขนาดใหญ่ถูกแบ่งเป็นส่วนย่อยแล้ว)

Machine learning:

  • แก้ไขการจัดการ load_to_fb ของ ml.Model, การกำหนดขนาด bytearray สำหรับ input, การตรวจสอบ ndim ของ ndarray และการตรวจสอบ image-format/shape ของ Normalization

ภาพ / ระบบ:

  • เพิ่มค่าคงที่ image.BLACK_BACKGROUND draw-hint ที่หายไป และการตรวจสอบความถูกต้องของความยาวบัฟเฟอร์ image/tensor

  • แก้ไข FIR และ GC root pointer ของ audio ที่อาจทำให้ตัวเก็บข้อมูลปลดปล่อยบัฟเฟอร์ที่กำลังใช้งาน

  • ตัวอย่าง Servo Shield ใช้ SoftI2C แล้วเพื่อให้ทำงานได้บน OpenMV RT boards

ฮาร์ดแวร์และการรองรับบอร์ด

  • Arduino GIGA — รองรับ sensor HM01B0 / HM0360; Open-AMP dual-core

  • Bluetooth — CYW43 BT เฟิร์มแวร์บน Nicla Vision, Portenta H7 และ GIGA

  • Portenta H7 — Open-AMP M7/M4 RPMsg

  • OpenMV RT1060 — บล็อก GC heap เพิ่มเติม (หน่วยความจำ Python มากขึ้น)

การเปลี่ยนแปลง API ที่ไม่เข้ากันย้อนหลัง

การเปลี่ยนแปลง API ที่ผู้ใช้มองเห็นได้ระหว่าง v4.5.5 และ v4.5.6 ขอบเขต: Python C-module ใน modules/ และไลบรารี Python ใน scripts/libraries/

การเปลี่ยนแปลงแต่ละรายการถูกกำกับด้วยผลกระทบ:

  • major — สคริปต์ส่วนใหญ่ที่ใช้งานต้องแก้ไข

  • minor — API แคบ; ส่งผลเฉพาะสคริปต์ที่ใช้งานเท่านั้น

  • behavior — API เหมือนเดิม แต่ผลลัพธ์ต่างออกไป; ตรวจสอบสคริปต์ที่ปรับแต่งไว้ซ้ำ

  • tooling — ส่งผลต่อกลไก dual-core/board ไม่ใช่ Python API

การเปลี่ยนแปลงถูกจัดกลุ่มตามผลกระทบตามลำดับนั้น หากต้องการ port โค้ดของคุณ ข้ามไปที่ migration checklist ที่ท้ายรายการ แต่ละ commit hash เชื่อมโยงไปยัง diff บน GitHub

tf module ถูกแทนที่ด้วยแพ็กเกจ ml (major)

โมดูล C tf ของ TensorFlow ถูกเขียนใหม่เป็นแพ็กเกจ ml แบบ engine-agnostic (tf ยังคงใช้งานได้เป็น alias ที่ compatible ย้อนหลัง แต่โค้ดใหม่ควรใช้ ml) ฟังก์ชันระดับโมดูล tf.load, tf.load_builtin_model และเมธอด detect()/segment()/classification ถูกลบออก — สร้าง ml.Model และเรียก predict() แทน ml.Model(path) ตอนนี้คืนเฉพาะโมเดล (ไม่ใช่ tuple (labels, model)); labels เป็นแอตทริบิวต์ model.labels predict() ตอนนี้คืน ulab ndarrays (ไม่ใช่ float tuple) รองรับโมเดล multi-input (ส่ง list) และ NMS ย้ายไปที่ ml.utils; normalization ของ input ย้ายไปที่ 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=...) แทน และใช้ ml.preprocessing.Normalization สำหรับ normalization ของ scale/mean/stdev แทน image-scaling path แบบเดิมในตัว

Commits: 9848eed12, de0d46fa6

อาร์กิวเมนต์ scale สำหรับ Image() จากอาร์เรย์ดิบ (minor)

เมื่อสร้าง Image จากอาร์เรย์พิกเซลดิบ อาร์กิวเมนต์ scale ตอนนี้รับช่วง (min, max) แทน (scale, add)

Commit: 7b79fb4c7

Haar cascades ถูกปิดใช้งานโดยค่าเริ่มต้นบนบอร์ดส่วนใหญ่ (behavior)

เพื่อเพิ่มพื้นที่ flash, การตรวจจับใบหน้าด้วย Haar cascade (find_features() / image.HaarCascade()) ถูกปิดใช้งานโดยค่าเริ่มต้นบน Arduino GIGA, Nicla Vision, Portenta H7, OpenMV 3, OpenMV 4 / 4 Plus / PRO และ OpenMV Pure Thermal สคริปต์ที่ใช้ Haar cascades บนบอร์ดเหล่านี้ต้องสร้างเฟิร์มแวร์ใหม่พร้อมเปิดใช้งานคุณสมบัตินี้

Commit: 6ce27c910

การหยุดสคริปต์และการ scaling tensor (behavior)

ตอนนี้ USB debugger หยุดสคริปต์ที่กำลังทำงานผ่านฟีเจอร์ VM-abort ของ MicroPython แทนการ jump แบบบังคับด้วย PendSV (สะอาดขึ้น แต่จุดหยุดต่างออกไป) การ scaling SCALE_S128_127 ถูกแก้ไขให้แมป 0–255 เป็น −128–127 โดยไม่มีค่าเกนที่ผิดพลาด — โมเดลที่พึ่งพาการ scaling เดิม (ที่ผิดพลาด) จะให้ผลลัพธ์ที่ต่างออกไป

Commits: e758a0f95, a4d97c572

CM4 coprocessor ถูกแทนที่ด้วย Open-AMP (tooling)

กลไกเฟิร์มแวร์ CM4 coprocessor ที่เลิกใช้แล้วบน GIGA / Nicla Vision / Portenta H7 ถูกลบออกและแทนที่ด้วย Open-AMP/RPMsg โค้ด dual-core ต้องย้ายไปใช้โมเดล Open-AMP (มีตัวอย่าง vuart ให้)

Commits: 3cc57fea4, 93f2d4c41

Migration checklist

สำหรับการ port ที่สะอาดไปยัง v4.5.6 งานทั่วไปคือ:

  1. Port โค้ด ML ไปที่ ml: สร้าง ml.Model(path), เรียก predict(), อ่าน model.labels, คาดหวัง output แบบ ndarray และย้าย normalization ไปที่ ml.preprocessing.Normalization และ NMS ไปที่ ml.utils (การเปลี่ยนแปลงแพ็กเกจ ml)

  2. แทนที่ image.unpack() ด้วย image.to_ndarray() (การลบ unpack)

  3. อัปเดตอาร์กิวเมนต์ scale ของ Image() จากอาร์เรย์ดิบเป็นช่วง (min, max) (การเปลี่ยนแปลง Image scale)

  4. หากใช้ Haar cascades บนบอร์ดที่ได้รับผลกระทบ ให้สร้างใหม่พร้อมเปิดใช้งานคุณสมบัตินี้ (การเปลี่ยนแปลง Haar cascade)

  5. ตรวจสอบโมเดลที่พึ่งพา SCALE_S128_127 ซ้ำ (การเปลี่ยนแปลง scaling)

  6. ย้ายโค้ด dual-core ไปที่ Open-AMP (การเปลี่ยนแปลง CM4)