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