用mmdnn实现模型转换

参考链接:https://www.twblogs.net/a/5ca4cadbbd9eee5b1a0713af

  1. 安装mmdnn

    pip install mmdnn

  2. 准备好mxnet模型的.json文件和.params文件, 以InsightFace MxNet r50为例        https://github.com/deepinsight/insightface
  3. 用mmdnn运行命令行
    python -m mmdnn.conversion._script.convertToIR -f mxnet -n model-symbol.json -w model-0000.params -d resnet50 --inputShape 3,112,112 

     会生成resnet50.json(可视化文件) resnet50.npy(权重参数) resnet50.pb(网络结构)三个文件。

  4. 用mmdnn运行命令行
    python -m mmdnn.conversion._script.IRToCode -f tensorflow --IRModelPath resnet50.pb --IRWeightPath resnet50.npy --dstModelPath tf_resnet50.py 

     生成tf_resnet50.py文件,可以调用tf_resnet50.py中的KitModel函数加载npy权重参数重新生成原网络框架。

  5. 打开tf_resnet.py文件,修改load_weights()中的代码 (tensorflow=1.14.0报错) 

     try:weights_dict = np.load(weight_file).item()except:weights_dict = np.load(weight_file, encoding='bytes').item()

    改为

     try:weights_dict = np.load(weight_file, allow_pickle=True).item()
    except:weights_dict = np.load(weight_file, allow_pickle=True, encoding='bytes').item()

  6. 基于resnet50.npy和tf_resnet50.py文​​件,固化参数,生成PB文件:

    import tensorflow as tf
    import tf_resnet50 as tf_fun
    def netWork():model=tf_fun.KitModel("./resnet50.npy")return model
    def freeze_graph(output_graph):output_node_names = "output"data,fc1=netWork()fc1=tf.identity(fc1,name="output")graph = tf.get_default_graph()  # 獲得默認的圖input_graph_def = graph.as_graph_def()  # 返回一個序列化的圖代表當前的圖init = tf.global_variables_initializer()with tf.Session() as sess:sess.run(init)output_graph_def = tf.graph_util.convert_variables_to_constants(  # 模型持久化,將變量值固定sess=sess,input_graph_def=input_graph_def,  # 等於:sess.graph_defoutput_node_names=output_node_names.split(","))  # 如果有多個輸出節點,以逗號隔開
    with tf.gfile.GFile(output_graph, "wb") as f:  # 保存模型f.write(output_graph_def.SerializeToString())  # 序列化輸出if __name__ == '__main__':freeze_graph("frozen_insightface_r50.pb")print("finish!")

  7. 采用tensorflow的post-train quantization离线量化方法(有一定的精度损失)转换成tflite模型,从而完成端侧的模型部署:
    import tensorflow as tfconvert=tf.lite.TFLiteConverter.from_frozen_graph("frozen_insightface_r50.pb",input_arrays=["data"],output_arrays=["output"],input_shapes={"data":[1,112,112,3]})
    convert.post_training_quantize=True
    tflite_model=convert.convert()
    open("quantized_insightface_r50.tflite","wb").write(tflite_model)
    print("finish!")

转载于:https://www.cnblogs.com/qiangz/p/11134240.html

MxNet 模型转Tensorflow pb模型相关推荐

  1. pytorch .pth模型转tensorflow .pb模型

    训练好的pytorch模型如何转化为tensorflow的pb模型? 本人初步使用的是onnx框架: pytorch --->  onnx ----> tensorflow 使用onnx转 ...

  2. 查看tensorflow pb模型文件的节点信息

    查看tensorflow pb模型文件的节点信息: import tensorflow as tf with tf.Session() as sess:with open('./quantized_m ...

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

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

  4. 我的AI之路(44)--将tensorflow1.2版faster-rcnn模型freeze为pb模型的总结

    Faster-rcnn虽然是有点老了的网络,但是可以在有些硬件配置不高.计算资源有限的前端边缘板子上部署,而且也能满足一般的图像识别功能,所以有些项目还是需要用的.近来因项目需要实验研究了一下把fas ...

  5. Tensorflow pb模型转uff模型方法及遇到KeyError20和expected Const问题解决

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

  6. opencv打开pb_【OpenCV】OpenCV4调用tensorflow pb模型进行目标检测

    先在visual studio 2015新建一个工程并配置好环境. OpenCV调用tensorflow的pb模型,不仅需要一个.pb文件,还需要一个.pbtxt文件. 一些预训练好的pb模型的下载地 ...

  7. Tensorflow训练神经网络保存*.pb模型及载入*.pb模型

    1 神经网络结构 1.0 保存*.pb模型 import tensorflow as tf from tensorflow.python.framework import graph_util fro ...

  8. TensorFlow pb模型修改和优化

    TensorFlow 模型训练完成后,通常会通过frozen过程保存一个最终的pb模型.保存的pb模型是以GraphDef数据结构保存的,可以序列化保存为二进制pb模型或者文本pbtxt模型.Grap ...

  9. h5模型转化为pb模型,代码及排坑

    我是在实际工程中要用到tensorflow训练的pb模型,但是训练的代码是用keras写的,所以生成keras特定的h5模型,所以用到了h5_to_pb.py函数. 附上h5_to_pb.py(pyt ...

最新文章

  1. html dom节点类型,浅谈Javascript中的12种DOM节点类型
  2. Unity3D安卓程序中常用静态方法封装
  3. Python 将两层列表展开平铺成一层
  4. Android大图片裁剪终极解决方案 原理分析
  5. 哈希表-map(对于python来说是字典)
  6. 邮局--dp经典问题
  7. CDN视频流中的3个问题以及解决方法
  8. ElasticSearch查询 基础篇
  9. 全局变量_Python函数中的全局变量与局部变量
  10. HttpUtility编码
  11. 盘点 8 种最坑的 SQL 错误用法
  12. 学习指南!美国java程序员要求
  13. 移除Win10资源管理器中OneDrive图标
  14. DEBUG -- CLOSE BY CLIENT STACK TRACE问题的两种解决方案,整理自网络
  15. Mac电脑用CrossOver安装的Windows软件在哪?
  16. Chatopera王海良:大厂螺丝钉还是开源极客?年轻技术人如何选择?
  17. 删除fences桌面整理软件
  18. skype 无法连接
  19. 在三角形中rt是什么意思_什么叫Rt三角形
  20. where 空集_实验七SQL的空值和空集处理.doc

热门文章

  1. Using Markov Chains for Android Malware Detection
  2. qt ui框架_5个开源Python GUI框架
  3. JZOJ 5436. 【NOIP2017提高A组集训10.30】Group
  4. JZOJ 5389. 【NOIP2017提高A组模拟9.26】解梦
  5. vs安卓开发发布_向华为的鸿蒙看齐,谷歌发布全新系统,手机电脑通用
  6. kerberos认证_初识 Windows域认证体系 Kerberos认证
  7. 空间数据挖掘的主要方法总结
  8. ERP(Enterprise Resource Planning)
  9. [codevs 2926] 黑白瓷砖(2002年安徽省队选拔赛)
  10. rhel6上使用udev配置oracle asm,Red Hat Enterprise Linux 6使用udev配置Oracle ASM总结文档