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ยังคงใช้งานได้เป็น aliasTFLM backend —
libtfที่ล้าสมัยถูกแทนที่ด้วย 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-blockingtimeout=-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 และ PicoAudio —
audio.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()ถูกนำมาใช้ใหม่บน backenddraw_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_BACKGROUNDdraw-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 แบบเดิมในตัว
อาร์กิวเมนต์ 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 เดิม (ที่ผิดพลาด) จะให้ผลลัพธ์ที่ต่างออกไป
CM4 coprocessor ถูกแทนที่ด้วย Open-AMP (tooling)¶
กลไกเฟิร์มแวร์ CM4 coprocessor ที่เลิกใช้แล้วบน GIGA / Nicla Vision / Portenta H7 ถูกลบออกและแทนที่ด้วย Open-AMP/RPMsg โค้ด dual-core ต้องย้ายไปใช้โมเดล Open-AMP (มีตัวอย่าง vuart ให้)
Migration checklist¶
สำหรับการ port ที่สะอาดไปยัง v4.5.6 งานทั่วไปคือ:
Port โค้ด ML ไปที่
ml: สร้างml.Model(path), เรียกpredict(), อ่านmodel.labels, คาดหวัง output แบบndarrayและย้าย normalization ไปที่ml.preprocessing.Normalizationและ NMS ไปที่ml.utils(การเปลี่ยนแปลงแพ็กเกจ ml)แทนที่
image.unpack()ด้วยimage.to_ndarray()(การลบ unpack)อัปเดตอาร์กิวเมนต์
scaleของImage()จากอาร์เรย์ดิบเป็นช่วง(min, max)(การเปลี่ยนแปลง Image scale)หากใช้ Haar cascades บนบอร์ดที่ได้รับผลกระทบ ให้สร้างใหม่พร้อมเปิดใช้งานคุณสมบัตินี้ (การเปลี่ยนแปลง Haar cascade)
ตรวจสอบโมเดลที่พึ่งพา
SCALE_S128_127ซ้ำ (การเปลี่ยนแปลง scaling)ย้ายโค้ด dual-core ไปที่ Open-AMP (การเปลี่ยนแปลง CM4)