NVIDIA JETSON TX2运行某些目标检测方法小结

2,966 阅读8分钟

介绍

近年来,目标检测算法发展迅速,除了经典的R-CNN以及相应发展出来的算法,还有最近备受关注的的CenterNet等。

首先简单介绍下目前的算法,具体分析参考机器之心-《从锚点到关键点,最新的目标检测方法发展到哪了》一文。

目前计划两篇文章进行小结,第一篇主要围绕TX2简单介绍、刷机和PyTorch、TensorFlow安装过程进行;第二篇主要对运行过的目标检测算法方法进行简单介绍。

本文主要介绍内容如下:1.NVIDIA JETSON TX2运行的简单前期准备 2.我曾在TX2平台运行的目标检测算法,包括可以运行以及运行存在问题的算法

由于本身内容并非要针对算法进行二次开发并未很深入进行修改,同时因为平台限制,仅能性能范围内进行推理过程。看官请轻拍,存在的问题也请各位指出,相互学习帮助。

NVIDIA JETSON TX2系统

首先先贴上官方的贴图,简单介绍TX2的性能。

NVIDIA JETSON TX2技术规格
TX2平台令我们心动的主要是GPU的性能,具有同样架构的显卡游戏级显卡主要是10系显卡,当然TX2由于硬件差异整体性能与PC平台的10系显卡差异巨大。所以一般目前一般按照性能较优异的嵌入式平台来看待。可以作为边缘计算的edge terminal等功能来使用。

TX2拿到手时需要自己进行刷机,有两种刷机类型。刷机工具分别是JetPack 3系列与JetPack 4系列,分别对应的系统为Ubuntu 16.04与Ubuntu 18.04.具体刷机根据自己需求进行选择。我个人在运行时主要有以下两部分区别注意:

  •   JetPack 3           JetPack 4
    
  • CUDA 9, CUDNN 7    CUDA 10, CUDNN 8
    

其主要区别在于使用PyTorch时某些CUDA版本无法正确修改寄存器值,会出现报错。根据需求进行选择。具体选择在下文PyTorch源码编译安装部分介绍。

TX2刷机教程

TX2刷机过程可以根据NVIDIA官网安装步骤进行: JetPack 3:JetPack 3刷机连接

JetPack 4:JetPack 4刷机连接

若是觉着官网教程描述过于简单,可以自行百度搜索TX2刷机教程,安装过程更加详细且符合国情,刷机需要注意的是,网络!网络!网络!无论是主机的网络还是TX2与主机连接的网络! 如果相关刷机包下载过慢自行考虑墙的问题,大学中或者其他需要登陆账号连接网络的环境时,推荐使用路由器将TX2与主机进行连接,将连接网络账号密码直接写入路由器中,具体做法就不再赘述了。

JetPack 3刷机教程介绍

简单描述下整个的刷机过程,首先是JetPack 3系列比较复杂的步骤: 需要准备的硬件设备:①系统为Ubuntu的主机(Ubuntu 16.04与Ubuntu 18.04应该都可以,我使用的是Ubuntu16.04,网上其他教程提到使用虚拟机也可以,但虚拟机需要注意虚拟机的网络连接方式要选用桥接方式,就是使虚拟机有独立的ip可供使用,同时主机磁盘大小至少50G , 防止出现下载软件磁盘空间不足) ②NVIDIA JETSON TX2 ③(非必须)路由器和网线 ④比较好用的网络

需要准备的软件:JetPack 3.3

下载地址:JetPack 3.3 for tx2 目前进入此链接后,需要注册nvidia账号才能继续下载。

按步骤下载好后,下面进行安装过程。

1.网络不好的同志们,可以将Ubuntu主机的源进行替换修改,在terminal输入以下命令对原始源文件进行备份: sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

再通过以下命令对源文件进行修改: sudo gedit /etc/apt/sources.list

更换何种软件源请自行百度,校园用户我比较推荐清华源,某些校园甚至可以达到直接使用官方源不用进行更改,切记根据自己需求进行更改。

2.JetPack的安装

首先我们将TX2通过microUSB与主机相连。

进入存放下载JetPack安装包的文件夹,打开terminal,修改JetPack安装包的权限 chmod +x ./JetPack-L4T-3.3-linux-x64_b39.run

下一步打开安装包 ./JetPack-L4T-3.3-linux-x64_b39.run 上一步已经修改了他的权限,无需添加sudo!!!!

1
点击下一步继续,

2
选择安装路径以及下载路径,收集信息选择N,下一步继续,

3
选择TX2, 下一步继续,

4
这一步中,右上角选择Full,安装所有程序,包括进行刷机,下一步继续,

5
全选同意所有协议,下一步继续,会出现认证过程,需要输入Ubuntu主机root密码,输入后会进行下载过程。下载时间根据网速决定。

6
下载完成后,会出现选择网络连接模式,我这里使用路由器将主机与TX2连接到互联网,我选择第一种模式。然后继续

7
这时出现网络接口选择,只要选择主机联网的接口即可,下一步, 下一步继续默认下一步即可。

8
注意了!!! 当出现如图的命令行界面时,需要对TX2进行操作了!!!

我们直接拔掉TX2电源... 插上TX2电源,摁下power键后,按住recovery键不松手,然后再摁住reset键保持两秒钟再松开reset键,松开reset键几秒后再松开recovery键,一定保证顺序正确!此时TX2进入恢复重置模式,我们在主机上重新打开一个terminal,输入lsusb , 查看是否有NVidia Corp设备,如果有即可继续。

当上述步骤准备好后,在上图的终端中点击Enter键进行刷机安装软件。

9
当出现如上图片时刷机完成,推荐不要勾选移除已下载软件,如果以后还存在某些软件存在问题还可以重新进行安装。

JetPack 4刷机介绍

相比较而言,JetPack 4刷机变得人性化很多,和普通软件用起来差不多,没有太多门槛。

准备的硬件设备:同JetPack 3相同

准备的软件:JetPack 4 下载地址:JetPack 4下载地址

下载完成后使用以下命令进行安装,sudo apt install ./sdkmanager-[version].[build#].deb

安装完成后在terminal输入 sdkmanager 即可运行安装程序,由于整个安装程序操作比较简单,点点鼠标选择自己需要的就可以了。

在下载完成所有刷机所需要的软件后,提示需要连接TX2时,重复上述TX2进入恢复重置模式的步骤即可,验证连接到主机上后进行刷机即可完成。

当我们将TX2系统准备好后,下面就会有另一个坑的环境准备着了。

TX2安装PyTorch

TX2安装PyTorch有两种办法:1)通过打包好的whl包直接pip安装 2)PyTorch源码编译

1.whl包直接安装

我们先介绍简单的第一种安装方式,通过whl包直接安装。我使用JetPack 4刷机的TX2可以通过这种方式安装。刷机完成后自带Python 3.6,可以直接使用NVIDIA官方打包好的PyTorch包进行安装,并且其中已经修改好num_threads值,可以解决部分需要加载太多资源的报错。PyTorch for jetson Nano/TX2 同时需要注意安装完PyTorch记得将torchvision安装好,对应关系在链接中可以找到。

2.PyTorch源码编译

相比较于whl包直接安装,源码编译费时费力,当时我通过源码安装大概用了一整天的时间。且在TX2平台已经使用了一段时间,安装了某些程序后,源码编译容易出现问题。

目前我PyTorch源码编译主要是在JetPack 3刷机后的Ubuntu 16.04系统上,此系统自带的Python为3.5、CUDA 9(别问我为什么不用2.7,戒了)在另一系统的平台上我并没有采用源码编译方式进行安装。由于间隔时间较长,且我记忆里源码编译经常出错,这里我放一个链接,是我当时感觉比较完备的一个安装过程。PyTorch tx2源码编译安装

在实验过程中,我分别使用JetPack 3和4系列进行刷机,主要是由于运行某些目标识别算法过程中会出现以下错误:

RuntimeError: cuda runtime error (7) : too many resources requested for launch at /home/nvidia/pytorch/torch/lib/THCUNN/generic/SpatialUpSamplingBilinear.cu:63

解决如上错误问题,主要是对PyTorch中的num_threads值进行约束修改,const int num_threads = 512; 由于使用JetPack 3刷机的TX2 CUDA版本为9,从源码编译 PyTorch 1.0以上版本时出现问题,修改的num_threads也无法起到正确的限定作用。所以我将可以运行的算法运行结束后重新使用JetPack 4刷机,其系统为Ubuntu 18.04自带Python 3.6版本,安装PyTorch可以直接使用NVIDIA打包修改好num_threads的安装包直接安装即可使用。具体差异可以使用解压工具查看安装包内部文件浏览对比。 具体修改过程可以参考以下链接

11
具体修改文件及位置如图所示。

TX2安装TensorFlow

TX2安装TensorFlow也很简单,官方有打包好的whl进行安装,下载好后通过pip即可安装,下面附上链接。如果需要对TensorFlow进行修改,可能需要源码进行修改,然后重新编译。TensorFlow for tx2

参考链接

mp.weixin.qq.com/s/XmVTIEZUJ… docs.nvidia.com/jetson/arch… docs.nvidia.com/jetson/arch… blog.csdn.net/DeepWolf/ar… blog.csdn.net/zt109157418… blog.csdn.net/qq_33869371… devtalk.nvidia.com/default/top… github.com/pytorch/pyt… devtalk.nvidia.com/default/top…