Converters
Converters are Python libraries that run on x86 and are used to convert Keras or ONNX models to ElcoreNN format.
![digraph ConvertersDigraph {
node [ shape = box, style = filled, width=2.0, height=0.4]
{"Keras model" [shape=cylinder]
"ONNX model" [shape=cylinder]
"keras-elcorenn" [shape=box]
"ONNX converter" [shape=box]
"ElcoreNN model" [shape=cylinder]
}
subgraph "Models" {
cluster=true;
label="Models";
"Keras model";
"ONNX model";
}
subgraph "Converters" {
cluster=true;
label="Converters";
"keras-elcorenn";
"ONNX converter";
}
"Keras model" -> "keras-elcorenn" -> "ElcoreNN model";
"ONNX model" -> "ONNX converter" -> "ElcoreNN model";
}](_images/graphviz-07799a90aaf3a0a15e9c6fb4b1f37781fb6a717b.png)
ElcoreNN converters
ElcoreNN model format
ElcoreNN model format is represented by two files. The first is a JSON file that describes the layers of the model. The second is a binary file that contains the weights of the model.
keras-elcorenn and onnx-converter convert Keras and ONNX model to ElcoreNN model format.
keras-elcorenn
keras-elcorenn is a Python library that converts a model from Keras to ElcoreNN.
Requirements:
python version >=3.7
Download keras-elcorenn archive:
wget --no-check-certificate -O keras-elcorenn-1.0.0.tar.gz \ https://box.elvees.com/index.php/s/elcorenn-converters/download?files=keras-elcorenn-1.0.0.tar.gz
Activate virtual environment:
python3 -m venv env source ./env/bin/activate
Installation from archive:
pip install keras-elcorenn-1.0.0.tar.gz
Convert model:
python -m keras2elcorenn.convert --keras-model=<path-to-keras-model>
To see more options run:
python -m keras2elcorenn.convert --help
ONNX converter
ONNX converter is a Python library that converts a model from ONNX to ElcoreNN.
Requirements:
python version >= 3.8, <= 3.12.
Instructions to convert ONNX model to ElcoreNN:
Download ONNX converter from Elvees Box.
Install wheel file:
python3 -m venv .venv source .venv/bin/activate pip install --upgrade pip pip install onnx_converter-*-py3-none-any.whl
Prepare JSON configuration file according to ONNX converter instructions (to see all configuration options see README.md from Elvees Box):
{ "model_path": "/path/to/model.onnx", "result_path": "/path/to/the/folder/where/to/save/elcorenn/model" }
Run:
onnx_converter --config_file conf.json
Supported operators
For all Keras layers keras-elcorenn supports only NHWC data format.
keras-elcorenn supports the following Keras layers:
Keras layer |
Restrictions |
---|---|
Activation |
only linear, relu, relu6, softmax, leakyrelu, sigmoid |
Add |
|
AveragePooling1D |
|
AveragePooling2D |
|
BatchNormalization |
|
Concatenate/Merge |
|
Conv1D |
dilation_rate=1, groups=1 |
Conv2D |
dilation_rate=1 |
Conv3D |
reference version (fp32 only) |
Conv1DTranspose |
reference version (fp32 only) |
Conv2DTranspose |
dilation_rate=1, filters value is divisible by 32 |
Dense |
|
DepthwiseConv2D |
dilation_rate=1, depth_multiplier=1 |
Flatten |
|
GlobalAveragePooling2D |
|
InputLayer |
|
L2Normalization |
|
LSTM |
|
MaxPooling2D |
|
Multiply |
|
Permute |
|
ReLU |
|
Reshape |
|
Softmax |
|
UpSampling2D |
interpolation=”nearest” |
ZeroPadding2D |
onnx-converter supports the following ONNX Operators:
ONNX Operators |
Restrictions |
---|---|
Abs |
|
Add (including broadcasting) |
only for 2 tensors |
ArgMax |
|
AveragePool |
1D, 2D, dilation=1 |
BatchNormalization |
|
Cast |
|
Clip |
|
Concat |
|
Conv |
conv_dimensions=[1,2,3], dilations=1, Conv3d float32 only |
ConvTranspose |
conv_dimensions=[1, 2] |
ConstantOfShape |
|
Div (including broadcasting) |
|
Erf |
|
Equal |
|
Exp |
|
Expand |
|
Flatten |
|
Floor |
|
Gather |
|
Gemm |
used as full-connected layer |
GlobalAveragePool |
2D |
Identity |
|
InstanceNormalization |
|
LSTM |
|
MatMul (including broadcasting) |
Support 2D..5D tensors |
MaxPool |
1D, 2D, dilations=1 |
Mod |
|
Mul (including broadcasting) |
only for 2 tensors |
Neg |
|
Pad |
|
Pow |
|
PRelu |
|
Range |
|
ReduceL2 |
|
ReduceMax |
|
ReduceMean |
last dimension only |
ReduceSum |
|
ReLU |
|
ReLU6 |
|
Reshape |
|
Resize |
|
ScatterND |
|
Shape |
|
Sigmoid |
|
Slice |
|
Softmax |
|
Split |
|
Squeeze |
|
Sqrt |
|
Sub (including broadcasting) |
only for 2 tensors |
Tanh |
|
Transpose |
|
Unsqueeze |
|
Where |