[mir_onnx] Pad operation versioning (#6698)
authorПавел Ильютченко/AI Tools Lab /SRR/Engineer/삼성전자 <p.iliutchenk@samsung.com>
Tue, 20 Aug 2019 15:24:12 +0000 (18:24 +0300)
committerAlexander Efimov/AI Tools Lab/./Samsung Electronics <a.efimov@samsung.com>
Tue, 20 Aug 2019 15:24:12 +0000 (18:24 +0300)
* Supported V1, V2 pad versions

Signed-off-by: Pavel Iliutchenko <p.iliutchenk@samsung.com>
compiler/mir-onnx-importer/Op/Pad.cpp
compiler/mir-onnx-importer/Op/Pad.h

index 18ca95b..b4cec79 100644 (file)
@@ -25,12 +25,25 @@ namespace mir_onnx
 
 void PadNodeConverter::convert(const onnx::NodeProto &onnx_node, ConverterContext *context) const
 {
+  const auto opset_version = context->getOpsetVersion(onnx_node.domain());
+  if (opset_version >= 2)
+    convertPadAttrName("paddings", onnx_node, context);
+  else if (opset_version >= 1)
+    convertPadAttrName("pads", onnx_node, context);
+  else
+    throw std::runtime_error("Not supported opset version on Pad operation!");
+}
+
+void PadNodeConverter::convertPadAttrName(const std::string pad_attr_name,
+                                          const onnx::NodeProto &onnx_node,
+                                          ConverterContext *context) const
+{
   std::vector<mir::Operation::Output *> inputs = context->getNodeInputs(onnx_node);
   mir::Graph *graph = context->getGraph();
 
   // 0.0f is the default value to be filled into padded cells.
-  float value = getFloatAttribute(onnx_node, "value", 0.0f);
-  auto pads_attr = findAttribute(onnx_node, "pads");
+  const float value = getFloatAttribute(onnx_node, "value", 0.0f);
+  const auto *pads_attr = findAttribute(onnx_node, pad_attr_name);
   assert(pads_attr);
   // "constant" is the default mode.
   auto mode = getStringAttribute(onnx_node, "mode", "constant");
index 2242e90..728e6b2 100644 (file)
@@ -23,6 +23,10 @@ class PadNodeConverter : public NodeConverter
 {
 public:
   void convert(const onnx::NodeProto &onnx_node, ConverterContext *context) const override;
+
+private:
+  void convertPadAttrName(const std::string pad_attr_name, const onnx::NodeProto &onnx_node,
+                          ConverterContext *context) const;
 };
 
 } // namespace mir_onnx