在Jetson NX上用Tensorrt加速yolov4-tiny模型及问题汇总

项目场景:

在jetson xavier nx使用Tensorrt加速yolov4-tiny模型,这里使用官方或者自己的模型都可以,笔者使用的是自己训练好的模型。


开发环境:

Jetpack: 4.6.1

CUDA: 10.2

cuDNN: 8.2

TensorRT: 8.2

python: 3.6


流程如下:

获取代码,安装依赖

从github拉取代码,配置环境

git clone https://github.com/jkjung-avt/tensorrt_demos.git

然后到./tensorrt_demos/ssd文件执行install_pycuda.sh

sudo chmod +x ./install_pycuda.sh # 没有权限就给执行权限
./install_pycuda.sh

接着到./tensorrt_demos/yolorequirements.txt查看所需依赖

安装依赖

sudo apt install protobuf-compiler libprotoc-dev
sudo pip3 install onnx==1.9.0

 下一步定位到./tensorrt_demos/plugins文件夹,这里是编译产生的相关文件

# make clean
make

开始转换模型

转换开始前,先定位到./tensorrt_demos/yolo文件夹,需要使用download_yolo.sh下载yolov4-tiny.weights、yolov4-tiny.cfg然后生成相关模型文件,但是由于网络等因素,这个方法可能会出错,所以建议自己去下载yolov4-tiny.weights、yolov4-tiny.cfg或者把自己训练好的这两个文件重命名改成yolov4-tiny.weights、yolov4-tiny.cfg,接着只要修改download_yolo.sh 就可以了,如下:

#!/bin/bash

set -e

# yolov4-tiny
# wget https://raw.githubusercontent.com/AlexeyAB/darknet/master/cfg/yolov4-tiny.cfg -q --show-progress --no-clobber
# wget https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v4_pre/yolov4-tiny.weights -q --show-progress --no-clobber

echo "Creating yolov4-tiny-288.cfg and yolov4-tiny-288.weights"
cat yolov4-tiny.cfg | sed -e '6s/batch=64/batch=1/' | sed -e '8s/width=416/width=288/' | sed -e '9s/height=416/height=288/' > yolov4-tiny-288.cfg
echo >> yolov4-tiny-288.cfg
ln -sf yolov4-tiny.weights yolov4-tiny-288.weights
echo "Creating yolov4-tiny-416.cfg and yolov4-tiny-416.weights"
cat yolov4-tiny.cfg | sed -e '6s/batch=64/batch=1/' > yolov4-tiny-416.cfg
echo >> yolov4-tiny-416.cfg
ln -sf yolov4-tiny.weights yolov4-tiny-416.weights

echo
echo "Done."

正式转换的两个步骤
(1)将 yolov4-tiny.weight 模型文件转换成 yolov4-tin.onnx 格式

python3 yolo_to_onnx.py -m yolov4-tiny

   正常情况如下:

 
(2)再将 yolov4-tiny.onnx 文件转换成 yolov4-tin.trt 格式(这个步骤要等几分钟)

python3 onnx_to_tensorrt.py -m yolov4-tiny -v

   正常情况如下:

测试

先定位到tensorrt_demos(项目根目录)使用trt_yolo.py运行yolov4-tiny.trt
–-usb 代表使用USB摄影机(一般一个一个相机默认选0)

--model则是选择特定模型:yolov4-tiny

python3 trt_yolo.py --usb 0 --model yolov4-tiny

效果如下图所示:

只有20FPS,远达不到预期。

猜测原因:由于我是通过ssh连接启动的,受环境影响较大,图像传输处理耗时长。

验证如下:把图像显示部分注释掉,帧率回到55FPS 


问题汇总:

问题1:Illegal instruction (core dumped)

在~/.bashrc的最后加入下面一句

export OPENBLAS_CORETYPE=ARMV8

  问题2:在执行 ./install_pycuda.sh 时,ERROR: nvcc not found

可以install_pycuda.sh把nvcc的绝对路径加上,更改如下

if ! which /usr/local/cuda-10.2/bin/nvcc > /dev/null; then
  echo "ERROR: nvcc not found"
  exit
fi

   问题3:TypeError: 1.0 has type numpy.float32, but expected one of: int, long, float

在执行 python3 yolo_to_onnx.py -m yolov4-tiny ,onnx转换时,resize。原因:onnx依赖protobuf,系统的protobuf版本太低引起。将protobuf版本3.0.0升级至3.7.1问题解决。

pip3 install -U protobuf

   问题4: ModuleNotFoundError: No module named 'pycuda'

安装pycuda解决,这个可能会等较长时间并且一开始可能会报错,是因为目前pip正在安装的版本不适合,但是pip会自动往下安装其他版本,所以要等很久

pip3 install pycuda

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值