12. 在 NVIDIA Jetson 模块上运行目标检测模型

本教程展示了如何在 Jetson 模块上安装 MXNet v1.6(支持 Jetson)和 GluonCV,并部署一个预训练的 GluonCV 模型用于目标检测。

本教程包含什么?

本教程展示了如何

  1. 在 Jetson 模块上安装 MXNet v1.6 及其依赖项

  2. 在该模块上安装 GluonCV 及其依赖项

  3. 在该模块上部署用于目标检测的预训练 YOLO 模型

注意

本教程已在 Jetson Xavier AGX 和 Jetson TX2 模块上进行测试。

本教程适合谁?

本教程将对在 Jetson 模块上开发深度学习应用的开发者有所帮助。它假设读者已配置好 Jetson 模块并安装了 Jetpack,熟悉 Jetson 工作环境,并对使用 MXNet 进行深度学习有所了解。

前提条件

要完成本教程,您需要

  • 一个配置好并使用 NVIDIA SDK Manager 安装了 Jetpack 4.4Jetson 模块

  • 显示器(查看 matplotlib 图形所需)和键盘,以便直接在模块上打开 shell

  • 已安装 Swapfile,尤其是在 Jetson Nano 上以增加内存(如果推理脚本终止并显示 Killed 消息,请增加内存)

安装支持 Jetson 的 MXNet v1.6

要安装支持 Jetson 的 MXNet,您可以按照 MXNet 官方网站上的安装指南进行操作。

或者,您也可以直接安装托管在公共 s3 存储桶中的支持 Jetson 的 MXNet v1.6 wheel。以下是安装此 wheel 的步骤

注意

警告:此 MXNet wheel 是为了方便您而提供的,但它包含的软件包并非由 Apache Software Foundation 提供或认可。因此,它们可能包含比 Apache 许可证具有更严格许可证的软件组件,您需要自行决定它们是否适合您的使用。与所有 Apache 版本一样,官方的 Apache MXNet(孵化中)版本仅包含源代码,可在此处找到。

我们首先安装 MXNet 依赖项

sudo apt-get update
sudo apt-get install -y git build-essential libopenblas-dev python3-pip
sudo pip3 install -U pip

然后下载并安装支持 Jetson 的 MXNet v1.6 wheel

wget https://mxnet-public.s3.us-east-2.amazonaws.com/install/jetson/1.6.0/mxnet_cu102-1.6.0-py2.py3-none-linux_aarch64.whl
sudo pip3 install mxnet_cu102-1.6.0-py2.py3-none-linux_aarch64.whl

至此,安装完成。您现在可以通过从 python3 导入 mxnet 来测试安装

>>> python3 -c 'import mxnet'

安装 GluonCV 及其依赖项

我们可以使用以下命令在 Jetson 模块上安装 GluonCV

sudo apt-get update
sudo apt-get install -y python3-scipy python3-pil python3-matplotlib
sudo apt autoremove -y
sudo pip3 install gluoncv

在 Jetson 上运行预训练的 GluonCV YOLOv3 模型

我们现在准备好部署一个预训练模型并在 Jetson 模块上运行推理。在本教程中,我们使用在 Pascal VOC 数据集上训练、以 Darknet53 为基础模型的 YOLOv3 模型。下面的目标检测脚本可以使用 python3 在 cpu/gpu 环境下运行。

注意

如果在 GPU 环境下运行,请将环境变量 MXNET_CUDNN_AUTOTUNE_DEFAULT 设置为 0 以禁用 cuDNN 自动调优

export MXNET_CUDNN_AUTOTUNE_DEFAULT=0

以下是目标检测 python 脚本

from gluoncv import model_zoo, data, utils
from matplotlib import pyplot as plt
import mxnet as mx

# set context
ctx = mx.gpu()

# load model
net = model_zoo.get_model('yolo3_darknet53_voc', pretrained=True, ctx=ctx)

# load input image
im_fname = utils.download('https://raw.githubusercontent.com/zhreshold/' +
                        'mxnet-ssd/master/data/demo/dog.jpg',
                        path='dog.jpg')
x, img = data.transforms.presets.yolo.load_test(im_fname, short=512)
x = x.as_in_context(ctx)

# call forward and show plot
class_IDs, scores, bounding_boxs = net(x)
ax = utils.viz.plot_bbox(img, bounding_boxs[0], scores[0],
                        class_IDs[0], class_names=net.classes)
plt.show()

这是输入图像

https://raw.githubusercontent.com/zhreshold/mxnet-ssd/master/data/demo/dog.jpg

运行上述脚本后,您应该会得到如下所示的输出图

https://gluon-cv.mxnet.io/_images/sphx_glr_demo_yolo_001.png

脚本总运行时间: ( 0 分 0.000 秒)

由 Sphinx-Gallery 生成的图库