在Jetson Nano上使用TensorRT C++实现YOLOv5模型推理

2个月前 (11-17 23:52)阅读2回复0
kewenda
kewenda
  • 管理员
  • 注册排名1
  • 经验值99945
  • 级别管理员
  • 主题19989
  • 回复0
楼主

蓝字存眷我们

微信公家号:OpenCV私塾

存眷获取更多计算机视觉与深度进修常识

微信公家号:OpenCV私塾

存眷获取更多计算机视觉与深度进修常识

软件版本信息

软件版本信息

导出YOLOv5 engine文件

前面有一篇文章详细阐了然若何在Jetson Nano上安拆YOLOv5,然后运行,那里只需在导出的时候导出engine模子文件撑持,号令行如下:

那里需要留意的TensorRT版本一致问题。若是engine文件不是在Jetson Nano上生成的,而在其他PC机器上生成,则TensorRT版本必需与Jetson Nano上利用的版本连结一致。

TensorRT推理

起首创建编译CMakeLists.txt文件,然后把下面的内容copy进去:

include_directories(./src/)#添加OpenCV头文件include_directories( ${OpenCV_INCLUDE_DIRS}) # 添加CUDA10.2头文件include_directories(/usr/ local/cuda-10.2/include) link_directories(/usr/ local/cuda-10.2/lib64) # tensorRTinclude_directories(/usr/ local/cuda/include) link_directories(/usr/lib/arrch64-linux-gnu)#显示OpenCV_INCLUDE_DIRS的值message( ${OpenCV_INCLUDE_DIRS})

FILE(GLOB_RECURSE TEST_SRCsrc/*.cpp)# 添加一个可施行法式# 语法:add_executable( 法式名 源代码文件 )add_executable(target main.cpp ${TEST_SRC}) # 将库文件链接到可施行法式上target_link_libraries(target nvinfer)target_link_libraries(target cudart)target_link_libraries(target ${OpenCV_LIBS})

构建的目次构造如下

展开全文

然后在Jetson Nano上翻开末端号令行输入:

运行成果如下:

然后运行make

胜利运行之后,施行编译生成的target文件:

运行推理与显示界面如下:

错误与批改

01

错误一:

error: 'cudaMalloc' was not declared in this scope

那个是因为没有添加下面的头文件:

添加之后就能够处理。

02

错误二:

Engine文件版本一致招致,原因是我之前导出的是在tensorRT8.4版本,jetsonNano是8.0的,从头在Jetson Nano上导出一下就能够处理。

最初贴一下,演示的法式main C++代码:

# includefstream

# includeiostream

# includesstream

# includeopencv2/opencv.hpp

# include"tensorrt_yolov5_demo.h"

usingnamespacecv;

std:: stringlabel_map = "classes.txt";

intmain( intargc, char** argv) {

std:: vector std:: string classNames;

std:: ifstream fp(label_map);

std:: stringname;

while(!fp.eof) {

getline(fp, name);

if(name.length) {

classNames.push_back(name);

fp.close;

autodetector = std::make_sharedYOLOv5TRTDetector;

detector-initConfig( "yolov5s.engine", 0.25, 0.25);

std:: vectorDetectResult results;

cv:: VideoCapture capture( "example_dsh.mp4") ;

cv::Mat frame;

while( true) {

boolret = capture.read(frame);

if(!ret) {

break;

detector-detect(frame, results);

for(DetectResult dr : results) {

cv::Rect box = dr.box;

cv::putText(frame, classNames[dr.classId], cv::Point(box.tl.x, box.tl.y - 10), cv::FONT_HERSHEY_SIMPLEX, .5, cv::Scalar( 0, 0, 0));

cv::imshow( "YOLOv5-6.1 + TensorRT8.4 + Jetson Nano - by gloomyfish", frame);

charc = cv::waitKey( 1);

if(c == 27) { // ESC 退出

break;

// reset for next frame

results.clear;

cv::waitKey( 0);

cv::destroyAllWindows;

return0;

扫码获取YOLOv5 TensorRT INT8量化脚本与视频教程

扫码查看OpenCV+OpenVIO+Pytorch系统化进修道路图

CV全栈开发者说 - 从传统算法到深度进修怎么修炼

2022入坑深度进修,我选择Pytorch框架!

Pytorch轻松实现典范视觉使命

教程保举 | Pytorch框架CV开发-从入门到实战

OpenCV4 C++进修 必备根底语法常识三

OpenCV4 C++进修 必备根底语法常识二

OpenCV4.5.4 人脸检测+五点landmark新功用测试

OpenCV二值图象阐发之Blob阐发找圆

OpenCV4.5.x DNN + YOLOv5 C++推理

OpenCV4.5.4 间接撑持YOLOv5 6.1版本模子推理

OpenVINO2021.4+YOLOX目的检测模子摆设测试

比YOLOv5还凶猛的YOLOX来了,官方撑持OpenVINO推理

0
回帖

在Jetson Nano上使用TensorRT C++实现YOLOv5模型推理 期待您的回复!

取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息