#在Tensorflow2.3框架下训练的深度网络模型,目标用于工业部署,所以需要将训练好的模型保存,转成用于C++工业部署的文件格式,期间不断遇到问题,最终成功转换,记录下过程,避免后人踩坑。

1、tensorflow2.0框架下训练的深度学习模型保存为.pb文件

model.saved(model, "./direction")  #model为模型名字,依据自己的模型来修改,"./direction"为保存路径

保存后目录下包含.pb文件和variables、assets两个文件夹,如下。此模型保存的文件为模型、参数、变量分开的模式,属于Non-Frozen Models。

--save_model--assets--variables--variables.data-00000-of-00001--variables.index--saved_model.pb

2、安装VS+openvino+Cmake
这里安装都是vs2019社区版 + openvino2020.04。28版 + Cmake3.14.0
网上很多教程,推荐参考
【OpenVINO之二:Windows环境下OpenVINO安装与配置】
【Openvino系列-环境安装(window10+vs2019)(一)】
提醒:安装openvino和Cmake最好默认安装路径,勾选设置环境变量,否则后期会出现些许问题。
*如果出现“cmake不是内部或外部命令”,检测C:\Program Files\CMake\bin是否填入了环境变量,重新添加并打开cmd再次运行即可。【OpenVINO2019R3和VS2015编译配置教程大全】

3、SaveModel模型文件在openvino下转成IR文件,用于部署
注意:采用SaveModel保存后的模型文件属于Non-Frozen Models,无法直接使用以下命令直接pb转IR,网上好多教程都使用以下例如命令,均不适用于tensorflow2.x版本SaveModel保存的模型。

python mo_tf.py --input_model  xxx.pb --input_shape [1,224,224,3] --mean_value [127.5,127.5,127.5] --scale 127.5

结果都是转换失败,网上有给出解释如下:
【TF2.0 create a single pb file without additional folders or files?】

在openvino官网找到具体操作,教程如下:

  1. 配置环境
cd C:\Program Files (x86)\IntelSWTools\openvino\bin\
#使用setupvars.bat配置的环境变量只针对当前打开的cmd,当前如果关闭,openvino环境变量失效
#可以配置固定的环境变量,需要用记事本打开setupvars.bat按照里面的配置,配置到系统变量即可
setupvars.bat
  1. 配置成功出现如下结果
  2. 配置模型优化器
cd C:\Program Files(x86)\IntelSWTools\openvino\deployment_tools\model_optimizer
install_prerequisites_tf.bat  #tensorflow框架用,其他框架执行其他文件
  1. 开始转换模型文件为IR格式,参考
    【openvino Tensorflow Modell】

SavedModel format of TensorFlow 1.x and 2.x versions:
1.In this case, a model consists of a special directory with a .pb file and several subfolders: variables, assets, and assets.extra. For more information about the SavedModel directory, refer to the README file in the TensorFlow repository.
2.To convert such TensorFlow model:
Go to the <INSTALL_DIR>/deployment_tools/model_optimizer directory
Run the mo_tf.py script with a path to the SavedModel directory to convert a model:

python3 mo_tf.py --saved_model_dir <SAVED_MODEL_DIRECTORY>

不过执行不成功,然后我重新将python3改成python,管理员身份执行命令:

python mo_tf.py --saved_model_dir <SAVED_MODEL_DIRECTORY> --output_dir <DIRECTORY> --input_shape [1,128,128,3] --mean_value [127.5,127.5,127.5] --scale 127.5 --data_type=FP32
//--save_model_dir: tensorflow2.0 SaveModel后的模型文件,  --**assets**  --**variables**--variables.data-00000-of-00001--variables.index --**saved_model.pb**
//--input_shape: 输入模型的张量维度
//--mean_value: 这里是归一化([0,255]-[-1,1])中的减均值
//--scale: 这里是归一化([0,255]-[-1,1])中的整除
//--data_type: 设定网络节点的精度,如FP32、FP16、U8

更改后执行成功,结果如下:

模型文件成功转成.bin/.mapping/.xml三个文件,至此成功转换。

折腾了将近四天时间,徘徊在tensorflow保存pb文件 和 pb转IR文件这两个过程, 总结:

  1. Tensorflow2.0框架下保存SaveModel模型,包含的.pb文件仅包含模型结构,无法直接单独用openvino转成IR文件,在保存.pb文件这一操作上花费了一两天的时间,把各种方法都使用了,还是没能成功,期间还把Tensorflow1.x的操作方法也尝试了,当然也没用。
  2. 一开始没有觉察openvino转换.pb文件对Tensorflow版本是由不同的操作(适应性), 经夏博提醒,转换思想,从openvino软件转tensorflow1.x和tensorflow2.x模型文件操作方法是否有区别的角度寻找解决方法,结果在官网找到解决的操作,不复杂,只是没有找到对的方法。
  3. 执行官网的操作命令后,仍然出现权限的问题,重新以管理员身份进入cmd后执行命令,成功。
    希望对大家有所帮助!

Tensorflow2.3用SaveModel保存训练模型.pb等文件+opencvino转IR文件相关推荐

  1. TensorFlow2.0教程-使用keras训练模型

    TensorFlow2.0教程-使用keras训练模型 Tensorflow 2.0 教程持续更新: https://blog.csdn.net/qq_31456593/article/details ...

  2. tensorflow2调用huggingface transformer预训练模型

    tensorflow2调用huggingface transformer预训练模型 一点废话 huggingface简介 传送门 pipline 加载模型 设定训练参数 数据预处理 训练模型 结语 一 ...

  3. Pytorch:NLP 迁移学习、NLP中的标准数据集、NLP中的常用预训练模型、加载和使用预训练模型、huggingface的transfomers微调脚本文件

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) run_glue.py微调脚本代码 python命令执行run ...

  4. Python将Pandas中Dataframe数据保存为gzip/zip文件:gzip压缩文件、zip压缩文件

    Python将Pandas中Dataframe数据保存为gzip/zip文件:gzip压缩文件.zip压缩文件 目录 Python将Pandas中Dataframe数据保存为gzip/zip文件:gz ...

  5. R语言write.xlsx函数将数据写入Excel文件:写入Excel文件并自定义表单的名称、将数据写入Excel文件新的表单(sheet)中、将文件保存为xls文件格式(而不是xlsx)

    R语言write.xlsx函数将数据写入Excel文件:写入Excel文件并自定义表单的名称.将数据写入Excel文件新的表单(sheet)中.将文件保存为xls文件格式(而不是xlsx) 目录

  6. R语言使用for循环绘制多个模型的DCA(Decision Curve Analysis)曲线并保存特定分辨率的DCA曲线的结果文件

    R语言使用for循环绘制多个模型的DCA(Decision Curve Analysis)曲线并保存特定分辨率的DCA曲线的结果文件 目录

  7. python保存大列表(list)数据到文件并后续重新加载为列表(list)对象实战

    python保存大列表(list)数据到文件并后续重新加载为列表(list)对象实战 笔者遇到的问题是这样的, 在做机器学习模型的时候,有的时候会使用相关性分析的方法来进行特征的筛选,去除冗余特征,降 ...

  8. Keras学习笔记---保存model文件和载入model文件

    Keras学习笔记---保存model文件和载入model文件 保存keras的model文件和载入keras文件的方法有很多.现在分别列出,以便后面查询. keras中的模型主要包括model和we ...

  9. 文本编辑器实现打开文件、保存文件、文件另存为、新建文件、软件关闭的功能

    文章目录 1 文本编辑器实现打开文件.保存文件.文件另存为.新建文件.软件关闭的功能 1.1 打开文件 1.2 保存文件 1.3 文件另存为 1.4 新建文件 1.5 软件关闭 1 文本编辑器实现打开 ...

最新文章

  1. 什么?Redis 的 QPS 是 MySQL 的 100 倍?
  2. jQuery 使用 jQuery UI 部件工厂编写带状态的插件(翻译)
  3. HDU - 5459 Jesus Is Here(思维+非线性递推)
  4. datetime建立索引有用吗_超全的数据库建表、SQL、索引规范
  5. Bootstrap进度条堆叠
  6. VC学习笔记:简单绘图
  7. linux:你不知道的echo
  8. mysql5.7主从复制--在线变更复制类型【转】
  9. TCP端口扫描[Python3.5]
  10. VS的QT插件下载与qt版本下载
  11. 雾芯科技,创新者的窘境
  12. 计算机如何连接网络扫描仪,windows系统下怎么共享扫描仪?
  13. U-DIMM、SO-DIMM、FB-DIMM、Reg-DIMM区别
  14. springmvc生成二维码
  15. python环境搭建及应用
  16. C语言中的* 简单记忆方法
  17. openCV色彩空间转换
  18. atthesametime啥意思_atthesametime是什么意思啊?a – 手机爱问
  19. 输出动物的声音JAVA_Java-动物声音
  20. 魔域私服服务器连接中断,魔域私服服务器中装备武器道具爆率相关算法及设置详细攻略分享...

热门文章

  1. js this指向哪里 JavaScript this指向
  2. 联网报警器红外探头的工作原理
  3. python 获取csv的列数_《极限挑战》弹幕及评论情感分析(Python)
  4. 爱德泰科普 | 一文了解如何整理机柜内的光纤跳线
  5. authorization权限控制_授权(Authorization)
  6. MinGW-w64 安装和使用
  7. python-简单用户登录注册界面实现
  8. 录制动画时AnimationClip.SetCurve的relativePath问题
  9. Java编程语言学习:Java语言编程的基础知识之Java的变量与数据类型、符号、运算符、数组Array总结之详细攻略
  10. 个人网站搭建之服务器环境搭建