TensorRT5开发者⼿册中⽂版使⽤深度学习框架(三-6)
第8章
第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
ElementWi: sum, product, maximum, subtraction,division, power
Concatenation: across channel
Deconvolution
BatchNormalization
Scale
bloom是什么意思Crop
Reduction : sum,prod,max,min,avg
Reshape
Permute
英语作文大全
Dropout
Concat
ElementWi
RNN : Input,Output,Forget,Update,Ret,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 fud 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
shrinkage>由于BiasAdd
Negative, Abs, Sqrt, Rsqrt, Pow, Exp and Log
注意:NvUffParr只⽀持Neg, Abs, Sqrt, Rsqrt, Exp和Log的常量节点
FudBatchNorm
ReLU, TanH, and Sigmoid
新人教版七年级上册
SoftMax
Mean
ConcatV2
Reshape
Transpo
Conv2D
DepthwiConv2dNative
ConvTranspo2D
MaxPool
AvgPool
Pad
ONNX
ONNX解析器是⼀个开源项⽬,可以在中找到有关⽀持算⼦的最新信息。
8.2 使⽤TensorFlow
有关TensorFlow模型直接使⽤TensorRT的信息,请参阅:
Python⽰例 - [9.2.2 end_to_end_tensorflow_mnist]
8.2.1 TensorFlow模型⽣成冻结图
为了使⽤UFF命令⾏⼯具,TensorFlowGraph必须保存为.pd的冻结图⽂件,请参阅:
注意:⼀般是在模型导出的过程中直接转换成冻结图
lightning
8.2.2 Keras模型⽣成冻结图
使⽤如下代码⽣成Keras模型的冻结图:
dels import load_model
import keras.backend as K
from tensorflow.python.framework import graph_io
from ls import freeze_graph
protobuf import saver_pb2
from aining import saver as saver_lib
def convert_keras_to_pb(keras_model, out_names, models_dir,model_filename):
model = load_model(keras_model)
K.t_learning_pha(0)
bulgess = K.get_ssion()
saver = saver_lib.Saver(write_version=saver_pb2.SaverDef.V2)
checkpoint_path = saver.save(ss,'saved_ckpt', global_step=0,
latest_filename='checkpoint_state')
graph_io.write_aph,'.','tmp.pb')
freeze_graph.freeze_graph('./tmp.pb','',
Fal, checkpoint_path, out_names,
"save/restore_all","save/Const:0",
models_dir+model_filename,Fal,"")
8.2.3 冻结图转换为UFF
使⽤如下⽰例代码将.pb冻结图转换成.uff格式⽂件:
convert-to-uff input_file [-o output_file][-O output_node]
convert-to-uff input_file -l #打印TensorFlow层
8.2.4 使⽤TensorFlow RNN权重
本节提供有关TensorFlow权重及其存储格式的信息。此外,以下部分将指导您如何从TensorFlow处理和解密RNN权重。
这节主要内容是将各种训练框架下输出的模型权重转换成TensorRT格式(planner格式)
8.2.4.1 TensorRT⽀持的TensorFlow RNN单元
TensorRT中的循环神经⽹络层来⾃TensorFlow的MultiRNNCell算⼦。每⼀层由具有相同配置的多个⼦层组成,换句话说,隐藏和嵌⼊⼤⼩。完成该封装使得多个⼦层之间的内部连接可以从⽤户抽象出来(其实和DenBlock、ResBlock⼀个意思,内部包含多个层)。当涉及更深层的⽹络时,这允许更简单的代码。
TensorRT⽀持四种不同的RNN层类型。这些层类型是RNN relu,RNN tanh,LSTM和GRU。与这些类型匹配的TensorFlow Cells是:
TensorRT RNN Relu/Tanh Layer
允许的激活函数有:tf.tanh 和 lu
这是⼀个独⽴于平台的单元
TensorRT LSTM Layer
在TensorFlow中创建这个算⼦的实例时,forget_bias必须设置为0。为了⽀持⾮0的遗忘偏置,需要通过添加⼀个参数化的遗忘偏置去转存TensorFlow的遗忘偏置。
这是⼀个独⽴于平台的单元
对forget bias的条件和BasicLSTMCell⼀样
⽬前不⽀持peepholes(gate由当前输⼊xt、上⼀时刻隐藏状态ht-1、上⼀时刻单元状态ct-1),u_peepholes必须设置成Fal cudnn兼容
过犹不及在线阅读
TensorRT GRU Layer
cudnn兼容
由于与标准的、平台独⽴的不同,所以CudnnCompatibleGRUCell可以在TensorRT中正确使⽤
8.2.4.2 保持TensorFlow和TensorRT之间的模型⼀致性
对于未在TensorFlow RNN Cells Supported In TensorRT中列出的任何TensorFlow Cell,请参阅TensorRT API和TensorFlow API以确保Cell 在数学上等同于TensorRT⽀持的Cell,并且存储格式与您期望的格式⼀致。 这样做的⼀个好⽅法是设计单元测试,使⽤TensorFlow作为正确输出来验证TensorRT的输出。
8.2.4.3 ⼯作流
使⽤如下⼯作流来萃取和使⽤TensorFlow权重
8.2.4.4 转存(dumped)TensorFlow权重
cereal是什么意思
Python脚本dumpTFWts.py可⽤于从给定的TensorFlow检查点转储所有变量和权重。 该脚本位于tensorrt / samples / common / dumpTFWts.py⽬录中。 -h获取有关此脚本⽤法的更多信息。
#!/usr/bin/python
# Script to dump TensorFlow weights in TRT v1 and v2 dump format.
# The V1 format is for TensorRT 4.0. The V2 format is for TensorRT 4.0 and later.
import sys
import struct
import argpar
try:
import tensorflow as tf
from tensorflow.python import pywrap_tensorflow
except ImportError as err:
sys.stderr.write("""Error: Failed to import module ({})""".format(err))
parr = argpar.ArgumentParr(description='TensorFlow Weight Dumper')
parr.add_argument('-m','--model', required=True,help='The checkpoint file baname, example baname(model.ckpt-766908.data-00000-of-00001) -> model.ckpt-766908')
parr.add_argument('-o','--output', required=True,help='The weight file to dump all the weights to.')
parr.add_argument('-1','--wtsv1', required=Fal, default=Fal,type=bool,help='Dump the weights in the wts v1.')
opt = parr.par_args()
if opt.wtsv1:
print"Outputting the trained weights in TensorRT's wts v1 format. This format is documented as:"
print"Line 0: <number of buffers in the file>"
print"Line 1-Num: [buffer name] [buffer type] [buffer size] <hex values>"
el:
print"Outputting the trained weights in TensorRT's wts v2 format. This format is documented as:"
print"Line 0: <number of buffers in the file>"
print"Line 1-Num: [buffer name] [buffer type] [(buffer (1, 2, 3)}] <buffer shaped size bytes of data>"
inputba = del
outputba = opt.output
def float_to_hex(f):
return hex(struct.unpack('<I', struct.pack('<f', f))[0])
>太原教育网