void BatchNormalizationNodeConverter::convert(const onnx::NodeProto &onnx_node,
ConverterContext *context) const
{
+ const auto opset_version = context->getOpsetVersion(onnx_node.domain());
+ if (opset_version >= 9)
+ convertV9(onnx_node, context);
+ else if (opset_version >= 7)
+ convertV7(onnx_node, context);
+ else if (opset_version >= 6)
+ convertV6(onnx_node, context);
+ else if (opset_version >= 1)
+ convertV1(onnx_node, context);
+ else
+ throw std::runtime_error("Not supported opset version on BatchNormalization operation!");
+}
+
+void BatchNormalizationNodeConverter::convertV1(const onnx::NodeProto &onnx_node,
+ ConverterContext *context) const
+{
+ // consumed_inputs attribute not used
+ convertV6(onnx_node, context);
+}
+
+void BatchNormalizationNodeConverter::convertV6(const onnx::NodeProto &onnx_node,
+ ConverterContext *context) const
+{
+ const auto is_test = getIntAttribute(onnx_node, "is_test", 0);
+ if (is_test != 0)
+ throw std::runtime_error("Not supported is_test attribute!");
+
+ convertV7(onnx_node, context);
+}
+
+void BatchNormalizationNodeConverter::convertV7(const onnx::NodeProto &onnx_node,
+ ConverterContext *context) const
+{
+ const auto spatial = getIntAttribute(onnx_node, "spatial", 1);
+ if (spatial != 1)
+ throw std::runtime_error("Not supported spatial attribute!");
+
+ convertV9(onnx_node, context);
+}
+
+void BatchNormalizationNodeConverter::convertV9(const onnx::NodeProto &onnx_node,
+ ConverterContext *context) const
+{
+ // momentum attrribute used only for learning
+
std::vector<mir::Operation::Output *> inputs = context->getNodeInputs(onnx_node);
mir::Graph *graph = context->getGraph();
{
public:
void convert(const onnx::NodeProto &onnx_node, ConverterContext *context) const override;
+
+private:
+ void convertV1(const onnx::NodeProto &onnx_node, ConverterContext *context) const;
+ void convertV6(const onnx::NodeProto &onnx_node, ConverterContext *context) const;
+ void convertV7(const onnx::NodeProto &onnx_node, ConverterContext *context) const;
+ void convertV9(const onnx::NodeProto &onnx_node, ConverterContext *context) const;
};
} // namespace mir_onnx