Giter VIP home page Giter VIP logo

onnx2text's Introduction

Onnx2Text
2018-07-19..2024-06-05
Dwayne Robinson (FDwR)

  • Converts a binary ONNX model file to text (which can be edited in any simple text editor) and vice versa.
  • Converts an ONNX model to GraphViz dot file.
  • Converts an ONNX tensor protobuf to text/CSV/PNG/NPY and vice versa.
  • Generates output tensor values (ones, zeros, iota series, random).
  • Exports model tensors to directory of tensor files.

Motivation

I needed to make small edits to existing models for debugging, and I didn't want to have to write actual code every time, but rather just use a command line tool. Additionally I needed a simple tool that predictably just worked by itself regardless of what machine I'm using and is easily shareable (not a tool that depends on your current environment and needed pip install this or pip install that, but oops, not that incompatible version of the library, and don't forget to install Cmake and protobuf and add them to your path before the egg/wheel thingie is built... ๐Ÿ˜‘).

Usage

Onnx2Text.exe [options] inputFilename outputFilename

Example usage

  • Convert model to/from ONNX binary protobuf and prototxt format (open with Notepad):

    • Onnx2Text input.onnx output.prototxt plain .txt works too
    • Onnx2Text input.prototxt output.onnx
    • Onnx2Text input.prototxt con: // print to console
  • Just show information like how many times each operator is used:

    • Onnx2Text -information model.onnx
  • Write GraphViz dot file (download GraphViz separately):

    • Onnx2Text input.onnx output.dot
    • dot.exe output.dot -Tpng -O (or -Tsvg)
  • Zero weights in ONNX binary protobuf:

    • Onnx2Text -zeromodelvalues input.onnx output.onnx
  • Export model from ONNX protobuf to NumPy tensors/data files:

    • Onnx2Text resnet50.onnx x:\resnet_*.npy
    • Onnx2Text squeezenet.onnx z:\folder\*_weight.dat
  • Convert tensor between ONNX protobuf, CSV, raw data, numpy, PNG:

    • Onnx2Text input.onnxtensor output.csv
    • Onnx2Text input.pb output.png
    • Onnx2Text -datatype uint8 -dimensions 224,224 Foo.csv Foo.dat
    • Onnx2Text input.npy output.onnxtensor
  • Generate tensor from randomness:

    • Onnx2Text -dimensions 3,4 -datatype float16 generate(random,1,24) output.onnxtensor

Parameters

  • input/output files - graph (onnx/pb/text) or tensor (onnxtensor/npy/pb/text/csv/dat).
  • -dimensions - explicit tensor dimensions for .csv or .dat file. Defaults to 1D element count from source data. Pass "-dimensions ()" to indicate 0D scalar.
  • -datatype - tensor element type (float16,float32,float64,int8,uint8,int16,uint16,int32,uint32,int64,uint64,bool8,float16m7e8s1/bfloat16). This isn't usually needed unless reading from raw data.
  • -zeromodelvalues - zero any tensor values in model (clears model initializer weights - useful for sharing confidential models without revealing trained results) except tiny 1D tensors needed for shapes.
  • -row - single row or range for .csv.
  • -column - single column or range for .csv.
  • -scale - scale tensor values during conversion.
  • -inversescale - scale tensor values during conversion by reciprocal (e.g. 255 means 1/255).
  • -normalizevalues - should normalize values in tensor 0 to 1.
  • -information - display more verbose file information (output file is not needed).
  • -tensor - specifies the input file is a tensor (only needed if ambiguous file type like .pb).
  • -graph - specifies the input file is a model (only needed if ambiguous file type like .pb).

File Types

  • Model file types:
    • .onnx - Open Neural Exchange model protobuf
    • .pb - Google Protobuf (with -graph)
    • .txt/.prototxt - Protobuf text
  • Tensor file types:
    • .onnxtensor - Open Neural Exchange tensor
    • .pb - Google Protobuf (with -tensor)
    • .csv - Comma Separate Values (no dimensions, just data)
    • .png - Image (Portable Network Graphics)
    • .jpg - Image (Joint Photographic Experts Group)
    • .npy - NumPyArray single tensor
    • .dat/.bin - Raw binary data (no header, just contiguous array elements)
    • generate() - Generator tensor input pseudo filename:
      • generate(ones) - all ones. [1,1,1,1...]
      • generate(zeros) - all zeros [0,0,0,0...]
      • generate(values,3) - specific value [3,3,3,3...]
      • generate(iota,1,2) - increasing sequence [1,3,5...]
      • generate(random,1,100) - random values between min/max [31,56,2,69...]

Building

Load Visual Studio solution (Onnx2Text.sln), and build.

Dependencies

  • Windows 7+.
  • Linux/MacOS might build okay, as I added #ifdef _WIN32's around the pertinent parts (particularly WIC image conversion), but I don't use them frequently enough to verify and support those OS's.

Build Google Protobuf .lib yourself:

The protobuf-3.5.1 directory in this project contains the bare minimum .lib and .h files to build the executable. If you need a different configuration:

Download/clone: https://github.com/protocolbuffers/protobuf/releases/tag/v3.5.1 or git clone -b v3.5.1 https://github.com/google/protobuf.git

md protobuf-3.5.1\cmake\build\solution\
cd protobuf-3.5.1\cmake\build\solution\
cmake -G "Visual Studio 15 2017" -DCMAKE_INSTALL_PREFIX=../../../../install ../.. -Dprotobuf_BUILD_TESTS=OFF
#cmake -G "Visual Studio 15 2017" -DCMAKE_INSTALL_PREFIX=../../../../install ../.. -Dprotobuf_BUILD_TESTS=OFF -Ax64
start protobuf-3.5.1\cmake\build\solution\protobuf.sln
# Build it

Build libprotobuf.vcxproj project. Find the .lib files under protobuf-3.5.1\cmake\build\solution*.

Updating ONNX Proto file.

Copy the newest version of onnx.proto from https://github.com/onnx/onnx/blob/master/onnx/onnx.proto.

Replace "LITE_RUNTIME" with "option optimize_for = CODE_SIZE;

Run the ProtoBuf compiler.

protobuf3.5.1\bin\protoc.exe onnx.proto --cpp_out=. --error_format=msvs

(local copy here: protobuf-3.5.1/cmake/build/solution/MinSizeRel/protoc.exe)

onnx2text's People

Contributors

fdwr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

onnx2text's Issues

How can i modify exist onnx model weights?

Hello! thank you very much for this nice work. with this tool it is convienent to read onnx model and convert to different file format. and i want to know is it possilbe to modify the exist onnx model and save it, like I have already got an onnx model that exported from pytorch and i want to fill some float value into this exist onnx model, could you suggest how can i do that?

How can i modify exist onnx model weights?

Hello! thank you very much for this nice work. with this tool it is convienent to read onnx model and convert to different file format. and i want to know is it possilbe to modify the exist onnx model and save it, like I have already got an onnx model that exported from pytorch and i want to fill some float value into this exist onnx model, could you suggest how can i do that?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.