From e7e814fa8ce0f3f67c2f432035336ef4015bb979 Mon Sep 17 00:00:00 2001 From: fengyuentau Date: Wed, 10 Aug 2022 19:52:44 +0800 Subject: [PATCH] remove asymmetric padding checks --- modules/dnn/src/layers/convolution_layer.cpp | 8 ----- modules/dnn/src/onnx/onnx_importer.cpp | 38 -------------------- 2 files changed, 46 deletions(-) diff --git a/modules/dnn/src/layers/convolution_layer.cpp b/modules/dnn/src/layers/convolution_layer.cpp index c2960d5aeb..88ee7ee42c 100644 --- a/modules/dnn/src/layers/convolution_layer.cpp +++ b/modules/dnn/src/layers/convolution_layer.cpp @@ -101,10 +101,6 @@ public: if (kernel_size.size() == 2) { kernel = Size(kernel_size[1], kernel_size[0]); stride = Size(strides[1], strides[0]); - for (int i = 0; i < pads_begin.size(); i++) { - if (pads_begin[i] != pads_end[i]) - CV_Error(Error::StsNotImplemented, "Unsupported asymmetric padding in convolution layer"); - } pad = Size(pads_begin[1], pads_begin[0]); dilation = Size(dilations[1], dilations[0]); @@ -163,10 +159,6 @@ public: } getConvPoolPaddings(inpShape, kernel_size, strides, padMode, pads_begin, pads_end); if (pads_begin.size() == 2) { - for (int i = 0; i < pads_begin.size(); i++) { - if (pads_begin[i] != pads_end[i]) - CV_Error(Error::StsNotImplemented, "Unsupported asymmetric padding in convolution layer"); - } pad = Size(pads_begin[1], pads_begin[0]); } fusedWeights = false; diff --git a/modules/dnn/src/onnx/onnx_importer.cpp b/modules/dnn/src/onnx/onnx_importer.cpp index e99fbb319e..4f797c1627 100644 --- a/modules/dnn/src/onnx/onnx_importer.cpp +++ b/modules/dnn/src/onnx/onnx_importer.cpp @@ -2067,44 +2067,6 @@ void ONNXImporter::parseConv(LayerParams& layerParams, const opencv_onnx::NodePr int outCn = layerParams.blobs.empty() ? outShapes[node_proto.input(1)][0] : layerParams.blobs[0].size[0]; layerParams.set("num_output", outCn); - // Check for asymmetric padding in Conv2D - if (layerParams.has("pad")) - { - bool asymmetricPadding = false; - DictValue pads = layerParams.get("pad"); - const int dims = pads.size() / 2; - for (int i = 0; i < dims; ++i) - { - if (pads.get(i) != pads.get(i + dims)) - { - asymmetricPadding = true; - break; - } - } - if (asymmetricPadding && pads.size() == 4) // [pad_t, pad_l, pad_b, pad_r] - { - layerParams.erase("pad"); - // No paddings required for N, C axis - std::vector paddings(4, 0); - // Add paddings for H, W axis - for (int i = 0; i < dims; ++i) - { - paddings.push_back(pads.get(i)); - paddings.push_back(pads.get(dims + i)); - } - LayerParams padLp; - padLp.name = layerParams.name + "/pad"; - padLp.type = "Padding"; - padLp.set("paddings", DictValue::arrayInt(&paddings[0], paddings.size())); - - opencv_onnx::NodeProto proto; - proto.add_input(node_proto.input(0)); - proto.add_output(padLp.name); - - addLayer(padLp, proto); - node_proto.set_input(0, padLp.name); - } - } addLayer(layerParams, node_proto); }