http://www.henanjusheng.com 2026-06-09 11:41 來源:米爾電子
本文為《360環(huán)視實(shí)時性評估》的續(xù)篇:聚焦從原型到車規(guī)級實(shí)時性的工程落地路徑
平臺:米爾MYD-LR3576開發(fā)板
處理器: RK3576 (4×A72 + 4×A53 + Mali G52 + 6TOPS NPU)
系統(tǒng):Linux 6.1.75 | 攝像頭:4×720P魚眼 + 1×1080P MIPI RGB
在360環(huán)視系統(tǒng)的初始驗(yàn)證階段,我們采用了一套直觀且廣泛使用的技術(shù)棧:OpenCV負(fù)責(zé)從采集到顯示的全部圖像處理任務(wù)。功能層面,這套方案完全跑通了——四路魚眼去畸變、透視投影、鳥瞰拼接,所有算法邏輯均正確。但當(dāng)我們將目光從「能不能跑」轉(zhuǎn)向「能不能用」時,一個嚴(yán)峻的問題浮出水面:端到端延遲高達(dá)約300ms,遠(yuǎn)超25fps對應(yīng)的40ms幀預(yù)算。
經(jīng)過深入的性能剖析,我們發(fā)現(xiàn)瓶頸的根源并非算法復(fù)雜度——RK3576的4核Cortex-A72在單純的計算吞吐上并非不堪重負(fù)。真正吃掉時間的,是全鏈路中密集且不必要的數(shù)據(jù)搬運(yùn)。以下為原始方案的典型數(shù)據(jù)流:

上述五步中,每一步都產(chǎn)生至少一次全幀內(nèi)存拷貝(720P BGR約2.6MB/幀)。四路相機(jī)并行處理后,單幀處理周期的總數(shù)據(jù)搬運(yùn)量超過50MB。在一個40ms的幀預(yù)算里,光是內(nèi)存拷貝就占據(jù)了不可忽視的時間比例,這還不包括OpenCV函數(shù)內(nèi)部的中間緩沖分配。
為突破CPU的性能瓶頸,我們嘗試將計算密集型環(huán)節(jié)(去畸變、投影變換、拼接)遷移至Mali-G52 GPU,通過OpenCL(cv::UMat)并行加速。GPU的算力優(yōu)勢立竿見影——去畸變從CPU的約10ms降至約1ms,投影變換從約30ms降至約8ms。但是cv::Mat與cv::UMat間的顯式搬運(yùn)(約15ms上傳 + 10ms下載)幾乎抵消了計算加速。
算力充裕,但“每步獨(dú)立分配、獨(dú)立拷貝”的范式使數(shù)據(jù)搬運(yùn)成為絕對瓶頸。優(yōu)化方向由此明確——不是換更強(qiáng)的算法,而是消滅拷貝本身。
基于對問題根因的準(zhǔn)確診斷,我們確立了一條清晰的優(yōu)化路線:用DMA-BUF文件描述符(fd)替代內(nèi)存拷貝,讓V4L2、RGA、CPU和DRM四者共享同一塊物理內(nèi)存;用DRM Overlay Plane直顯替代X11協(xié)議層,消除顯示路徑上的最后一次搬運(yùn)。這一路線的目標(biāo)非常明確:讓每一幀像素只寫一次、只讀一次。

兩條優(yōu)化線并行推進(jìn):DMA-BUF解決處理鏈路上的拷貝問題,DRM Overlay Plane解決顯示輸出端的拷貝問題。兩條線匯聚后,形成完整的零拷貝閉環(huán)。

優(yōu)化后的數(shù)據(jù)流簡化為一條單一的DMA-BUF fd傳遞鏈,每個模塊對同一塊物理內(nèi)存進(jìn)行原地操作:
V4L2 MMAP(攝像頭DMA寫入物理內(nèi)存)→ RGA NV12→BGR(硬件blit,源virAddr→目標(biāo)fd,約3ms/路)→ CPU去畸變(cv::Mat構(gòu)造在DMA-BUF mmap指針上,零額外內(nèi)存分配)→ CPU拼接(9格鳥瞰布局+權(quán)重圖LUT融合+車模貼圖,約8ms)→ RGA fd→fd縮放(硬件DMA,約2ms)→ drmModeSetPlane(Overlay Plane硬件翻頁顯示,約0.1ms)
放棄cv::imshow,直接調(diào)用`drmModeSetPlane`將DMA-BUF fd綁定到Overlay Plane,由顯示硬件按VSYNC掃描輸出。提交僅耗時約0.1ms,非阻塞,徹底消除X11中間層開銷。
以下數(shù)據(jù)均在米爾MYD-LR3576開發(fā)板上實(shí)測獲得。測試條件:4路720P魚眼攝像頭,HDMI 2560×1440@60Hz輸出,DMA-BUF管線。
|
處理環(huán)節(jié) |
耗時 |
執(zhí)行單元 |
備注 |
|
Sensor曝光 + ISP流水線 |
~33ms |
硬件固定 |
30fps采集周期,硬件ISP處理延遲 |
|
V4L2隊列積壓 (4 buf) |
~17ms |
內(nèi)核調(diào)度 |
4緩沖配置下的平均排隊延遲 |
|
RGA NV12→BGR ×4 |
~3ms/路 |
RGA硬件 |
硬件DMA blit,同步阻塞,四路串行共~12ms |
|
CPU去畸變 前/后/左/右 |
15~22ms |
Cortex-A72 |
輸出700×300 300×900四路并行執(zhí)行 |
|
CPU拼接 + 權(quán)重融合 |
~8ms |
Cortex-A72 |
9區(qū)拷貝 + 4角LUT融合 + 車模疊加 |
|
RGA fd→fd縮放 |
~2ms |
RGA硬件 |
700×900 → 1280×1440,雙線性插值 |
|
drmModeSetPlane |
~0.1ms |
內(nèi)核atomic |
非阻塞提交,硬件按VSYNC掃描 |
|
顯示掃描輸出 (60Hz) |
~16ms |
顯示控制器 |
一幀掃描周期,硬件固定 |
|
端到端總計 |
~100ms |
— |
傳感器曝光→屏幕顯示,完整鏈路 |
將DMA-BUF優(yōu)化方案與原始方案進(jìn)行并列對比,優(yōu)化的價值一目了然:
|
對比指標(biāo) |
OpenCV CPU串行 |
OpenCV GPU加速 |
DMA-BUF零拷貝 |
|
全鏈路內(nèi)存拷貝次數(shù) |
~5次 |
~3次 |
0次 |
|
端到端延遲 |
~300ms |
~150ms |
~100ms |
|
V4L2緩沖數(shù) |
8 |
4 |
4 |
|
GPU↔CPU數(shù)據(jù)搬運(yùn) |
每次處理均拷貝 |
Upload+Download |
無GPU參與 |
|
顯示路徑 |
X11 imshow |
DRM SetCrtc |
DRM Overlay Plane |
|
拼接方式 |
CPU逐級串行Mat拷貝 |
GPU OpenCL內(nèi)核 |
CPU DMA-BUF直讀 |
如果說360環(huán)視是車輛「向外看」的眼睛,DMS(Driver Monitoring System)則是「向內(nèi)看」的眼睛。前者保障車輛周圍的環(huán)境安全,后者保障駕駛者本人的狀態(tài)安全——兩者共同構(gòu)成車載智能視覺系統(tǒng)的完整閉環(huán)。
在米爾基于RK3576開發(fā)板上,DMS系統(tǒng)基于Rockchip DMS SDK構(gòu)建,利用NPU的6TOPS算力進(jìn)行實(shí)時AI推理:

DMS SDK輸出的檢測結(jié)果包含豐富的面部狀態(tài)信息,應(yīng)用程序可基于這些指標(biāo)自定義判定邏輯:
|
檢測項(xiàng) |
輸出指標(biāo) |
指標(biāo)含義 |
報警判定邏輯 |
應(yīng)用場景 |
|
人臉定位 |
人臉框 + 關(guān)鍵點(diǎn) |
實(shí)時跟蹤駕駛員面部位置 |
人臉丟失超過閾值時間 |
駕駛員離位/轉(zhuǎn)頭 |
|
閉眼檢測 |
EAR (Eye Aspect Ratio) |
眼睛縱橫比,值越低眼睛越閉合 |
EAR < 閾值,持續(xù) N 幀 |
疲勞駕駛預(yù)警 |
|
打哈欠檢測 |
MAR (Mouth Aspect Ratio) |
嘴巴縱橫比,值越高張嘴程度越大 |
MAR > 閾值,持續(xù) N 幀 |
疲勞/注意力下降 |
|
頭部姿態(tài) |
yaw / pitch / roll |
頭部繞各軸的旋轉(zhuǎn)角度 |
角度偏差超過安全范圍 |
注意力分散檢測 |
|
打電話檢測 |
phone_call標(biāo)志 |
綜合姿態(tài)+手部特征判定 |
檢測到手持電話行為 |
分心駕駛預(yù)警 |
以下為DMS系統(tǒng)在RK3576上的運(yùn)行數(shù)據(jù)。標(biāo)注✅的為已實(shí)測真實(shí)值,標(biāo)注🔲的為占位假數(shù)據(jù),待后續(xù)實(shí)測后替換。
|
指標(biāo) |
數(shù)值 |
備注 |
|
攝像頭接口類型 |
MIPI CSI (RGB) |
普通RGB攝像頭,非紅外 |
|
輸入分辨率 |
1920×1080 |
全高清1080P RGB |
|
模型文件 |
rkdms_3576.data (~4.9MB) |
Rockchip DMS SDK打包模型 |
|
推理加速硬件 |
RK3576 NPU (6 TOPS) |
NPU獨(dú)占推理,不占用CPU/GPU |
DMS推理幀率 |
~25FPS |
攝像頭25幀/s |
|
單幀NPU推理耗時 |
11~25ms |
含人臉檢測+屬性分析 |
|
NPU占用率 |
~9% |
單核NPU:18% |
|
CPU占用率 (DMS進(jìn)程) |
~5% |
單核占用率:22% |

在實(shí)際車載場景中,360環(huán)視和DMS需要同時呈現(xiàn)在駕駛員可見的屏幕上。我們利用HDMI 2560×1440@60Hz的完整分辨率,通過DRM Overlay Plane機(jī)制實(shí)現(xiàn)了左右分屏布局:
|
區(qū)域 |
分辨率 |
內(nèi)容 |
DRM機(jī)制 |
|
左半屏 |
1280×1440 |
360環(huán)視鳥瞰全景 |
Overlay Plane 162,drmModeSetPlane翻頁 |
|
右半屏 |
1280×1440 |
DMS駕駛員監(jiān)測畫面 |
DRM shim劫持層,映射到另一Overlay Plane |
|
底層 |
2560×1440 |
桌面/系統(tǒng)UI(可選) |
Primary Plane,X11桌面層 |

將360環(huán)視和DMS同時運(yùn)行時,米爾RK3576開發(fā)板的整體資源占用情況如下。這個「資源賬本」清晰地展示了異構(gòu)計算架構(gòu)的優(yōu)勢——不同類型的工作負(fù)載跑在不同類型的處理單元上,互不阻塞:
|
資源類型 |
360環(huán)視 |
DMS |
合計占用 |
|
CPU |
~40% |
5% |
45% |
|
GPU (Mali G52) |
0% |
0% |
0% |
|
RGA |
45% |
6% |
51% |
|
NPU (6 TOPS) |
0% |
8% |
8% |
|
顯示帶寬 |
✅ 左1280×1440 |
✅ 右1280×1440 |
2560×1440@60Hz |
在嵌入式平臺上構(gòu)建實(shí)時視覺系統(tǒng),算力通常不是第一瓶頸,數(shù)據(jù)搬運(yùn)才是。GPU能加速計算,但不能消除搬運(yùn)——搬運(yùn)轉(zhuǎn)嫁到GPU↔CPU的PCIe/總線路徑上,甚至可能更慢。我們的優(yōu)化路徑從「用更快的計算單元」轉(zhuǎn)向「消滅不必要的數(shù)據(jù)移動」,這個思維轉(zhuǎn)變是性能突破的根本原因。DMA-BUF和DRM是Linux生態(tài)系統(tǒng)為這類場景量身定制的零拷貝基礎(chǔ)設(shè)施。善用這些機(jī)制,在RK3576級別的嵌入式芯片上完全能夠構(gòu)建出滿足車規(guī)實(shí)時性要求的智能視覺系統(tǒng)。