onnx转ncnn报错:identity not supported yet「用optimizer去掉identity层」

目录

1、现象描述:identity not supported yet

2、解决方法:使用onnx optimizer去掉identity层


1、现象描述:identity not supported yet

onnx转换ncnn报错:identity not supported yet

onnx可视化(最后多了个identity层):identity就是f(x)=x。

据大神解释,转onnx就会出现这种迷之op:

2、解决方法:使用onnx optimizer去掉identity层

代码:

from TYY_model import TYY_MobileNet_reg
from keras.utils.vis_utils import plot_model
import onnxmltools
import onnx
from onnx import optimizer

#读取mobilenet keras
weight_file = 'mobilenet_reg_0.25_64_asian.h5'
all_file = 'mobilenet_reg_0.25_64_asian_save.h5'
img_size = 64
alpha = 0.25
base_model = TYY_MobileNet_reg(img_size,alpha)()
base_model.load_weights(weight_file)
base_model.save(all_file)
plot_model(base_model, to_file='model_mobilenet_asian_save.jpg', show_shapes=True)

#keras转onnx
all_file_onnx = 'mobilenet_save.onnx'
onnx_model = onnxmltools.convert_keras(base_model)
onnx.save(onnx_model, all_file_onnx)

#去掉identity层
all_passes = optimizer.get_available_passes()
print("Available optimization passes:")
for p in all_passes:
    print('\t{}'.format(p))
print()

onnx_optimized = 'mobilenet_optimized.onnx'
passes = ['eliminate_identity']
optimized_model = optimizer.optimize(onnx_model, passes)
onnx.save(optimized_model, onnx_optimized)

打印:

Available optimization passes:

eliminate_identity

eliminate_nop_pad

eliminate_nop_transpose

eliminate_unused_initializer

extract_constant_to_initializer

fuse_add_bias_into_conv

fuse_bn_into_conv

fuse_consecutive_squeezes

fuse_consecutive_transposes

fuse_transpose_into_gemm

lift_lexical_references

nop

split_init

split_predict

使用字段:「eliminate_identity」去除identity层

图示:

官网参考信息:

https://github.com/onnx/onnx/blob/master/docs/PythonAPIOverview.md#optimizing-an-onnx-model

https://github.com/onnx/onnx/blob/master/onnx/examples/optimize_onnx.ipynb

猜你喜欢

转载自blog.csdn.net/weixin_41770169/article/details/86488493