Convert a Chainer model into ONNX
Project description
ONNX-Chainer
This is an add-on package for ONNX support by Chainer.
Tested environment
- Python 3.5.5, 3.6.7, 3.7.2
- ONNX 1.4.1, 1.5.0
- opset version 7, 8, 9, 10
- Chainer stable, preview
- ONNX-Runtime 0.4.0
(You can still specify all opset versions <= 9, but please noted that opset versions <= 6 are not tested)
Installation
pip install onnx-chainer
Run Test
1. Install test modules
$ pip install onnx-chainer[test-cpu]
Or, on GPU environment
$ pip install cupy # or cupy-cudaXX is useful
$ pip install onnx-chainer[test-gpu]
2. Run tests
$ pytest -m "not gpu"
Or, on GPU environment
$ pytest
Quick Start
First, install ChainerCV to get the pre-trained models.
import numpy as np
import chainer
import chainercv.links as C
import onnx_chainer
model = C.VGG16(pretrained_model='imagenet')
# Pseudo input
x = np.zeros((1, 3, 224, 224), dtype=np.float32)
onnx_chainer.export(model, x, filename='vgg16.onnx')
Supported Functions
Currently 82 Chainer Functions are supported to export in ONNX format.
Activation
- ClippedReLU
- ELU
- HardSigmoid
- LeakyReLU
- LogSoftmax
- PReLUFunction
- ReLU
- Selu
- Sigmoid
- Softmax
- Softplus
- Tanh
Array
- Cast
- Concat
- Copy
- Depth2Space
- Dstack
- ExpandDims
- GetItem
- Hstack
- Pad 12
- Repeat
- Reshape
- ResizeImages
- Separate
- Shape 5
- Space2Depth
- SplitAxis
- Squeeze
- Stack
- Swapaxes
- Tile
- Transpose
- Vstack
- Where
Connection
- Convolution2DFunction
- ConvolutionND
- Deconvolution2DFunction
- DeconvolutionND
- EmbedIDFunction 3
- LinearFunction
Loss
- SoftmaxCrossEntropy
Math
- Absolute
- Add
- AddConstant
- ArcCos
- ArcSin
- ArcTan
- ArgMax
- ArgMin
- BroadcastTo
- Cos
- Cosh
- Clip
- Div
- DivFromConstant
- Exp
- Identity
- LinearInterpolate
- Log
- LogSumExp
- MatMul
- Max
- Maximum
- Mean
- Min
- Minimum
- Mul
- MulConstant
- Neg
- PowVarConst
- Prod
- RsqrtGPU
- Sin
- Sinh
- Sqrt
- Square
- Sub
- SubFromConstant
- Sum
- Tan
Noise
- Dropout 4
Normalization
- BatchNormalization
- FixedBatchNormalization
- LocalResponseNormalization
- NormalizeL2
Pooling
- AveragePooling2D
- AveragePoolingND
- MaxPooling2D
- MaxPoolingND
- ROIPooling2D
- Unpooling2D
Contribution
Any contribution to ONNX-Chainer is welcome!
- Python codes follow Chainer Coding Guidelines
1: mode should be either 'constant', 'reflect', or 'edge'
2: ONNX doesn't support multiple constant values for Pad operation
3: Current ONNX doesn't support ignore_label for EmbedID
4: In test mode, all dropout layers aren't included in the exported file
5: Chainer doesn't support Shape function