TX2+TensorRT+DIGITS实现图像的识别、检测和分割---1---Jetson配置

本教程详细介绍了如何在Jetson TX2上利用TensorRT和DIGITS进行图像识别和检测。首先,讲解了安装Ubuntu、JetPack以及所需工具的过程,接着阐述了如何在主机上训练深度神经网络并部署到Jetson TX2,利用TensorRT进行高效的推演。此外,还提到了CUDA和cuDNN的安装,以及DIGITS服务器的启动和使用。
摘要由CSDN通过智能技术生成

图片描述


DIGITS Workflow

如果您是深度神经网络的新手,您可以查看这个教程,了解更多关于训练和推演的内容。

TensorRT下载地址:https://developer.nvidia.com/nvidia-tensorrt-download
TesnsoRT介绍文档:https://devblogs.nvidia.com/tensorrt-3-faster-tensorflow-inference/
TensorRT开发者指南:http://docs.nvidia.com/deeplearning/sdk/tensorrt-developer-guide/index.html
TensorRT样例代码:http://docs.nvidia.com/deeplearning/sdk/tensorrt-developer-guide/index.html#samples


图片描述

使用NVIDIA深度学习工具,您可以很容易的开始训练深度神经网络,还能高效的在您所需要的地方部署它们。独立的GPU通常在服务器,个人电脑或者笔记本电脑上面利用DIGITS进行训练。而Jetson 和集成的GPU通常用于嵌入式平台。

图片描述

NVIDIA DIGITS 是部署在云服务器或者个人电脑上的,用于训练网络模型的交互系统。而TensoRT和Jetson 是用于部署运行时的推理平台。TensorRT 利用了图优化和半精度FP16来支持双精度深度神经网络的推演。DIGITS和TensorRT一起构建了,开发和部署高层次的人工智能和感知的神经网络的高效的工作流程。


System Setup

在这份教程中,我们会使用一个PC(或者AWS)来训练深度神经网络。另外,我们会使用Jetson来进行推演。我们还会利用PC来对Jetson刷新最新的JetPack版本。

首先我们来安装和配置pc端需要的系统和工具


Installing Ubuntu on the Host

在PC端下载并且安装Ubungu 16.04 x86_64,下面是下载地址:

http://releases.ubuntu.com/16.04/ubuntu-16.04.2-desktop-amd64.iso
http://releases.ubuntu.com/16.04/ubuntu-16.04.2-desktop-amd64.iso.torrent

Ubuntu 14.04 x86_64也是可以的,但是在利用apt-get安装包的时候,需要对镜像进行一些修改


Running JetPack on the Host

在PC端下载最新版本的JetPack。除了刷新最新版的Jetson的BSP之外,JetPack还会自动安装一些类似于CUDA Toolkit的工具。您可以在Release Notes查看全版本特性列表和安装包

下载完上面的JetPack,在您的PC端执行下面的命令:

$ cd <directory where you downloaded JetPack>
$ chmod +x JetPack-L4T-3.1-linux-x64.run 
$ ./JetPack-L4T-3.1-linux-x64.run 

执行完上面的命令,JetPack 的界面就会启动,跟着下面的安装教程,就可以一步步完成安装。在开始的时候,JetPack将会确认您要部署的Jetson版本。

图片描述

选择您自己的Jetson版本(TX1,TX2或者TK1),然后选择Next继续。接下来,您就可以看到能够安装的包的列表。已经在host上面安装的包会在界面中Host-Ubuntu的栏目下面列出。而打算在Jetson上面安装的会在底部列出。您可以在菜单中选择或者取消一个独立的包装。

图片描述

如果想用CUDA来加速host端的网络训练,推荐选择右上角的Full选项。然后,选择Next开始安装。JetPack将会下载并且安装一系列的包。注:如果你想要找到下载的包,所有下载的.deb安装包都会保存在jetpack_downloads这个文件夹下面。

在下载完成之后,Jetpack将会进入最后的安装阶段,L4T BSP将会被刷入板子中。您需要把你的Jetson板子通过micro-USB接口连接到PC端(利用您的Jetson包装盒中的那条micro-USB的线)。

然后,同时按住Jetson板子上的Recovery按钮和Reset按钮,一小段时间之后,松开Reset按钮。接下来,您的Jetson 板子就会进入Recovery mode。

在PC端输入lsusb,如果出现了您的NVIDIA设备,那么就证明您的设备已经和PC端链接成功了。接下来JetPack就会把系统和相关工具刷入您的板子中。

刷完系统之后,Jetson就会重新启动,如果连接到了一个HDMI的显示器上,就会看到一个Ubuntu 的桌面。然后,JetPack就会通过SSH连接到您的PC端来安装剩下的包(例如:ARM aarch64版本的CUDA Toolkit,cuDNN 和TensorRT)。您还可以选择您的JetPack以何种模式连接到您的PC端,可以直接相连,也可以连接到同一个路由器中。JetPack的安装程序会让您来确认一下。您可以查看JetPack的安装指南,来了解更多的内容。


Installing NVIDIA Driver on the Host

到这里,JetPack将会将最新的系统和工具刷进您的板子中,cuda toolkit也会在PC端和Jetson端都安好。不过,您还是需要将您PC端的NVIDIA的PCIe驱动安装进去。

在您的PC端输入一下命令来安装驱动:

$ sudo apt-get install nvidia-375
$ sudo reboot

在重新启动之后,输入以下命令,就可以看到英伟达驱动:

$ lsmod | grep nvidia
nvidia_uvm            647168  0
nvidia_drm             49152  1
nvidia_modeset        790528  4 nvidia_drm
nvidia              12144640  60 nvidia_modeset,nvidia_uvm
drm_kms_helper        167936  1 nvidia_drm
drm                   368640  4 nvidia_drm,drm_kms_helper

接下来运行CUDA samples中的例子来确认CUDA toolkit和driver安装好了:

$ cd /usr/local/cuda/samples
$ sudo make
$ cd bin/x86_64/linux/release/
$ ./deviceQuery
$ ./bandwidthTest --memory=pinned


Installing cuDNN on the Host

接下来这步是在您的PC端安装NVIDIA的cuDNN库。从Nvidia官网下载libcudnn和libcudnn 包:

https://developer.nvidia.com/compute/machine-learning/cudnn/secure/v6/prod/8.0_20170307/Ubuntu16_04_x64/libcudnn6_6.0.20-1+cuda8.0_amd64-deb
https://developer.nvidia.com/compute/machine-learning/cudnn/secure/v6/prod/8.0_20170307/Ubuntu16_04_x64/libcudnn6-dev_6.0.20-1+cuda8.0_amd64-deb

Then install the packages with the following commands:

$ sudo dpkg -i libcudnn6_6.0.20-1+cuda8.0_amd64.deb
$ sudo dpkg -i libcudnn6-dev_6.0.20-1+cuda8.0_amd64.deb


Installing NVcaffe on the Host

NVcaffe 是NVIDIA版本的对于GPU优化过的Caffe。NVcaffe 利用cuDNN和DIGITS来训练深度神经网络。从GitHub上面下载并且编译源码(下面介绍的是NVcaffe-0.15):

注:在这个教程中,NVcaffe只需要在PC端中安装用于训练。推演阶段我们使用的是TensorRT并不需要安装caffe。

$ sudo apt-get install --no-install-recommends build-essential cmake git gfortran libatlas-base-dev libboost-filesystem-dev libboost-python-dev libboost-system-dev libboost-thread-dev libgflags-dev libgoogle-glog-dev libhdf5-serial-dev libleveldb-dev liblmdb-dev libprotobuf-dev libsnappy-dev protobuf-compiler python-all-dev python-dev python-h5py python-matplotlib python-numpy python-opencv python-pil python-pip python-protobuf python-scipy python-skimage python-sklearn python-setuptools 
$ sudo pip install --upgrade pip
$ git clone -b caffe-0.15 https://github.com/NVIDIA/caffe
$ cd caffe
$ sudo pip install -r python/requirements.txt 
$ mkdir build
$ cd build
$ cmake ../ -DCUDA_USE_STATIC_CUDA_RUNTIME=OFF
$ make --jobs=4
$ make pycaffe

现在Caffe已经配置编译好了。接下来编辑~/.bashrc来把你的Caffe添加到你的系统环境中去(替换成你自己的地址)。

export CAFFE_ROOT=/home/your-name/workspace/caffe
export PYTHONPATH=/home/your-name/workspace/caffe/python:$PYTHONPATH

然后关闭并且重新打开终端来加载新改的环境。


Installing DIGITS on the Host

NVIDIA DIGITS 是一个基于Python的Web服务,提供了训练深度神经网络和管理数据集的交互界面。它最大的亮点是,您可以在PC端训练您的网络,然后把训练好的模型复制到您的Jetson端,然后再利用TensorRT进行推演。

首先,安装一些caffe需要的工具库,然后从GitHub上下载:

$ sudo apt-get install --no-install-recommends graphviz python-dev python-flask python-flaskext.wtf python-gevent python-h5py python-numpy python-pil python-pip python-protobuf python-scipy python-tk
$ git clone https://github.com/nvidia/DIGITS
$ cd DIGITS
$ sudo pip install -r requirements.txt


Starting the DIGITS Server

在终端中进入您的DIGITS的文件夹下,执行下面的命令,就可以启动DIGITS了:

$ ./digits-devserver 
  ___ ___ ___ ___ _____ ___
 |   \_ _/ __|_ _|_   _/ __|
 | |) | | (_ || |  | | \__ \
 |___/___\___|___| |_| |___/ 5.1-dev

2017-04-17 13:19:02 [INFO ] Loaded 0 jobs.

DIGITS将会在digits/jobs这个目录下保存您的任务(包括训练数据库和训练好的模型)。您可以在浏览器输入:localhost:5000来访问DIGITS界面

注:5000是DIGITS的默认端口,您可以用digits-devserver –port number来更改这个端口


Building from Source on Jetson

与此同时,JetPack还会提供TensorRT。它可以利用GoogleNet/Alexnet 和实时摄像头对图片进行识别,行人检测(画出检测框)和分割。它还能够部署在Jetson上面并且利用在PC端的DIGITS服务器上面训练的网络模型。

您可以在 GitHub上面下载最新的源码,并且在您的TX1/TX2上面编译。

注:您需要验证您的BSP版本和Jetson版本是否对应:
Jetson TX2 - JetPack 3.0 / L4T R27.1 aarch64 (Ubuntu 16.04 LTS)
Jetson TX1 - JetPack 2.3 / L4T R24.2 aarch64 (Ubuntu 16.04 LTS)
Jetson TX1 - JetPack 2.3.1 / L4T R24.2.1 aarch64 (Ubuntu 16.04 LTS)

note: this branch is verified against the following BSP versions for Jetson TX1/TX2:
Jetson TX2 - JetPack 3.0 / L4T R27.1 aarch64 (Ubuntu 16.04 LTS)
Jetson TX1 - JetPack 2.3 / L4T R24.2 aarch64 (Ubuntu 16.04 LTS)
Jetson TX1 - JetPack 2.3.1 / L4T R24.2.1 aarch64 (Ubuntu 16.04 LTS)


Cloning the Repo

首先,您需要安装git,cmake等工具:

$ sudo apt-get install git cmake

接下来下载jetson-inference:

$ git clone https://github.com/dusty-nv/jetson-inference


Configuring with CMake

运行cmake的时候,预安装的脚本(CMakePreBuild.sh)将会自动的安装一些依赖:

$ cd jetson-inference
$ mkdir build
$ cd build
$ cmake ../

注:cmake在加载CMakePrebuild.sh的时候,可能需要sudo权限。它还会从网上下载一些已经训练好的网络模型。


Compiling the Project

进入到jetson-inference/build的文件夹里面进行编译(注意,这里是step #2,后面会用到):

$ cd jetson-inference/build            # omit if pwd is already /build from above
$ make

您可以根据您的系统架构,在不同的文件夹里面编译成不同包(armhf 或者 aarch64):

|-build
   \aarch64         (64-bit)
      \bin          where the sample binaries are built to
      \include      where the headers reside
      \lib          where the libraries are build to
   \armhf           (32-bit)
      \bin          where the sample binaries are built to
      \include      where the headers reside
      \lib          where the libraries are build to


Digging Into the Code

作为参考,请参阅可用的视觉网络,包括用于图像识别的imageNet和用于目标检测的detectNet

/**
 * Image recognition with GoogleNet/Alexnet or custom models, using TensorRT.
 */
class imageNet : public tensorNet
{
public:
    /**
     * Network choice enumeration.
     */
    enum NetworkType
    {
        ALEXNET,
        GOOGLENET
    };

    /**
     * Load a new network instance
     */
    static imageNet* Create( NetworkType networkType=GOOGLENET );

    /**
     * Load a new network instance
     * @param prototxt_path File path to the deployable network prototxt
     * @param model_path File path to the caffemodel
     * @param mean_binary File path to the mean value binary proto
     * @param class_info File path to list of class name labels
     * @param input Name of the input layer blob.
     */
    static imageNet* Create( const char* prototxt_path, const char* model_path, const char* mean_binary,
                             const char* class_labels, const char* input="data", const char* output="prob" );

    /**
     * Determine the maximum likelihood image class.
     * @param rgba float4 input image in CUDA device memory.
     * @param width width of the input image in pixels.
     * @param height height of the input image in pixels.
     * @param confidence optional pointer to float filled with confidence value.
     * @returns Index of the maximum class, or -1 on error.
     */
    int Classify( float* rgba, uint32_t width, uint32_t height, float* confidence=NULL );
};

这两个网络都从包含了TensorRT代码的共享tensorNet网络中继承了实例


  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值