From: 박세희/동작제어Lab(SR)/Principal Engineer/삼성전자 Date: Fri, 7 Dec 2018 01:18:53 +0000 (+0900) Subject: [enco] frontend/caffe: separate Input (#2541) X-Git-Tag: nncc_backup~1163 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e37c4ecc7e21b45d931370aefe87d8aaf6032fa4;p=platform%2Fcore%2Fml%2Fnnfw.git [enco] frontend/caffe: separate Input (#2541) This will move Input layer handler to separate file. And changes for related with registry updates. Signed-off-by: SaeHie Park --- diff --git a/contrib/enco/frontend/caffe/CMakeLists.txt b/contrib/enco/frontend/caffe/CMakeLists.txt index 4de5445..e50cdb4 100644 --- a/contrib/enco/frontend/caffe/CMakeLists.txt +++ b/contrib/enco/frontend/caffe/CMakeLists.txt @@ -17,6 +17,7 @@ target_link_libraries(enco_caffe_frontend enco_intf_cmdline) target_link_libraries(enco_caffe_frontend nncc_foundation) target_link_libraries(enco_caffe_frontend morph) target_link_libraries(enco_caffe_frontend caffeproto) +target_link_libraries(enco_caffe_frontend stdex) nncc_find_package(GTest QUIET) diff --git a/contrib/enco/frontend/caffe/src/Frontend.cpp b/contrib/enco/frontend/caffe/src/Frontend.cpp index d6532d2..fd94aea 100644 --- a/contrib/enco/frontend/caffe/src/Frontend.cpp +++ b/contrib/enco/frontend/caffe/src/Frontend.cpp @@ -131,29 +131,6 @@ enco::Bundle Frontend::load(void) const graph_builder->build(layer, &opbuilder_context); } // TODO move type handlers to separate builder - else if (layer.type() == "Input") - { - assert(layer.has_input_param()); - const auto ¶m = layer.input_param(); - - for (uint32_t n = 0; n < layer.top_size(); ++n) - { - const auto &name = layer.top(n); - const auto shape = caffeimport::as_tensor_shape(param.shape(n)); - - auto bag = module->entity()->bag()->create(num_elements(shape)); - auto input = module->entity()->input()->create(shape); - - input->bag(bag); - input->name(name); - input->reorder(); - - module->input()->insert(input); - - bag_ctx[name] = bag; - shape_ctx[name] = shape; - } - } else if (layer.type() == "Convolution") { assert(layer.bottom().size() == 1); diff --git a/contrib/enco/frontend/caffe/src/GraphBuilderRegistry.cpp b/contrib/enco/frontend/caffe/src/GraphBuilderRegistry.cpp index 094896d..e8e31ff 100644 --- a/contrib/enco/frontend/caffe/src/GraphBuilderRegistry.cpp +++ b/contrib/enco/frontend/caffe/src/GraphBuilderRegistry.cpp @@ -16,12 +16,19 @@ #include "GraphBuilderRegistry.h" +#include "Op/Input.h" + +#include + +using stdex::make_unique; + namespace caffeimport { GraphBuilderRegistry::GraphBuilderRegistry() { // TODO add GraphBuilder for each caffe layer. + _builder_map["Input"] = make_unique(); } } // namespace caffeimport diff --git a/contrib/enco/frontend/caffe/src/Op/Input.cpp b/contrib/enco/frontend/caffe/src/Op/Input.cpp new file mode 100644 index 0000000..39e44fa --- /dev/null +++ b/contrib/enco/frontend/caffe/src/Op/Input.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2018 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. + */ + +#include "Input.h" +#include "Convert.h" + +#include + +#include + +using namespace nncc::core::ADT; + +using tensor::num_elements; +using tensor::LexicalLayout; + +namespace caffeimport +{ + +void InputBuilder::build(const ::caffe::LayerParameter &layer, GraphBuilderContext *context) const +{ + coco::Module *module = context->module(); + std::map &shape_ctx = context->shape_ctx(); + std::map &bag_ctx = context->bag_ctx(); + + assert(layer.has_input_param()); + const auto ¶m = layer.input_param(); + + for (uint32_t n = 0; n < layer.top_size(); ++n) + { + const auto &name = layer.top(n); + const auto shape = as_tensor_shape(param.shape(n)); + + auto bag = module->entity()->bag()->create(num_elements(shape)); + auto input = module->entity()->input()->create(shape); + + input->bag(bag); + input->name(name); + input->reorder(); + + module->input()->insert(input); + + bag_ctx[name] = bag; + shape_ctx[name] = shape; + } +} + +} // namespace caffeimport diff --git a/contrib/enco/frontend/caffe/src/Op/Input.h b/contrib/enco/frontend/caffe/src/Op/Input.h new file mode 100644 index 0000000..a50d6c6 --- /dev/null +++ b/contrib/enco/frontend/caffe/src/Op/Input.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2018 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 __INPUT_GRAPH_BUILDER_H__ +#define __INPUT_GRAPH_BUILDER_H__ + +#include "GraphBuilder.h" + +#include "Context.h" + +namespace caffeimport +{ + +class InputBuilder final : public GraphBuilder +{ +public: + void build(const ::caffe::LayerParameter &layer, GraphBuilderContext *context) const override; +}; + +} // namespace caffeimport + +#endif // __INPUT_GRAPH_BUILDER_H__