From 096b55b485d080cafcd212baaa286f145eb73712 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=D0=A0=D0=BE=D0=BC=D0=B0=D0=BD=20=D0=9C=D0=B8=D1=85=D0=B0?= =?utf8?q?=D0=B9=D0=BB=D0=BE=D0=B2=D0=B8=D1=87=20=D0=A0=D1=83=D1=81=D1=8F?= =?utf8?q?=D0=B5=D0=B2/AI=20Tools=20Lab=20/SRR/Staff=20Engineer/=EC=82=BC?= =?utf8?q?=EC=84=B1=EC=A0=84=EC=9E=90?= Date: Wed, 19 Dec 2018 21:20:47 +0300 Subject: [PATCH] [nnc] Create interface for NN importers (#2728) * added factory method to create importer objects * added template method to manage `run` method for all importers * ONNX importer wasn't changed Signed-off-by: Roman Rusyaev --- contrib/nnc/driver/Driver.cpp | 54 ++++++---------------- .../{nn_importer.h => NNImporter.h} | 25 +++++++++- .../nnc/passes/caffe2_frontend/caffe2_importer.cpp | 9 +--- .../passes/caffe2_frontend/caffe2_importer.h | 18 ++------ .../nnc/passes/caffe2_frontend/caffe2_op_types.h | 2 +- .../nnc/passes/caffe_frontend/caffe_importer.cpp | 9 +--- .../passes/caffe_frontend/caffe_importer.h | 31 ++----------- contrib/nnc/passes/caffe_frontend/caffe_op_types.h | 2 +- contrib/nnc/passes/common_frontend/CMakeLists.txt | 6 +++ contrib/nnc/passes/common_frontend/NNImporter.cpp | 41 ++++++++++++++++ contrib/nnc/passes/tflite_frontend/CMakeLists.txt | 15 +++--- .../nnc/passes/tflite_frontend/tflite_importer.cpp | 8 +--- .../passes/tflite_frontend/tflite_importer.h | 24 ++-------- contrib/nnc/tests/import/caffe.cpp | 2 +- contrib/nnc/tests/import/tflite.cpp | 2 +- .../caffe_frontend/unsupported_caffe_model.cpp | 2 +- contrib/nnc/utils/caffe2_dot_dumper/model_dump.cpp | 2 +- contrib/nnc/utils/caffe_dot_dumper/model_dump.cpp | 2 +- .../nnc/utils/tflite_dot_dumper/sanity_check.cpp | 2 +- 19 files changed, 115 insertions(+), 141 deletions(-) rename contrib/nnc/include/passes/common_frontend/{nn_importer.h => NNImporter.h} (57%) rename contrib/nnc/{include => }/passes/caffe2_frontend/caffe2_importer.h (90%) rename contrib/nnc/{include => }/passes/caffe_frontend/caffe_importer.h (74%) create mode 100644 contrib/nnc/passes/common_frontend/NNImporter.cpp rename contrib/nnc/{include => }/passes/tflite_frontend/tflite_importer.h (88%) diff --git a/contrib/nnc/driver/Driver.cpp b/contrib/nnc/driver/Driver.cpp index f8798e1..ee57a3a 100644 --- a/contrib/nnc/driver/Driver.cpp +++ b/contrib/nnc/driver/Driver.cpp @@ -16,13 +16,11 @@ #include "pass/PassData.h" -#include "passes/caffe_frontend/caffe_importer.h" -#include "passes/caffe2_frontend/caffe2_importer.h" -#include "passes/tflite_frontend/tflite_importer.h" +#include "passes/common_frontend/NNImporter.h" + #include "passes/interpreter/InterpreterPass.h" #include "passes/soft_backend/CPPGenerator.h" #include "passes/acl_soft_backend/AclCppGenerator.h" -#include "passes/onnx_frontend/ONNXImporter.h" #include "support/CommandLine.h" #include "Definitions.h" #include "option/Options.h" @@ -52,21 +50,17 @@ void Driver::runPasses() { static std::string getFrontendOptionsString() { std::string res; -#ifdef NNC_FRONTEND_CAFFE_ENABLED - res += " '" + cli::caffeFrontend.getNames()[0] + "' "; -#endif // NNC_FRONTEND_CAFFE_ENABLED + if (!cli::caffeFrontend.isDisabled()) + res += " '" + cli::caffeFrontend.getNames()[0] + "' "; -#ifdef NNC_FRONTEND_CAFFE2_ENABLED - res += " '" + cli::caffe2Frontend.getNames()[0] + "' "; -#endif // NNC_FRONTEND_CAFFE2_ENABLED + if (!cli::caffe2Frontend.isDisabled()) + res += " '" + cli::caffe2Frontend.getNames()[0] + "' "; -#ifdef NNC_FRONTEND_ONNX_ENABLED - res += " '" + cli::onnxFrontend.getNames()[0] + "' "; -#endif // NNC_FRONTEND_ONNX_ENABLED + if (!cli::onnxFrontend.isDisabled()) + res += " '" + cli::onnxFrontend.getNames()[0] + "' "; -#ifdef NNC_FRONTEND_TFLITE_ENABLED - res += " '" + cli::tflFrontend.getNames()[0] + "' "; -#endif // NNC_FRONTEND_TFLITE_ENABLED + if (!cli::tflFrontend.isDisabled()) + res += " '" + cli::tflFrontend.getNames()[0] + "' "; return res; } @@ -77,40 +71,20 @@ static std::string getFrontendOptionsString() { */ void Driver::registerFrontendPass() { - std::unique_ptr pass; - // For bool, the value false is converted to zero and the value true is converted to one if (cli::caffeFrontend + cli::caffe2Frontend + cli::tflFrontend + cli::onnxFrontend != 1) throw DriverException("One and only one of the following options are allowed and have to be set" " to be set in the same time: " + getFrontendOptionsString()); - if (cli::caffeFrontend) { -#ifdef NNC_FRONTEND_CAFFE_ENABLED - pass = std::move(std::unique_ptr(new CaffeImporter(cli::inputFile))); -#endif // NNC_FRONTEND_CAFFE_ENABLED - } else if (cli::caffe2Frontend) { -#ifdef NNC_FRONTEND_CAFFE2_ENABLED - // FIXME: caffe2 input shapes are not provided by model and must be set from cli - // current 'inputShapes' could provide only one shape, while model could has several inputs - pass = std::move(std::unique_ptr(new Caffe2Importer(cli::inputFile, cli::initNet, - {cli::inputShapes}))); -#endif // NNC_FRONTEND_CAFFE2_ENABLED - } else if ( cli::onnxFrontend ) { -#ifdef NNC_FRONTEND_ONNX_ENABLED - pass = std::move(std::unique_ptr(new ONNXImporter())); -#endif // NNC_FRONTEND_ONNX_ENABLED - } - else if ( cli::tflFrontend ) { -#ifdef NNC_FRONTEND_TFLITE_ENABLED - pass = std::move(std::unique_ptr(new TfliteImporter(cli::inputFile))); -#endif // NNC_FRONTEND_TFLITE_ENABLED + std::unique_ptr pass = NNImporter::createNNImporter(); + + if (pass) { + _passManager.registerPass(std::move(pass)); } else { throw DriverException("One of the following options must be defined: '" + getFrontendOptionsString()); } - _passManager.registerPass(std::move(pass)); - } // registerFrontendPass /** diff --git a/contrib/nnc/include/passes/common_frontend/nn_importer.h b/contrib/nnc/include/passes/common_frontend/NNImporter.h similarity index 57% rename from contrib/nnc/include/passes/common_frontend/nn_importer.h rename to contrib/nnc/include/passes/common_frontend/NNImporter.h index 6f63d8a..4965477 100644 --- a/contrib/nnc/include/passes/common_frontend/nn_importer.h +++ b/contrib/nnc/include/passes/common_frontend/NNImporter.h @@ -17,15 +17,36 @@ #ifndef FRONTEND_COMMON_INCLUDE_NN_IMPORTER_ #define FRONTEND_COMMON_INCLUDE_NN_IMPORTER_ +#include "pass/Pass.h" #include "core/modelIR/Graph.h" namespace nnc { -class NNImporter { +/** + * @brief Interface for all frontends. All who uses frontends must do it thought this interface + */ +class NNImporter : public Pass { public: - virtual ~NNImporter() = default; + // template method pattern + PassData run(PassData) final { + import(); + return createIR(); + } + + static std::unique_ptr createNNImporter(); + void cleanup() override {} + + /** + * @brief Import model from file, must be called before 'createIR' method + * @throw PassException in case, if model couldn't be parsed or NNC doesn't support it + */ virtual void import() = 0; + + /** + * @brief Create MIR graph from caffe model, must be called after 'import' method + * @return MIR graph, corresponding to processed caffe model + */ virtual mir::Graph *createIR() = 0; }; diff --git a/contrib/nnc/passes/caffe2_frontend/caffe2_importer.cpp b/contrib/nnc/passes/caffe2_frontend/caffe2_importer.cpp index 1b874c3..e2a5fa8 100644 --- a/contrib/nnc/passes/caffe2_frontend/caffe2_importer.cpp +++ b/contrib/nnc/passes/caffe2_frontend/caffe2_importer.cpp @@ -19,12 +19,10 @@ #include #include -#include "passes/caffe2_frontend/caffe2_importer.h" +#include "caffe2_importer.h" #include "passes/common_frontend/shape_helper.h" #include "passes/common_frontend/proto_helper.h" -#include "caffe2/proto/caffe2.pb.h" - #include "caffe2_op_types.h" #include "caffe2_op_creator.h" @@ -52,11 +50,6 @@ Caffe2Importer::Caffe2Importer(std::string predictNet, std::string initNet, Caffe2Importer::~Caffe2Importer() = default; -PassData Caffe2Importer::run(PassData) { - import(); - return createIR(); -} - void Caffe2Importer::cleanup() { delete _graph; } diff --git a/contrib/nnc/include/passes/caffe2_frontend/caffe2_importer.h b/contrib/nnc/passes/caffe2_frontend/caffe2_importer.h similarity index 90% rename from contrib/nnc/include/passes/caffe2_frontend/caffe2_importer.h rename to contrib/nnc/passes/caffe2_frontend/caffe2_importer.h index 7e8db0d..c01de54 100644 --- a/contrib/nnc/include/passes/caffe2_frontend/caffe2_importer.h +++ b/contrib/nnc/passes/caffe2_frontend/caffe2_importer.h @@ -22,24 +22,17 @@ #include #include -#include "passes/common_frontend/nn_importer.h" +#include "caffe2/proto/caffe2.pb.h" +#include "caffe2_op_creator.h" +#include "caffe2_op_types.h" +#include "passes/common_frontend/NNImporter.h" #include "pass/Pass.h" #include "pass/PassData.h" -// Use forward declarations for non interface classes -namespace caffe2 { -class OperatorDef; -class NetDef; -} namespace nnc { -class Caffe2OpCreator; -enum class SupportedCaffe2OpType : uint8_t; -} -namespace nnc { - -class Caffe2Importer : public NNImporter, public Pass { +class Caffe2Importer : public NNImporter { public: explicit Caffe2Importer(std::string predictNet, std::string initNet, std::vector> inputShapes); @@ -56,7 +49,6 @@ public: */ mir::Graph* createIR() override; - PassData run(PassData) override; void cleanup() override; ~Caffe2Importer(); diff --git a/contrib/nnc/passes/caffe2_frontend/caffe2_op_types.h b/contrib/nnc/passes/caffe2_frontend/caffe2_op_types.h index 2a1de48..414bd87 100644 --- a/contrib/nnc/passes/caffe2_frontend/caffe2_op_types.h +++ b/contrib/nnc/passes/caffe2_frontend/caffe2_op_types.h @@ -19,7 +19,7 @@ namespace nnc { -enum class SupportedCaffe2OpType : uint8_t { +enum class SupportedCaffe2OpType { add, averagePool, concat, diff --git a/contrib/nnc/passes/caffe_frontend/caffe_importer.cpp b/contrib/nnc/passes/caffe_frontend/caffe_importer.cpp index cc4a8eb..149c90c 100644 --- a/contrib/nnc/passes/caffe_frontend/caffe_importer.cpp +++ b/contrib/nnc/passes/caffe_frontend/caffe_importer.cpp @@ -19,9 +19,7 @@ #include #include -#include "caffe/proto/caffe.pb.h" - -#include "passes/caffe_frontend/caffe_importer.h" +#include "caffe_importer.h" #include "caffe_op_creator.h" #include "caffe_op_types.h" @@ -220,11 +218,6 @@ void CaffeImporter::setGraphOutputs() { _graph->markOutput(_blobNameToIODescriptor[last_layer.top(0)].op); } -PassData CaffeImporter::run(PassData) { - import(); - return createIR(); -} - void CaffeImporter::cleanup() { delete _graph; } diff --git a/contrib/nnc/include/passes/caffe_frontend/caffe_importer.h b/contrib/nnc/passes/caffe_frontend/caffe_importer.h similarity index 74% rename from contrib/nnc/include/passes/caffe_frontend/caffe_importer.h rename to contrib/nnc/passes/caffe_frontend/caffe_importer.h index 77b3ad7..3375cc0 100644 --- a/contrib/nnc/include/passes/caffe_frontend/caffe_importer.h +++ b/contrib/nnc/passes/caffe_frontend/caffe_importer.h @@ -22,41 +22,20 @@ #include #include -#include "passes/common_frontend/nn_importer.h" - -#include "pass/Pass.h" -#include "pass/PassData.h" - -// Use forward declarations for non interface classes -namespace caffe { -class BlobProto; -class LayerParameter; -class NetParameter; -} -namespace nnc { -class CaffeOpCreator; -enum class CaffeOpType : uint8_t; -} +#include "caffe/proto/caffe.pb.h" +#include "caffe_op_creator.h" +#include "caffe_op_types.h" +#include "passes/common_frontend/NNImporter.h" namespace nnc { -class CaffeImporter : public NNImporter, public Pass { +class CaffeImporter : public NNImporter { public: explicit CaffeImporter(std::string filename); - /** - * @brief Import model from file, must be called before 'createIR' method - * @throw PassException in case, if model couldn't be parsed or NNC doesn't support it - */ void import() override; - - /** - * @brief Create MIR graph from caffe model, must be called after 'import' method - * @return MIR graph, corresponding to processed caffe model - */ mir::Graph* createIR() override; - PassData run(PassData) override; void cleanup() override; ~CaffeImporter(); diff --git a/contrib/nnc/passes/caffe_frontend/caffe_op_types.h b/contrib/nnc/passes/caffe_frontend/caffe_op_types.h index 1e76f4e..887112b 100644 --- a/contrib/nnc/passes/caffe_frontend/caffe_op_types.h +++ b/contrib/nnc/passes/caffe_frontend/caffe_op_types.h @@ -19,7 +19,7 @@ namespace nnc { -enum class CaffeOpType : uint8_t { +enum class CaffeOpType { absVal, accuracy, argMax, diff --git a/contrib/nnc/passes/common_frontend/CMakeLists.txt b/contrib/nnc/passes/common_frontend/CMakeLists.txt index cb3cc2e..d9508c3 100644 --- a/contrib/nnc/passes/common_frontend/CMakeLists.txt +++ b/contrib/nnc/passes/common_frontend/CMakeLists.txt @@ -7,3 +7,9 @@ set(COMMON_SOURCES model_allocation.cpp op_creator_helper.cpp) add_library(nn_import_common STATIC ${COMMON_SOURCES}) set_target_properties(nn_import_common PROPERTIES POSITION_INDEPENDENT_CODE ON) target_link_libraries(nn_import_common PRIVATE nnc_core nnc_support) + +# This library depends on other frontends to provide uniform interface for those who use frontends +set(IMPORTER_SUPPORT_SOURCES NNImporter.cpp) +add_nnc_library(nn_importer_support STATIC ${IMPORTER_SUPPORT_SOURCES}) +target_include_directories(nn_importer_support PRIVATE ${NNC_CAFFE_FRONTEND_DIR} ${NNC_CAFFE2_FRONTEND_DIR} ${NNC_TFLITE_FRONTEND_DIR}) +target_link_libraries(nn_importer_support caffe_importer caffe2_importer tflite_importer) diff --git a/contrib/nnc/passes/common_frontend/NNImporter.cpp b/contrib/nnc/passes/common_frontend/NNImporter.cpp new file mode 100644 index 0000000..0654a8d --- /dev/null +++ b/contrib/nnc/passes/common_frontend/NNImporter.cpp @@ -0,0 +1,41 @@ +#include + +#include "Definitions.h" +#include "option/Options.h" +#include "passes/common_frontend/NNImporter.h" + +#include "tflite_importer.h" +#include "caffe_importer.h" +#include "caffe2_importer.h" + +namespace nnc { + +std::unique_ptr NNImporter::createNNImporter() { + + std::unique_ptr importer(nullptr); + + if (cli::caffeFrontend) { +#ifdef NNC_FRONTEND_CAFFE_ENABLED + importer.reset(new CaffeImporter(cli::inputFile)); +#endif // NNC_FRONTEND_CAFFE_ENABLED + } else if (cli::caffe2Frontend) { +#ifdef NNC_FRONTEND_CAFFE2_ENABLED + // FIXME: caffe2 input shapes are not provided by model and must be set from cli + // current 'inputShapes' could provide only one shape, while model could has several inputs + importer.reset(new Caffe2Importer(cli::inputFile, cli::initNet, {cli::inputShapes})); +#endif // NNC_FRONTEND_CAFFE2_ENABLED + } else if (cli::onnxFrontend) { +#ifdef NNC_FRONTEND_ONNX_ENABLED + importer.reset(new ONNXImporter()); +#endif // NNC_FRONTEND_ONNX_ENABLED + } else if (cli::tflFrontend) { +#ifdef NNC_FRONTEND_TFLITE_ENABLED + importer.reset(new TfliteImporter(cli::inputFile)); +#endif // NNC_FRONTEND_TFLITE_ENABLED + } + + return importer; + +} // createNNImporter + +} // namespace nnc diff --git a/contrib/nnc/passes/tflite_frontend/CMakeLists.txt b/contrib/nnc/passes/tflite_frontend/CMakeLists.txt index fce09e3..2b6d5af 100644 --- a/contrib/nnc/passes/tflite_frontend/CMakeLists.txt +++ b/contrib/nnc/passes/tflite_frontend/CMakeLists.txt @@ -26,14 +26,13 @@ set(tflite_importer_sources tflite_op_creator.cpp tflite_importer.cpp) file(GLOB tflite_importer_headers *.h) -set(tflite_import tflite_import) -add_nnc_library(${tflite_import} SHARED ${tflite_importer_sources} ${tflite_importer_headers}) +add_nnc_library(tflite_importer SHARED ${tflite_importer_sources} ${tflite_importer_headers}) -target_link_libraries(${tflite_import} PUBLIC tflite_schema) -target_link_libraries(${tflite_import} PUBLIC flatbuffers) -target_link_libraries(${tflite_import} PUBLIC nn_import_common) -target_link_libraries(${tflite_import} PUBLIC nnc_support) -target_link_libraries(${tflite_import} PUBLIC nnc_core) +target_link_libraries(tflite_importer PUBLIC tflite_schema) +target_link_libraries(tflite_importer PUBLIC flatbuffers) +target_link_libraries(tflite_importer PUBLIC nn_import_common) +target_link_libraries(tflite_importer PUBLIC nnc_support) +target_link_libraries(tflite_importer PUBLIC nnc_core) # install tflite frontend library -install_nnc_library(tflite_import) +install_nnc_library(tflite_importer) diff --git a/contrib/nnc/passes/tflite_frontend/tflite_importer.cpp b/contrib/nnc/passes/tflite_frontend/tflite_importer.cpp index f990c59..4b8296b 100644 --- a/contrib/nnc/passes/tflite_frontend/tflite_importer.cpp +++ b/contrib/nnc/passes/tflite_frontend/tflite_importer.cpp @@ -15,7 +15,7 @@ */ #include "schema_generated.h" -#include "passes/tflite_frontend/tflite_importer.h" +#include "tflite_importer.h" #include "tflite_op_creator.h" using namespace ::tflite; @@ -371,12 +371,6 @@ void TfliteImporter::setIrNodeNames() { item.second->setName((*_tensors)[item.first]->name()->c_str()); } - -PassData TfliteImporter::run(PassData) { - import(); - return createIR(); -} - void TfliteImporter ::cleanup() { delete _graph; } diff --git a/contrib/nnc/include/passes/tflite_frontend/tflite_importer.h b/contrib/nnc/passes/tflite_frontend/tflite_importer.h similarity index 88% rename from contrib/nnc/include/passes/tflite_frontend/tflite_importer.h rename to contrib/nnc/passes/tflite_frontend/tflite_importer.h index 1d24f2f..0c97785 100644 --- a/contrib/nnc/include/passes/tflite_frontend/tflite_importer.h +++ b/contrib/nnc/passes/tflite_frontend/tflite_importer.h @@ -24,34 +24,17 @@ #include "pass/Pass.h" #include "pass/PassException.h" #include "pass/PassData.h" -#include "passes/common_frontend/nn_importer.h" +#include "passes/common_frontend/NNImporter.h" #include "passes/common_frontend/model_allocation.h" +#include "tflite_op_creator.h" #include "core/modelIR/Graph.h" #include "core/modelIR/TensorUtil.h" #include "core/modelIR/TensorVariant.h" -// Use forward declarations for non interface classes -namespace flatbuffers { -template class Vector; -template struct Offset; -} -namespace tflite { -struct Buffer; -struct Model; -struct ModelT; -struct Operator; -struct OperatorCode; -struct SubGraph; -struct Tensor; -} namespace nnc { -class TFLiteOpCreator; -} -namespace nnc { - -class TfliteImporter : public NNImporter, public Pass { +class TfliteImporter : public NNImporter { public: explicit TfliteImporter(std::string filename); @@ -69,7 +52,6 @@ public: void importUnpacked(); - PassData run(PassData) override; void cleanup() override; ~TfliteImporter(); diff --git a/contrib/nnc/tests/import/caffe.cpp b/contrib/nnc/tests/import/caffe.cpp index ff0d66b..99db79f 100644 --- a/contrib/nnc/tests/import/caffe.cpp +++ b/contrib/nnc/tests/import/caffe.cpp @@ -18,7 +18,7 @@ #include "support/CommandLine.h" #include "option/Options.h" -#include "passes/caffe_frontend/caffe_importer.h" +#include "caffe_importer.h" using namespace nnc; diff --git a/contrib/nnc/tests/import/tflite.cpp b/contrib/nnc/tests/import/tflite.cpp index bebc32e..0f20921 100644 --- a/contrib/nnc/tests/import/tflite.cpp +++ b/contrib/nnc/tests/import/tflite.cpp @@ -18,7 +18,7 @@ #include "support/CommandLine.h" #include "option/Options.h" -#include "passes/tflite_frontend/tflite_importer.h" +#include "tflite_importer.h" using namespace nnc; diff --git a/contrib/nnc/unittests/caffe_frontend/unsupported_caffe_model.cpp b/contrib/nnc/unittests/caffe_frontend/unsupported_caffe_model.cpp index 86b0ea7..c3ee986 100644 --- a/contrib/nnc/unittests/caffe_frontend/unsupported_caffe_model.cpp +++ b/contrib/nnc/unittests/caffe_frontend/unsupported_caffe_model.cpp @@ -1,4 +1,4 @@ -#include "passes/caffe_frontend/caffe_importer.h" +#include "caffe_importer.h" #include "gtest/gtest.h" #include "pass/PassException.h" #include diff --git a/contrib/nnc/utils/caffe2_dot_dumper/model_dump.cpp b/contrib/nnc/utils/caffe2_dot_dumper/model_dump.cpp index ba4e86a..d0f9ea8 100644 --- a/contrib/nnc/utils/caffe2_dot_dumper/model_dump.cpp +++ b/contrib/nnc/utils/caffe2_dot_dumper/model_dump.cpp @@ -18,7 +18,7 @@ #include "support/CommandLine.h" #include "option/Options.h" -#include "passes/caffe2_frontend/caffe2_importer.h" +#include "caffe2_importer.h" #include "core/modelIR/Graph.h" #include "core/modelIR/IrDotDumper.h" #include "pass/PassException.h" diff --git a/contrib/nnc/utils/caffe_dot_dumper/model_dump.cpp b/contrib/nnc/utils/caffe_dot_dumper/model_dump.cpp index 997d657..62d60e6 100644 --- a/contrib/nnc/utils/caffe_dot_dumper/model_dump.cpp +++ b/contrib/nnc/utils/caffe_dot_dumper/model_dump.cpp @@ -18,7 +18,7 @@ #include "support/CommandLine.h" #include "option/Options.h" -#include "passes/caffe_frontend/caffe_importer.h" +#include "caffe_importer.h" #include "core/modelIR/Graph.h" #include "core/modelIR/IrDotDumper.h" #include "pass/PassException.h" diff --git a/contrib/nnc/utils/tflite_dot_dumper/sanity_check.cpp b/contrib/nnc/utils/tflite_dot_dumper/sanity_check.cpp index 481da52..be9d07a 100644 --- a/contrib/nnc/utils/tflite_dot_dumper/sanity_check.cpp +++ b/contrib/nnc/utils/tflite_dot_dumper/sanity_check.cpp @@ -19,7 +19,7 @@ #include "support/CommandLine.h" #include "pass/PassException.h" #include "option/Options.h" -#include "passes/tflite_frontend/tflite_importer.h" +#include "tflite_importer.h" #include "core/modelIR/Graph.h" #include "core/modelIR/IrDotDumper.h" -- 2.7.4