RDK-X5带奥比astra_pro相机,能跑官方在线资料里的双目深度算法吗,怎么做的

结论

双目 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. 重要注意事项

:warning: 语义信息问题

根据社区反馈,X5 的基础版 OCC 只有几何占据信息,没有语义分类

“X5 目前支持的是基础版 OCC(仅含障碍物几何信息)。针对需要语义理解的高性能 OCC 场景,S100 和 S600 系列会有更完善的硬件支持和算法适配。”

参考:双目 OCC dstereo_occnet 没有语义信息

如果你需要语义信息

  • 考虑使用 S100 平台
  • 或等待官方发布语义版模型
  • 或自己训练带语义的 OCC 模型

:warning: 图像尺寸要求

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:使用官方可视化工具

建议

  1. 先用 Sceneflow 数据集测试流程,确保推理正常
  2. 再用自己的数据验证效果
  3. 如果需要语义信息,考虑升级到 S100 平台
  4. 参考官方文档双目占据网络 | RDK DOC

需要我帮你找具体的数据集下载链接或提供图像预处理脚本吗?