感谢作者分享,仓库地址:https://github.com/zombie0117/yolov3-tiny-onnx-TensorRT?tdsourcetag=s_pcqq_aiomsg
该仓库的代码没有使用现有的神经网络框架,如pytorch,tensorflow等,因此环境搭建相对比较容易。
仓库作者是在TX2平台进行的转换,但平台这一块只要是在nvidia-jetson系列,其实是没有限制的,但有一点需要注意,如果你用的是tx2平台,tensorrt的版本是不支持8.x以上的版本,即只支持5.x,6.x和7.x,即你的jetpack版本需在4.5.1以下。具体什么原因呢?请看下图:

这是tensorrt8.2版本的sdk官方说明截图,明确说明只支持量化到int8了,众所周知,tx2只支持fp16的量化,不支持量化到int8,所以,懂了波~~~~(这块博主其实趟坑也趟了好久才找到,因为tensorrt8.X版本的sdk接口也改了好多,博主改源码也改了好久,最后发现不适配int8,😭😱😭)
nvidia这是要淘汰tx2啊~~~

好了,开始正文吧,我的趟坑记录~~~
1. pycuda安装
要使用python调用tensorRT,必须要安装pycuda的,由于作者用的python2,因此在安装时务必要使用python2来安装cuda,首先可以尝试直接在线安装,主要很方便。
sudo apt install python-pip
pip install pycuda
如果不成功,就将pycuda下载下来离线安装,参考《jetson安装pycuda》。
2. cfg文件处理
在yolov3-tiny装onnx时报错,如下图:

打开YOLOv3-tiny.cfg文件,在文件的末尾加一行空行即可解决问题。
3. onnx转trt模型
在onnx转trt模型时,如果使用的是tensorrt7.x及以上版本,需要对onnx_to_tensorrt.py作一些改动,在get_engine函数中添加如下语句:
explicit_batch = 1 << (int)(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH) # trt7.x

其他关于输入,锚点,路径的设置,在仓库中已经写得很清楚了,就不再赘述了。