NVIDIA TensorRT是一种高性能神经网络推理(Inference)引擎,用于在生产环境中部署深度学习应用程序,应用有图像分类、分割和目标检测等,可提供最大的推理吞吐量和效率。TensorRT是第一款可编程推理加速器,能加速现有和未来的网络架构。本手册为TensorRT 4.0.1.6 GA版英文手册翻译而来,主要作为备忘所用,分享出来以供更多开发者使用。
TensorRT Developer Guide手册一共分为四个章节,主要内容在第二、三章,看懂这两章,写代码够用了。第一章为TensorRT综述。第四章为示例,介绍demo的代码结构及功能。开篇是目录,前三章每章为两到三篇,最后第四章示例,会拆分几个关键示例进行详细说明。
注意,2018年10月份,NVIDIA又更新TensorRT 5.0.2.6 Linux版本和TensorRT 5.0.1.3 Windows版,正式支持Windows10,经测试向下兼容Windows7也可以用。
本来这章应该是TensorRT4的第3章,在TensorRT5的手册上直接到了第8章,这里暂时先从第8章开始,继续翻译。
第8章 使用深度学习框架
8.1 框架支持的算子
8.2 使用TensorFlow
8.2.1 TensorFlow模型生成冻结图
8.2.2 Keras模型生成冻结图
8.2.3 冻结图转换为UFF
8.2.4 使用TensorFlow RNN权重
8.2.5 使用Graph Surgeon API预处理TensorFlow图
8.3 使用PyTorch和其他框架
第8章 使用深度学习框架
使用Python API,利用TensorFlow,Caffe或ONNX等兼容框架构建的模型使用TensorRT提供的解析器构建加速引擎。Python API还支持以NumPy兼容格式存储权重的框架,如PyTorch。
8.1 框架支持的算子
Caffe
Caffe框架支持的操作:
Convolution:3D,with or without bias
Pooling :Max, Average, Max_Average_blend
InnerProduct
Softmax
Activation: ReLu, Sigmoid,Tanh
LRN
Power
ElementWise: sum, product, maximum, subtraction,division, power
Concatenation: across channel
Deconvolution
BatchNormalization
Scale
Crop
Reduction : sum,prod,max,min,avg
Reshape
Permute
Dropout
Concat
ElementWise
RNN : Input,Output,Forget,Update,Reset,Cell,Hidden
Unary : exp,log,sqrt,recip,abs,neg
Padding
Shuffle
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.
TensorFlow
TensorFlow框架支持的算子:
Placeholder
Const
Add, Sub, Mul, Div, Minimum and Maximum
BiasAdd
Negative, Abs, Sqrt, Rsqrt, Pow, Exp and Log
注意:NvUffParser只支持Neg, Abs, Sqrt, Rsqrt, Exp和Log的常量节点
FusedBatchNorm
ReLU, TanH, and Sigmoid
SoftMax
Mean
ConcatV2
Reshape
Transpose
Conv2D
DepthwiseConv2dNative
ConvTranspose2D
MaxPool
AvgPool
Pad
ONNX
ONNX解析器是一个开源项目,可以在GitHub:ONNX TensorRT中找到有关支持算子的最新信息。
8.2 使用TensorFlow
有关TensorFlow模型直接使用TensorRT的信息,请参阅:
Python示例 - [9.2.2 end_to_end_tensorflow_mnist]
8.2.1 TensorFlow模型生成冻结图
为了使用UFF命令行工具,TensorFlowGraph必须保存为.pd的冻结图文件,请参阅:
注意:一般是在模型导出的过程中直接转换成冻结图
8.2.2 Keras模型生成冻结图
使用如下代码生成Keras模型的冻结图:
from keras.models import load_model
import keras.backend as K
from tensorflow.python.framework import graph_io
from tensorflow.python.tools import freeze_graph
from tensorflow.core.protobuf import saver_pb2
from tensorflow.python.training import saver as saver_l