主机 PCPyTorch/TensorRT习惯输入 RGB边缘端RDK X5、NPU/BPU绝大多数情况【不用原生 RGB 作为模型输入】主流是 NV12/YUV420 Planar。根源硬件链路差异 PC摄像头→软件解码→RGB 内存数组→ CNN 推理RDK X5 嵌入式平台MIPI Sensor → ISP硬件解码输出 NV12→直接送入 BPU 推理尽量避免转 RGB。下面分层完整拆解结合RDK 双目视觉项目。一、主机PC/GPU标准链路训练 PC 推理输入规范图像存储JPG/PNG 解码得到RGBHWC深度学习框架标准排布PyTorchCHW顺序R、G、BOpenCV 陷阱默认读出BGR训练 / 推理必须手动转 RGB模型 ONNX 输入张量定义[1,3,H,W] float32 RGB特点软件生态统一大家默认 RGBGPU 做颜色转换开销很低不用考虑硬件 ISP 输出格式。二、边缘端 RDK X5BPU真实链路MIPI 相机原始通路Sensor RAW → ISP硬件处理 → 硬件输出NV12YUV420_8bit两种方案对比方案 ANV12 直接送入 BPU工程量产首选✅优势零拷贝、无颜色空间转换ISP 输出帧 Buffer 直接给推理CPU 不参与图像转换带宽占用最低NV12 1.5 字节 / 像素RGB 3 字节 / 像素4K 图像带宽直接减半ISP 硬件天然输出格式不需要额外内存开辟 RGB 缓存。⚠️关键问题训练用 RGB端侧输入 NV12颜色空间不一致怎么办解决办法二选一1模型预处理放到硬件预处理单元BPU 内置 PreProc在离线模型转换工具hb_model_convert配置 开启YUV→RGB 色彩空间转换、均值 / 归一化缩放。 转换逻辑固化进模型任务不在 CPU 执行。数据流NV12内存→ BPU 内部硬件自动完成 YUV 转 RGB 归一化 → CNN 卷积。2训练时模拟 YUV 噪声高精度项目可选绝大多数检测任务不需要。方案 B先转 RGB 再送入推理强烈不推荐量产流程NV12 → CPU 调用 OpenCV 转换成 RGB → 送入推理 缺点4K 图像转换消耗大量 CPU额外占用双倍内存增加帧延迟容易造成帧率上不去、丢帧 只适合调试阶段可视化查看图像。三、格式概念区分极易混淆逻辑输入模型逻辑CNN 数学计算层面依然等价于 RGB 三通道 只是物理内存里不存放 RGB 数组以 NV12 存储由硬件实时转换。物理输入内存 Buffer 真实数据PC内存 RGB 数组 RDK 边缘端内存 NV12 YUV 数据通俗比喻 主机把饭菜提前做好RGB端上桌 端侧原材料 (NV12) 直接送进灶台 (BPU)灶台内置厨具现场转换成需要的 RGB 格式。四、补充其他边缘芯片通用规律地平线 BPURDK X3/X5主推 NV12 输入昇腾 NPU支持 YUV/RGB同样优先 YUV 硬件通路寒武纪 MLU优先 YUV420手机 NPU全部摄像头通路 YUV 直入 NPU所有带硬件 ISP 的嵌入式视觉平台设计思想统一避免 CPU 做色彩转换。五、训练 ↔ 端侧对齐重要坑点工程高频翻车通道顺序 PC 训练RGBOpenCV 读取图片是 BGR。很多人训练写错通道端侧直接识别失效。归一化 均值plaintexthost: img (rgb / 255.0 - mean) / std这段预处理不要放到 CPU 代码循环里跑模型转换时配置进 BPU 预处理单元。 3. 色域范围关键图像传感器输出 YUVFull Range [0~255]电视标准 YUVLimited Range [16~235] 两端范围不一致图像亮度偏移检测准确率暴跌。 在 hb_model_convert 工具里必须正确配置 range 类型。六、最简工程实施建议RDK X5 YOLO / 检测网络PC 训练标准 RGB 图像训练导出 ONNX输入[1,3,H,W] RGB模型转换阶段hb_model_convert输入源设置nv12配置 YUV2RGB 转换、图像均值、归一化、色域范围板端业务代码 从 hobot_vio 获取 NV12 帧直接传给 dnn 推理接口不调用 cv::cvtColor可视化调试分支单独拷贝一份 NV12 转 RGB 用于显示推理主线保持 NV12 直推。七、一句话总结逻辑上 CNN 仍然需要 RGB 三通道信息 PC/GPU 物理内存存放 RGBRDK 这类带 ISPBPU 的边缘硬件物理内存传输使用 NV12由 BPU 内置硬件单元实时完成 YUV→RGB 转换规避 CPU 图像转换开销。