全链路模块输入输出梳理(适配 RDK X5 平台,严格区分:像素图像 / 结构化数据,同时厘清硬件、驱动、软件库、网络模型、加速器边界)

先给出整条典型流水线基线:

光线 → 图像传感器 → MIPI CSI → 相机驱动 → ISP → 图像帧缓存 图像帧分流: ① NV12 → BPU 运行 CNN;② YUV/RGB → GPU 图像预处理;③ RGB/BGR → OpenCV 传统视觉

1. 图像传感器(Image Sensor,IMX 系列等)

输入:光学光信号

输出:MIPI CSI-2 传输流,像素格式为 Bayer RAW 可选:RAW8 / RAW10 / RAW12 / RAW14(RGGB/BGGR/GRBG/GBRG) 特性:

  • 无色彩、未 Debayer,只是光电原始采样值;
  • 无法直接被 ISP 以外任何单元处理;
  • 不输出 YUV/RGB。

2. 相机驱动(Linux V4L2 / RDK 媒体驱动模块)

定位:硬件协议转发、内存管理、控制通道,不做像素运算 输入

  • 接收 Sensor 通过 MIPI 传来的 RAW 数据流;
  • 接收上层配置指令(分辨率、曝光、帧率)。
  • 输出
  • 把 RAW 数据流转发给硬件 ISP;
  • ISP 处理完成后,驱动向用户态抛出帧缓存(NV12/YUYV/RGB)

驱动本身换图像不转格式,只搬运数据、管理 DMA 缓冲区、控制寄存器。

通俗理解:驱动是 “快递员”,不加工货物,只负责转运图像数据。

3. 硬件 ISP(RDK 内置图像信号处理器)

输入:仅支持 Bayer RAW(RAW8/10/12)

输出(内存图像帧,可选配置) NV12(首选)、YUYV (UYVY)、RGB888、BGR888 内部硬件流水线:Debayer、白平衡、降噪、LDC 畸变校正、Gamma、色彩转换、缩放裁剪。

约束:只能固化成像算法;不能跑 CNN、不能跑 OpenCV 边缘 / 形态学算子。

4. OpenCV 算法库(传统机器视觉,cv::Mat 为载体)

默认运行 CPU;可启用 OpenCL 将算子卸载至 GPU

输入 原生友好格式:BGR8、RGB8、GRAY8、YUYV ⚠️ NV12 无原生支持,需要手动拆分平面构造 Mat; ⚠️ Bayer RAW 虽然提供转换 API,但 CPU 效率极低,实时工程禁止使用 输出:仍然是cv::Mat BGR/RGB/ 灰度图、二值图、处理后的图像; 额外输出:轮廓点集、特征点、匹配对、相机标定参数等图像结构化信息

用途:Canny、阈值、形态学、轮廓检测、光流、模板匹配、标定等传统视觉;不负责深度学习推理

5. CNN 深度神经网络(网络模型本身,*.onnx)

只是数学权重与网络拓扑,不是硬件! 模型逻辑输入(逻辑张量)

常见:RGB 图像张量 / YUV 归一化张量(float32,归一化至 0~1 或减均值除方差) 注意:这是算法理论输入,不等于硬件 BPU 直接接收 NV12;硬件会做预处理适配。

模型逻辑输出(张量)

  • 目标检测:坐标、置信度、类别张量
  • 语义分割:每个类别概率图张量
  • 分类:各类别得分向量

关键点: ONNX 模型是浮点网络;部署到 BPU 前必须经过量化工具转为定点模型.bin;

网络本身不能直接读取硬件 NV12 帧,需要配套预处理。

6. GPU(通用图形 / 并行计算单元)

输入:成熟彩色图像帧 NV12、YUYV、RGB888、BGR888 ❌ 无法直接处理 Bayer RAW

输出:同类型图像帧(NV12/YUV/RGB/BGR)

擅长:硬件加速缩放、旋转、仿射变换、YUV↔RGB 格式转换、图像滤波、图层渲染叠加。 区分:GPU 可以跑通用算子,但不是专门 AI 推理硬件CNN 推理性能远弱于 BPU。

7. RDK X5 BPU(地平线 AI 推理硬件加速器)

硬件输入(工程最优链路)

✅ NV12(YUV420,支持零拷贝,推荐)、YUYV、RGB888

不支持 Bayer RAW

BPU 内置硬件预处理模块:缩放、归一化、色域转换,可以直接消费 ISP 输出 NV12,省去 CPU/GPU 格式转换 硬件输出结构化张量数据(无图像像素) 检测框、置信度、类别 ID、分割掩码张量、特征向量。 ⚠️ BPU 只执行量化后的 CNN 模型前向推理;不能运行 OpenCV 传统视觉算子

统一汇总对照表

表格

模块 输入数据 输出数据 重要备注
图像传感器 光线 Bayer RAW8/10/12(MIPI 数据流) 原始光电采样,无彩色
相机驱动 (V4L2 / 媒体驱动) 1. Sensor RAW 流2. 用户控制指令 1. RAW 转发给 ISP2. ISP 处理后的图像帧缓存 (NV12/YUYV/RGB) 只搬运数据,不做图像处理
硬件 ISP Bayer RAW8/10/12 NV12、YUYV、RGB888、BGR888 唯一硬件单元可以处理 RAW
OpenCV 算法库 BGR/RGB/GRAY/YUYV;NV12 需手动解析;RAW 不适合实时 cv::Mat 图像 + 轮廓 / 特征点等视觉结构信息 传统机器视觉,不含 CNN 推理
CNN 深度神经网络 (ONNX 模型) 理论浮点张量:归一化 RGB/YUV 图像 浮点张量:检测框、分割图、分类概率 只是网络拓扑权重,需要量化才能部署 BPU
GPU NV12/YUYV/RGB/BGR;不支持 RAW NV12/YUYV/RGB/BGR 图像帧 图像变换、格式转换、渲染,通用并行计算
RDK X5 BPU 推理单元 NV12 (首选)、YUYV、RGB/BGR;不支持 RAW 推理结构化张量(框、掩码、特征) 仅运行量化 CNN,不输出图片

RDK X5【推荐最优完整数据流(格式流向)】

plaintext

光线 → Sensor → RAW10
→ 相机驱动转发 → ISP
→ ISP输出 NV12 帧缓存(DMA内存)
    ├─ 零拷贝直送 BPU → 运行量化CNN → 输出检测框
    └─ NV12送入GPU → GPU硬件转BGR → OpenCV绘制框、轮廓后处理

高频开发误区总结

  1. ❌ RAW 不能直接送入驱动以外所有模块,必须经过 ISP;
  2. ❌ CNN 模型理论输入是浮点张量 ≠ BPU 直接接收 NV12,依靠 BPU 内置硬件预处理做转换;
  3. ❌ BPU 输出不是图片,想要可视化画框必须交给 OpenCV/GPU;
  4. ❌ 相机驱动不会做图像格式转换,格式转换是 ISP/GPU/ 软件负责;
  5. ❌ OpenCV 不能调用 BPU 推理 CNN,必须使用地平线原生媒体 SDK + BPU 工具链。
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐