7.5. ROMFS

ROMFS 是一個在編譯時內建於相機並掛載於 /rom/ 的唯讀檔案系統。檔案區塊存放於快閃記憶體中並映射至位址空間,因此在該處開啟檔案會直接從快閃記憶體公開其位元組而不需 RAM 複本。模型、標籤檔案與 Haar 級聯是典型的內容。

7.5.1. 為何模型存放於此

有兩個原因。第一個是前面已提到的 RAM 取捨:位於 /rom/ 上的模型會從快閃記憶體就地讀取,除了其張量競技場(tensor arena)之外不耗費 RAM,而位於 /sdcard/ 上的模型則會在載入時複製到 RAM 中,在競技場之外還要耗費檔案大小的成本。在較小的相機上,這個差異往往就是放得下與放不下之間的差別。

第二個是 NPU。N6 的 NPU 與 AE3 上的 Ethos-U 預期其權重位於具有正確對齊的記憶體可定址區域中,而為這些加速器編譯模型的建置工具(用於 N6 NPU 的 STEdgeAI、用於 AE3 Ethos-U 的 Vela)會將結果以該佈局放入 ROMFS。從 /sdcard/ 載入的模型會落在堆積 RAM 中,這對 H7 與 RT1062 所使用的 CPU 路徑來說沒問題,但放棄了那些更快的相機所圍繞設計的直接從快閃記憶體存取的 NPU 路徑。

7.5.2. 一個一般的 MicroPython 檔案系統

在執行階段,ROMFS 的行為就像任何其他已掛載的 MicroPython 檔案系統:os.listdir() 列舉 /rom/builtins.open() 開啟其中的檔案、而其下的路徑可傳遞給任何接受路徑的 API。唯一的限制是指令碼無法寫入它 -- 該分割區在執行階段為唯讀。

IDE 能夠編輯 ROMFS。它在其檔案瀏覽器中公開該分割區的內容,並支援在其中新增、移除與替換檔案,方式與對 SD 卡的操作相同。其預期用途是新增自訂模型、標籤檔案、輔助指令碼,或應用程式需要隨相機一同出貨的任何其他資源。透過 IDE 放入 /rom/ 的任何內容,都會獲得與預載模型相同的直接從快閃記憶體存取、NPU 可存取的儲存空間。