目录

  • 保存序列化的结果
  • 读取序列化的结果

我们使用TensorRT转化Caffe模型时,每次都要使用如下代码将模型序列化,之后再进行反序列化,才可以进行inference。但是build engine的过程是十分耗时的,我们可以将序列化的结果保存至本地,以后直接读取本地的序列化结果即可,无需build engine,这样可以节省很多时间。

// 此函数用于得到pluginFactory和gie_model_stream
void objectDetection::caffeToGIEModel(const std::string& deploy_file,const std::string& model_file,const std::vector<std::string>& outputs,unsigned int max_batch_size,nvcaffeparser1::IPluginFactory* pluginFactory,IHostMemory **gie_model_stream) {...... //函数中的其他代码ICudaEngine *engine = builder->buildCudaEngine(*network);...... //函数中的其他代码// 得到序列化的模型结果(*gie_model_stream) = engine->serialize();...... //函数中的其他代码
}// 调用caffeToGIEModel得到_plugin_factory和_gie_model_stream
caffeToGIEModel(_deploy_file, _model_file, _outputs, _batch_size, &_plugin_factory, &_gie_model_stream);// 将序列化得到的结果进行反序列化,以执行后续的inference
_engine = _runtime->deserializeCudaEngine(_gie_model_stream->data(), _gie_model_stream->size(), &_plugin_factory);

保存序列化的结果

// 此函数用于得到pluginFactory和gie_model_stream
void objectDetection::caffeToGIEModel(const std::string& deploy_file,const std::string& model_file,const std::vector<std::string>& outputs,unsigned int max_batch_size,nvcaffeparser1::IPluginFactory* pluginFactory,IHostMemory **gie_model_stream) {...... //函数中的其他代码ICudaEngine *engine = builder->buildCudaEngine(*network);...... //函数中的其他代码// 得到序列化的模型结果(*gie_model_stream) = engine->serialize();// 设置保存文件的名称为cached_model.binstd::string cache_path = "../cached_model.bin";std::ofstream serialize_output_stream;// 将序列化的模型结果拷贝至serialize_str字符串std::string serialize_str;serialize_str.resize( (*gie_model_stream)->size() );memcpy((void*)serialize_str.data(), (*gie_model_stream)->data(), (*gie_model_stream)->size());// 将serialize_str字符串的内容输出至cached_model.bin文件serialize_output_stream.open(cache_path);serialize_output_stream << serialize_str;serialize_output_stream.close();...... //函数中的其他代码
}

读取序列化的结果

// 调用caffeToGIEModel得到_plugin_factory,将此函数中和_gie_model_stream相关的代码注释或者删除
caffeToGIEModel(_deploy_file, _model_file, _outputs, _batch_size, &_plugin_factory, &_gie_model_stream);// 从cached_model.bin文件中读取序列化的结果
std::string cached_path = "../cached_model.bin";
std::ifstream fin(cached_path);// 将文件中的内容读取至cached_engine字符串
std::string cached_engine = "";
while (fin.peek() != EOF){ // 使用fin.peek()防止文件读取时无限循环std::stringstream buffer;buffer << fin.rdbuf();cached_engine.append(buffer.str());
}
fin.close();// 将序列化得到的结果进行反序列化,以执行后续的inference
_engine = _runtime->deserializeCudaEngine(cached_engine.data(), cached_engine.size(), &_plugin_factory);

TensorRT学习笔记7 - 保存与读取序列化的结果相关推荐

  1. NVIDIA可编程推理加速器TensorRT学习笔记(二)——实操

    NVIDIA可编程推理加速器TensorRT学习笔记(二)--实操 ​ TensorRT 是 NVIDIA 自家的高性能推理库,其 Getting Started 列出了各资料入口,如下: 本文基于博 ...

  2. R语言小白学习笔记3—R语言读取数据

    R语言小白学习笔记3-R语言读取数据 笔记链接 想说的话 学习笔记3-R语言读取数据 3.1 读取CSV文件 3.1.1 read_delim函数 3.1.2 fread函数 3.2 读取Excel数 ...

  3. openCV学习笔记1——图片的读取,显示,保存;视频的读取,显示和保存

    在pycharm中下载openCV ①打开pycharm下方的terminal终端 ②在路径下直接输入 pip install opencv-python 1.读入图像 函数:cv2.imread() ...

  4. Python OpenCV学习笔记之:图像读取,显示及保存

    为什么80%的码农都做不了架构师?>>>    #-*- coding: utf-8 -*- # 读取,保存,显示图片 import cv2 as cv# 读取为灰度图片 img = ...

  5. NVIDIA可编程推理加速器TensorRT学习笔记(三)——加速推理

    文章目录 简单张量RT示例 将预训练的图像分割 PyTorch 模型转换为 ONNX 将 ONNX 模型导入 TensorRT,生成引擎并执行推理 对输入进行批处理 分析应用程序 优化您的应用程序 使 ...

  6. TensorRT学习笔记(三)

    TENSORRT工作流程: 下表列出了TensorRT功能及其支持的API. 下列表显示TensorRT支持的平台 关键词: UFF: 通用框架格式(UFF)是描述DNN(深度神经网络)的执行图的数据 ...

  7. TensorRT学习笔记--基于FCN-ResNet101推理引擎实现语义分割

    目录 前言 1--Pytorch模型转换为Onnx模型 2--Onnx模型可视化及测试 2-1--可视化Onnx模型 2-2--测试Onnx模型 3--Onnx模型转换为Tensor RT推理模型 4 ...

  8. python 学习笔记(十二) 文件和序列化

    python 文件读写和序列化学习. ## python文件读写 `1 打开并且读取文件` f = open('openfile.txt','r') print(f.read()) f.close() ...

  9. Python学习笔记-文件,CSV,序列化反序列化及应用

    文件 数据持久化的一种方式 Python程序运行时写在各种属性,变量,容器中的数据都保存在内存中,内存是 易失存储器 当程序运行结束或内存空间被释放,这些数据也就不复存在了 文件是将数据保存在硬盘等 ...

最新文章

  1. node 修改html文件路径,好程序员前端教程-nodejs如何读取文件夹目录的内容
  2. 全球及中国甲苯甲酸行业投资决策与运营前景状况分析报告2022版
  3. 算法训练 最大的算式(动态规划)
  4. android中怎么保存checkbox中的checked属性_Vue 精粹:v-model指令在组件中怎么玩
  5. mybatis generator生成example_[Springboot系列] SpringBoot与Mybatis结合
  6. 企业应该如何选型ERP?
  7. 电商独立站-谷歌SEO指标
  8. LeetCode 540. 有序数组中的单一元素(Single Element in a Sorted Array) 42
  9. 2个维度5大方法,让你的微服务在K8s上跑起来
  10. RK3288_Android7.1在HAL层audio音频通路小结
  11. Android关于Paint你所知道的和不知道的一切
  12. Win10 桌面美化
  13. Redhat注册方法
  14. 计算机模拟题操作题错误,计算机模拟试卷操作题答案.doc
  15. QT 即时聊天软件(一)
  16. 如何查找重复文件并快速删除,电脑查重复文件的方法
  17. 【basler】Chapter3:basler相机出现斜黑条纹
  18. 计算机专业实习生一般做什么
  19. 一般将来时语法课教案_一般将来时的被动语态语法课教学设计
  20. oracle数据库报错,ORA-01652:无法通过128(在表空间TEMP中)扩展temp段

热门文章

  1. 云炬60s看世界20211122
  2. 博客的起死复生+慎改wdpc端口
  3. 后端接收到信息并返回了但是前端无响应_Bug的噩梦:前端调试必备的7个“大杀器”...
  4. python状态机实现_如何实现Python状态机设计?
  5. Qt Creator和VS2010中添加槽信号_差异与详解
  6. 为TIF、JPG图片添加地理坐标/平面直角坐标
  7. 28款网页CSS设计工具和生成器
  8. Javascript 原型和继承(Prototypes and Inheritance)
  9. go语言游戏编程-Ebiten渲染一张图片
  10. badboy测试工具下载