基于 Verdin i.MX95 的單目深度估計(jì)
在 Verdin i.MX95 上部署單目深度估計(jì)以實(shí)現(xiàn)邊緣 AI:模型適配、INT8 量化以及完整的嵌入式軟件棧,支持通過(guò)單個(gè) RGB 攝像頭以 30 FPS 進(jìn)行實(shí)時(shí)深度推理。
邊緣計(jì)算中的計(jì)算機(jī)視覺(jué)
單目深度估計(jì)是指根據(jù) RGB 攝像頭捕獲的單幀圖像重建深度圖。 本文演示了在 NXP i.MX95 處理器上部署 MiDaS 深度估計(jì)模型,將性能從 CPU 上的 7 FPS 提升至 Neutron NPU 上的 30 FPS,從而在 Toradex Verdin iMX95 計(jì)算機(jī)模塊上實(shí)現(xiàn)實(shí)時(shí)推理。 我們涵蓋了完整的工程路徑,從為 NPU 兼容性進(jìn)行的模型適配,到訓(xùn)練后量化、NPU 編譯、GStreamer pipeline 集成以及 Yocto 鏡像構(gòu)建。
該演示于2026年嵌入式世界大會(huì)(Embedded World 2026)上發(fā)布,旨在彰顯Savoir-faire Linux 的邊緣 AI 工程服務(wù),并展示我們?cè)谇度胧杰浖_(kāi)發(fā)領(lǐng)域與Toradex 的長(zhǎng)期合作伙伴關(guān)系。
單目深度估計(jì)在 Verdin iMX95 上運(yùn)行的視頻演示
為何要在邊緣計(jì)算中采用單目深度估計(jì)?
深度感知是機(jī)器人技術(shù)、自主導(dǎo)航和工業(yè)檢測(cè)的基礎(chǔ)。傳統(tǒng)方法依賴于立體攝像頭或激光雷達(dá),這會(huì)增加成本、功耗并增加校準(zhǔn)復(fù)雜性。單目深度估計(jì)通過(guò)從單個(gè)攝像頭推斷深度來(lái)消除這些問(wèn)題,單攝像頭傳感器在大多數(shù)嵌入式平臺(tái)中已經(jīng)廣為使用。
然而,支撐該功能的人工智能模型計(jì)算量極大。在多數(shù)邊緣硬件上,使用通用 CPU 以視頻幀率運(yùn)行這些模型并不現(xiàn)實(shí)。NXP i.MX 95 中的 Neutron 引擎改變了這一局面。它在僅消耗幾瓦功耗的同時(shí),提供了模型推理所需的吞吐量。
Toradex Verdin iMX95 計(jì)算機(jī)模塊(SoM)與 Verdin 生態(tài)系統(tǒng)引腳兼容,并可與 Verdin 開(kāi)發(fā)板配合使用,為該項(xiàng)目提供了理想的平臺(tái)。它將 2 TOPS 的 Neutron NPU 與高能效的 Cortex-A55 核心相結(jié)合。
我們的目標(biāo)是證明,完整的端到端單目深度估計(jì)管道能夠完全在該模塊上以 30 FPS 的幀率運(yùn)行。
完整配置:Verdin開(kāi)發(fā)板、Verdin iMX95計(jì)算機(jī)模塊及 CSI 攝像頭(OV5640)
選擇合適的模型:MiDaS v2.1 Small
我們從英特爾 ISL MiDaS 系列中選用了 AI 模型 MiDaS v2.1 256。該模型采用 EfficientNet-Lite3 編碼器和四階段 RefineNet 解碼器,并采用擴(kuò)展特征方案(64 → 128 → 256 → 512 通道)。 輸入分辨率為 256×256,輸出為相同分辨率的單通道逆相對(duì)深度圖。
盡管該模型已針對(duì)嵌入式部署進(jìn)行了優(yōu)化,但仍需消耗大量計(jì)算資源,在 CPU 上運(yùn)行時(shí)幀率僅為 7 FPS。這促使我們深入探索如何利用 Neutron NPU 的硬件加速能力。
將模型適配至 Neutron NPU
在專用 NPU 上部署 PyTorch 模型并非簡(jiǎn)單的格式轉(zhuǎn)換。某些在 CPU 和 GPU 上運(yùn)行良好的算子可能不被 NPU 硬件支持。
我們對(duì)該 AI 模型進(jìn)行的適配工作,是將所有雙線性插值替換為最近鄰插值。若不修改這些操作,將導(dǎo)致 5 次運(yùn)算被迫回退至 CPU 執(zhí)行,從而嚴(yán)重影響吞吐量。
我們對(duì)比了原始(雙線性)模型與適配(最近鄰)模型在COCO圖像上的 float32 深度圖。在 1000 張圖像的驗(yàn)證集上進(jìn)行的驗(yàn)證顯示,Pearson 相關(guān)系數(shù)最低為 0.954,平均值為 0.997。 深度圖在結(jié)構(gòu)上幾乎完全一致。差異主要集中在物體邊界處,雙線性平滑會(huì)產(chǎn)生略微柔和的邊緣,這對(duì)于實(shí)現(xiàn)完全 NPU 加速而言是一個(gè)可接受的權(quán)衡。
量化與 NPU 編譯
我們使用 eIQ Neutron SDK v3.0.0 構(gòu)建完整的轉(zhuǎn)換管道。該流程針對(duì)邊緣 AI 模型分為三個(gè)步驟:性能分析、量化和 NPU 編譯。
步驟 1:ONNX 導(dǎo)出與 TFLite 轉(zhuǎn)換。將適配后的 PyTorch 模型導(dǎo)出為 ONNX(opset 17,靜態(tài)形狀)。隨后通過(guò) ONNX-TF 橋接器將 ONNX 模型轉(zhuǎn)換為采用 NHWC 輸入的 TFLite float32 格式。
步驟 2:性能分析與 INT8 量化。 “neutron-profiler”工具在標(biāo)定數(shù)據(jù)集(采用ImageNet歸一化的COCO圖像)上運(yùn)行float32模型,以收集各張量的激活直方圖。這些直方圖驅(qū)動(dòng)neutron-quantizer,后者對(duì)每個(gè)張量應(yīng)用完整的INT8訓(xùn)練后量化。
步驟 3:NPU 編譯。neutron-converter 工具將 INT8 模型編譯為包含嵌入式 Neutron 微代碼的 TFLite 文件。此步驟執(zhí)行圖級(jí)優(yōu)化、Neutron 子圖提取、平鋪調(diào)度、TCM(緊耦合內(nèi)存)分配以及微代碼生成。
NPU 編譯結(jié)果
Neutron 編譯器實(shí)現(xiàn)了 99.45% 的算子轉(zhuǎn)換率:182 個(gè)算子中有 181 個(gè)在 NPU 上原生運(yùn)行,并被封裝為單個(gè)整體的 Neutron 子圖。 這意味著 NPU 將整個(gè)推理圖作為一次連續(xù)的內(nèi)核調(diào)用執(zhí)行,從而最大限度地減少了 CPU 與 NPU 之間的數(shù)據(jù)傳輸開(kāi)銷。
| 指標(biāo) | 值 |
| AI 模型的算子 | 182 |
| NPU 上的算子 | 181 |
| CPU 上的算子(回退) | 1 |
| 轉(zhuǎn)換率 | 99.45% |
| Neutron 子圖 | 1 |
| 估計(jì)延遲(@ 1 GHz) | 11.58 毫秒 |
MiDaS v2.1 Small 256 的 NPU 編譯結(jié)果
唯一未轉(zhuǎn)換的操作是輸出邊界處的一個(gè)簡(jiǎn)單重塑,每次推理會(huì)增加幾微秒的 CPU 開(kāi)銷。
| 階段 | 格式 | 大小 |
| TFLite float32 | FP32 | 64 MB |
| TFLite INT8(量化) | INT8 | 17 MB |
| TFLite + Neutron(NPU 編譯) | INT8 + 微代碼 | 17 MB |
編譯后的模型內(nèi)存大小
量化步驟使模型大小較 float32 格式的 TFLite 減少了 3.8 倍。Neutron 編譯對(duì)文件大小的影響不大,因?yàn)?NPU 微代碼和權(quán)重緩沖區(qū)所占空間與原始 INT8 數(shù)據(jù)相當(dāng)。
構(gòu)建實(shí)時(shí)管道
僅在 NPU 上獨(dú)立運(yùn)行的邊緣 AI 模型并非最終產(chǎn)品。我們構(gòu)建了一個(gè)完整的 GStreamer pipeline,以處理從攝像頭捕獲到視覺(jué)輸出的完整數(shù)據(jù)路徑。
pipeline 架構(gòu)
該邊緣 AI 系統(tǒng)采用三層架構(gòu):
GStreamer/NNStreamer 預(yù)處理:攝像頭采集(USB 或 CSI),通過(guò) GPU 2D 引擎進(jìn)行硬件加速的色彩空間轉(zhuǎn)換,縮放至 256×256,并通過(guò) NNStreamer 進(jìn)行 ImageNet 歸一化及 INT8 量化。
Python 推理線程:將預(yù)處理后的 INT8 張量從 GStreamer appsink 拉入專用推理線程,該線程運(yùn)行 Neutron 加速的 tflite 解釋器。
后處理與輸出:原始 INT8 深度張量經(jīng)過(guò)去量化,通過(guò)時(shí)間 EMA(α=0.4)進(jìn)行平滑處理,濾波,使用百分比截?cái)啵ㄖ禐?5,以消除由異常值引起的抖動(dòng))進(jìn)行歸一化,并使用 inferno 顏色映射進(jìn)行著色。 輸出接收器包括 MJPEG HTTP 服務(wù)器、Wayland 顯示器,以及通過(guò) VPU 硬件編碼器進(jìn)行的 MP4 錄制。

pipeline 架構(gòu)
| 階段 | 硬件 |
| 攝像頭采集 | USB (V4L2 UVC ) / MIPI CSI-2 (ISI + DMA) |
| 顏色轉(zhuǎn)換 + 縮放 | GPU 2D 引擎 |
| 張量預(yù)處理 | CPU(NNStreamer) |
| 深度推理 | Neutron NPU |
| 后處理 | CPU(NumPy + OpenCV) |
| 視頻編碼(錄制模式) | VPU(H.265) |
使用的硬件組件
Yocto 集成:從模型到可刷寫鏡像
整個(gè)軟件棧最初是通過(guò) Yocto Project(Walnascar 版本)結(jié)合 kas 構(gòu)建,利用自定義 meta-layer 封裝項(xiàng)目特定配置,組裝成可刷寫 Linux 鏡像的。 此后,官方資源已發(fā)布:我們強(qiáng)烈建議讀者現(xiàn)在參考《Toradex i.MX 95 模塊上的 AI、計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)》。
為獲取 TFLite 2.19 和 Neutron 加速,我們有選擇地僅包含 "meta-imx-ml",同時(shí)排除 "meta-imx-bsp" 以避免與 Toradex 自身的 BSP 層發(fā)生沖突。 “meta-imx-bsp”是 NXP 的參考 BSP 層。當(dāng)其處于活動(dòng)狀態(tài)時(shí),它會(huì)無(wú)條件地設(shè)置全局映射,將“virtual/kernel”重定向至 NXP 自己的內(nèi)核分支,并將“virtual/bootloader”重定向至 NXP 自己的 U-Boot 分支。 相反,Toradex 的層(“meta-toradex-nxp”、“meta-toradex-bsp-common”)提供了各自的分支,其中包含 Verdin 專有的補(bǔ)丁、載板設(shè)備樹以及 模塊初始化序列。 最后,“meta-imx-ml”僅包含 TFLite 2.19 以及 Neutron / Ethos-U / VX 代理等 ML 庫(kù) recipe,完全不包含內(nèi)核、引導(dǎo)加載程序或機(jī)器配置。 由于其唯一的層依賴項(xiàng)僅為“core”和“freescale-layer”,因此可以無(wú)沖突地疊加在任何 BSP 之上。
這種混合需要通過(guò) bbappend 文件、修改 ATF recipes、鎖定U-Boot版本以及調(diào)整 OpenCV 的 QA 檢查等針對(duì)性變通方案。該鏡像 recipe 構(gòu)建了一個(gè)完整的堆棧: GStreamer(base + good + bad + ugly)、NNStreamer(core + TFLite + Python3)、機(jī)器學(xué)習(xí)運(yùn)行時(shí)(TFLite 2.19 + Neutron 代理)、OpenCV、Python 包、Weston 合成器,以及深度估計(jì)應(yīng)用程序的腳本和模型。
結(jié)果與性能
相較于在 CPU 上受限的約 7 FPS,最終解決方案部署在配備 Verdin 開(kāi)發(fā)板的 Toradex Verdin iMX95 計(jì)算機(jī)模塊上,通過(guò) Neutron NPU 實(shí)現(xiàn)了約 30 FPS 的端到端深度估計(jì),同時(shí)支持 USB 和 CSI(OV5640)攝像頭。
端到端幀率(FPS)的測(cè)量方法是對(duì)整個(gè)管道中生成的每一幀進(jìn)行時(shí)間戳記錄,涵蓋攝像頭捕獲、GPU加速的顏色轉(zhuǎn)換和縮放、張量預(yù)處理、模型推理、后處理(去量化、EMA平滑、著色)以及 Wayland 顯示渲染。 CPU 基線通過(guò)NNStreamer 的 tensor_filter 配合 XNNPACK 委托器運(yùn)行 INT8 量化的 MiDaS 模型,幀率約為7 FPS。 NPU 配置運(yùn)行的是為 Neutron NPU 編譯的相同模型,99.45% 的算子在加速器上執(zhí)行,幀率達(dá)到約 30 FPS,提升了 330%。
各階段的延遲通過(guò) time.perf_counter() 進(jìn)行分析。根據(jù)后端不同,存在兩條代碼路徑。在 NPU 環(huán)境下,推理繞過(guò) NNStreamer,通過(guò) tflite_runtime 配合 Neutron 委托在 Python 中執(zhí)行。 一個(gè)專用線程分別獨(dú)立測(cè)量緩沖區(qū)提取、invoke()、后處理和顯示操作。在 CPU 上,推理在 NNStreamer 的 tensor_filter 中以 C++ 原生方式運(yùn)行。 由于該過(guò)程在 Python 回調(diào)觸發(fā)前即已完成,因此推斷時(shí)間估算為 capture_interval ? callback_total,其中 capture_interval 是連續(xù)張量接收器之間傳輸?shù)膶?shí)際時(shí)間,callback_total 是測(cè)得的 Python 后處理時(shí)間。所有指標(biāo)均基于 100 幀窗口進(jìn)行平均,以平滑調(diào)度抖動(dòng)。
| 測(cè)量階段 | NPU 管道 (毫秒) | CPU 管道 (ms) |
| 預(yù)處理 | 0.4 | 0.3 |
| 推理 | ~10.9 | ~110 |
| 后處理 | 8.7 | 7.3 |
| 顯示 | 13.1 | 12.2 |
| 端到端幀率 | ~30 FPS | ~7 FPS |
NPU 與 CPU 流水線之間的延遲測(cè)量
關(guān)鍵工程經(jīng)驗(yàn)
在 NPU 上部署深度估計(jì)模型并開(kāi)箱即用。本項(xiàng)目總結(jié)出以下幾點(diǎn)經(jīng)驗(yàn):
算子兼容性是模型適配的關(guān)鍵。若存在單個(gè)不支持的算子(如雙線性插值),將導(dǎo)致大量任務(wù)被迫回退至 CPU 處理。
校準(zhǔn)歸一化必須與推理歸一化完全一致。雖然事后看來(lái)這顯而易見(jiàn),但歸一化不匹配正是開(kāi)發(fā)過(guò)程中導(dǎo)致深度圖錯(cuò)誤的三個(gè)缺陷之一。
使用 Neutron 委托的 NNStreamer 產(chǎn)生了錯(cuò)誤結(jié)果,需要采用基于 Python 的推理繞行方案。必須進(jìn)行硬件級(jí)的調(diào)試。
目標(biāo)是實(shí)現(xiàn)單子圖 NPU 執(zhí)行模式。通過(guò)單個(gè) Neutron 子圖實(shí)現(xiàn) 99.45% 的算子轉(zhuǎn)換率,可消除推理過(guò)程中的 CPU-NPU 傳輸開(kāi)銷。
全棧至關(guān)重要。若缺乏配套的pipeline、相機(jī)驅(qū)動(dòng)程序或硬件加速預(yù)處理,模型精度便毫無(wú)意義。
結(jié)論
我們證明,在 Toradex Verdin iMX95 平臺(tái)上使用 MiDaS v2.1 Small 模型,可以實(shí)現(xiàn)實(shí)時(shí)單目深度估計(jì)。 在低功耗硬件上進(jìn)行單目深度估計(jì),適用于那些 LiDAR 或立體視覺(jué)設(shè)備過(guò)于昂貴、笨重或易損的應(yīng)用場(chǎng)景,例如 AMR/倉(cāng)庫(kù)導(dǎo)航、塵土飛揚(yáng)或陽(yáng)光直射環(huán)境下的農(nóng)業(yè)避障,以及用于缺陷識(shí)別的工業(yè)檢測(cè)。 其核心價(jià)值在于通過(guò)基于商用攝像頭和低功耗邊緣 SoC 的軟件棧,替代專用深度傳感器。
要將 PyTorch 模型轉(zhuǎn)化為 30 FPS 的嵌入式應(yīng)用,每個(gè)層級(jí)都需要精心設(shè)計(jì):針對(duì) NPU 算子兼容性的模型適配、通過(guò) eIQ Neutron SDK 進(jìn)行的 INT8 訓(xùn)練后量化、 采用硬件加速預(yù)處理的 GStreamer pipeline 設(shè)計(jì),以及基于 Yocto 的構(gòu)建系統(tǒng)(該系統(tǒng)將 Toradex BSP layer 與 NXP ML 運(yùn)行時(shí)集成)。
最終成果是一個(gè)完整且可復(fù)制的嵌入式 AI 堆棧,它能在節(jié)能的邊緣平臺(tái)上將單路攝像頭視頻流轉(zhuǎn)換為實(shí)時(shí)深度圖。
您可以在 Toradex 的此專題頁(yè)面以及 Savoir Faire Linux 網(wǎng)站上,查閱更多關(guān)于邊緣 AI 解決方案的信息,包括成功案例。
提交
從0開(kāi)始點(diǎn)亮DSI屏幕
基于 NXP iMX8MP ARM平臺(tái)安裝測(cè)試 Openclaw
在NXP iMX8QM上使用 Jailhouse
基于 Toradex 硬件和 ROS 2 加速機(jī)器人原型開(kāi)發(fā):SiBrain 的技術(shù)視角
Weston 桌面雙屏顯示獨(dú)立觸摸配置

投訴建議