tf2onnxでONNXに書き出すと、大量のTransposeが生成されます。これは、TensorflowがNHWCなのに対して、ONNXがNCHWなため、並べ替えが発生するためです。この問題は、TransposeOptimizerを使用することで回避することができます。
通常のエクスポートコード

TransposeOptimizerを使用

オプティマイズすることで、推論速度は1.5倍程度高速化されます。
tf-onnx introducing many transpose operations
add transpose optimizer, and integrate it after tf graph conversion #108
通常のエクスポートコード
graph1 = tf.Graph() with graph1.as_default(): tf.import_graph_def(frozen_graph_def) onnx_graph = tf2onnx.tfonnx.process_tf_graph(graph1, input_names=input_names, output_names=output_names, opset=10) model_proto = onnx_graph.make_model("onnx") with open("output.onnx", "wb") as f: f.write(model_proto.SerializeToString())

TransposeOptimizerを使用
graph1 = tf.Graph() with graph1.as_default(): tf.import_graph_def(frozen_graph_def) onnx_graph = tf2onnx.tfonnx.process_tf_graph(graph1, input_names=input_names, output_names=output_names, opset=10) from tf2onnx.optimizer.transpose_optimizer import TransposeOptimizer optimizer = TransposeOptimizer() opt_model_proto = optimizer.optimize(onnx_graph) model_proto = onnx_graph.make_model("onnx") with open("output.onnx", "wb") as f: f.write(model_proto.SerializeToString())

オプティマイズすることで、推論速度は1.5倍程度高速化されます。
tf-onnx introducing many transpose operations
add transpose optimizer, and integrate it after tf graph conversion #108