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

#在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后执行命令,成功。
    希望对大家有所帮助!
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值