【Nvidia Agx Orin yolov8-pose TensorRt部署】

文章描述了在NVIDIAAGXOrin平台上使用TensorRT8.4进行Yolov8-Pose模型部署时遇到的版本匹配问题和模型调用错误。作者解决了由于模型导出版本与TensorRT版本不一致导致的错误,并且提到即使有CUDA运行时错误,程序也能正常运行。此外,文章还涉及了从ONNX转换到TensorRTengine的过程以及CUDA环境的配置问题。
摘要由CSDN通过智能技术生成

基于TensorRT(*.engine)的yolov8-pose部署

1、部署环境

  • NVIDIA AGX ORIN 32GB
  • TensoRT 8.4
  • CUDA 11.4
  • cudnn 8.4.1
  • opencv 4.5.1(dnn)

2.编译平台(问题记录)

之前在PC上跑的是TensorRT 8.6,基于VS搭建编译的,原本想直接代码拿过来用QtCreator编译,发现模型调用不成功,报错提示如下:

[TensorRT] ERROR: 1: [stdArchiveReader.cpp::StdArchiveReader::35] Error Code 1: Serialization (Serialization assertion safeVersionRead == safeSerializationVersion failed.Version tag does not match. Note: Current Version: 0, Serialized Engine Version: 89)

最后发现是模型导出的版本与最终调用的TRT版本不一致导致的问题,我在这里卡了很久!!!

还有一个问题就是,最终模型可以成功调用,但是一直打印这个

[runtime.cpp::deserializeCudaEngine::37] Error Code 3: API Usage Error (Parameter check failed at: runtime/api/runtime.cpp::deserializeCudaEngine::37, condition: (blob) != nullptr

解决方法说是engine模型路径错误,但是我写的是绝对路径,不过最终程序也能正常运行,这个错误也就没管。

3.C++调用

#include<detect.h>

#pragma once
#include <fstream>
#include <iostream>
#include <sstream>
#include <opencv2/opencv.hpp>
#include "NvInfer.h"
#include "NvInferPlugin.h"

using namespace nvinfer1;
using namespace cv;

const int connect_list[36] = { 0, 1, 0, 2, 1, 3, 2, 4, 3, 5, 4, 6, 5, 6, 5, 7, 7, 9, 6, 8, 8, 10, 5, 11, 6, 12, 11, 12, 11, 13, 13, 15, 12, 14, 14, 16 };

class Yolov8PoseTrt {
public:
	void initConfig(std::string enginefile, float conf_thresholod, float score_thresholod);
	void detect(cv::Mat &frame);
	~Yolov8PoseTrt();
private:
	float conf_thresholod = 0.25;
	float score_thresholod = 0.25;
	int input_h = 640;
	int input_w = 640;
	int output_h;
	int output_w;
	int num_pts, count_num = 0;
	float tempTime;
	IRuntime* runtime{ nullptr };
	ICudaEngine* engine{ nullptr };
	IExecutionContext* context{ nullptr };
	void* buffers[2] = { NULL, NULL };
	std::vector<float> prob;
	cudaStream_t stream;
};

创建tensor;
copy到显存进行推理;
获取推理结果;

	cv::Mat tensor = cv::dnn::blobFromImage(image, 1.0f / 225.f, cv::Size(input_w, input_h), cv::Scalar(), true);
	// 内存到GPU显存
	cudaMemcpyAsync(buffers[0], tensor.ptr<float>(), input_h * input_w * 3 * sizeof(float), cudaMemcpyHostToDevice, stream);
	// 推理
	context->enqueueV2(buffers, stream, nullptr);
	// GPU显存到内存
	cudaMemcpyAsync(prob.data(), buffers[1], output_h *output_w * sizeof(float), cudaMemcpyDeviceToHost, stream);

CPP文件在这里。

4.总结(问题记录)

通体来说,调用比较方便,主要有以下几个难点:

onnx–>engine,网上有人用的是*.trt格式的模型,这个我还没搞清楚这两者的关系,也希望知道的能帮我解答一下;

在这里插入图片描述

CUDA环境,建议直接安装官方的jetpack,一键式安装cuda,cudnn,tensorrt,这里我也遇到了个问题,就是jtop查看版本信息时,tensorrt的版本显示5.x,实际用的时候时8.4,差点被他耍到。

在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
要在NVIDIA Jetson AGX Orin部署YOLOv8,您需要按照以下步骤进行操作: 1. 首先,您需要从GitHub上克隆YOLOv5的代码库。使用以下命令在终端中执行克隆操作: ``` git clone -b v4.0 https://github.com/ultralytics/yolov5.git ``` 2. 进入克隆的目录: ``` cd yolov5 ``` 3. 接下来,您需要下载并准备YOLOv8所需的权重文件。您可以从YOLOv5的发布页面上找到这些权重文件。 4. 将权重文件放入`yolov5/weights`目录中。 5. 然后,您可以使用以下命令运行YOLOv8的推理: ``` python3 detect.py --weights weights/yolov8.weights --source <输入源> --conf <置信度阈值> ``` 其中,`<输入源>`是您要检测的图像或视频的路径,`<置信度阈值>`是过滤边界框的置信度阈值。 请注意,以上步骤是基于YOLOv5的部署方法。如果您需要使用YOLOv8而不是YOLOv5,请确保您已获得相应的YOLOv8权重文件,并将其放置在适当的目录中。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Jeston AGX Orin安装Pytorch1.11.0+torchvision0.12.0](https://blog.csdn.net/beautifulback/article/details/125717717)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [jeston nano镜像_YOLOv5+MobileNet.rar](https://download.csdn.net/download/python_yjys/77527616)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Nvidia jetson agx部署yolov5,并测试](https://blog.csdn.net/weixin_43008635/article/details/129596150)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

低空飞鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值