win7+anaconda3
一 创建环境
1 创建基于python3.5.2的环境“test”
conda create -n test python=3.5.2
2 查看所有已安装的环境
conda info -e
3 进入环境“test”
conda activate test
二 安装tensorflow1.13.1
(参考python/tensorflow/keras相互兼容版本
链接:https://docs.floydhub.com/guides/environments/)
1 在清华镜像上下载tensorflow1.13.1,注意python版本(cp35为python3.5)和操作系统(win_amd64为64位windows)
链接:https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/tensorflow/
2 本地安装
pip install E:\Download\tensorflow-1.13.1-cp35-cp35m-win_amd64.whl
3 由于python3.5.2不是最新,故需要更新pip
python -m pip install --upgrade pip
三 安装相关工具
1 安装jupyter
pip install jupyter
2 安装keras
清华镜像上下载keras2.3.1
链接:https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/keras/
本地安装
pip install E:\Download\Keras-2.3.1-py2.py3-none-any.whl
3 安装onnx转换工具包onnxmltools(包含onnx、keras2onnx)
pip install onnxmltools
4 安装onnxruntime(跨平台高性能onnx模型运行引擎)
pip install onnxruntime
5 查看已安装所有工具包版本
pip list
四 在jupyter中编写脚本,执行模型转换
1 启动jupyter notebook,新建python3代码notebook
jupyter notebook
2 编写脚本,命名为convert
import win_unicode_console #导入模块win_unicode_console
win_unicode_console.enable() #使能win_unicode_console
import os #由于keras需要使用tensorflow的后端,故需先于keras导入os
import keras #导入keras
import keras2onnx #导入转换工具模块keras2onnx
import onnx #导入onnx
from keras.models import load_model #从模块keras.model中导入函数load_model,用于下载待转换模型
model = load_model('E:/jupyter_notebook/keras/yolo.h5') #调用load_model下载待转换模型yolo.h5,传送给model
onnx_model = keras2onnx.convert_keras(model, model.name) #调用模型转换函数keras2onnx.convert_keras,生成onnx模型,传送给onnx_model
temp_model_file = 'E:/jupyter_notebook/keras/yolo.onnx' #指定onnx模型保存路径并命名为yolo.onnx
onnx.save_model(onnx_model, temp_model_file) #保存模型
代码运行结束后得到yolo.onnx
(warnings.warn('No training configuration found in save file: '可忽略,参见链接)
总结:
之前的安装过程中出现各种包互相不兼容的问题,多次试错后得到一套成功匹配的方案,即
Python 3.5.2 + tensorflow 1.13.1 + keras 2.3.1 + keras2onnx 1.6.1 + onnx 1.6.0 + onnxmltools 1.6.1 + onnxruntime 1.2.0 + protobuf 3.11.3 +numpy 1.18.2
备注:
1 protobuf和numpy的版本可能会导致环境出错,需要重点关注。卸载后重新下载、编译可解决问题。
2 keras2onnx要求模型转换的python环境与模型训练的python环境保持一致,否则会报错:System Error: unknown opcode。故转换模型前需确认模型训练的python版本。
3 win_unicode_console模块相关
https://pypi.org/project/win_unicode_console/
https://blog.whezh.com/encoded/