From b14f2c765b4c4cbcbc7e876df28f13e7dad6b37b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Dmitry=20Mozolev/AI=20Tools=20Lab=20/SRR/Engineer/=EC=82=BC?= =?utf8?q?=EC=84=B1=EC=A0=84=EC=9E=90?= Date: Tue, 10 Jul 2018 13:54:50 +0300 Subject: [PATCH] Add Caffe model visitor skeleton (#540) Add Caffe model visitor skeleton This commit adds Caffe model visitor skeleton. Signed-off-by: Dmitry Mozolev --- contrib/nnc/libs/frontend/caffe/CMakeLists.txt | 2 + .../frontend/caffe/include/caffe_model_visitor.h | 62 ++++++++++++++++++ .../frontend/caffe/src/caffe_model_visitor.cpp | 75 ++++++++++++++++++++++ 3 files changed, 139 insertions(+) create mode 100644 contrib/nnc/libs/frontend/caffe/include/caffe_model_visitor.h create mode 100644 contrib/nnc/libs/frontend/caffe/src/caffe_model_visitor.cpp diff --git a/contrib/nnc/libs/frontend/caffe/CMakeLists.txt b/contrib/nnc/libs/frontend/caffe/CMakeLists.txt index d76bc97..c78457f 100644 --- a/contrib/nnc/libs/frontend/caffe/CMakeLists.txt +++ b/contrib/nnc/libs/frontend/caffe/CMakeLists.txt @@ -21,4 +21,6 @@ target_include_directories(caffe_importer PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/inc target_link_libraries(caffe_importer PUBLIC caffeproto) target_link_libraries(caffe_importer PUBLIC ${nn_import_common}) +target_link_libraries(caffe_importer PRIVATE nnc_core) target_link_libraries(caffe_importer PRIVATE nncc_core) +target_link_libraries(caffe_importer PRIVATE nnc_plugin_core) diff --git a/contrib/nnc/libs/frontend/caffe/include/caffe_model_visitor.h b/contrib/nnc/libs/frontend/caffe/include/caffe_model_visitor.h new file mode 100644 index 0000000..87510be --- /dev/null +++ b/contrib/nnc/libs/frontend/caffe/include/caffe_model_visitor.h @@ -0,0 +1,62 @@ +#ifndef NNCC_CAFFE_IR_VISITOR_H +#define NNCC_CAFFE_IR_VISITOR_H + +#include +#include + +#include "nnc/core/IR/model/graph/graph.h" +#include "nnc/core/IR/model/graph/ir_node.h" +#include "nnc/core/linalg/TensorVariant.h" + +#include "caffe_visitor.h" + +namespace nncc +{ +namespace contrib +{ +namespace frontend +{ +namespace caffe +{ + +using namespace ::caffe; + +using IrTensor = nncc::contrib::core::ADT::TensorVariant; +using nncc::contrib::core::IR::model::Graph; +using nncc::contrib::core::IR::model::ADT::INode; +using nncc::core::ADT::tensor::Shape; + +class ModelVisitor : public Visitor +{ +public: + ModelVisitor() : graph(new Graph()) {}; + + void visit(const NetParameter&) override; + void visit(const LayerParameter&) override; + void visit(const BlobProto&) override; + void visit(const BlobShape&) override; + + Graph* getGraph(); + +private: + Graph* graph = nullptr; + + std::vector inputShapes; + std::map opsForBlobsTheyOutput; + + std::shared_ptr createTensor(const BlobProto&); + std::vector createOpInputs(const LayerParameter&); + std::vector> createOpParams(const LayerParameter&); + + void createGraphInputs(const std::vector &names, + const std::vector &shapes); + void processInputLayer(const LayerParameter&); + void processDeprecatedInput(const NetParameter&); +}; + +} // namespace caffe +} // namespace frontend +} // namespace contrib +} // namespace nncc + +#endif //NNCC_CAFFE_IR_VISITOR_H diff --git a/contrib/nnc/libs/frontend/caffe/src/caffe_model_visitor.cpp b/contrib/nnc/libs/frontend/caffe/src/caffe_model_visitor.cpp new file mode 100644 index 0000000..54d8794 --- /dev/null +++ b/contrib/nnc/libs/frontend/caffe/src/caffe_model_visitor.cpp @@ -0,0 +1,75 @@ +#include +#include +#include + +#include "nncc/core/ADT/tensor/Shape.h" +#include "nnc/core/IR/model/operations/variable_op.h" + +#include "shape_helper.h" +#include "caffe_model_visitor.h" + +namespace nncc +{ +namespace contrib +{ +namespace frontend +{ +namespace caffe +{ + +using VariableOp = nncc::contrib::core::IR::model::ops::VariableOp; +using nncc::core::ADT::tensor::Shape; + +void ModelVisitor::visit(const NetParameter& np) +{ + processDeprecatedInput(np); +} + +void ModelVisitor::visit(const LayerParameter& lp) +{ + throw std::runtime_error("Not yet implemented"); +} + +void ModelVisitor::visit(const BlobProto&) { throw std::runtime_error("Not yet implemented"); } +void ModelVisitor::visit(const BlobShape&) { throw std::runtime_error("Not yet implemented"); } + +Graph *ModelVisitor::getGraph() +{ + return graph; +} + +void ModelVisitor::createGraphInputs(const std::vector &names, + const std::vector &shapes) +{ + throw std::runtime_error("Not yet implemented"); +} + +void ModelVisitor::processDeprecatedInput(const NetParameter& np) +{ + throw std::runtime_error("Not yet implemented"); +} + +void ModelVisitor::processInputLayer(const LayerParameter& lp) +{ + throw std::runtime_error("Not yet implemented"); +} + +std::shared_ptr ModelVisitor::createTensor(const BlobProto &bp) +{ + throw std::runtime_error("Not yet implemented"); +} + +std::vector ModelVisitor::createOpInputs(const LayerParameter &lp) +{ + throw std::runtime_error("Not yet implemented"); +} + +std::vector> ModelVisitor::createOpParams(const LayerParameter &lp) +{ + throw std::runtime_error("Not yet implemented"); +} + +} // namespace caffe +} // namespace frontend +} // namespace contrib +} // namespace nncc -- 2.7.4