Wrapper scripts to convert Keras models to ONNX and Protocol Buffers (.pb)
We have different requirements files for TensorFlow 1.X and 2.X. So far, requirements_TF1.txt has only been tested for TensorFlow 1.15.2.
python3 -m virtualenv venv
source venv/bin/activate
pip install -r requirements_TFX.txtk2pb.py takes a Keras (.h5) file as input and produces a TensorFlow Protocol Buffer (.pb) as output using ONNX as an intermediate exchange format. By setting the flag --rename or specifing --input or --outout the model's input and output can be renamed.
python3 src/k2pb.py --help
usage: Converts a Keras model into TensorFlow's Protocol Buffer (.pb) format.
[-h] [-f] [-r] [-i INPUT_NAME] [-o OUTPUT_NAME]
keras_model pb_model
positional arguments:
keras_model
pb_model
optional arguments:
-h, --help show this help message and exit
-f, --force
-r, --rename
-i INPUT_NAME, --input-name INPUT_NAME
-o OUTPUT_NAME, --output-name OUTPUT_NAMEk2o.pb takes a Keras (.h5) file and writes an ONNX file.
python3 src/k2o.py --help
usage: Converts a Keras model into ONNX format.
[-h] [-f] keras_model onnx_model
positional arguments:
keras_model
onnx_model
optional arguments:
-h, --help show this help message and exit
-f, --forceo2sm.pb takes an ONNX file and converts it into a TensorFlow's SavedModel.
python3 src/o2sm.py --help
usage: Converts an ONNX model into TensorFlow's Protocol Buffer (.pb) format. [-h] [-f] onnx_model sm_model
positional arguments:
onnx_model
sm_model
optional arguments:
-h, --help show this help message and exit
-f, --forceclean_node_names.py is and auxiliary script to remove invalid characters according to TensorFlow's scope naming convention. Running this script may be a requirement before converting an ONNX model to TensorFlow's .pb format.
python3 src/clean_node_names.py --help
usage: Removes characters from an ONNX model node names that are not matching a re `pattern`By default it removes characters unsupported by the TensorFlow scope names criteria:
https://github.com/tensorflow/tensorflow/blob/r1.2/tensorflow/python/framework/ops.py#L2993
[-h] [-f] [-p PATTERN] model_in model_out
positional arguments:
model_in
model_out
optional arguments:
-h, --help show this help message and exit
-f, --force
-p PATTERN, --pattern PATTERN
change_interface_names.py is an auxiliary script to change the input and output names from an ONNX model. Useful to make the models cleaner for deployment.
Note that this script is designed to operate on the first input and the first output of the model, the rest of the inputs and outputs are ignored.
python3 src/change_interface_names.py --help
usage: Renames the first input and output node names of `model_in` to `input_name` and `output_name` and saves it to `model_out`.
[-h] [-f] [-i INPUT_NAME] [-o OUTPUT_NAME] model_in model_out
positional arguments:
model_in
model_out
optional arguments:
-h, --help show this help message and exit
-f, --force
-i INPUT_NAME, --input-name INPUT_NAME
-o OUTPUT_NAME, --output-name OUTPUT_NAMEadd_output_node.py adds a new output node_out pointing to a given input_node through an Identity node.
python3 src/add_output_node.py --help
usage: Adds a new output `node_out` pointing to a given `input_node` through an Identity node. We recommend using a tool such as Netron to check the architecture and node name on `model_in`
[-h] model_in model_out node_in node_out
positional arguments:
model_in
model_out
node_in
node_out
optional arguments:
-h, --help show this help message and exitchange_batch_size.py changes the model's batch size to a fix of dynamic value.
python3 src/change_batch_size.py --help
usage: Change model's batch size [-h] model_in model_out batch_size
positional arguments:
model_in
model_out
batch_size
optional arguments:
-h, --help show this help message and exitpb2sm.py converts a frozen model (.pb) into a TF2 SavedModel.
python3 src/pb2sm.py --help
usage: pb2sm.py [-h] input output input_name output_name
positional arguments:
input
output
input_name
output_name
optional arguments:
-h, --help show this help message and exit