【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】Ubuntu16.04 + TensorRT-5.1.5.0 + ONNX-TensorRT 安装及 yolov3转onnx_第1张图片
【TensorRT】Ubuntu16.04 + TensorRT-5.1.5.0 + ONNX-TensorRT 安装及 yolov3转onnx_第2张图片

三、安装 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

解压成功后,将在该目录生成一个 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

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

$ sudo gedit ~/.bashrc

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

$ source ~/.bashrc

 

  • 安装 python TensorRT 文件
$ cd TensorRT-5.1.5.0/python 
$ sudo pip2 install tensorrt-5.1.5.0-cp27-none-linux_x86_64.whl

注意,如果要将 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

执行后,再次 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
  • 安装python graphsurgeon
$ cd TensorRT-5.1.5.0/graphsurgeon
$ sudo pip2 install graphsurgeon-0.4.1-py2.py3-none-any.whl

四、安装 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

注意,根据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

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

  • 把自己训练的29分类的餐盘识别模型放进去转换时,可以成功转换,但是当转换32分类的模型时,则会出现以下错误
    【TensorRT】Ubuntu16.04 + TensorRT-5.1.5.0 + ONNX-TensorRT 安装及 yolov3转onnx_第3张图片
    当把32分类模型中的cfg文件中classes改为29时,可以转换OK,就是32类的无法转换OK,目前还不知道什么原因。

六、将 onnx 转换为 tensorrt 模型

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

python onnx_to_tensorrt.py

将自动下载 dog.jpg 图片,然后将上一步生成的 yolov3.onnx 转换为 yolov3.trt ,并且通过 tensorrt 进行推理,生成带标注框的图片 dog_bboxes.png
【TensorRT】Ubuntu16.04 + TensorRT-5.1.5.0 + ONNX-TensorRT 安装及 yolov3转onnx_第4张图片

七、总结

  • 在 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 模型

你可能感兴趣的:(tensorrt)