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;