From b2decc33e02f50e0ed1b87adc086ae27ea0abb1c Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EB=82=A8=EA=B6=81=EC=84=9D/On-Device=20Lab=28SR=29/Enginee?= =?utf8?q?r/=EC=82=BC=EC=84=B1=EC=A0=84=EC=9E=90?= Date: Mon, 22 Apr 2019 11:15:09 +0900 Subject: [PATCH] [moco/ONNX] Introduce GraphBuilder and GraphBuilderRegistry (#3322) This commit will introduce GraphBuilder for building graph and GraphBuilderRegistry for registering each operation's graph building Signed-off-by: Seok NamKoong --- contrib/moco/lib/frontend/onnx/src/GraphBuilder.h | 43 ++++++++++++++ .../lib/frontend/onnx/src/GraphBuilderRegistry.h | 66 ++++++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 contrib/moco/lib/frontend/onnx/src/GraphBuilder.h create mode 100644 contrib/moco/lib/frontend/onnx/src/GraphBuilderRegistry.h diff --git a/contrib/moco/lib/frontend/onnx/src/GraphBuilder.h b/contrib/moco/lib/frontend/onnx/src/GraphBuilder.h new file mode 100644 index 0000000..2c0c946 --- /dev/null +++ b/contrib/moco/lib/frontend/onnx/src/GraphBuilder.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2019 Samsung Electronics Co., Ltd. All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __MOCO_FRONTEND_ONNX_GRAPH_BUILDER_H__ +#define __MOCO_FRONTEND_ONNX_GRAPH_BUILDER_H__ + +#include "GraphBuilderContext.h" + +#include + +namespace moco +{ +namespace onnx +{ + +/** +* @brief Parent class of onnx operation graph builders +*/ +class GraphBuilder +{ +public: + virtual bool validate(const ::onnx::NodeProto &) const { return true; } + virtual void build(const ::onnx::NodeProto &, GraphBuilderContext *) const = 0; + virtual ~GraphBuilder() {} +}; + +} // namespace onnx +} // namespace moco + +#endif // __MOCO_FRONTEND_ONNX_GRAPH_BUILDER_H__ diff --git a/contrib/moco/lib/frontend/onnx/src/GraphBuilderRegistry.h b/contrib/moco/lib/frontend/onnx/src/GraphBuilderRegistry.h new file mode 100644 index 0000000..fa0fec7 --- /dev/null +++ b/contrib/moco/lib/frontend/onnx/src/GraphBuilderRegistry.h @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2019 Samsung Electronics Co., Ltd. All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __MOCO_FRONTEND_ONNX_GRAPH_BUILDER_REGISTRY_H__ +#define __MOCO_FRONTEND_ONNX_GRAPH_BUILDER_REGISTRY_H__ + +#include "GraphBuilder.h" + +#include + +namespace moco +{ +namespace onnx +{ + +/** +* @brief Class to return graph builder for passed onnx Operator +*/ +class GraphBuilderRegistry +{ +public: + /** + * @brief Returns registered GraphBuilder pointer for operator or + * nullptr if not registered + */ + const GraphBuilder *lookup(const std::string &op) const + { + if (_builder_map.find(op) == _builder_map.end()) + return nullptr; + + return _builder_map.at(op).get(); + } + + static GraphBuilderRegistry &get() + { + static GraphBuilderRegistry me; + return me; + } + +private: + GraphBuilderRegistry() + { + // TODO add operations + } + +private: + std::map> _builder_map; +}; + +} // namespace onnx +} // namespace moco + +#endif // __MOCO_FRONTEND_ONNX_GRAPH_BUILDER_REGISTRY_H__ -- 2.7.4