【TensorRT】Ubuntu16.04 + TensorRT-5.1.5.0 + ONNX-TensorRT 安装及 yolov3转onnx

一、软硬件版本

已安装

    Ubuntu 16.04
    python 2.7.16
    显卡: Tesla P4
    cuda 9.0.176
    cudnn 7.5

待安装

    TensorRT-5.1.5.0

二、下载

从nvidia官网下载适用 cuda9.0 的 Tar 安装文件 TensorRT-5.1.5.0
在这里插入图片描述
在这里插入图片描述
三、安装 TensorRT-5.1.5.0

参考 nvidia官网安装教程 4.3 Tar File Installation

    将下载的 TensorRT-5.1.5.0 tar 安装文件移动到需要安装的目录
    执行解压命令

 $ tar xzvf TensorRT-5.1.5.0.Ubuntu-16.04.5.x86_64-gnu.cuda-9.0.cudnn7.5.tar.gz

    1

解压成功后,将在该目录生成一个 TensorRT-5.1.5.0 的文件夹

    将 TensorRT lib目录添加到环境变量LD_LIBRARY_PATH

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/wt/download/TensorRT-5.1.5.0/lib

    1

或者在 .bashrc 中添加以下内容

$ sudo gedit ~/.bashrc

    1

[外链图片转存失败(img-WJwOMxtx-1565943586944)(en-resource://database/1671:1)]
添加后保存,然后执行以下命令使其生效

$ source ~/.bashrc

    1

 

    安装 python TensorRT 文件

$ cd TensorRT-5.1.5.0/python
$ sudo pip2 install tensorrt-5.1.5.0-cp27-none-linux_x86_64.whl

    1
    2

注意,如果要将 yolov3 转换为 onnx,python 必须为 2.7 版本
注意:如果执行上述命令,在python中 import tensorrt 时,会出现 no module named‘tensorrt’错误

通过 pip list 查看,也找不到 tensorrt 相关的模块,说明 tensorrt 并未安装在 pip 的 sit-packages 中,实际上在执行上述命令时,会显示如下信息
[外链图片转存失败(img-DRlTIHaI-1565943586944)(en-resource://database/1669:1)]
说明这个命令将tensorrt安装在了 /usr/local/lib/python2.7/dist-packages ,原因在于,系统安装的一些工具,包括系统原装的python下载的工具,都会丢到dist-packages里面去。自己安装的python,默认是读取site-packages里面的工具包,当然pip安装的包也会丢到这个目录下,因此在 import tensorrt 时由于在 site-packages 找不到安装的 tensorrt ,所以会出错。参考1 参考2
解决方案

将 tensorrt-5.1.5.0-cp27-none-linux_x86_64.whl 文件复制到
/home/wt/anaconda2/lib/python2.7/site-packages/ 路径下,然后移动到该路径,再执行

 sudo pip2 install tensorrt-5.1.5.0-cp27-none-linux_x86_64.whl

    1

执行后,再次 pip list 就可以查到安装的 tensorrt 模块,在 python 中 import tensorrt 也不会报错了。
举一反三

当在 python 中 import 一个模块出现 “no module named xxx” 时,先通过 pip list 查看模块是否存在,如果不存在说明未正确安装,需要将安装文件复制到 site-packages 目录下再安装一遍
 

    安装 python uff 文件,仅用于 TensorFlow/TensorRT

$ cd TensorRT-5.1.5.0/uff
$ sudo pip2 install uff-0.6.3-py2.py3-none-any.whl

    1
    2

    安装python graphsurgeon

$ cd TensorRT-5.1.5.0/graphsurgeon
$ sudo pip2 install graphsurgeon-0.4.1-py2.py3-none-any.whl

    1
    2

四、安装 ONNX-TensorRT

ONNX-TensorRT GITHUB

$ git clone --recursive https://github.com/onnx/onnx-tensorrt.git
$ mkdir build
$ cd build
$ cmake .. -DTENSORRT_ROOT=/home/wt/download/TensorRT-5.1.5.0
or
$ cmake .. -DTENSORRT_ROOT=/home/wt/download/TensorRT-5.1.5.0 -DGPU_ARCHS="61"
$ make -j8
$ sudo make install

    1
    2
    3
    4
    5
    6
    7
    8

注意,根据GPU的实际计算能力,修改 DGPU_ARCHS 值
通过 ONNX-TensorRT 工具,可以将 onnx 模型转换为 tensorrt 模型,如
onnx2trt my_model.onnx -o my_engine.trt
还可以将 onnx 模型转换为人们可读的txt文档
onnx2trt my_model.onnx -t my_model.onnx.txt
更多用法,输入
onnx2trt -h
五、将 yolov3 模型转换为 onnx 模型

移动到 TensorRT-5.1.5.0/samples/python/yolov3_onnx 目录
执行

$ python yolov3_to_onnx.py

    1

将自动下载 yolov3.cfg 及 yolov3.weights ,并将其转换为 yolov3.onnx 模型

    把自己训练的29分类的餐盘识别模型放进去转换时,可以成功转换,但是当转换32分类的模型时,则会出现以下错误
    [外链图片转存失败(img-QzhCBpqO-1565943586945)(en-resource://database/1675:1)]
    当把32分类模型中的cfg文件中classes改为29时,可以转换OK,就是32类的无法转换OK,目前还不知道什么原因。

六、将 onnx 转换为 tensorrt 模型

在 TensorRT-5.1.5.0/samples/python/yolov3_onnx 目录继续执行

python onnx_to_tensorrt.py

    1

将自动下载 dog.jpg 图片,然后将上一步生成的 yolov3.onnx 转换为 yolov3.trt ,并且通过 tensorrt 进行推理,生成带标注框的图片 dog_bboxes.png
[外链图片转存失败(img-Y6yyJ1lv-1565943586945)(en-resource://database/1673:1)]
七、总结

    在 ubuntu 16.04 中成功安装了 TensorRT-5.1.5.0,可在 python 中导入
    成功安装了 ONNX-TensorRT 工具,可实现 onnx 模型到 trt 模型的转换
    利用 TensorRT-5.1.5.0/samples/python/ 目录下的yolov3_to_onnx.py 可将 yolov3 模型转换为 onnx 模型,必需要python2.7
    利用 TensorRT-5.1.5.0/samples/python/ 目录下的onnx_to_tensorrt.py 可将 onnx 模型转换为 trt 模型
 

你可能感兴趣的:(环境配置)