Skip to content

0 总体概览

总体目标:

使用昇腾310P,获取到机械臂抓取物体的抓点。本文档提供了一种较典型的分层模型方案部署:YOLO11 + GraspNet。

阅读该文档后,你将能够将YOLO11+GraspNet部署到310P开发板上进行推理,获取物品抓取操作的抓点。

硬件架构

参考开发套件介绍及组网


软件架构

本文档中,后续环境搭建以及模型快速上手部署,都在昇腾310P的Host侧主机(MiniPC)进行。


1 环境搭建

支持操作系统:Ubuntu22.04;OpenEuler

NPU:Ascend 310P

  表1 组件安装顺序表

组件安装顺序

版本

安装指导

1. Ubuntu

22.04

OS安装

2. Firmware和Driver

24.RC1

驱动安装

3. CANN

8.1.RC1

CANN安装

4. Python

3.10.xx

Ubuntu22.04 自带

5. Pytorch & torch_npu

2.4.0

Pytorch&torch_npu安装指导

6. aie_bench

0.0.2

ais_bench安装指导

7. ACL Lite

/

ACLLite安装指导

2 YOLO11+GraspNet模型推理部署

环境搭建完成后,本章节介绍如何将YOLO11和GraspNet部署到Ascend 310P开发板上进行推理,并将两个模块串接起来。

2.1 YOLO

2.1.1 概述

YOLO11 是 Ultralytics YOLO 系列实时目标检测器的最新版本,它在提高特征提取能力和检测精度的同时,实现了更快的处理速度,并且以更少的参数在 COCO 数据集上达到了更高的平均精度均值,能无缝部署在多种环境中,支持目标检测、实例分割、图像分类等多种计算机视觉任务

参考实现:Ultralytics YOLO11

2.1.2 模型输入输出

输入数据:

输入数据名(name)

数据类型(dtype)

数据大小(shape)

数据排布格式

images

float32

[1, 3, 640, 640]

NCHW

输出数据:

输入数据名(name)

数据类型(dtype)

数据大小(shape)

数据排布格式

output0

float32

[1,84, 8400]

ND

output1

float32

[1, 32, 160, 160]

ND

以上是模型推理的输入和输出。对于一张输入图像,需要经过前处理转换到该输入。对于输出,需要经过后处理,转化为最终需要的boxes和segments。

2.1.3 快速上手

流程图

以下步骤都在都在昇腾310P的Host侧主机上进行。

步骤一 获取代码和模型文件

  1. 获取gitcode仓库代码并安装相关依赖:

  (gitcode需提前注册,登录密码使用个人访问令牌)

  git clone https://gitcode.com/iRoboDevContest/Ascend-YoloGraspnet.git

  cd Ascend-YoloGraspnet

  pip install -r requirements.txt

  1. 获取原始模型YOLO11m-seg.pt,获得官方原始模型yolo11m-seg.pt。

  若想要选择不同参数量的模型,可以参看实例分割 - Ultralytics YOLO 文档

步骤二 模型转换得到OM模型文件

  1. yolo11m-seg.pt转换为yolo11m-seg.onnx

  python python/export_yolo11_onnx.py

  1. 使用ATC工具将yolo11m-seg.onnx转为yolo11m-seg.om

    1. 执行命令查看芯片名称(${chip_name})
yaml
npu-smi info
#该设备芯片名为Ascend310P1 (自行替换)
回显如下:
+-------------------+-----------------+------------------------------------------------------+
| NPU     Name      | Health          | Power(W)     Temp(C)           Hugepages-Usage(page) |
| Chip    Device    | Bus-Id          | AICore(%)    Memory-Usage(MB)                        |
+===================+=================+======================================================+
| 0       310P1     | OK              | 15.8         42                0    / 0              |
| 0       0         | 0000:82:00.0    | 0            1074 / 21534                            |
+===================+=================+======================================================+
| 1       310P1     | OK              | 15.4         43                0    / 0              |
| 0       1         | 0000:89:00.0    | 0            1070 / 21534                            |
+===================+=================+======================================================+
2. 执行ATC命令将onnx转换为om
shell
# 这里仅以batchsize=1为例进行测试
# ${chip_name}根据芯片名称替换,这里为 Ascend310P1
 atc --model=yolo11m-seg.onnx \
     --framework=5 \
     --output=yolo11m-seg \
     --input_format=NCHW \
     --input_shape='images:1,3,640,640' \
     --log=error \
     --soc_version=Ascend${chip_name}

# 参数说明:
# --model:为ONNX模型文件。
# --framework:5代表ONNX模型。
# --output:输出的OM模型。
# --input_format:输入数据的格式。
# --input_shape:输入数据的shape。
# --log:日志级别。
# --soc_version:处理器型号,通过npu-smi info获得。
3. 执行成功后获得模型文件<b>yolo11m-seg.om</b>

步骤三 模型推理和验证

  1. 运行推理:

  代码中有输入数据前处理和输出数据后处理,最终得到boxes和masks。

  python python/infer_yolo11_om.py --input yolo11_input.png --output yolo11_output.png

  1. 示例推理:

  示例输入:

示例输出可视化后:

可视化了输出的所有boxes和segments,以及labels和scores

筛选了label为bottle后,得到的masks为:

步骤四 性能(推理时间)测试

运行测试代码:

python python/test_yolo11_om.py --input yolo11_input.png --output yolo11_output.png

得到推理时间为20ms左右。

2.2 GraspNet

2.2.1 概述

GraspNet 是聚焦视觉引导机器人抓取的深度学习模型,旨在解决复杂场景中物体精准抓取问题。常采用双 / 多分支架构,提取视觉特征并预测抓取参数,具备场景泛化强、实时性与精度平衡、任务扩展性高的优势,已在工业制造、物流仓储、服务机器人等领域广泛应用,推动机器人抓取智能化。

参考实现:graspnet-baseline

2.2.2 输入输出

输入数据:

输入数据名(name)

数据类型(dtype)

数据大小(shape)

数据排布格式

rgb_image

float32

[1, 720, 1280, 3]

ND

depth

uint16

[1, 720, 1280]

ND

mask

uint8

[1, 720, 1280]

ND

intrinsic

float32

[3, 3]

D

输入数据名(name)

数据类型(dtype)

数据大小(shape)

数据排布格式

end_points

float32

[1,20000, 3]

ND

输出数据:

输入数据名(name)

数据类型(dtype)

数据大小(shape)

数据排布格式

GraspPoints

float32

[N, 4, 4]

ND

Confidences

float32

[N, 1]

ND

Width

float32

[N, 1]

ND

Height

float32

[N, 1]

ND

2.2.3 快速上手

流程图:

步骤一 获取代码和原始模型文件

  1. 获取仓库代码并安装相关依赖:

  git clone https://gitcode.com/iRoboDevContest/Ascend-YoloGraspnet.git
cd Ascend-YoloGraspnet

  pip install -r requirements.txt

  cd graspnetAPI

  pip install .

步骤二 转换原始模型pt文件为om模型文件

  1. 将原始pt文件加载后,得到各模块pt文件

  python export_pt_models.py

  1. 将部分pt文件转换为onnx

  python export_onnx_models.py

  1. 将部分onnx模型文件转换为om模型文件

  python export_om_models.py

步骤三 使用310P进行模型推理

  1. 运行推理程序

  python infer_graspnet_om.py

  1. 示例推理

  示例输入:

  rgb输入

  mask输入:

  示例输出:

步骤四 验证测试

  1. 运行推理测试代码:

  python test_infer_graspnet_om.py

  得到推理运行时间。当前在1.8-2.0s 左右,符合性能预期。

2.3 YOLO + GraspeNet联合推理

2.3.1 概述

使用YOLO目标检测指定目标,得到masks,作为输入传递给GraspNet。GraspNet可获得指定目标的抓点。

2.3.2 程序输入输出

输入数据:

输入数据名(name)

数据类型(dtype)

数据大小(shape)

数据排布格式

rgb_image

float32

[1, 720, 1280, 3]

ND

depth

uint16

[1, 720, 1280]

ND

intrinsic

float32

[3, 3]

ND

target_obj

string

[N]

ND

输出数据:

输入数据名(name)

数据类型(dtype)

数据大小(shape)

数据排布格式

GraspPoints

float32

[N, 4, 4]

ND

Confidences

float32

[N, 1]

ND

Width

float32

[N, 1]

ND

Height

float32

[N, 1]

ND

2.3.3 快速上手

步骤一 完成前置步骤

请完成前置步骤2.1 YOLO推理2.2 GraspNet推理

步骤二 运行联合推理程序

python infer_yolo_graspnet.py

示例推理

示例输入:

target_obj: 'Nongfu_water'

rgb输入:



mask(中间结果,YOLO的输出):


示例输出:

抓点输出可视化:

此时已经推理得到抓点。