LoginSignup
0
0

More than 3 years have passed since last update.

ONNXで fuse_bn_into_conv 最適化(駄目でした)

Posted at

ONNXがサポートしている最適化 fuse_bn_into_conv を調べてみました。

結果から言うと、fuse_add_bias_into_conv と同じくこちらも動きませんでした。

自分でグラフを作っても、Kerasで作っても同じです。ONNXを1.5.0から1.6.0に上げても同じでした。

  File "C:\home\app\anaconda3\lib\site-packages\onnx\optimizer.py", line 55, in optimize
    optimized_model_str = C.optimize(model_str, passes)
IndexError: invalid unordered_map<K, T> key

ONNXのバージョンアップまち。

一応、Kerasで作ったグラフはこれ。

fuse_bn_into_conv.onnx.png

ソースはこちら。

import numpy as np
import keras
import onnx
from onnx import optimizer
import keras2onnx

input = keras.layers.Input(shape=(1, 5, 5))
conv = keras.layers.Conv2D(10, (3, 3), input_shape=(1, 5, 5), use_bias=False, data_format='channels_first')(input)
bn = keras.layers.BatchNormalization(axis=1)(conv)

model = keras.models.Model(inputs=input, outputs=bn)

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

onnx_model = keras2onnx.convert_keras(model, model.name)
onnx.save_model(onnx_model, "onnx/fuse_bn_into_conv.onnx")

# 最適化パスを指定
passes = ['fuse_bn_into_conv']

optimized_model = optimizer.optimize(onnx_model, passes)
onnx.save(optimized_model, 'onnx/fuse_bn_into_conv_optimized.onnx')
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0