Merge remote-tracking branch 'upstream/3.4' into merge-3.4
authorAlexander Alekhin <alexander.a.alekhin@gmail.com>
Sat, 24 Jul 2021 15:34:58 +0000 (15:34 +0000)
committerAlexander Alekhin <alexander.a.alekhin@gmail.com>
Sat, 24 Jul 2021 15:34:58 +0000 (15:34 +0000)
1  2 
cmake/OpenCVUtils.cmake
doc/tutorials/core/mat_the_basic_image_container/mat_the_basic_image_container.markdown
modules/dnn/src/layers/recurrent_layers.cpp
modules/dnn/src/onnx/onnx_importer.cpp
modules/dnn/src/tensorflow/tf_importer.cpp
modules/dnn/test/test_layers.cpp
modules/dnn/test/test_onnx_importer.cpp
modules/dnn/test/test_tf_importer.cpp

Simple merge
@@@ -516,8 -551,8 +557,9 @@@ protected
  
  private:
      void addPermuteLayer(const int* order, const std::string& permName, Pin& inpId);
+     void setPadding(LayerParams &layerParams, const tensorflow::NodeDef &layer, std::string& inputName, float value = 0.);
  
 +    friend class LayerHandler;
      typedef void (TFImporter::*TFImporterNodeParser)(tensorflow::GraphDef&, const tensorflow::NodeDef&, LayerParams&);
      typedef std::map<std::string, TFImporterNodeParser> DispatchMap;
  
      void parseCustomLayer        (tensorflow::GraphDef& net, const tensorflow::NodeDef& layer, LayerParams& layerParams);
  };
  
+ void TFImporter::setPadding(LayerParams &layerParams, const tensorflow::NodeDef &layer, std::string& inputName, float value)
+ {
+     setPadMode(layerParams, layer);
+     int64_t pads[8];
+     if (!getExplicitPadding(layerParams, layer, pads))
+     {
+         return;
+     }
+     LayerParams padLp;
+     padLp.name = layer.name() + "/pad";
+     padLp.type = "Padding";
+     padLp.set("paddings", DictValue::arrayInt(pads, sizeof(pads) / sizeof(pads[0])));
+     padLp.set("value", value);
+     int id = dstNet.addLayer(padLp.name, padLp.type, padLp);
+     layer_id[padLp.name] = id;
+     connect(layer_id, dstNet, parsePin(inputName), id, 0);
+     inputName = padLp.name;
+     layerParams.set("pad_mode", "VALID");
+ }
 +class LayerHandler
 +{
 +public:
 +    LayerHandler(TFImporter* importer_);
 +    ~LayerHandler() = default;
 +
 +    bool handleMissing(const opencv_tensorflow::NodeDef& layer);
 +    void handleFailed(const opencv_tensorflow::NodeDef& layer);
 +
 +private:
 +    TFImporter* importer;
 +    std::set<std::string> layers;
 +};
 +
  const TFImporter::DispatchMap TFImporter::buildDispatchMap()
  {
      static DispatchMap dispatch;
Simple merge
Simple merge