原创作品,转载时请务必以超链接形式标明文章原始出处: http://www.dapalm.com/?p=143,作者:大数据,怕了么?

目录

  • 原创作品,转载时请务必以超链接形式标明文章原始出处: http://www.dapalm.com/?p=143,作者:大数据,怕了么?

      • 目录
    • 多种模型导入
    • 支持层
    • 自定义层

从TensorRT1到TensorRT4一路跟过来,现在支持也越来越完善,NVIDIA的尿性就是不开源,坑不少,作为一个Inference库,确实为部署网络带来方便。下面从下面几个方面梳理总结一下:

  • 多种模型导入
  • 支持层
  • 自定义层
  • UFF格式及转换

多种模型导入

  • Caffe caffemodel目前支持最完整
  • Onnx Onnx目前不支持自定义层
  • TensorFlow TensorFlow的模型需要先导出frozen graph,在转换成uff格式

支持层

TRT实现了22中层接口,Caffe和TensorFlow支持的层都是通过集成这些接口实现,具体每种模型支持哪些具体的层和参数,并没有很明确的支持,只能通过代码去试验。
- Convolution:3D,with or without bias
- Full_Connected
- Activation : ReLu, Sigmoid,Tanh
- Pooling :Max, Average, Max_Average_blend
- LRN
- Scale
- Softmax
- Deconvolution
- Concat : across channel
- ElementWise : sum, product, maximum, subtraction,division, power
- RNN : Input,Output,Forget,Update,Reset,Cell,Hidden
- Unary : exp,log,sqrt,recip,abs,neg
- Padding
- Shuffle
- Reduce : sum,prod,max,min,avg
- Topk max,min
- Gather
- Matrix_Multiply
- Ragged_Softmax
- Constant : Uff模型的权值就是保存为常量类型
- RNN_v2
- Plugin : FasterRCNN fused plugin (RPN + ROI pooling). Normalize plugin. Permute plugin. PriorBox plugin. SSD DetectionOutput plugin. Concat plugin. YOLO PReLU Plugin. YOLO Reorg Plugin. YOLO Region Plugin.

  • Caffe已知支持的层(没有明确指出CaffeParser能解析哪些层和参数,下面列一下用过不支持的层)
    不支持除ReLu外其他变形 除across channel参数的Softmax、Concat等
  • TensorFlow已知支持的算子
    Placeholder Const Add Sub Mul Div RealDiv Relu Tanh Sigmoid Negative Abs Sqrt Rsqrt Square Pow Exp Log Softmax Minimum Maximum Shape Reshape Transpose Pack ConcatV2 MaxPool AvgPool Conv2D DepthwiseConv2dNative Conv2DBackpropInput BiasAdd FuseBatchNorm StrideSlice Sum Prod Min Max Mean Squeeze Pad

自定义层

目前支持Caffe和TensorFlow的模型,不支持Onnx

1.创建一个符合IPlugin接口的插件
具体步骤:
{
0.构造函数
- 第一个构造函数,构造函数作用是拷贝权重到对应内存中,或者输入各种参数,用于配置及序列化,参数类型由自己定义,如果有权值需要带const Weight* weight,int nbWeight这两个参数,将权值读入内存,最终序列化到硬盘;
- 第二个构造函数,传入参数const void* data, size_t length,从硬盘中序列化的优化权重文件拷到gpu内存,如果该层没有权值,不需要实现,只需要在执行阶段操作上一层传过来的feature map。
1.确定自定义层输出大小,在调用ITensor::getDimensions()或者builder阶段时调用
- getNbOutputs(); //return该层输出的个数
- getOutputDimensions(); //return该层输出的维度
2.配置层(只在builder阶段调用,用来确定序列化或反序列化)
- configure(const Dims*inputs, int nbInputs, const Dims* outputs, int nbOutputs, int); 调用第一构造函数,最后序列化时,可以从输入参数获取需要保存的数据,存入硬盘。提供了输入维度,输入个数,输出维度和输出个数信息,可以在插件中直接使用
3.工作空间
- getWorkspaceSize();//层所需要的额外内存空间大小
4.资源管理(初始化和释放)
- initialize(); //调用第二个构造函数反序列化后,构建engine时,用于做一些初始化操作,主要是开辟显存空间。
- terminate();//释放资源
5.执行
- enqueue(int batchSize, const void*const * inputs, void** outputs, void* workspace, cudaStream_t stream);//该层具体的操作,一般用cuda实现:核函数 + 接口函数。
6.序列化/以及反序列化
- getSerializationSize();//该层序列化的字节数,
- serilization(void* buffer); //序列化,直接以字节形式把需要存储的参数写入buffer中
}
2.class CustomPlugin: public IPlugin自定义层在插件工厂中进行初始化
Caffe和Uff模型都是用同一个工厂class PluginFactory : public nvinfer1::IPluginFactory, public nvcaffeparser1::IPluginFactory,public nvuffparser::IPluginFactory,public nvuffparser::FieldCollection
- Caffe使用nvinfer1::IPlugin* createPlugin(const char* layerName, const nvinfer1::Weights* weights, int nbWeights)来实例化插件层中的第一个构造函数
- Uff使用nvinfer1::IPlugin* createPlugin(const char* layerName, const nvinfer1::Weights* weights, int nbWeights,const FieldCollection fc)来实例化插件层中的第一个构造函数(序列化过程)
- Caffe和Uff都是用统一的函数nvinfer1::IPlugin* createPlugin(const char* layerName, const void* serialData, size_t serialLength)来实例化插件层中的第二个构造函数(反序列化过程)
3.添加插件到网络ICaffeParser* parser = createCaffeParser(); parser->setPluginFactory(pluginFactory);
Caffe添加插件具体方法请samplePlugin参考 —— [ TensorRT Developer Guide ]
注意: TensorRT中的UFF格式需要从TensorFlow Frozen Graph转换而来,其中自定义op可以自己根据情况在后面添加对应_ID号,防止多个同样的插件层在插件工厂中出现莫名其妙的问题,插件没有Demo,自己试的

TensorRT 4 基本介绍及TensorFlow模型转化Uff格式导入(二)相关推荐

  1. DL | TensorRT将Tensorflow模型转换为uff格式 报错Unable to locate package uff-converter-tf

    前情概要:尝试用Nvidia的tensorRT加速模型,生成tf的pb模型后,用uff的python工具包进一步转换模型时,出现错误. 实验环境:TensorRT 5.0+CUDA10.0的nvidi ...

  2. 将tensorflow模型转换为uff模型

    将ckpt转换为pb模型 https://blog.csdn.net/guyuealian/article/details/82218092 将pb模型转换为uff模型 convert-to-uff ...

  3. TensorRT 3:更快的TensorFlow推理和Volta支持

    TensorRT 3:更快的TensorFlow推理和Volta支持 TensorRT 3: Faster TensorFlow Inference and Volta Support 英伟达Tens ...

  4. ONNX系列四 --- 使用ONNX使TensorFlow模型可移植

    目录 TensorFlow简介 安装和导入转换器 快速浏览模型 将TensorFlow模型转换为ONNX 摘要和后续步骤 参考文献 下载源547.1 KB 系列文章列表如下: ONNX系列一 --- ...

  5. 简单完整地讲解tensorflow模型的保存和恢复

    http://blog.csdn.net/liangyihuai/article/details/78515913 在本教程主要讲到: 1. 什么是Tensorflow模型? 2. 如何保存Tenso ...

  6. keras模型转TensorFlow模型-tensorrt UFF格式

    最近在学习tensorrt,需要将keras训练好保存的.hdf5格式模型转为tensorflow的.pb模型,然后转为tensorrt支持的uff格式. 做个记录. 代码如下: 转为tensorfl ...

  7. 深度学习之格式转换笔记(三):keras(.hdf5)模型转TensorFlow(.pb) 转TensorRT(.uff)格式

    环境: tensorflow1.15,cuda10.0,cudnn7.6.4 将keras训练好保存的.hdf5格式模型转为tensorflow的.pb模型,然后转为tensorrt支持的uff格式. ...

  8. 如何使用TensorRT对训练好的PyTorch模型进行加速?

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨伯恩legacy@知乎 来源丨https://zhuanlan.zhihu.com/p/8831 ...

  9. 利用TensorRT实现神经网络提速(读取ONNX模型并运行)

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站. 前言 这篇文章接着上一篇继续讲解如何具体使用TensorRT. 在之前已经写到过一篇去介绍什么是Te ...

最新文章

  1. LeetCode简单题之生成每种字符都是奇数个的字符串
  2. 机械转嵌入式还是it?学嵌入式好还是java好?
  3. TCP的三次握手与四次挥手(详解+动图)
  4. IDEA下spring boot项目打包war包部署外部tomcat问题
  5. UI4_UIStepper与UIProgressView
  6. Python函数之初体验
  7. WebKit DOM Event (二)
  8. 深度学习(7)TensorFlow基础操作三: 索引与切片
  9. 天池 在线编程 布尔表达式求值(栈)
  10. html 设置打印区域,excel打印区域怎么设置
  11. android studio 4.0 去掉标题栏
  12. eclipse tomcat lomboz的安装配置说明
  13. js 基础-函数传参
  14. 360网站域名拦截检测 非法网址检测系统原理
  15. 美文听力:别错过机会
  16. 惠普服务器重装系统步骤,惠普服务器安装系统相关介绍
  17. 完美卸载Visual Studio2015的方法汇总
  18. 陷波滤波器——周期性降噪
  19. 《恋恋笔记本》观后感
  20. (算法)求数组中数字组合(可多值组合)相加最接近目标数的组合(可能多个)

热门文章

  1. 2023辽宁大学新闻与传播硕士(MJC)专业考研成功经验分享
  2. 社交电商的现状以及它的四种商业模式
  3. PHP检查端口是否可以被绑定
  4. 【我参加NVIDIA Sky Hackathon】ASR篇
  5. 中国公认的大学生计算机编程第一人:楼天城
  6. css 隐藏滚动条 但是可以滚动
  7. Windows 11 蓝牙耳机音质故障-解决方法
  8. Linux通过脚本实现远程自动备份
  9. 完美解决:Java微信语音amr格式转mp3格式,兼容Linux/Mac/Windows,支持Maven
  10. 在Linux中配置软 RAID,使用mdadm命令创建RAID5, RAID设备的数据恢复