结论
双目 OCC 离线推理不需要启动相机,可以直接用静态图像数据推理。推理结果是3D 占据网格(Occupancy Grid),包含空间位置信息,但基础版没有语义分类。
关键信息
1. 是否需要启动相机?
不需要。离线推理使用预先采集的图像数据:
# 离线推理示例(使用静态图像)
python3 tools/infer.py \
--config configs/occupancy/dstereo_occnet.py \
--model-inputs imgl:left_001.png,imgr:right_001.png \
--device npu \
--save-path ./output
与在线推理的区别:
- 在线推理:实时从相机获取图像流(需要启动相机节点)
- 离线推理:从磁盘读取静态图像(不需要相机)
2. 推理结果是什么样的?
OCC 输出是3D 占据网格,不是深度图:
| 特性 | Stereonet(深度) | OCC(占据网格) |
|---|---|---|
| 输出格式 | 深度图(2D) | 3D 体素网格 |
| 数据内容 | 每个像素的距离值 | 每个体素的占据状态 |
| 分辨率 | 640×352 | 32×64×96(体素数) |
| 单位 | 毫米(mm) | 体素索引(可转米) |
| 语义信息 | 无 | 基础版无,高级版有 |
输出示例(X5 基础版):
# 占据网格张量形状:[1, 32, 64, 96]
# 体素大小:2cm
# 探测范围:
# X: ±0.32m(左右)
# Y: 0-1.28m(前后)
# Z: ±0.48m(上下)
occupancy_grid = model_output # 0=空闲,1=占据
可视化方式:
- 在 RViz2 中查看 3D 占据网格
- 转换为点云显示
- 投影到 2D 平面做俯视图
参考:[RDK X5][OccNet]用 MIPI 进行 OCC 在线推理,在 rviz2 无法查看占用网格
3. 有现成的可用数据集吗?
官方数据集下载路径已失效,但有替代方案:
方案 A:使用 Sceneflow 数据集(推荐)
Sceneflow 是双目立体视觉的标准数据集,包含左右目图像对:
# 下载地址(需自行搜索镜像)
# https://lmb.informatik.uni-freiburg.de/resources/datasets/SceneFlowDatasets.en.html
# 数据集结构
SceneFlow/
├── FlyingThings3D/
│ ├── frames_cleanpass/
│ │ ├── TRAIN/
│ │ │ ├── left/
│ │ │ └── right/
│ │ └── TEST/
│ └── frames_finalpass/
使用方法:
# 选取任意左右目图像对
python3 tools/infer.py \
--config configs/occupancy/dstereo_occnet.py \
--model-inputs \
imgl:SceneFlow/FlyingThings3D/frames_cleanpass/TEST/0001/left/0000.png,\
imgr:SceneFlow/FlyingThings3D/frames_cleanpass/TEST/0001/right/0000.png \
--device npu
方案 B:使用自己的双目图像
如果有其他双目相机采集的数据:
# 要求:
# 1. 左右目图像已校正对齐
# 2. 分辨率调整为 640×352(或模型要求的尺寸)
# 3. 格式为 RGB 三通道 PNG
python3 tools/infer.py \
--config configs/occupancy/dstereo_occnet.py \
--model-inputs imgl:left.png,imgr:right.png \
--device npu
方案 C:社区提供的测试数据
检查官方 GitHub 仓库是否有示例数据:
4. 重要注意事项
语义信息问题
根据社区反馈,X5 的基础版 OCC 只有几何占据信息,没有语义分类:
“X5 目前支持的是基础版 OCC(仅含障碍物几何信息)。针对需要语义理解的高性能 OCC 场景,S100 和 S600 系列会有更完善的硬件支持和算法适配。”
参考:双目 OCC dstereo_occnet 没有语义信息
如果你需要语义信息:
- 考虑使用 S100 平台
- 或等待官方发布语义版模型
- 或自己训练带语义的 OCC 模型
图像尺寸要求
OCC 模型对输入尺寸有严格要求,需要调整为640×352:
import cv2
# 调整图像尺寸
left = cv2.resize(left_raw, (640, 352))
right = cv2.resize(right_raw, (640, 352))
完整离线推理流程
# 1. 准备左右目图像对(已校正、640×352)
# 2. 运行离线推理
cd /opt/dstereo_occnet
python3 tools/infer.py \
--config configs/occupancy/dstereo_occnet_x5.py \
--model-inputs imgl:data/left_001.png,imgr:data/right_001.png \
--device npu \
--save-path ./output
# 3. 查看结果
ls ./output/
# 输出:occupancy_grid.bin(3D 占据网格数据)
# 4. 可视化(可选)
# 方法 A:转换为点云在 RViz2 中查看
# 方法 B:使用官方可视化工具
建议
- 先用 Sceneflow 数据集测试流程,确保推理正常
- 再用自己的数据验证效果
- 如果需要语义信息,考虑升级到 S100 平台
- 参考官方文档:双目占据网络 | RDK DOC
需要我帮你找具体的数据集下载链接或提供图像预处理脚本吗?