7.5. ROMFS

ROMFS là hệ thống tệp chỉ đọc được tích hợp vào camera tại thời điểm biên dịch và được gắn kết tại /rom/. Các khối tệp nằm trong flash và được ánh xạ vào không gian địa chỉ, vì vậy việc mở tệp ở đó sẽ truy cập trực tiếp vào các byte từ flash mà không cần sao chép vào RAM. Mô hình (ML), tệp nhãn và Haar cascades là những nội dung điển hình.

7.5.1. Tại sao mô hình (ML) nằm ở đây

Có hai lý do. Thứ nhất là sự đánh đổi RAM đã đề cập: mô hình (ML) trên /rom/ đọc trực tiếp từ flash và không tốn RAM ngoài vùng tensor của nó, trong khi mô hình (ML) trên /sdcard/ được sao chép vào RAM khi tải và tốn thêm kích thước tệp trên đầu vùng tensor. Trên các camera nhỏ hơn, sự khác biệt đó thường là ranh giới giữa vừa đủ và không đủ RAM.

Thứ hai là NPU. NPU của N6 và Ethos-U trên AE3 yêu cầu trọng số nằm trong vùng bộ nhớ có thể định địa chỉ với căn chỉnh đúng, và bộ công cụ xây dựng biên dịch mô hình (ML) cho các bộ tăng tốc đó (STEdgeAI cho NPU của N6, Vela cho Ethos-U của AE3) đặt kết quả vào ROMFS với bố cục đó. Mô hình (ML) được tải từ /sdcard/ nằm trong RAM heap, điều này phù hợp với các đường dẫn CPU mà H7 và RT1062 sử dụng, nhưng từ bỏ đường dẫn NPU trực tiếp từ flash mà các camera nhanh hơn được thiết kế để tận dụng.

7.5.2. Hệ thống tệp MicroPython bình thường

Khi chạy, ROMFS hoạt động như bất kỳ hệ thống tệp MicroPython nào khác được gắn kết: os.listdir() liệt kê /rom/, builtins.open() mở tệp trong đó, và đường dẫn trong đó có thể truyền cho bất kỳ API nào chấp nhận đường dẫn. Hạn chế duy nhất là tập lệnh không thể ghi vào nó -- phân vùng chỉ đọc khi chạy.

IDE có thể chỉnh sửa ROMFS. Nó hiển thị nội dung phân vùng trong trình duyệt tệp và hỗ trợ thêm, xóa và thay thế tệp ở đó giống như đối với thẻ SD. Mục đích sử dụng là để thêm các mô hình (ML) tùy chỉnh, tệp nhãn, tập lệnh trợ giúp, hoặc bất kỳ tài nguyên nào khác mà ứng dụng cần đi kèm với camera. Bất kỳ thứ gì được thả vào /rom/ qua IDE đều có cùng lưu trữ trực tiếp từ flash, có thể truy cập bởi NPU như các mô hình (ML) được tải sẵn.