基于 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 float32 | FP32 | 64 MB |
| TFLite INT8(量化) | INT8 | 17 MB |
| TFLite + Neutron(NPU 編譯) | INT8 + 微代碼 | 17 MB |
編譯后的模型內存大小
量化步驟使模型大小較 float32 格式的 TFLite 減少了 3.8 倍。Neutron 編譯對文件大小的影響不大,因為 NPU 微代碼和權重緩沖區所占空間與原始 INT8 數據相當。
構建實時管道
僅在 NPU 上獨立運行的邊緣 AI 模型并非最終產品。我們構建了一個完整的 GStreamer pipeline,以處理從攝像頭捕獲到視覺輸出的完整數據路徑。
pipeline 架構
該邊緣 AI 系統采用三層架構:
GStreamer/NNStreamer 預處理:攝像頭采集(USB 或 CSI),通過 GPU 2D 引擎進行硬件加速的色彩空間轉換,縮放至 256×256,并通過 NNStreamer 進行 ImageNet 歸一化及 INT8 量化。
Python 推理線程:將預處理后的 INT8 張量從 GStreamer appsink 拉入專用推理線程,該線程運行 Neutron 加速的 tflite 解釋器。
后處理與輸出:原始 INT8 深度張量經過去量化,通過時間 EMA(α=0.4)進行平滑處理,濾波,使用百分比截斷(值為 5,以消除由異常值引起的抖動)進行歸一化,并使用 inferno 顏色映射進行著色。 輸出接收器包括 MJPEG HTTP 服務器、Wayland 顯示器,以及通過 VPU 硬件編碼器進行的 MP4 錄制。

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.4 | 0.3 |
| 推理 | ~10.9 | ~110 |
| 后處理 | 8.7 | 7.3 |
| 顯示 | 13.1 | 12.2 |
| 端到端幀率 | ~30 FPS | ~7 FPS |
NPU 與 CPU 流水線之間的延遲測量
關鍵工程經驗
在 NPU 上部署深度估計模型并開箱即用。本項目總結出以下幾點經驗:
算子兼容性是模型適配的關鍵。若存在單個不支持的算子(如雙線性插值),將導致大量任務被迫回退至 CPU 處理。
校準歸一化必須與推理歸一化完全一致。雖然事后看來這顯而易見,但歸一化不匹配正是開發過程中導致深度圖錯誤的三個缺陷之一。
使用 Neutron 委托的 NNStreamer 產生了錯誤結果,需要采用基于 Python 的推理繞行方案。必須進行硬件級的調試。
目標是實現單子圖 NPU 執行模式。通過單個 Neutron 子圖實現 99.45% 的算子轉換率,可消除推理過程中的 CPU-NPU 傳輸開銷。
全棧至關重要。若缺乏配套的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 桌面雙屏顯示獨立觸摸配置

投訴建議