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-dev2017-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网络中继承了实例

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

  1. TX2+TensorRT+DIGITS实现图像的识别、检测和分割---3---图像识别(二)

    Testing Classification Model in DIGITS TensorRT下载地址:https://developer.nvidia.com/nvidia-tensorrt-dow ...

  2. 图像数字识别、数字分割(OCR识别,毕业设计)

    基本图像处理流程 这是我在测试图像处理中使用的原始图像.它有一些眩光点,但是图像相当干净.让我们逐步完成获取此源图像的过程,并尝试将其分解为单个数字. 影像准备 在开始图像处理流程之前,我们决定先调整 ...

  3. 计算机视觉、图像分类、目标检测、人脸比对、人脸识别、语义分割、实例分割、图像搜索

    计算机视觉.图像分类.目标检测.人脸比对.人脸识别.语义分割.实例分割.图像搜索 目录

  4. SAR图像飞机目标检测识别进展

    目标检测与识别是高分辨合成孔径雷达(SAR)领域的热点问题.机场上飞机作为一种典型目标,其检测与识别具有一定的独特性.在检测与识别的过程中,如何将深度学习和目标电磁散射机理结合.提高网络或模型的泛化能 ...

  5. 基于yolov3的行人目标检测算法在图像和视频中识别检测

    资源下载地址:https://download.csdn.net/download/sheziqiong/85772186 资源下载地址:https://download.csdn.net/downl ...

  6. Python实现条码识别:从图像中自动检测和识别条形码

    Python实现条码识别:从图像中自动检测和识别条形码 在现代零售业中,条形码是一项必不可少的技术.它们提供了一种快速.准确和可靠的方法来追踪和管理库存.随着计算机视觉技术的发展,我们可以利用Pyth ...

  7. JavaCV进阶opencv图像检测识别:ffmpeg视频图像画面人脸检测

    JavaCV免费教程目录: JavaCV入门教程(免费JavaCV教程) javacv实战专栏目录(2016年更新至今): JavaCV实战专栏文章目录(2016年更新至今) 2022年最新JavaC ...

  8. 端到端伪激光图像3D目标检测

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文由博主:流浪机器人 授权转载,二次转载请联系原作者 原文地址: ...

  9. 一文读懂图像局部特征点检测算法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|新机器视觉 研究图像特征检测已经有一段时间了,图像特征检 ...

最新文章

  1. ISME:林科院袁志林等-冷杉优势真菌共生发育的基因家族趋同演化及平衡选择机制...
  2. Py之Seaborn:数据可视化Seaborn库的柱状图、箱线图(置信区间图)、散点图/折线图、核密度图/等高线图、盒形图/小提琴图/LV多框图的组合图/矩阵图实现
  3. C#中控件Control的Paint事件和OnPaint虚函数的区别
  4. poj3723Conscription
  5. 测开2 - Python(文件操作)
  6. R语言中dim函数_R语言--向量化计算(apply族函数)
  7. mysql日志文件转存_【转】Mysql日志文件
  8. 临时和永久关闭Selinux
  9. SQL Server 2005 应用 全文搜索
  10. Qt汉字显示乱码的一个简单解决方案
  11. phpcms代码学习笔记(globle.function.php)
  12. matlab 系数矩阵存储,用Matlab对矩阵进行LU分解法 值得收藏
  13. Python 3——xlsxwriter生成图表
  14. php生成白色背景图片
  15. 怎么调节台式计算机字体大小,电脑上怎么调整字体大小
  16. 温故而知新,可以为师矣
  17. YYDS!大神自己动手制造游戏机
  18. 数据结构(本科学习)
  19. 从键盘输入接收多个整数,直到输入quit的时结束输入,把输入过的整数倒序排序输出。
  20. MATLAB判断是不是质数,MATLAB脚本质数的判断

热门文章

  1. Java实现QQ邮箱验证
  2. 关于signed main()不报超时与int main()报超时
  3. 罗丹明PEG罗丹明,RB-PEG-RB
  4. 使用ping测试MTU值
  5. 在TriCore架构芯片上移植 RT-Thread
  6. php后端必学layui框架速搭网站后台
  7. 《沈剑架构师训练营》第3章 - 快速性能优化
  8. 模型预测控制(MPC)——动态矩阵控制(DMC)
  9. 为您的DC/DC 转换器选择最佳开关频率
  10. scratch编程巡线小虫