求助!能否提供 640x352 的人体检测模型,或 960x544 的双目模型?

各位大佬好。我目前在旭日板子上同时运行 hobot_stereonetmono2d_body_detection。 双目模型 (DStereoV2.4_int16.bin) 锁死了 640x352 输入输出。 而目前的人体检测模型 (multitask_body_head_face_hand_kps_960x544.hbm) 要求 960x544 的原生 NV12 输入。 因为 mipi_cam 无法同时配置出这两种分辨率的流,导致两者无法同时运行。请问官方是否能提供一个支持 640x352 的人体检测 .hbm 模型,或者提供 960x544 的双目 .bin 模型?万分感谢!

你好!这是一个非常典型的多模型分辨率不匹配问题,在 RDK 开发中很常见。

核心结论

官方目前没有直接提供 640x352 的人体检测模型或 960x544 的双目模型,但你可以通过以下几种方案解决:


解决方案

方案一:使用 Resizer 模型进行分辨率转换(推荐)

这是最灵活的方案,不需要修改现有模型:

# 1. 在 ROS2 启动文件中添加 resizer 节点
# 将 640x352 的双目输出 resize 到 960x544,或反之
ros2 launch hobot_resizer resizer.launch.py \
    input_width:=640 \
    input_height:=352 \
    output_width:=960 \
    output_height:=544

优点

缺点

  • 会增加少量延迟(约 2-5ms)
  • 需要额外的 BPU 资源

方案二:自定义模型转换

如果你有模型源码(ONNX/PT 文件),可以重新转换为需要的分辨率:

# 1. 准备 640x352 分辨率的校准数据集
# 2. 使用 hb_mapper 进行量化转换
hb_mapper makertbin \
    --model-type onnx \
    --march bayes \
    --config your_config_640x352.yaml \
    --calibration-data ./calib_data_640x352/

注意事项

  • 官方 multitask_body_head_face_hand_kps_960x544.hbm 的 PT/ONNX 文件不开源,无法自行转换
  • 需要联系地平线商务获取模型源码或定制服务(参考 相关讨论

方案三:调整 MIPI 摄像头配置,输出多路不同分辨率

mipi_cam 支持同时配置多路不同分辨率的输出流:

# 在 mipi_cam 启动配置中设置多分辨率
# 示例:同时输出 640x352 和 960x544
ros2 launch mipi_cam mipi_cam_dual_channel.launch.py \
    cam0_width:=640 \
    cam0_height:=352 \
    cam1_width:=960 \
    cam1_height:=544

限制

  • 取决于摄像头 Sensor 是否支持多分辨率同时输出
  • 需要检查 Sensor 的硬件能力(IMX 系列通常支持)

方案四:联系官方定制模型

如果上述方案都不满足需求,可以直接联系地平线官方定制:

  • 需求:640x352 人体检测模型 或 960x544 双目模型
  • 联系方式:通过社区商务渠道或技术支持
  • 参考案例:已有用户通过商务渠道成功定制过特定分辨率模型

排查建议

1. 检查当前模型输入要求

# 查看模型输入信息
hbdk_model_verifier --model multitask_body_head_face_hand_kps_960x544.hbm

2. 检查 MIPI 摄像头支持的分辨率

# 查看 Sensor 支持的分辨率列表
v4l2-ctl --device=/dev/video0 --list-formats-ext

# 或通过 mipi_cam 日志查看
ros2 launch mipi_cam mipi_cam.launch.py --show-debug-info

3. 验证 Resizer 方案可行性

# 测试 resizer 节点性能
ros2 run hobot_resizer resizer_node \
    --input_topic /stereo/image \
    --output_topic /resized/image \
    --output_width 960 \
    --output_height 544

社区相关资源


建议行动步骤

  1. 优先尝试方案一(Resizer):最快落地,风险最低
  2. 如果性能要求极高:联系官方定制模型(方案四)
  3. 如果想深入了解:查看 Resizer 教程帖子,了解具体实现细节

需要我帮你查找 Resizer 的具体配置示例或联系官方的渠道吗?

直接要求提供模型 涉及到 重新训练 量化 并且做调优 工作量很大需要评估,建议走 Resizer 进行分辨率转换

我来帮你分析这个问题,并搜索社区是否有相关解决方案。

@mars_qiao 你好!这个问题在社区中确实比较常见,目前官方没有直接提供 640x352 的人体检测模型或 960x544 的双目模型,但有几种可行的解决方案:

:magnifying_glass_tilted_left: 问题分析

你的场景是典型的多模型分辨率冲突

  • hobot_stereonet 锁定 640x352
  • mono2d_body_detection 要求 960x544
  • mipi_cam 无法同时输出两种分辨率的流

:light_bulb: 解决方案

方案一:使用图像缩放节点(推荐)

在 ROS2 链路中加入 image_proc 或自定义缩放节点,将单路相机流缩放成两种分辨率:

# 相机输出 960x544 -> 一路直接给人体检测
# 另一路缩放到 640x352 -> 给双目立体网络

# 示例 launch 文件结构
ros2 launch hobot_mipi_cam mipi_cam.launch.py
ros2 launch image_proc resize.py --input /mipi_cam/image_raw --output /resized_640x352
ros2 launch hobot_stereonet stereonet.launch.py --input /resized_640x352
ros2 launch mono2d_body_detection body_detection.launch.py --input /mipi_cam/image_raw

优点:不需要新模型,灵活适配
缺点:缩放会引入少量延迟和画质损失

方案二:使用 ISP 多路输出(如果硬件支持)

部分 MIPI 相机传感器支持同时输出多路不同分辨率的流,检查你的相机规格:

# 查看相机支持的格式
v4l2-ctl -d /dev/video0 --list-formats-ext

如果支持,可以在 hobot_mipi_cam 的配置中启用多路输出。

方案三:联系官方获取定制模型

社区已有类似请求(参考 如何调整预装的multitask模型input尺寸),你可以:

  1. 在这个帖子下回复,说明你的具体应用场景
  2. 通过官方技术支持渠道提交模型定制需求
  3. 如果有批量需求,官方可能会考虑提供多分辨率版本

:pushpin: 临时建议

如果项目紧急,建议先用方案一快速验证功能,同时向官方反馈需求。社区中已有多个开发者提出类似需求,统一反馈有助于推动官方提供支持。

需要我帮你查找具体的图像缩放节点实现示例吗?