文件最后提交记录最后更新时间
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
README

GraspNet(OM)-推理指导

概述

GraspNet-1Billion 是面向通用物体抓取的大规模 RGB-D 点云抓取检测基准。本指导基于 graspnet-baseline,在 Ascend NPU 上以 OM 离线模型 完成推理部署,支持单帧 RGB-D 抓取推理与 GraspNet-1Billion 测试集精度评测。

插件与驱动准备

  • 该模型需要以下插件与驱动

    配套 版本 环境准备指导
    固件与驱动 24.1.RC3 Pytorch框架推理环境准备
    CANN 8.3.RC1 包含 kernels 包和 toolkit 包
    Python 3.11 -
    PyTorch 2.1.0 -
    Ascend Extension PyTorch 2.1.0.post17 -
    此模型已在Atlas 300V Pro上验证。推荐拉取拉取华为昇腾社区镜像部署 ascend hub

获取本仓源码

git clone https://gitcode.com/ascend/ModelZoo-PyTorch.git
cd ModelZoo-PyTorch/ACL_PyTorch/built-in/embodied_ai/GraspNet

环境准备

NPU 推理无需编译原 graspnet-baseline 中的 pointnet2 / knn CUDA 扩展,算子由仓内 pointnet2_ops.cpp提供。

  • 获取 graspnet-baseline 源码:
git clone https://github.com/graspnet/graspnet-baseline.git
  • 获取 graspnetAPI 源码(评测与 GraspGroup 可视化依赖):
git clone https://github.com/graspnet/graspnetAPI.git
  • 一键安装依赖,点云计算算子,为graspnetAPI打补丁并安装
bash install_env.sh
  • 下载预训练RealSense权重,放在weight目录下:
mkdir -p weight
cd weight
# checkpoint-rs.tar(RealSense)
# 下载链接见 graspnet-baseline README:
# https://github.com/graspnet/graspnet-baseline#training-and-testing
cd ..
  • 数据集准备:从 GraspNet 官网 下载test_seen.zipmodels.zip, 解压放在dataset目录下

文件目录结构

文件目录结构大致如下:

📁 GraspNet/
├── 📁 export_om/
│   ├── 📄 export_fp_vpmodule.py
│   ├── 📄 export_grasp_generator.py
│   ├── 📄 export_sa_mlp.py
│   └── 📄 npu_utils.py
├── 📄 graspnet_npu_adaptor.py      # NPU 适配入口(算子注册、精度 patch)
├── 📄 pointnet2_ops.cpp            # PointNet2 cpu算子
├── 📄 setup_pointnet2_ops.py       # 编译 PointNet2 cpu算子
├── 📄 infer.py                     # demo 入口
├── 📄 eval.py                      # GraspNet-1Billion 测试集精度评测入口
├── 📄 furthest_point_sampling.py                       # furthest point sampling
├── 📄 graspnet_om.py               # OM 端到端推理
├── 📄 graspnet_utils.py            # 碰撞检测、可视化等辅助函数
├── 📄 install_env.sh
├── 📄 requirements.txt
├── 📁 graspnet-baseline/
│   ├── 📁 models/
│   ├── 📁 pointnet2/
│   ├── 📁 doc/example_data/         # 示例 RGB-D 数据
│   └── ...
└── 📁 graspnetAPI/
    └── ...
└── 📁 dataset/
│   ├── 📁 models/
│   └── 📁 scenes/

导出 OM 模型

默认在GraspNet/output目录下生成onnx和om模型

# sa 模块mlp部分
python3 export_om/export_sa_mlp.py --checkpoint_path=/path/to/checkpoint-rs.tar

# backbone fp1, fp2 和 vpmodule
python3 export_om/export_fp_vpmodule.py --checkpoint_path=/path/to/checkpoint-rs.tar

# grasp generator
python3 export_om/export_grasp_generator.py --checkpoint_path=/path/to/checkpoint-rs.tar

参数说明

参数 说明 默认值
--checkpoint_path 预训练权重路径 必填
--output_dir 模型导出路径 ./output
--num_view 视角候选数量 300
--opset_version onnx导出算子版本 14
--skip_atc 跳过om导出 关闭
--skip_verify 跳过cpu 与 onnx,onnx 与 om精度对比 关闭
--device_id om 推理的device id 0.01
--soc_version 芯片型号 None,传入None时自动识别

模型推理

demo样例推理

# 1. 指定 NPU 设备 ID,默认为 0
export ASCEND_RT_VISIBLE_DEVICES=0

# 2. 执行infer, 确保output路径下有所需要的所有om模型文件
python3 infer.py --om_path=./output

默认使用 graspnet-baseline/doc/example_data/ 下的 RGB-D 样例,输出单次推理耗时,并输出 Open3D 可视化文件demo_scene.ply。

infer.py 主要参数:

参数 说明 默认值
--om_path 预训练权重路径 必填
--data_dir 数据路径 doc/example_data/
--num_point 输入点云采样点数 20000
--warmup 预热次数 3
--collision_thresh 碰撞检测阈值,设为 0 可跳过 0.01

自定义 RGB-D 数据

参考 graspnet-baseline/doc/example_data/,每个样本目录需包含:

文件 说明
color.png RGB 图像
depth.png 深度图
workspace_mask.png 工作空间 mask
meta.mat 相机内参 intrinsic_matrix 与深度缩放 factor_depth

修改 demo.pyget_and_process_data() 或传入自定义 --data_dir 即可。

性能数据

infer.pydoc/example_data 单帧点云(20000 点)进行 forward 推理,性能参考如下(FP32,batch_size=1):

模型 芯片 数据 单次推理耗时
GraspNet-baseline (RealSense) 300V Pro example_data 150ms
GraspNet-baseline (RealSense) 310P RC example_data 75ms

精度测试

在 GraspNet-1Billion 测试集上推理并 dump 结果,再用 graspnetAPI 评测 AP(推理和评测都集成在eval.py脚本中)。 确保output路径下有所有的OM模型文件

export ASCEND_RT_VISIBLE_DEVICES=0

python3 eval.py \
  --dataset_root=/path/to/dataset \
  --om_path=./output \
  --dump_dir=logs/dump_rs \
  --camera realsense \

eval.py 主要参数:

参数 说明
--dataset_root GraspNet-1Billion 数据集根目录
--om_path 预训练权重路径
--dump_dir 推理结果保存目录
--camera 相机类型

精度数据

模型 芯片 数据集 AP 竞品AP
checkpoint-rs 300V Pro test_seen 0.47 0.47
checkpoint-rs 310P RC test_seen 0.47 0.47

外部集成时请在 import 模型前调用:

import graspnet_npu_adaptor

FAQ

  1. ImportError: No module named pointnet2._ext

    确认在 import GraspNet 之前执行 import graspnet_npu_adaptor

  2. 是否还需要 cd pointnet2 && python setup.py install

    OM 路线不需要编译 CUDA 扩展。若误装 CUDA 版 pointnet2,可能与 adaptor 冲突,建议卸载后仅依赖 pointnet2_ops