jetson nano使用tensorRT运行trt-yolov3-tiny
网上关于jetson nano上跑trt-yolov3-tiny的资料很少,其中只看到仅有的这么一篇https://blog.csdn.net/BlackLion_zhou/article/details/90049351,可能因为写的较早,各种库版本有更新,导致会遇到很多坑,所以只能本着遇到问题解决问题的态度,一个个踩过来。现在把每个进程详细总结出来并列举了可能出现的错误及解决方法。希望能帮到遇到同样困难的你。
1.下载trt-yolo
网上有看到使用git的方法下载源码,但实测发现会丢失部分文件,故直接用浏览器下载,网址如下:
https://github.com/NVIDIA-AI-IOT/deepstream_reference_apps/tree/restructure
2.运行脚本安装所需的文件
$ cd <你的文件路径>/deepstream_reference_apps/yolo
$ sh prebuild.sh
3.编译安装
$ cd apps/trt-yolo
$ mkdir build && cd build
$ cmake -D CMAKE_BUILD_TYPE=Release ..
$ make
$ sudo make install
$ cd ../../..
如果系统安装的是opencv4, make的时候会报以下错误
fatal error: opencv/cv.h: No such file or directory
#include <opencv/cv.h>
compilation terminated.
lib/CMakeFiles/yolo-lib.dir/build.make:69: recipe for target ‘lib/CMakeFiles/yolo-lib.dir/calibrator.cpp.o’ failed
原因是opencv4中将cv.h合并到imgproc中了
故将deepstream_reference_apps/yolo/lib/trt_utils.h中的
#include <opencv/cv.h>
替换为
#include <opencv2/imgproc/imgproc_c.h>
#include "opencv2/imgcodecs/legacy/constants_c.h"
4.添加测试图片
在deepstream_reference_apps/yolo/data/test_images.txt中添加你要测试图片的全路径(如:/home/test.jpg)
5.运行模型
$ cd <你的文件路径>/deepstream_reference_apps/yolo
$ sudo trt-yolo-app --flagfile=config/yolov3-tiny.txt
模型转换过程中会报如下错误
ERROR: Internal error: could not find any implementation for node mm1_19, try increasing the workspace size with IBuilder::setMaxWorkspaceSize()
ERROR: …/builder/tacticOptimizer.cpp (1461) - OutOfMemory Error in computeCosts: 0
解决方法为将deepstream_reference_apps/yolo/lib/yolo.cpp文件中的
m_Builder->setMaxWorkspaceSize(1 << 20);
空间加大,如改为:
m_Builder->setMaxWorkspaceSize(1 << 30);
然后重新编译
$ cd apps/trt-yolo/build/
$ make && sudo make install
编译完成后执行如下命令
$ cd <你的文件路径>/deepstream_reference_apps/yolo
$ sudo trt-yolo-app --flagfile=config/yolov3-tiny.txt
运行结果如下
Loading Complete!
Total number of images used for inference : 1
[======================================================================] 100 %
Network Type : yolov3-tiny Precision : kFLOAT Batch Size : 1 Inference time per image : 407.128 ms
可以看到测试一张图片的速度为407ms,每秒大概2帧的样的,是不是感觉tensorRT没有加速效果? NO NO NO!,从运行结果来看数据类型用的是 kFLOAT,推理的无需使用这么高的精度。
解决方法为将deepstream_reference_apps/yolo/config/yolov3-tiny.txt文件中的
#--precision=kINT8
改为
--precision=kHALF
修改完成后运行 $ sudo trt-yolo-app --flagfile=config/yolov3-tiny.txt 会重新生成TRT引擎,通过降低数据精度,TRT速度能达到原来的10倍,有时候更高,基本上可能达到实时检测,但检测精度不高。
Loading Complete!
Total number of images used for inference : 1
[======================================================================] 100 %
Network Type : yolov3-tiny Precision : kHALF Batch Size : 1 Inference time per image : 48.416 ms
本文主要介绍了如何跑起来,但检测的是图片,视觉感觉效果不是那强烈,下章会介绍用这个模块检测视频