tensorflow测试模型,tensorflow模型查看参数

  tensorflow测试模型,tensorflow模型查看参数

  

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

  

pb模型转为uff模型的方法及步骤,网上很多,最后使用的方法如下:

  

1、电脑没装win10+ubuntu的双系统,为了简便,用vmware创建了个ubuntu的虚拟机,ubuntu系统是ubuntu-16.04.3-desktop-amd64;

  

2、进入虚拟机的Ubuntu系统,打开Terminal,安装了个Anaconda,使用如下命令创建Python虚拟环境,并安装python2.7和numpy:

  conda create-name张量流-CPU python=2.7 numpy

3、创建完毕后,激活tensorflow-cpu虚拟环境:

  康达激活张量流-cpu

4、安装cpu版本的tensorflow,这里没安装gpu版本的,cpu版本的转换uff够用了,用的1.10.0版本的也可以,别的版本的需要自己测试了:

  点安装-升级再见安装张量流==1.10.0

5、去下载TensorRT-5.0.2.6.Ubuntu-16.04.4.x86_64-gnu.cuda-9.0.cudnn7.3.tar.gz:

  

下载网址:

https://developer.nvidia.com/nvidia-tensorrt-5x-download

  

下载完后解压,主要得到三个安装whl文件:

  

6、上面下载的文件拷贝到Ubuntu系统,分别进入相应的目录,安装这三个whl文件即可:

  点安装tensorrt-5。0 .2 .6-py2。py3-无-任何。whl pip安装uff-0。5 .5-py2。py3-无-任何。whl pip安装图形外科医生-0。3 .2-py2。py3-无-任何。whl

7、将训练好的pb模型文件拷贝到Ubuntu系统,进入到模型目录,使用如下命令转换模型文件:

  convert-to-uff-o SSD _ inception _ v2 _ coco。uff-输入_文件冻结_推理_图形。Pb

结果如下图所示,生成所需要的uff模型:

  

上述方法很简单,但是遇到的问题就让人惆怅了。

  

问题1:运行convert-to-uff转换命令后,运行不成功,提示KeyError:20的错误:

  

原因分析:前期探索过程中使用的uff-0.6.5和graphsurgeon-0.4.1版本,就会报这个错,试了好久,后来换成uff-0.5.5和graphsurgeon-0.3.2,就不报这个错误了。

  

问题2:运行convert-to-uff转换命令后,提示“uff.model.exceptions.UffException: Transpose permutation has op Sub, expected Const. Only constant permuations are supported in UFF.”的错误:

  

原因分析

:

Tensorrt并不支持Tensorflow的所有操作,但是tf.transpose操作对于Tensorrt5.0是支持的,但是并不支持tf.transpose里面还有tf.subtract操作,所以需要对代码里面的tf.subtract操作进行Constant folding optimizer处理,将运算转换为常量;也就是网上NVIDIA给出的解决方法:

  

刚看到这个constfold optimizer,根本不知道是什么啊,没办法,只能各种搜,最终google到了一个可以适用于这个错误的解决方法,就是在训练模型的代码里,找到tf.transpose的位置,加入如下代码,解决此问题,其实就是Tensorflow的一种优化处理,Constant folding optimizer,用来提升代码处理速度的:

  将contextlibimport张量流作为TF @ contextlib。contextmanagerdef选项(options):old _ opts=TF。配置。优化器。get _ experimental _ options()TF。配置。优化器。set _ experimental _ options(选项)try:yield finally:TF。配置。优化器。set _ experimental _ options(old _ opts)…………with options({ constant _ folding :True }):……TF。转置(……)……

此外,也搜索到了官方给的名为fold constants的工具,fold_constants.py文件,可以自己试试官方的方法,文件代码如下(偶然的机会在google上搜到的,链接没保存,找不到了):

  #!张量流的/usr/LG dfh/env python 3。核心。proto buf从张量流导入config _ Pb2、rewriter_config_pb2、meta _ graph _ Pb2。核心。框架从张量流导入graph _ Pb2。python。框架导入tag _ constants从张量流导入importer、ops。python。从张量流导入TF _ optimizer。python。自动输出节点节点定义的训练导入保存程序编号。将surgergraph作为GS导入arg parse def const foldgraph()with graph。as _ default():outputs=[node。GS中节点得名称.静态图.图表_输出]输出集合=meta_graph_pb2 .集合定义()输出列表=输出集合。节点列表。输出的值:output _ list。追加(输出。encode( utf-8 ))导入程序。import _ graph _ def(graph def,name= )meta graph=saver。export _ meta _ graph(graph _ def=graph。as _ graph _ def(add _ shapes=True),graph=graph)元图。集合_定义[训练_操作].复制自(output _ collection)rewriter _ config=rewriter _ config _ Pb2 .重写器配置()重写器配置。optimizer s . extend([ const fold ])rewriter _ config。meta _ optimizer _ iterations=(rewriter _ config _ Pb2 .一个)会话配置=配置pb2 .config proto()会话配置。图形选项。rewrite _ options copyfrom(rewriter _ config)返回tf _优化器.OptimizeGraph(session_config,metagraph,graph _ id=b TF _ graph )def main():parser=arg parse .ArgumentParser(在提供的冻结模型中折叠常数)解析器。add _ argument( model _ file ,help=要在其中折叠常数的冻结模型parser.add_argument(-o ,- output-file ,help=写入新图形的路径,常量已折叠. args,_=解析器。parse _ known _ args()带有open(args。model _ file, rb )为f: graphdef=graph_pb2 .GraphDef() graphdef .ParseFromString(f . read())folded _ graph=const fold(graph def)if args。output _ file:with open(args。output _ file, wb )作为f: f.write(folded_graph .序列化tostring())if _ _ name _ _= _ _ main _ _ :main()

问题3:加了上面的代码后,可能会出现“AttributeError: module tensorflow has no attribute config”的问题:

  

原因分析:跑训练模型的代码使用tensorflow版本必须大于等于1.14.0,小于此版本会报这个错,tensorflow gpu 1.14.0以后的版本需要cuda10.0以上版本才可以;

  

完!方法很简单,但是遇到的问题让人烦。

  

最后,如果上述方法还行不通的话,本人建议使用英伟达开源的模型转换工具;

  

官方链接为:

https://github.com/AastaNV/TRT_object_detection

  

按照网站的步骤,执行完main.py将会生成temp.uff文件,还能测试生成的uff文件可不可用。

  

这个方法的参考链接:https://www.it610.com/article/1283183189296168960.htm

  

https://www.minds.ai/post/deploying-ssd-mobilenet-v2-on-the-nvidia-jetson-and-nano-platforms

  

有问题,可一起讨论。

tensorflow测试模型,tensorflow模型查看参数