Skip to main content

Simple ONNX constant encoder/decoder.

Project description

sed4onnx

Simple ONNX constant encoder/decoder.

https://github.com/PINTO0309/simple-onnx-processing-tools

Downloads GitHub PyPI CodeQL

Key concept

  • Since the constant values in the JSON files generated by onnx2json are Base64-encoded values, ASCII <-> Base64 conversion is required when rewriting JSON constant values.
  • After writing the converted Base64 strings to JSON using this tool, json2onnx can be used to regenerate the constant-modified ONNX file.

1. Setup

1-1. HostPC

### option
$ echo export PATH="~/.local/bin:$PATH" >> ~/.bashrc \
&& source ~/.bashrc

### run
$ pip install -U sed4onnx

1-2. Docker

https://github.com/PINTO0309/simple-onnx-processing-tools#docker

2. CLI Usage

$ sed4onnx -h

usage:
    sed4onnx [-h]
    -cs CONSTANT_STRING
    [-d {float16,float32,float64,uint8,int8,int16,int32,int64,string}]
    [-m {encode,decode}]

optional arguments:
  -h, --help
        show this help message and exit.

  -cs CONSTANT_STRING, --constant_string CONSTANT_STRING
        Strings to be encoded and decoded for ONNX constants.

  -d {float16,float32,float64,uint8,int8,int16,int32,int64,string}, \
    --dtype {float16,float32,float64,uint8,int8,int16,int32,int64,string}
        Data type.

  -m {encode,decode}, --mode {encode,decode}
        encode: Converts the string specified in constant_string to a Base64 format string
                that can be embedded in ONNX constants.
        decode: Converts a Base64 string specified in constant_string to ASCII like
                Numpy string or pure string.

3. In-script Usage

>>> from sed4onnx import encode
>>> from sed4onnx import decode
>>> help(encode)

Help on function encode in module sed4onnx.onnx_constant_encoder_decoder:

encode(constant_string: str) -> str

    Parameters
    ----------
    constant_string: str
        ASCII string to be encoded.

    dtype: str
        'float16' or 'float32' or 'float64' or 'uint8'
        or 'int8' or 'int16' or 'int32' or 'int64' or 'string'

    Returns
    -------
    encoded_string: str
        Base64-encoded ASCII string.


>>> help(decode)
Help on function decode in module sed4onnx.onnx_constant_encoder_decoder:

decode(constant_string: str, dtype: str) -> numpy.ndarray

    Parameters
    ----------
    constant_string: str
        Base64 string to be decoded.

    dtype: str
        'float16' or 'float32' or 'float64' or 'uint8'
        or 'int8' or 'int16' or 'int32' or 'int64' or 'string'

    Returns
    -------
    decoded_ndarray: np.ndarray
        Base64-decoded numpy.ndarray.

4. CLI Execution

$ sed4onnx \
--constant_string [-1,3,224,224] \
--dtype int64 \
--mode encode

$ sed4onnx \
--constant_string '//////////8DAAAAAAAAAOAAAAAAAAAA4AAAAAAAAAA=' \
--dtype int64 \
--mode decode

5. In-script Execution

from sed4onnx import encode
from sed4onnx import decode

base64_string = encode(
  constant_string='[-1,3,224,224]',
  dtype='int64',
)

numpy_ndarray = decode(
  constant_string='//////////8DAAAAAAAAAOAAAAAAAAAA4AAAAAAAAAA=',
  dtype='int64',
)

6. Sample

$ sed4onnx \
--constant_string [-1,3,224,224] \
--dtype int64 \
--mode encode

//////////8DAAAAAAAAAOAAAAAAAAAA4AAAAAAAAAA=


$ sed4onnx \
--constant_string '//////////8DAAAAAAAAAOAAAAAAAAAA4AAAAAAAAAA=' \
--dtype int64 \
--mode decode

[-1,3,224,224]

7. Reference

  1. https://github.com/onnx/onnx/blob/main/docs/Operators.md
  2. https://docs.nvidia.com/deeplearning/tensorrt/onnx-graphsurgeon/docs/index.html
  3. https://github.com/NVIDIA/TensorRT/tree/main/tools/onnx-graphsurgeon
  4. https://github.com/PINTO0309/simple-onnx-processing-tools
  5. https://github.com/PINTO0309/PINTO_model_zoo

8. Issues

https://github.com/PINTO0309/simple-onnx-processing-tools/issues

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sed4onnx-1.0.5.tar.gz (4.9 kB view hashes)

Uploaded Source

Built Distribution

sed4onnx-1.0.5-py3-none-any.whl (5.7 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page