Converters
Converters are Python libraries that run on x86 and are used to convert Keras or ONNX models to ElcoreNN format.
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 |