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";
}

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

  1. 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
    
  2. Activate virtual environment:

    python3 -m venv env
    source ./env/bin/activate
    
  3. Installation from archive:

    pip install keras-elcorenn-1.0.0.tar.gz
    
  4. 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:

  1. Download ONNX converter from Elvees Box.

  2. Install wheel file:

    python3 -m venv .venv
    source .venv/bin/activate
    pip install --upgrade pip
    pip install onnx_converter-*-py3-none-any.whl
    
  3. 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"
    }
    
  4. 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