工控網首頁
>

應用設計

>

基于 Verdin i.MX95 的單目深度估計

基于 Verdin i.MX95 的單目深度估計

在 Verdin i.MX95 上部署單目深度估計以實現邊緣 AI:模型適配、INT8 量化以及完整的嵌入式軟件棧,支持通過單個 RGB 攝像頭以 30 FPS 進行實時深度推理。

邊緣計算中的計算機視覺

單目深度估計是指根據 RGB 攝像頭捕獲的單幀圖像重建深度圖。 本文演示了在 NXP i.MX95 處理器上部署 MiDaS 深度估計模型,將性能從 CPU 上的 7 FPS 提升至 Neutron NPU 上的 30 FPS,從而在 Toradex Verdin iMX95 計算機模塊上實現實時推理。 我們涵蓋了完整的工程路徑,從為 NPU 兼容性進行的模型適配,到訓練后量化、NPU 編譯、GStreamer  pipeline 集成以及 Yocto 鏡像構建。

該演示于2026年嵌入式世界大會(Embedded World 2026)上發布,旨在彰顯Savoir-faire Linux 的邊緣 AI 工程服務,并展示我們在嵌入式軟件開發領域與Toradex 的長期合作伙伴關系。

單目深度估計在 Verdin iMX95 上運行的視頻演示

為何要在邊緣計算中采用單目深度估計?

深度感知是機器人技術、自主導航和工業檢測的基礎。傳統方法依賴于立體攝像頭或激光雷達,這會增加成本、功耗并增加校準復雜性。單目深度估計通過從單個攝像頭推斷深度來消除這些問題,單攝像頭傳感器在大多數嵌入式平臺中已經廣為使用。

然而,支撐該功能的人工智能模型計算量極大。在多數邊緣硬件上,使用通用  CPU 以視頻幀率運行這些模型并不現實。NXP i.MX 95 中的 Neutron 引擎改變了這一局面。它在僅消耗幾瓦功耗的同時,提供了模型推理所需的吞吐量。

Toradex Verdin iMX95 計算機模塊(SoM)與 Verdin 生態系統引腳兼容,并可與 Verdin 開發板配合使用,為該項目提供了理想的平臺。它將 2 TOPS 的 Neutron NPU 與高能效的 Cortex-A55 核心相結合。

我們的目標是證明,完整的端到端單目深度估計管道能夠完全在該模塊上以 30 FPS 的幀率運行。

完整配置:Verdin開發板、Verdin iMX95計算機模塊及 CSI 攝像頭(OV5640)

選擇合適的模型:MiDaS v2.1 Small

我們從英特爾 ISL MiDaS 系列中選用了 AI 模型 MiDaS v2.1 256。該模型采用 EfficientNet-Lite3 編碼器和四階段 RefineNet 解碼器,并采用擴展特征方案(64 → 128 → 256 → 512 通道)。 輸入分辨率為 256×256,輸出為相同分辨率的單通道逆相對深度圖。

盡管該模型已針對嵌入式部署進行了優化,但仍需消耗大量計算資源,在 CPU 上運行時幀率僅為 7 FPS。這促使我們深入探索如何利用 Neutron NPU 的硬件加速能力。

將模型適配至 Neutron NPU

在專用 NPU 上部署 PyTorch 模型并非簡單的格式轉換。某些在 CPU 和 GPU 上運行良好的算子可能不被 NPU 硬件支持。

我們對該 AI 模型進行的適配工作,是將所有雙線性插值替換為最近鄰插值。若不修改這些操作,將導致 5 次運算被迫回退至 CPU 執行,從而嚴重影響吞吐量。

我們對比了原始(雙線性)模型與適配(最近鄰)模型在COCO圖像上的 float32 深度圖。在 1000 張圖像的驗證集上進行的驗證顯示,Pearson 相關系數最低為 0.954,平均值為 0.997。 深度圖在結構上幾乎完全一致。差異主要集中在物體邊界處,雙線性平滑會產生略微柔和的邊緣,這對于實現完全 NPU 加速而言是一個可接受的權衡。

量化與 NPU 編譯

我們使用 eIQ Neutron SDK v3.0.0 構建完整的轉換管道。該流程針對邊緣 AI 模型分為三個步驟:性能分析、量化和 NPU 編譯。

步驟 1:ONNX 導出與 TFLite 轉換。將適配后的 PyTorch 模型導出為 ONNX(opset 17,靜態形狀)。隨后通過 ONNX-TF 橋接器將 ONNX 模型轉換為采用 NHWC 輸入的 TFLite float32 格式。

步驟 2:性能分析與 INT8 量化。 “neutron-profiler”工具在標定數據集(采用ImageNet歸一化的COCO圖像)上運行float32模型,以收集各張量的激活直方圖。這些直方圖驅動neutron-quantizer,后者對每個張量應用完整的INT8訓練后量化。

步驟 3:NPU 編譯。neutron-converter 工具將 INT8 模型編譯為包含嵌入式 Neutron 微代碼的 TFLite 文件。此步驟執行圖級優化、Neutron 子圖提取、平鋪調度、TCM(緊耦合內存)分配以及微代碼生成。

NPU 編譯結果

Neutron 編譯器實現了 99.45% 的算子轉換率:182 個算子中有 181 個在 NPU 上原生運行,并被封裝為單個整體的 Neutron 子圖。 這意味著 NPU 將整個推理圖作為一次連續的內核調用執行,從而最大限度地減少了 CPU 與 NPU 之間的數據傳輸開銷。

指標
AI 模型的算子182
NPU 上的算子181
CPU 上的算子(回退)1
轉換率99.45%
Neutron 子圖1
估計延遲(@ 1 GHz)11.58 毫秒

MiDaS v2.1 Small 256 的 NPU 編譯結果

唯一未轉換的操作是輸出邊界處的一個簡單重塑,每次推理會增加幾微秒的 CPU 開銷。

階段格式大小
TFLite float32FP3264 MB
TFLite INT8(量化)INT817 MB
TFLite + Neutron(NPU 編譯)INT8 + 微代碼17 MB

編譯后的模型內存大小

量化步驟使模型大小較 float32 格式的 TFLite 減少了 3.8 倍。Neutron 編譯對文件大小的影響不大,因為 NPU 微代碼和權重緩沖區所占空間與原始 INT8 數據相當。

構建實時管道

僅在 NPU 上獨立運行的邊緣 AI 模型并非最終產品。我們構建了一個完整的 GStreamer pipeline,以處理從攝像頭捕獲到視覺輸出的完整數據路徑。

pipeline 架構

該邊緣 AI 系統采用三層架構:

  1. GStreamer/NNStreamer 預處理:攝像頭采集(USB 或 CSI),通過 GPU 2D 引擎進行硬件加速的色彩空間轉換,縮放至 256×256,并通過 NNStreamer 進行 ImageNet 歸一化及 INT8 量化。

  2. Python 推理線程:將預處理后的 INT8 張量從 GStreamer appsink 拉入專用推理線程,該線程運行 Neutron 加速的 tflite 解釋器。

  3. 后處理與輸出:原始 INT8 深度張量經過去量化,通過時間 EMA(α=0.4)進行平滑處理,濾波,使用百分比截斷(值為 5,以消除由異常值引起的抖動)進行歸一化,并使用 inferno 顏色映射進行著色。 輸出接收器包括 MJPEG HTTP 服務器、Wayland 顯示器,以及通過 VPU 硬件編碼器進行的 MP4 錄制。

Edge AI System Pipeline Architecture

pipeline 架構

階段硬件
攝像頭采集USB (V4L2 UVC ) / MIPI CSI-2 (ISI + DMA)
顏色轉換 + 縮放GPU 2D 引擎
張量預處理CPU(NNStreamer)
深度推理Neutron NPU
后處理CPU(NumPy + OpenCV)
視頻編碼(錄制模式)VPU(H.265)

使用的硬件組件

Yocto 集成:從模型到可刷寫鏡像

整個軟件棧最初是通過 Yocto Project(Walnascar 版本)結合 kas 構建,利用自定義 meta-layer 封裝項目特定配置,組裝成可刷寫 Linux 鏡像的。 此后,官方資源已發布:我們強烈建議讀者現在參考《Toradex i.MX 95 模塊上的 AI、計算機視覺和機器學習》。

為獲取 TFLite 2.19 和 Neutron 加速,我們有選擇地僅包含 "meta-imx-ml",同時排除 "meta-imx-bsp" 以避免與 Toradex 自身的 BSP 層發生沖突。 “meta-imx-bsp”是 NXP 的參考 BSP 層。當其處于活動狀態時,它會無條件地設置全局映射,將“virtual/kernel”重定向至 NXP 自己的內核分支,并將“virtual/bootloader”重定向至 NXP 自己的 U-Boot 分支。 相反,Toradex 的層(“meta-toradex-nxp”、“meta-toradex-bsp-common”)提供了各自的分支,其中包含 Verdin 專有的補丁、載板設備樹以及 模塊初始化序列。 最后,“meta-imx-ml”僅包含 TFLite 2.19 以及 Neutron / Ethos-U / VX 代理等 ML 庫 recipe,完全不包含內核、引導加載程序或機器配置。 由于其唯一的層依賴項僅為“core”和“freescale-layer”,因此可以無沖突地疊加在任何 BSP 之上。

這種混合需要通過 bbappend 文件、修改 ATF recipes、鎖定U-Boot版本以及調整 OpenCV 的 QA 檢查等針對性變通方案。該鏡像 recipe 構建了一個完整的堆棧: GStreamer(base + good + bad + ugly)、NNStreamer(core + TFLite + Python3)、機器學習運行時(TFLite 2.19 + Neutron 代理)、OpenCV、Python 包、Weston 合成器,以及深度估計應用程序的腳本和模型。

結果與性能

相較于在 CPU 上受限的約 7 FPS,最終解決方案部署在配備 Verdin 開發板的 Toradex Verdin iMX95 計算機模塊上,通過 Neutron NPU 實現了約 30 FPS 的端到端深度估計,同時支持 USB 和 CSI(OV5640)攝像頭。

端到端幀率(FPS)的測量方法是對整個管道中生成的每一幀進行時間戳記錄,涵蓋攝像頭捕獲、GPU加速的顏色轉換和縮放、張量預處理、模型推理、后處理(去量化、EMA平滑、著色)以及 Wayland 顯示渲染。 CPU 基線通過NNStreamer 的 tensor_filter 配合 XNNPACK 委托器運行 INT8 量化的 MiDaS 模型,幀率約為7 FPS。 NPU 配置運行的是為 Neutron NPU 編譯的相同模型,99.45% 的算子在加速器上執行,幀率達到約 30 FPS,提升了 330%。

各階段的延遲通過 time.perf_counter() 進行分析。根據后端不同,存在兩條代碼路徑。在 NPU 環境下,推理繞過 NNStreamer,通過 tflite_runtime 配合 Neutron 委托在 Python 中執行。 一個專用線程分別獨立測量緩沖區提取、invoke()、后處理和顯示操作。在 CPU 上,推理在 NNStreamer 的 tensor_filter 中以 C++ 原生方式運行。 由于該過程在 Python 回調觸發前即已完成,因此推斷時間估算為 capture_interval ? callback_total,其中 capture_interval 是連續張量接收器之間傳輸的實際時間,callback_total 是測得的 Python 后處理時間。所有指標均基于 100 幀窗口進行平均,以平滑調度抖動。

測量階段NPU 管道 (毫秒)CPU 管道 (ms)
預處理0.40.3
推理~10.9~110
后處理8.77.3
顯示13.112.2
端到端幀率~30 FPS~7 FPS

NPU 與 CPU 流水線之間的延遲測量

關鍵工程經驗

在 NPU 上部署深度估計模型并開箱即用。本項目總結出以下幾點經驗:

  1. 算子兼容性是模型適配的關鍵。若存在單個不支持的算子(如雙線性插值),將導致大量任務被迫回退至 CPU 處理。

  2. 校準歸一化必須與推理歸一化完全一致。雖然事后看來這顯而易見,但歸一化不匹配正是開發過程中導致深度圖錯誤的三個缺陷之一。

  3. 使用 Neutron 委托的 NNStreamer 產生了錯誤結果,需要采用基于 Python 的推理繞行方案。必須進行硬件級的調試。

  4. 目標是實現單子圖 NPU 執行模式。通過單個 Neutron 子圖實現 99.45% 的算子轉換率,可消除推理過程中的 CPU-NPU 傳輸開銷。

  5. 全棧至關重要。若缺乏配套的pipeline、相機驅動程序或硬件加速預處理,模型精度便毫無意義。

結論

我們證明,在 Toradex Verdin iMX95 平臺上使用 MiDaS v2.1 Small 模型,可以實現實時單目深度估計。 在低功耗硬件上進行單目深度估計,適用于那些 LiDAR 或立體視覺設備過于昂貴、笨重或易損的應用場景,例如 AMR/倉庫導航、塵土飛揚或陽光直射環境下的農業避障,以及用于缺陷識別的工業檢測。 其核心價值在于通過基于商用攝像頭和低功耗邊緣 SoC 的軟件棧,替代專用深度傳感器。

要將 PyTorch 模型轉化為 30 FPS 的嵌入式應用,每個層級都需要精心設計:針對 NPU 算子兼容性的模型適配、通過 eIQ Neutron SDK 進行的 INT8 訓練后量化、 采用硬件加速預處理的 GStreamer pipeline 設計,以及基于 Yocto 的構建系統(該系統將 Toradex BSP  layer 與 NXP ML 運行時集成)。

最終成果是一個完整且可復制的嵌入式 AI 堆棧,它能在節能的邊緣平臺上將單路攝像頭視頻流轉換為實時深度圖。

您可以在 Toradex 的此專題頁面以及 Savoir Faire Linux 網站上,查閱更多關于邊緣 AI 解決方案的信息,包括成功案例。

審核編輯(
王靜
)
投訴建議

提交

查看更多評論
其他資訊

查看更多

從0開始點亮DSI屏幕

基于 NXP iMX8MP ARM平臺安裝測試 Openclaw

在NXP iMX8QM上使用 Jailhouse

基于 Toradex 硬件和 ROS 2 加速機器人原型開發:SiBrain 的技術視角

Weston 桌面雙屏顯示獨立觸摸配置