NVIDIA TensorRT使用记录

NVIDIA TensorRT使用记录

1. 准备工作

1) Pipeline

  • train: 在Host PC的GPU上训练
  • test/deployment: 在TX1/TX2上部署使用

2) 主机部署步骤

  1. Running JetPack on the Host
$ ./JetPack-L4T-3.0-linux-x64.run 
  1. Installing NVIDIA Driver on the Host
  2. Installing cuDNN on the Host
$ 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
  1. Installing NVcaffe on the Host
$ 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 http://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
  1. Installing DIGITS on the Host
    NVIDIA DIGITS is a Python-based web service which interactively trains DNNs and manages datasets.
$ 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 http://github.com/nvidia/DIGITS
$ cd DIGITS
$ sudo pip install -r requirements.txt

安装完以后,运行 ./digits-devserver就可以打开DIGITS, 但是, 什么都不会发生, 我还以为会自动打开网页啥的, 这只是打开服务器, 要在浏览器中输入网址:http://localhost:5000/ 自己手动打开.

3) TX1/TX2部署步骤

  1. Cloning the Repo
$ sudo apt-get install git cmake
$ git clone http://github.com/dusty-nv/jetson-inference
  1. compile
    注意: 在cmake时,会调用脚本CMakePrebuild.sh去下载一些依赖的包和训练好的网络, 那些训练好的网络需要翻墙下载, 可以自己下载完以后解压到jetson-inference/data/networks目录下.
$ cd jetson-inference
$ mkdir build
$ cd build
$ cmake ..
$ make
  1. 测试编译是否成功, 运行一个classification的栗子, 如果output_0.jpg左上角有识别结果, 说明编译成功,能够正常使用了.
$ cd jetson-inference/build/aarch64/bin
> ./imagenet-console orange_0.jpg output_0.jpg

2. DIGITS训练自己的模型并使用

1) 训练步骤

  1. 下载/构建数据集.
    数据集的文件夹格式为: 根目录下有train(训练集),val(验证集),test(测试集)三个文件夹, 每个文件夹下面有images和labels两个子文件夹. images下是图片数据(.png), labels下是标签数据(.txt), 每个图片a.png都有对应的一个标签a.txt. 用的kitti的数据, 标签数据的格式采用kitti的数据格式

验证集与测试集的区别?
验证集是在训练时使用, 用来调节网络中的超参数. 测试集不参与训练, 在整个网络训练完成后来测试训练结果的性能.

  1. 打开DIGITS
    在jetson-inference目录下运行digits-devserver打开DIGITS服务器, 然后在浏览器中输入 http://localhost:5000/ 进入DIDITS客户端.
  2. 导入DIGITS数据集
    参照git上的readme, 在datasets标签页导入刚才的数据集.

导入数据集时, 图像的尺寸是可以改的, 用640480的图片做过训练,把尺寸改成640480, 是可以用的.

  1. 训练模型
    参照readme构建模型, 教程中是用的custom模型, 自己写入model.prototxt描述网络的结构, 然后在pretrained models填入googlenet的caffemodel, 应该是使用之前已经训练过的权值. 创建完以后,就自动训练了, 然后就等待训练完成.

训练的过程中需要看mAP是否在增加, 如果一直是0, 那肯定是有问题的, 应该停掉训练排查问题

  1. 测试模型
    训练完成后, 在标签页可以选择测试图片或测试数据集.
  • **遇到的坑: 在自己构建数据集训练前, 一定要确认一下数据标注没问题, **不然就白训练了. 训练一次少说也要半天, 这个确认还是很有必要.
  • 训练过程中是可以用中间结果去测试单张图片(不能测试多张,因为测试多张需要用GPU, 而训练过程中GPU资源被占用掉了), 在前期经常输入一些图像看测试结果, 这个步骤很重要, 能够在早期发现训练任务是不是有问题,从而避免了花了几天时间训练完发现输入错了的尴尬, 如果用train的图像取做test都啥都检测不出来, 说明肯定是训练任务有问题, 比如label错了什么的.
  • 一般趋势是: 模型在刚开始是误检比较多, 随着epoch增加, 误检越来越少, bbox越来越准

2) TX2上跑自己训练好的模型

当DIGITS训练好模型后, 用DIGITS测试过模型没问题后, 可以把模型放到tx2上使用了,步骤如下:

  1. 选择最后一个epoch然后点download model, 会下载一个压缩包, 名字类似于20170801-222946-5eb0_epoch_100.0.tar.gz.将该压缩包用U盘,网线等任何方式拷贝到tx2上
  2. 将压缩包解压到jetson-inference/data/networks目录下, 可以看到解压后里面有好几个文件, 其中deploy.prototxt是描述网络结构的, snapshot_iter_37100.caffemodel(名字不一定完全一样)是网络的权值, 其他的还不知道是啥
  3. 运行处理离线图片的程序, input_blob, output_cvg, output_bbox貌似可以不要设, 只要设置一下模型结果的prototxt文件和模型权值caffemodel文件就行.

./detectnet-console dog_0.jpg output_0.jpg
--prototxt=<你的模型目录>/deploy.prototxt
--model=<你的模型目录>/snapshot_iter_38600.caffemodel
--input_blob=data \
--output_cvg=coverage
--output_bbox=bboxes

  1. 运行在线程序(需要连接相机): 如果是用USB相机, 需要改下源码, 打开jetson-inference/detectnet-camera/detectnet-camera.cpp, 把DEFAULT_CAMERA宏从-1改成0(如果0不行再改成1依次加1试吧, 最好先用cheese确认USB相机能成功连上)

./detectnet-camera
--prototxt=<你的模型目录>/deploy.prototxt
--model=<你的模型目录>/snapshot_iter_38600.caffemodel

3 在Host PC上安装jetson-inference

操作环境: Host PC x86_64平台, Ubuntu14.04, GPU: Geforce GTX 1050, cuda8.0.
默认已经装好了NVIDIA驱动和CUDA, 可参见之前的主机部署.

1) 安装tensorRT

进入官网https://developer.nvidia.com/tensorrt, 点击download下载, 需要注册用户并登录才能下载. 登录后, 就会看到下载连接和安装提示, 选择Debian安装, 提示如下.
![](./Screenshot from 2017-09-20 11:38:32.png)
根据操作系统14.04和CUDA版本8.0选择第二个package. 然后根据提示安装即可.

2) 安装jetson-inference

  1. 先下载jetson-inference代码, 代码在x86平台不能直接编译, 需要做一些修改

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

  1. 把CMakePrebuild.sh中下面两行注释掉:
# sudo rm /usr/lib/aarch64-linux-gnu/libGL.so
# sudo ln -s /usr/lib/aarch64-linux-gnu/tegra/libGL.so /usr/lib/aarch64-linux-gnu/libGL.so

或者可以干脆不运行这个脚本, 这个脚本主要是apt-get安装依赖库和wget下载网络模型. 自己apt-get安装,自己下模型也是一样的.

  1. 修改CMakelist.txt, 增加x86平台的GPU架构, 我的GPU是GTX1050, 架构是61, 所以在第32~38中, 增加一行. 如果是别的GPU,可以去https://developer.nvidia.com/cuda-gpus上查看, 架构就是Compute Capability, 如果Compute Capability是6.1那就写61,如果Compute Capability是5.2,那就写52.
set(
    CUDA_NVCC_FLAGS
    ${CUDA_NVCC_FLAGS}; 
    -O3 
    -gencode arch=compute_53,code=sm_53
    -gencode arch=compute_62,code=sm_62
    -gencode arch=compute_61,code=sm_61 #这是我增加的行
)
  1. 修改CMakelist.txt, 在上面文本的后面添加一行, 以使CUDA支持c++11
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};--disable-warnings;--ptxas-options=-v;-use_fast_math;-lineinfo;-std=c++11)
  1. 编译安装, 参见1-3)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容