美文网首页深度学习
NVIDIA TensorRT使用记录

NVIDIA TensorRT使用记录

作者: 不掉发码农 | 来源:发表于2017-09-21 11:09 被阅读4696次

    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)

    相关文章

      网友评论

      • 9bd8163f80f8:我训练自己数据集时,map就是0,请问我大概哪里出了问题

      本文标题:NVIDIA TensorRT使用记录

      本文链接:https://www.haomeiwen.com/subject/uejzsxtx.html