diff --git a/modules/dnn/src/layers/convolution_layer.cpp b/modules/dnn/src/layers/convolution_layer.cpp index 60611b52b2..453892ec45 100644 --- a/modules/dnn/src/layers/convolution_layer.cpp +++ b/modules/dnn/src/layers/convolution_layer.cpp @@ -1217,12 +1217,8 @@ public: int dims[] = {inputs[0][0], outCn, outH, outW}; outputs.resize(inputs.size(), shape(dims, 4)); - internals.push_back(MatShape()); if (!is1x1()) - internals[0] = computeColRowShape(inputs[0], outputs[0]); - - if (hasBias()) - internals.push_back(shape(1, outH*outW)); + internals.push_back(computeColRowShape(inputs[0], outputs[0])); return false; } diff --git a/modules/dnn/src/onnx/onnx_importer.cpp b/modules/dnn/src/onnx/onnx_importer.cpp index 218775b39f..b2c347f820 100644 --- a/modules/dnn/src/onnx/onnx_importer.cpp +++ b/modules/dnn/src/onnx/onnx_importer.cpp @@ -584,7 +584,7 @@ void ONNXImporter::populateNet(Net dstNet) for (int j = 1; j < node_proto.input_size(); j++) { layerParams.blobs.push_back(getBlob(node_proto, constBlobs, j)); } - layerParams.set("num_output", layerParams.blobs[0].size[1]); + layerParams.set("num_output", layerParams.blobs[0].size[1] * layerParams.get("group", 1)); layerParams.set("bias_term", node_proto.input_size() == 3); } else if (layer_type == "Transpose") diff --git a/modules/dnn/test/test_onnx_importer.cpp b/modules/dnn/test/test_onnx_importer.cpp index 217ef34421..5bd517433f 100644 --- a/modules/dnn/test/test_onnx_importer.cpp +++ b/modules/dnn/test/test_onnx_importer.cpp @@ -72,6 +72,7 @@ TEST_P(Test_ONNX_layers, Deconvolution) { testONNXModels("deconvolution"); testONNXModels("two_deconvolution"); + testONNXModels("deconvolution_group"); } TEST_P(Test_ONNX_layers, Dropout)