From 6746c4c025d7c25c9ada7a9d13d37e910ca82cfd 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 17:42:51 +0300 Subject: [PATCH] Add Caffe importer interface implementation (#541) Added initial version of Caffe importer interface implementation that uses model visitor to create Model IR. Signed-off-by: Dmitry Mozolev --- .../libs/frontend/caffe/include/caffe_importer.h | 41 ++++++++++++++++++ .../nnc/libs/frontend/caffe/src/caffe_importer.cpp | 50 ++++++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 contrib/nnc/libs/frontend/caffe/include/caffe_importer.h create mode 100644 contrib/nnc/libs/frontend/caffe/src/caffe_importer.cpp diff --git a/contrib/nnc/libs/frontend/caffe/include/caffe_importer.h b/contrib/nnc/libs/frontend/caffe/include/caffe_importer.h new file mode 100644 index 0000000..b8c12b0 --- /dev/null +++ b/contrib/nnc/libs/frontend/caffe/include/caffe_importer.h @@ -0,0 +1,41 @@ +#ifndef NNCC_CAFFE_IMPORTER_H +#define NNCC_CAFFE_IMPORTER_H + +#include +#include + +#include "caffe/proto/caffe.pb.h" + +#include "nn_importer.h" + +namespace nncc +{ +namespace contrib +{ +namespace frontend +{ +namespace caffe +{ + +using namespace ::caffe; + +class CaffeImporter : public common::NNImporter +{ +public: + explicit CaffeImporter(std::string filename) : modelFilename(std::move(filename)) {}; + + bool import() override; + void* createIR() override; + void dump() override; + +private: + std::string modelFilename; + std::unique_ptr net; +}; + +} // namespace caffe +} // namespace frontend +} // namespace contrib +} // namespace nncc + +#endif // NNCC_CAFFE_IMPORTER_H diff --git a/contrib/nnc/libs/frontend/caffe/src/caffe_importer.cpp b/contrib/nnc/libs/frontend/caffe/src/caffe_importer.cpp new file mode 100644 index 0000000..e126d3a --- /dev/null +++ b/contrib/nnc/libs/frontend/caffe/src/caffe_importer.cpp @@ -0,0 +1,50 @@ +#include +#include + +#include "caffe_walker.h" +#include "caffe_model_visitor.h" +#include "caffe_dump_visitor.h" +#include "caffe_importer.h" +#include "proto_reader.h" + +namespace nncc +{ +namespace contrib +{ +namespace frontend +{ +namespace caffe +{ + +bool CaffeImporter::import() +{ + GOOGLE_PROTOBUF_VERIFY_VERSION; + + net.reset(new NetParameter()); + + // import success flag is returned + return util::readProtoFromBinaryFile(modelFilename.c_str(), net.get()); +} + +void* CaffeImporter::createIR() +{ + ModelVisitor irCreator; + ModelWalker caffeWalker(&irCreator); + + caffeWalker.walkNetParameter(*net); + + return irCreator.getGraph(); +} + +void CaffeImporter::dump() +{ + DumpVisitor dumper; + ModelWalker caffeWalker(&dumper); + + caffeWalker.walkNetParameter(*net); +} + +} // namespace caffe +} // namespace frontend +} // namespace contrib +} // namespace nncc -- 2.7.4