void createngine() //生成 engine
{//创建builder,第一步创建buildIBuilder* builder = createInferBuilder(gLogger);builder->setMaxBatchSize(16); //设置最大batchsize//创建network,第二步创建网络INetworkDefinition* network = builder->createNetworkV2(0U);//创建parser,第三步创建解析器IUffParser* parser = createUffParser();//注册网络输入输出,第四步注册解析器并解析网络  (输入名和输出名可在.uff文件中找到)parser->registerInput("inputs", DimsCHW(1, 576 , 960), UffInputOrder::kNCHW);parser->registerOutput("generator/deconv/BiasAdd");//使用parser,填充network  (DataType::kFLOAT(fp32) DataType::kHALF(fp16))parser->parse("/home/xxxx.uff",*network,nvinfer1::DataType::kHALF);//创建config并设置最大的工作空间,第五步配置工作空间IBuilderConfig* config = builder->createBuilderConfig();config->setMaxWorkspaceSize(1 << 30);//创建engine, 第六步创建引擎ICudaEngine* engine = builder->buildEngineWithConfig(*network,*config);//序列化保存engine到文件IHostMemory *serializedModel = engine->serialize();ofstream p("xxxx.engine");p.write(reinterpret_cast<const char*>(serializedModel->data()),             serializedModel->size());//释放资源parser->destroy();network->destroy();builder->destroy();engine->destroy();serializedModel->destroy();config->destroy();return;
}
//解析onnx手写代码#include <iostream>
#include <fstream>
#include <string>
#include "NvOnnxParser.h"
#include "NvCaffeParser.h"
#include "NvUffParser.h"
#include "NvInfer.h"
#include "logger.h"
#include "pthread.h"using namespace std;
using namespace nvinfer1;#include <condition_variable>
#include <mutex>int main()
{std::string modelFile = "./fd_sim_1221.onnx";nvinfer1::IHostMemory *modelStream(nullptr);nvinfer1::IBuilder *builder = nvinfer1::createInferBuilder(gLogger.getTRTLogger());const auto explicitBatch = 1U << static_cast<uint32_t>(nvinfer1::NetworkDefinitionCreationFlag::kEXPLICIT_BATCH);nvinfer1::INetworkDefinition *network = builder->createNetworkV2(explicitBatch);nvinfer1::IBuilderConfig *config = builder->createBuilderConfig();nvonnxparser::IParser *parser = nvonnxparser::createParser(*network, gLogger.getTRTLogger());if (!parser->parseFromFile(modelFile.c_str(), static_cast<int>(ILogger::Severity::kWARNING))){std::cout << "Failure while parsing ONNX file" << std::endl;return false;}builder->setMaxWorkspaceSize(1 << 30);builder->setMaxBatchSize(64);builder->setFp16Mode(2);nvinfer1::ICudaEngine *engine = builder->buildCudaEngine(*network);const int inputIndex = engine->getBindingIndex("input0");const int inputIndex544 = engine->getBindingIndex("544");cout << "inputIndex: " << inputIndex << endl;cout << "inputIndex544: " << inputIndex544 << endl;// auto input_dims = engine->getBindingDimensions(0);// std::cout << "input dim: ";// int input_size = 1;// for (int i = 0; i < input_dims.nbDims; i++)// {//     std::cout << input_dims.d[i] << ",";//     input_size *= input_dims.d[i];// }// std::cout << std::endl;// auto out_dims = engine->getBindingDimensions(inputIndex544);// auto output_size = 12;// std::cout << "output dim: ";// for (int j = 0; j < out_dims.nbDims; j++)// {//     output_size *= out_dims.d[j];//     std::cout << out_dims.d[j] << ",";// }const char *input_blob_name = network->getInput(0)->getName();const char *output_blob_name = network->getOutput(0)->getName();printf("input_blob_name : %s \n", input_blob_name);printf("output_blob_name : %s \n", output_blob_name);void *buffers[2];//cudaMalloc(&buffers[0], 1 * 3 * 360 * 640 * sizeof(float));//cudaMalloc(&buffers[1], 1 * 8 * 23 * 40 * sizeof(float));nvinfer1::IHostMemory *trtModelStream = engine->serialize();// 序列化到磁盘,方便后续调用std::string trtModelName = "yolov3_infer.trt";std::ofstream ofs(trtModelName.c_str(), std::ios::out | std::ios::binary);ofs.write((char *)(trtModelStream->data()), trtModelStream->size());ofs.close();parser->destroy();engine->destroy();network->destroy();config->destroy();builder->destroy();// size_t size{0};// std::ifstream file(trtModelName, std::ios::binary);// if (file.good())// {//     file.seekg(0, file.end);//     size = file.tellg();//     file.seekg(0, file.beg);//     // trtModelStream = new char[size];//     // assert(trtModelStream);//     // file.read(trtModelStream, size);//     file.close();// }// void *buffers[2];// IRuntime *runtime = createInferRuntime(gLogger);// assert(runtime != nullptr);// ICudaEngine *engine = runtime->deserializeCudaEngine(trtModelStream, trtModelStream->size());// const int inputIndex = engine->getBindingIndex("input0");// const int inputIndex = engine->getBindingIndex("544");// cout << "input: " << inputIndex << endl;// const int outputIndex = engine->getBindingIndex("output0");// IExecutionContext* context = engine->createExecutionContext();return 0;
}

20211221:Tensorrt部署解析模型uff模型相关推荐

  1. keras保存模型_onnx+tensorrt部署keras模型

    由于项目需要,最近捣鼓了一波如何让用tensorrt部署训练好的模型来达到更快的推理速度,期间花费了大量的时间在知乎和各种网页上去搜索别人的方案,但始终没有找到我想要的条理相对清晰的记录贴(也许只是我 ...

  2. 实践教程 | TensorRT部署深度学习模型

    作者 | ltpyuanshuai@知乎 来源 | https://zhuanlan.zhihu.com/p/84125533 编辑 | 极市平台 本文仅作学术分享,版权归原作者所有,如有侵权请联系删 ...

  3. TensorRT部署深度学习模型

    1.背景 目前主流的深度学习框架(caffe,mxnet,tensorflow,pytorch等)进行模型推断的速度都并不优秀,在实际工程中用上述的框架进行模型部署往往是比较低效的.而通过Nvidia ...

  4. 收藏 | TensorRT部署深度学习模型

    点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者 | ltpyuanshuai@知乎 来源 | https://zhuanlan.zhihu.com/p/ ...

  5. 解锁新姿势-使用TensorRT部署pytorch模型

    一.整体流程概览 使用pytorch训练模型,生成*.pth文件 将*.pth转换成onnx模型 在tensorrt中加载onnx模型,并转换成trt的object 在trt中使用第三步转换的obje ...

  6. tensorRT 部署 YOLOV5模型详解

    tensorRT 部署 YOLOV5模型详解 第一步: 下载tensorRT库 https://developer.nvidia.com/nvidia-tensorrt-8x-download 欢迎使 ...

  7. Tensorflow pb模型转uff模型方法及遇到KeyError20和expected Const问题解决

    项目所需要将Tensorflow 生成的pb模型转为uff模型,方法很简单,但是遇到的问题着实很多,这里主要记录下问题及解决方法,总之,最后是成功生成uff格式的模型的,有需要的可以参考. pb模型转 ...

  8. Python基于statsmodels包构建多元线性回归模型:模型构建、模型解析、模型推理预测

    Python基于statsmodels包构建多元线性回归模型:模型构建.模型解析.模型推理预测 目录

  9. IOS15之JSON的解析字典转模型

    IOS15之JSON的解析字典转模型 IOS15字典转模型 基于 iPhone13运行的. 涉及KVC, #import <Foundation/Foundation.h> NS_ASSU ...

最新文章

  1. eclipse 打开文件目录
  2. 若所有的参数皆需要类型转换——请为此采用non-member函数
  3. 继续Bargaining
  4. docker mysql输入中文_Docker解决终端无法输入中文的问题
  5. 【转】Dynamics CRM 365零基础入门学习(一)Dynamics介绍以及开发工具配置
  6. 软件测试第八次作业—— 缺陷管理(含缺陷管理工具的配置实验)
  7. 刷屏了!这篇Python学习贴,90%的程序员都用的上!
  8. html的下拉刷新页面,html下拉刷新上拉加载Refresher3.0
  9. java----数据结构与算法----JavaAPI:java.util.Collection接口
  10. WINCCV7.5入门指南学习简介
  11. vb科学计算机ppt,科学计算器vb代码.doc
  12. 反激变压器结构设计学习笔记(进阶)
  13. 数据库查询之对含有数字和字母的字段进行排序
  14. 父页面调用子页面方法, 子页面加载父页面传送的数据
  15. net6支持的windows版本
  16. 海思hi3519a的MIPI用法
  17. 58 同城 iOS 客户端组件化演变历程
  18. 机器学习 反向传播_机器学习中的神秘化反向传播:您想了解的隐藏数学
  19. ThreadLocalMap中为什么valu是强引用,不是弱引用
  20. python爬取知乎live_【实战视频教程】使用scrapy爬知乎live信息

热门文章

  1. Android如何隐藏应用程序的图标
  2. WSO2服务端部署常见的问题以及解决方案
  3. 【NodeJs-5天学习】第三天实战篇③ ——基于MQTT的环境温度检测
  4. 怎样用matlab把视频转gif动画,Matlab制作视频并转换成gif动态图的两种方法
  5. 谈谈企业信息化 一种比较简单、灵活的产品物料多单位实现方案
  6. 计算机多媒体课件设计,多媒体课件设计与制作 教师课件制作平台
  7. Qt的工程组织-.pro、.pri、.prf、.prl
  8. 【实习之路】三本的我字节实习转正,终于尘埃落定——分享我的大学四年
  9. 观《白蛇缘起》小感,不想被剧透勿点
  10. RealmObject-粗心操作引发的巨坑