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.zip和models.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.py 中 get_and_process_data() 或传入自定义 --data_dir 即可。
性能数据
infer.py 对 doc/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
-
ImportError: No module named
pointnet2._ext确认在 import
GraspNet之前执行import graspnet_npu_adaptor。 -
是否还需要
cd pointnet2 && python setup.py install?OM 路线不需要编译 CUDA 扩展。若误装 CUDA 版 pointnet2,可能与 adaptor 冲突,建议卸载后仅依赖
pointnet2_ops。