v4.5.6

v4.5.6 là bản phát hành lớn về học máy. Module C TensorFlow tf được thay thế bằng gói ml mới, độc lập với engine, được hỗ trợ bởi TensorFlow Lite Micro (TFLM), chuyển đổi ảnh→tensor được chuyển sang image.to_ndarray(), và các board lõi đôi chuyển sang Open-AMP. Có một số thay đổi gây phá vỡ tương thích — hãy đọc kỹ bên dưới trước khi nâng cấp các tập lệnh ML.

Highlights

  • Mới ml package — module tf cũ được viết lại thành gói ml độc lập với engine (ml.Model, ml.preprocessing, ml.utils, ml.apps); tf vẫn còn như một alias.

  • Backend TFLMlibtf đã lỗi thời được thay thế bằng TensorFlow Lite Micro dựa trên upstream: suy luận nhanh hơn ~20% và thư viện nhỏ hơn.

  • Open-AMP lõi đôi — GIGA và Portenta H7 hiện sử dụng Open-AMP/RPMsg để giao tiếp giữa lõi M7/M4 (cơ chế CM4 cũ đã bị loại bỏ).

  • Bluetooth tích hợp — firmware Bluetooth CYW43 được bật trên Nicla Vision, Portenta H7 và GIGA.

  • MicroPython 1.23.0, ulab 6.5.2 (có hỗ trợ ndarray 4 chiều).

  • Phá vỡ tương thích: API ML đã thay đổi đáng kể và Haar cascades bị tắt theo mặc định trên hầu hết các board — xem các thay đổi gây phá vỡ tương thích.

New features

  • Gói mlml.Model với predict() (roi, callback, danh sách đa đầu vào), các thuộc tính shape/dtype/scale/zero-point cho từng tensor, ml.preprocessing.Normalization, ml.utils (NMS) và ml.apps (công cụ nhận dạng từ khóa MicroSpeech thuần Python với listen() và streaming không chặn timeout=-1, cùng draw_predictions()).

  • Hệ thống mô hình tích hợp — các mô hình (ML) được liệt kê trong models/index.txt được nhúng có điều kiện theo từng board (FOMO trên tất cả board ML, mô hình âm thanh trên board có mic).

  • image.to_ndarray(dtype, buffer=...) — chuyển đổi ảnh thành ulab ndarray (tùy chọn tại chỗ).

  • Image() từ mảng thô — các đối số từ khóa mới shape=, strides=, scale= xây dựng ảnh thang xám/RGB565 từ danh sách điểm ảnh thô.

  • draw_circle() khử răng cưa.

  • Module ssl được đóng băng vào firmware trên GIGA, Nicla Vision, Portenta H7, Nano RP2040 Connect, OpenMV 4/4P/PRO/PT, RT1060 và Pico.

  • Âm thanhaudio.init() được thêm từ khóa samples= (mẫu PDM mỗi kênh); gain_db hiện áp dụng trên microphone DFSDM (ví dụ: Nicla Vision).

  • Giao thức debug — lệnh GET_STATE mới trả về các cờ run/text/JPEG, thông tin hình học khung hình và văn bản trong một gói duy nhất, giảm số vòng lặp host.

  • Ví dụ Open-AMP vuart cho giao tiếp liên lõi.

Other changes and improvements

  • MicroPython cập nhật lên 1.23.0; ulab lên 6.5.2 với hỗ trợ ndarray 4 chiều.

  • Suy luận nhanh hơn — backend ML duy trì trạng thái/bộ nhớ bền vữa qua các lần gọi (~20% nhanh hơn, hỗ trợ mô hình dạng LSTM).

  • get_similarity() được tái triển khai trên backend draw_image (hỗ trợ định dạng/thao tác rộng hơn).

  • morph() và họ bộ lọc mean() chuyển sang phân tích đối số từ khóa; mask= hiện chấp nhận ảnh có thể thay đổi.

  • Bố cục bộ nhớ được cải tổ — vùng DMA căn chỉnh theo lũy thừa 2, các khối GC có thể sắp xếp lại, nhiều heap; ít phân mảnh heap sớm hơn trên board RAM thấp; RT1060 được thêm GC heap.

  • WiFi (CYW43) hiện được khởi tạo lại khi soft-reset; màn hình SPI-TV chỉ xóa vùng bộ đệm khung hình từ cache để cập nhật mượt hơn.

Bug fixes

Camera và cảm biến:

  • Đã sửa lỗi vô hiệu hóa cache CPU ngẫu nhiên trong đường dẫn framebuffer/sensor trên STM32 và i.MX RT, có thể làm hỏng dữ liệu ảnh.

  • Đã sửa lỗi đọc I2C nhiệt MLX90640/MLX90641 trên board i.MX RT (các lần truyền lớn hiện được chia thành nhiều phần nhỏ).

Học máy:

  • Đã sửa lỗi xử lý load_to_fb của ml.Model, kích thước bytearray đầu vào, kiểm tra ndim của ndarray và xác thực định dạng/hình dạng ảnh của Normalization.

Ảnh / hệ thống:

  • Đã thêm hằng số gợi ý vẽ image.BLACK_BACKGROUND còn thiếu và kiểm tra độ dài bộ đệm ảnh/tensor.

  • Đã sửa lỗi con trỏ gốc GC của FIR và âm thanh có thể khiến garbage collector giải phóng các bộ đệm đang sử dụng.

  • Ví dụ Servo Shield hiện sử dụng SoftI2C để hoạt động trên board OpenMV RT.

Hardware and board support

  • Arduino GIGA — hỗ trợ cảm biến HM01B0/HM0360; Open-AMP lõi đôi.

  • Bluetooth — firmware CYW43 BT trên Nicla Vision, Portenta H7 và GIGA.

  • Portenta H7 — Open-AMP M7/M4 RPMsg.

  • OpenMV RT1060 — thêm các khối GC heap (nhiều bộ nhớ Python hơn).

Breaking API changes

Các thay đổi API hiển thị với người dùng giữa v4.5.5 và v4.5.6. Phạm vi: các C-module Python trong modules/ và thư viện Python trong scripts/libraries/.

Mỗi thay đổi được gắn nhãn mức độ ảnh hưởng:

  • major — hầu hết các tập lệnh sử dụng nó cần chỉnh sửa.

  • minor — API hẹp; chỉ ảnh hưởng đến các tập lệnh sử dụng nó.

  • behavior — cùng API, kết quả khác; kiểm tra lại các tập lệnh đã tinh chỉnh.

  • tooling — ảnh hưởng đến cơ chế lõi đôi/board, không phải API Python.

Các thay đổi được nhóm theo mức độ ảnh hưởng theo thứ tự đó. Nếu bạn chỉ muốn chuyển đổi code, hãy chuyển đến danh sách kiểm tra di chuyển ở cuối. Mỗi hash commit liên kết đến diff của nó trên GitHub.

Module tf được thay thế bởi gói ml (major)

Module C TensorFlow tf được viết lại thành gói ml độc lập với engine (tf được giữ lại như alias tương thích ngược, nhưng code mới nên dùng ml). Các hàm cấp module tf.load, tf.load_builtin_model và các phương thức detect()/segment()/classification đã bị loại bỏ — hãy khởi tạo ml.Model và gọi predict(). ml.Model(path) bây giờ trả về chỉ mô hình (không có tuple (labels, model)); nhãn là thuộc tính model.labels. predict() bây giờ trả về ndarrays của ulab (không phải tuple float), hỗ trợ mô hình đa đầu vào (truyền một danh sách), NMS đã chuyển sang ml.utils; chuẩn hóa đầu vào đã chuyển sang ml.preprocessing.Normalization. ml.py cũ bây giờ là ml.apps.

Commits: c7228cbb4, 6c212409c, 3e37f46db, 9a186f4e2, 70b89f474, 3f8491cb0, 4506682c2, 8b38f3837

image.unpack() đã bị loại bỏ — sử dụng to_ndarray() (major)

image.unpack() ngắn hạn đã bị loại bỏ; hãy chuyển đổi ảnh thành tensor bằng image.to_ndarray(dtype, buffer=...) thay thế, và áp dụng chuẩn hóa scale/mean/stdev bằng ml.preprocessing.Normalization thay vì đường dẫn scale ảnh tích hợp cũ.

Commits: 9848eed12, de0d46fa6

Đối số scale của Image() từ mảng thô (minor)

Khi khởi tạo Image từ mảng điểm ảnh thô, đối số scale bây giờ nhận khoảng (min, max) thay vì (scale, add).

Commit: 7b79fb4c7

Haar cascades bị tắt theo mặc định trên hầu hết board (behavior)

Để giải phóng dung lượng flash, phát hiện khuôn mặt Haar-cascade (find_features() / image.HaarCascade()) hiện bị tắt theo mặc định trên Arduino GIGA, Nicla Vision, Portenta H7, OpenMV 3, OpenMV 4 / 4 Plus / PRO và OpenMV Pure Thermal. Các tập lệnh sử dụng Haar cascades trên các board đó phải biên dịch lại firmware với tính năng được bật.

Commit: 6ce27c910

Ngắt tập lệnh và co giãn tensor (behavior)

Trình debug USB hiện ngắt tập lệnh đang chạy thông qua tính năng VM-abort của MicroPython thay vì nhảy PendSV bắt buộc (sạch hơn, nhưng điểm ngắt khác). Scale đầu vào SCALE_S128_127 được sửa để ánh xạ 0–255 sang −128–127 mà không có độ khuếch đại sai — các mô hình (ML) dựa vào scale cũ (không chính xác) sẽ cho kết quả khác.

Commits: e758a0f95, a4d97c572

Bộ xử lý đồng hành CM4 được thay thế bởi Open-AMP (tooling)

Cơ chế firmware bộ xử lý đồng hành CM4 đã lỗi thời trên GIGA / Nicla Vision / Portenta H7 đã bị loại bỏ và thay thế bằng Open-AMP/RPMsg. Code lõi đôi phải chuyển sang mô hình Open-AMP (một ví dụ vuart được cung cấp).

Commits: 3cc57fea4, 93f2d4c41

Migration checklist

Để chuyển đổi sạch sang v4.5.6, công việc điển hình là:

  1. Chuyển đổi code ML sang ml: khởi tạo ml.Model(path), gọi predict(), đọc model.labels, xử lý đầu ra ndarray, và chuyển chuẩn hóa sang ml.preprocessing.Normalization và NMS sang ml.utils (thay đổi gói ml).

  2. Thay thế image.unpack() bằng image.to_ndarray() (việc loại bỏ unpack).

  3. Cập nhật bất kỳ đối số scale của Image() từ mảng thô sang khoảng (min, max) (thay đổi scale của Image).

  4. Nếu bạn sử dụng Haar cascades trên board bị ảnh hưởng, hãy biên dịch lại với tính năng được bật (thay đổi Haar cascade).

  5. Xác nhận lại các mô hình (ML) phụ thuộc vào SCALE_S128_127 (thay đổi scaling).

  6. Chuyển code lõi đôi sang Open-AMP (thay đổi CM4).