From 88cacd35c5ff93a2bf246b1fae25e2bef0277fce Mon Sep 17 00:00:00 2001 From: fengyuentau Date: Fri, 14 Apr 2023 15:52:27 +0800 Subject: [PATCH] support broadcast on axis > 1 for Expand --- modules/dnn/src/onnx/onnx_importer.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/dnn/src/onnx/onnx_importer.cpp b/modules/dnn/src/onnx/onnx_importer.cpp index 651d1b1571..0e6d43284c 100644 --- a/modules/dnn/src/onnx/onnx_importer.cpp +++ b/modules/dnn/src/onnx/onnx_importer.cpp @@ -2529,8 +2529,11 @@ void ONNXImporter::parseExpand(LayerParams& layerParams, const opencv_onnx::Node node_proto.set_input(0, constParams.name); node_proto.set_input(1, srcName); } - else if (broadcast_axes.size() == 1 && broadcast_axes[0] <= 1) + else if (broadcast_axes.size() == 1) { + // FIXME: this will end up creating massive amount of Identity nodes for broadcasting, + // for example, broadcast 1 to 256 needs 256 Identity nodes and 1 Concat node. + // Possible improvement is to use "Scale". expandMid(layerParams.name, node_proto, srcName, targetShape[broadcast_axes[0]]); layerParams.set("axis", broadcast_axes[0]);