[moco-tf] Applying plier-tf (#5891)
author윤현식/On-Device Lab(SR)/Principal Engineer/삼성전자 <hyunsik.yoon@samsung.com>
Fri, 26 Jul 2019 05:00:11 +0000 (14:00 +0900)
committer오형석/On-Device Lab(SR)/Staff Engineer/삼성전자 <hseok82.oh@samsung.com>
Fri, 26 Jul 2019 05:00:11 +0000 (14:00 +0900)
This commit applies `plier-tf` into `moco-tf`.

Signed-off-by: Hyun Sik Yoon <hyunsik.yoon@samsung.com>
35 files changed:
compiler/moco-tf/CMakeLists.txt
compiler/moco-tf/requires.cmake
compiler/moco-tf/src/Canonicalization/BiasAddCanonicalizer.cpp
compiler/moco-tf/src/Canonicalization/ConstCanonicalizer.cpp
compiler/moco-tf/src/Canonicalization/Conv2DCanonicalizer.cpp
compiler/moco-tf/src/Canonicalizer.cpp
compiler/moco-tf/src/IR/TFConv2D.h
compiler/moco-tf/src/Importer.test.cpp
compiler/moco-tf/src/Op/AvgPool.cpp
compiler/moco-tf/src/Op/AvgPool.test.cpp
compiler/moco-tf/src/Op/BiasAdd.cpp
compiler/moco-tf/src/Op/BiasAdd.test.cpp
compiler/moco-tf/src/Op/Concat.cpp
compiler/moco-tf/src/Op/Concat.test.cpp
compiler/moco-tf/src/Op/Const.cpp
compiler/moco-tf/src/Op/Const.test.cpp
compiler/moco-tf/src/Op/Conv2D.cpp
compiler/moco-tf/src/Op/Conv2D.test.cpp
compiler/moco-tf/src/Op/FusedBatchNorm.cpp
compiler/moco-tf/src/Op/FusedBatchNorm.test.cpp
compiler/moco-tf/src/Op/MaxPool.cpp
compiler/moco-tf/src/Op/MaxPool.test.cpp
compiler/moco-tf/src/Op/Placeholder.cpp
compiler/moco-tf/src/Op/Placeholder.test.cpp
compiler/moco-tf/src/Op/Relu.cpp
compiler/moco-tf/src/Op/Relu.test.cpp
compiler/moco-tf/src/Op/Relu6.test.cpp
compiler/moco-tf/src/TestHelper.cpp
compiler/moco-tf/src/TestHelper.h
compiler/moco-tf/src/Transforms/ConstantFoldingTransform.test.cpp
compiler/moco-tf/src/Transforms/FixPaddingTransform.cpp
compiler/moco-tf/src/Transforms/FixShapeTransform.cpp
compiler/moco-tf/src/Transforms/FuseBinaryIntoPreceding.cpp
compiler/moco-tf/src/Transforms/ResolveFusedBatchNorm.cpp
compiler/moco-tf/src/Transforms/ResolveFusedBatchNorm.test.cpp

index 9cca82a..9660a51 100644 (file)
@@ -27,6 +27,7 @@ target_link_libraries(moco_tf_frontend PRIVATE cwrap)
 target_link_libraries(moco_tf_frontend PRIVATE moco_log)
 target_link_libraries(moco_tf_frontend PRIVATE pepper_strcast)
 target_link_libraries(moco_tf_frontend PRIVATE locomotiv)
+target_link_libraries(moco_tf_frontend PRIVATE plier_tf)
 
 if(NOT ENABLE_TEST)
   return()
@@ -41,4 +42,5 @@ target_link_libraries(moco_tf_frontend_test locop)
 target_link_libraries(moco_tf_frontend_test moco_log)
 target_link_libraries(moco_tf_frontend_test moco_tf_frontend)
 target_link_libraries(moco_tf_frontend_test stdex)
+target_link_libraries(moco_tf_frontend_test plier_tf)
 add_test(moco_tf_frontend_test moco_tf_frontend_test)
index 1f31c62..961b5b2 100644 (file)
@@ -5,3 +5,4 @@ require("stdex")
 require("moco-log")
 require("pepper-strcast")
 require("locomotiv")
+require("plier-tf")
index 83bc461..936db01 100644 (file)
@@ -16,7 +16,6 @@
 
 #include "BiasAddCanonicalizer.h"
 
-#include "Convert.h"
 #include "Knob.h"
 
 #include "Dialect/TFDialect.h"
 
 #include <moco/tf/Names.h>
 #include <moco/Log.h>
+#include <plier/tf/Convert.h>
 
 namespace
 {
+using plier::tf::DataLayout;
 
 bool canonicalize_biasadd(loco::Graph *graph, moco::tf::TFBiasAdd *node)
 {
@@ -59,19 +60,19 @@ bool canonicalize_biasadd(loco::Graph *graph, moco::tf::TFBiasAdd *node)
   INFO(l) << "TFNodeCanonicalize TFBiasAdd begin";
 
   // tensorflow data_format: one of NHWC or NCHW.
-  auto data_layout = moco::tf::as_DataLayout(node->data_layout());
+  auto data_layout = plier::tf::as_data_layout(node->data_layout());
 
   // creating loco nodes
   auto bias_enc = graph->nodes()->create<loco::BiasEncode>();
 
   auto bias_add = graph->nodes()->create<loco::TensorBiasAdd>();
   {
-    if (data_layout == moco::tf::DataLayout::NHWC)
+    if (data_layout == DataLayout::NHWC)
     {
       INFO(l) << "TFNodeCanonicalize TFBiasAdd axis 3";
       bias_add->axis(3);
     }
-    else if (data_layout == moco::tf::DataLayout::NCHW)
+    else if (data_layout == DataLayout::NCHW)
     {
       INFO(l) << "TFNodeCanonicalize TFBiasAdd axis 1";
       bias_add->axis(1); // Channel
index f73588b..7bfc7c4 100644 (file)
@@ -16,7 +16,6 @@
 
 #include "ConstCanonicalizer.h"
 
-#include "Convert.h"
 #include "Knob.h"
 
 #include "Dialect/TFDialect.h"
index 13f9c56..f1ee526 100644 (file)
 #include "Dialect/TFNodeImpl.h"
 
 #include <moco/Log.h>
+#include <plier/tf/Convert.h>
 
 #include <stdex/Memory.h>
 
 namespace
 {
+using plier::tf::DataLayout;
 
-void set_feature_enc(loco::FeatureEncode *feature_enc, moco::tf::DataLayout data_layout)
+void set_feature_enc(loco::FeatureEncode *feature_enc, DataLayout data_layout)
 {
   auto enc = stdex::make_unique<loco::PermutingEncoder<loco::Domain::Feature>>();
 
-  if (data_layout == moco::tf::DataLayout::NHWC)
+  if (data_layout == DataLayout::NHWC)
   {
     enc->perm()->axis(loco::FeatureAxis::Count) = 0;
     enc->perm()->axis(loco::FeatureAxis::Height) = 1;
     enc->perm()->axis(loco::FeatureAxis::Width) = 2;
     enc->perm()->axis(loco::FeatureAxis::Depth) = 3;
   }
-  else if (data_layout == moco::tf::DataLayout::NCHW)
+  else if (data_layout == DataLayout::NCHW)
   {
     enc->perm()->axis(loco::FeatureAxis::Count) = 0;
     enc->perm()->axis(loco::FeatureAxis::Depth) = 1;
@@ -55,7 +57,7 @@ void set_feature_enc(loco::FeatureEncode *feature_enc, moco::tf::DataLayout data
   feature_enc->encoder(std::move(enc));
 }
 
-void set_filter_enc(loco::FilterEncode *filter_enc, moco::tf::DataLayout data_layout)
+void set_filter_enc(loco::FilterEncode *filter_enc, DataLayout data_layout)
 {
   auto enc = stdex::make_unique<loco::PermutingEncoder<loco::Domain::Filter>>();
 
@@ -69,18 +71,18 @@ void set_filter_enc(loco::FilterEncode *filter_enc, moco::tf::DataLayout data_la
   filter_enc->encoder(std::move(enc));
 }
 
-void set_feature_dec(loco::FeatureDecode *feature_dec, moco::tf::DataLayout data_layout)
+void set_feature_dec(loco::FeatureDecode *feature_dec, DataLayout data_layout)
 {
   auto dec = stdex::make_unique<loco::PermutingDecoder<loco::Domain::Feature>>();
 
-  if (data_layout == moco::tf::DataLayout::NHWC)
+  if (data_layout == DataLayout::NHWC)
   {
     dec->perm()->axis(loco::FeatureAxis::Count) = 0;
     dec->perm()->axis(loco::FeatureAxis::Height) = 1;
     dec->perm()->axis(loco::FeatureAxis::Width) = 2;
     dec->perm()->axis(loco::FeatureAxis::Depth) = 3;
   }
-  else if (data_layout == moco::tf::DataLayout::NCHW)
+  else if (data_layout == DataLayout::NCHW)
   {
     dec->perm()->axis(loco::FeatureAxis::Count) = 0;
     dec->perm()->axis(loco::FeatureAxis::Depth) = 1;
@@ -118,7 +120,7 @@ bool canonicalize_conv2d(loco::Graph *graph, moco::tf::TFConv2D *node)
    *                 TFConv2D is disconnected from other nodes
    */
 
-  auto data_layout = moco::tf::as_DataLayout(node->data_layout());
+  auto data_layout = plier::tf::as_data_layout(node->data_layout());
 
   auto feature_enc = graph->nodes()->create<loco::FeatureEncode>();
   auto filter_enc = graph->nodes()->create<loco::FilterEncode>();
index a21013a..a1e7eae 100644 (file)
@@ -30,6 +30,8 @@
 
 #include <stdex/Memory.h>
 
+#include <cassert>
+
 namespace
 {
 
index c29c2b4..a433ff6 100644 (file)
 
 #include "Dialect/TFNodeDecl.h"
 
-#include "Convert.h"
-
 #include <loco/IR/Stride.h>
 #include <loco/IR/Pad.h>
 
 #include <string>
+#include <vector>
 
 namespace moco
 {
index 0c755f3..771dbb5 100644 (file)
@@ -19,6 +19,7 @@
 #include "TestHelper.h"
 
 #include <loco.h>
+#include <plier/tf/TestHelper.h>
 
 #include <gtest/gtest.h>
 
@@ -85,7 +86,7 @@ TEST(TensorFlowImport, load_model_withio)
   signature.add_output(moco::tf::TensorName("output/identity", 0));
 
   tensorflow::GraphDef graph_def;
-  EXPECT_TRUE(parse_graphdef(basic_pbtxtdata, graph_def));
+  EXPECT_TRUE(plier::tf::parse_graphdef(basic_pbtxtdata, graph_def));
   std::unique_ptr<loco::Graph> graph = importer.import(signature, graph_def);
 
   loco::Graph::InputContext *inputs = graph->inputs();
index 6d63ee0..1fadc5d 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <loco/IR/PermutingCodec.h>
 #include <stdex/Memory.h>
+#include <plier/tf/Convert.h>
 
 #include <cassert>
 #include <stdexcept>
@@ -62,7 +63,7 @@ bool AvgPoolGraphBuilder::validate(const tensorflow::NodeDef &node) const
 {
   // note: even though "data_format" is not entered when a model is written,
   //       TF seems to generate "data_format" field into a pb file
-  if (!has_attrs(node, {"T", "data_format", "ksize", "padding", "strides"}))
+  if (!plier::tf::has_attrs(node, {"T", "data_format", "ksize", "padding", "strides"}))
     return false;
 
   if (node.input_size() != 1)
@@ -73,6 +74,8 @@ bool AvgPoolGraphBuilder::validate(const tensorflow::NodeDef &node) const
 
 void AvgPoolGraphBuilder::build(const tensorflow::NodeDef &node, GraphBuilderContext *context) const
 {
+  using plier::tf::DataLayout;
+
   assert(context != nullptr);
 
   loco::Graph *graph = context->graph();
@@ -91,7 +94,7 @@ void AvgPoolGraphBuilder::build(const tensorflow::NodeDef &node, GraphBuilderCon
   avgPool2d_node->convention(loco::AvgPool2D::Convention::Valid);
 
   // tensorflow data_format, e.g., NHWC, NCHW, etc.
-  auto data_layout = get_data_layout(node, "data_format");
+  auto data_layout = plier::tf::get_data_layout(node, "data_format");
   if (!(data_layout == DataLayout::NHWC || data_layout == DataLayout::NCHW))
   {
     throw std::runtime_error("Not supported data layout at AvgPoolGraphBuilder");
@@ -128,7 +131,7 @@ void AvgPoolGraphBuilder::build(const tensorflow::NodeDef &node, GraphBuilderCon
     //    to loco attr:     not defined, TBD,         window,  annot,   stride
 
     // tf ksize -> loco window
-    auto tf_ksize = get_list_attr(node, "ksize");
+    auto tf_ksize = plier::tf::get_list_attr(node, "ksize");
     auto window = avgPool2d_node->window();
 
     if (data_layout == DataLayout::NHWC)
@@ -145,7 +148,7 @@ void AvgPoolGraphBuilder::build(const tensorflow::NodeDef &node, GraphBuilderCon
       assert(false);
 
     // tf strides  -> loco stride
-    auto tf_strides = get_list_attr(node, "strides");
+    auto tf_strides = plier::tf::get_list_attr(node, "strides");
     auto stride = avgPool2d_node->stride();
 
     if (data_layout == DataLayout::NHWC)
@@ -162,7 +165,7 @@ void AvgPoolGraphBuilder::build(const tensorflow::NodeDef &node, GraphBuilderCon
       assert(false);
 
     // tf paddings -> PaddingData annotation
-    auto tf_padding = moco::str_toupper(get_string_attr(node, "padding"));
+    auto tf_padding = moco::str_toupper(plier::tf::get_string_attr(node, "padding"));
     auto padding_data = stdex::make_unique<PaddingData>(tf_padding);
     avgPool2d_node->annot(std::move(padding_data));
   }
index 6308d1f..cfc21df 100644 (file)
@@ -21,6 +21,7 @@
 #include <loco.h>
 #include <loco/IR/TensorShape.h>
 #include <loco/IR/FeatureShape.h>
+#include <plier/tf/TestHelper.h>
 
 #include <gtest/gtest.h>
 
@@ -123,7 +124,7 @@ TEST(TensorFlowImport, AvgPool_01)
   signature.add_output(moco::tf::TensorName("avgpool", 0));
 
   tensorflow::GraphDef graph_def;
-  EXPECT_TRUE(parse_graphdef(avgpool_01_pbtxtdata, graph_def));
+  EXPECT_TRUE(plier::tf::parse_graphdef(avgpool_01_pbtxtdata, graph_def));
   std::unique_ptr<loco::Graph> graph = importer.import(signature, graph_def);
 
   // what to test:
index 3b1a4d8..6862a52 100644 (file)
@@ -16,7 +16,6 @@
 
 #include "BiasAdd.h"
 
-#include "Convert.h"
 #include "GraphBuilder.h"
 #include "GraphBuilderContext.h"
 #include "Knob.h"
@@ -28,6 +27,7 @@
 #include <loco.h>
 #include <loco/IR/PermutingCodec.h>
 #include <stdex/Memory.h>
+#include <plier/tf/Convert.h>
 
 #include <tensorflow/core/framework/graph.pb.h>
 
@@ -131,7 +131,7 @@ bool BiasAddGraphBuilderBase::validate(const tensorflow::NodeDef &node) const
 
   // note: even though "data_format" is not entered when a model is written,
   //       TF seems to generate "data_format" field into a pb file
-  if (!has_attrs(node, {"T", "data_format"}))
+  if (!plier::tf::has_attrs(node, {"T", "data_format"}))
     return false;
 
   // TODO add type check
@@ -169,13 +169,15 @@ void BiasAddGraphBuilderImpl<ImportTarget::Canonical>::build(const tensorflow::N
   UpdateQueue *updates = context->updates();
 
   // tensorflow data_format: one of NHWC or NCHW.
-  auto data_layout = get_data_layout(node, "data_format");
+  auto data_layout = plier::tf::get_data_layout(node, "data_format");
 
   // creating loco nodes
   auto bias_enc = graph->nodes()->create<loco::BiasEncode>();
 
   auto bias_add = graph->nodes()->create<loco::BiasAdd<loco::Domain::Tensor>>();
   {
+    using plier::tf::DataLayout;
+
     if (data_layout == DataLayout::NHWC)
     {
       bias_add->axis(3);
@@ -213,7 +215,7 @@ void BiasAddGraphBuilderImpl<ImportTarget::TensorFlow>::build(const tensorflow::
   UpdateQueue *updates = context->updates();
 
   // tensorflow data_format: one of NHWC or NCHW.
-  auto data_layout = get_string_attr(node, "data_format");
+  auto data_layout = plier::tf::get_string_attr(node, "data_format");
   auto tf_bias_add = graph->nodes()->create<moco::tf::TFBiasAdd>();
 
   tf_bias_add->data_layout(data_layout);
index aa37cb7..823b66f 100644 (file)
@@ -21,6 +21,7 @@
 #include "IR/TFBiasAdd.h"
 
 #include <loco.h>
+#include <plier/tf/TestHelper.h>
 
 #include <gtest/gtest.h>
 
@@ -102,7 +103,7 @@ TEST(TensorFlowImport, bias_add_01)
   signature.add_output(moco::tf::TensorName("out", 0));
 
   tensorflow::GraphDef graph_def;
-  EXPECT_TRUE(parse_graphdef(bias_add_01_pbtxtdata, graph_def));
+  EXPECT_TRUE(plier::tf::parse_graphdef(bias_add_01_pbtxtdata, graph_def));
 
   // Test "BiasAddGraphBuilderImpl<ImportTarget::TensorFlow>"
   {
@@ -238,7 +239,7 @@ TEST(TensorFlowImport, bias_add_NCHW_axis)
   signature.add_output(moco::tf::TensorName("out", 0));
 
   tensorflow::GraphDef graph_def;
-  EXPECT_TRUE(parse_graphdef(bias_add_NCHW_pbtxtdata, graph_def));
+  EXPECT_TRUE(plier::tf::parse_graphdef(bias_add_NCHW_pbtxtdata, graph_def));
   std::unique_ptr<loco::Graph> graph = importer.import(signature, graph_def);
 
   // Test "BiasAddGraphBuilderImpl<ImportTarget::TensorFlow>"
index e787f71..d608c78 100644 (file)
@@ -14,7 +14,6 @@
  * limitations under the License.
  */
 
-#include "Convert.h"
 #include "GraphBuilder.h"
 #include "GraphBuilderContext.h"
 
@@ -24,6 +23,7 @@
 
 #include <loco.h>
 #include <stdex/Memory.h>
+#include <plier/tf/Convert.h>
 
 #include <tensorflow/core/framework/graph.pb.h>
 
@@ -65,8 +65,8 @@ bool ConcatV2GraphBuilder::validate(const tensorflow::NodeDef &node) const
   // Concat node SHOULD have 3 or more inputs, that is 2 + axis
   const int num_inputs = node.input_size() - 1;
   assert(num_inputs >= 2);
-  assert(num_inputs == get_int_attr(node, "N"));
-  return (num_inputs >= 2) && (num_inputs == get_int_attr(node, "N"));
+  assert(num_inputs == plier::tf::get_int_attr(node, "N"));
+  return (num_inputs >= 2) && (num_inputs == plier::tf::get_int_attr(node, "N"));
 }
 
 void ConcatV2GraphBuilder::build(const tensorflow::NodeDef &node,
@@ -134,8 +134,8 @@ void ConcatV2GraphBuilder::build(const tensorflow::NodeDef &node,
   std::string axis_name = node.input(num_inputs);
   const tensorflow::NodeDef *tfnode = nodedef->node(axis_name);
   // assume data type is int32
-  assert(get_datatype_attr(*tfnode, "dtype") == tensorflow::DataType::DT_INT32);
-  const auto &tensor = get_tensor_attr(*tfnode, "value");
+  assert(plier::tf::get_datatype_attr(*tfnode, "dtype") == tensorflow::DataType::DT_INT32);
+  const auto &tensor = plier::tf::get_tensor_attr(*tfnode, "value");
   assert(tensor.int_val_size() == 1);
   auto axis_value_read = tensor.int_val(0);
 
index e8ecaa9..5489994 100644 (file)
@@ -19,6 +19,7 @@
 #include "Importer.h"
 
 #include <loco.h>
+#include <plier/tf/TestHelper.h>
 
 #include <gtest/gtest.h>
 
@@ -153,7 +154,7 @@ TEST(TensorFlowImport, concat_01)
   signature.add_output(output);
 
   tensorflow::GraphDef graph_def;
-  EXPECT_TRUE(parse_graphdef(concat_01_pbtxtdata, graph_def));
+  EXPECT_TRUE(plier::tf::parse_graphdef(concat_01_pbtxtdata, graph_def));
   std::unique_ptr<loco::Graph> graph = importer.import(signature, graph_def);
 
   // what to test:
@@ -333,7 +334,7 @@ TEST(TensorFlowImport, concat_02)
   signature.add_output(output);
 
   tensorflow::GraphDef graph_def;
-  EXPECT_TRUE(parse_graphdef(concat_02_pbtxtdata, graph_def));
+  EXPECT_TRUE(plier::tf::parse_graphdef(concat_02_pbtxtdata, graph_def));
   std::unique_ptr<loco::Graph> graph = importer.import(signature, graph_def);
 
   // what to test: Concat has 3 inputs --> Importer creates 2 TensorConcat
@@ -473,7 +474,7 @@ TEST(TensorFlowImport, concat_03)
   signature.add_output(moco::tf::TensorName("Concat", 0));
 
   tensorflow::GraphDef graph_def;
-  EXPECT_TRUE(parse_graphdef(concat_03_pbtxtdata, graph_def));
+  EXPECT_TRUE(plier::tf::parse_graphdef(concat_03_pbtxtdata, graph_def));
   std::unique_ptr<loco::Graph> graph = importer.import(signature, graph_def);
 
   // what to test: minus axis value validation
index 1cc677f..f696451 100644 (file)
@@ -16,7 +16,6 @@
 
 #include "Const.h"
 
-#include "Convert.h"
 #include "GraphBuilder.h"
 #include "GraphBuilderContext.h"
 #include "Knob.h"
@@ -25,6 +24,7 @@
 
 #include <moco/tf/Names.h>
 #include <loco.h>
+#include <plier/tf/Convert.h>
 
 #include <tensorflow/core/framework/graph.pb.h>
 
@@ -194,7 +194,7 @@ public:
 
 bool ConstGraphBuilderBase::validate(const tensorflow::NodeDef &node) const
 {
-  return has_attrs(node, {"dtype", "value"});
+  return plier::tf::has_attrs(node, {"dtype", "value"});
 }
 
 void ConstGraphBuilder::build(const tensorflow::NodeDef &node, GraphBuilderContext *context) const
@@ -223,11 +223,11 @@ void ConstGraphBuilderImpl<ImportTarget::Canonical>::build(const tensorflow::Nod
   auto const_node = graph->nodes()->create<loco::ConstGen>();
 
   // set dtype
-  auto dtype = as_loco_datatype(get_datatype_attr(node, "dtype"));
+  auto dtype = plier::tf::as_loco_datatype(plier::tf::get_datatype_attr(node, "dtype"));
   const_node->dtype(dtype);
 
   // import shape and value
-  const auto &input_tensor = get_tensor_attr(node, "value");
+  const auto &input_tensor = plier::tf::get_tensor_attr(node, "value");
   const auto &input_shape = input_tensor.tensor_shape();
   const auto &input_dims = input_shape.dim();
   assert(input_shape.dim_size() <= 6);
@@ -292,11 +292,11 @@ void ConstGraphBuilderImpl<ImportTarget::TensorFlow>::build(const tensorflow::No
   auto const_node = graph->nodes()->create<moco::tf::TFConst>();
 
   // set dtype
-  auto dtype = as_loco_datatype(get_datatype_attr(node, "dtype"));
+  auto dtype = plier::tf::as_loco_datatype(plier::tf::get_datatype_attr(node, "dtype"));
   const_node->dtype(dtype);
 
   // import shape and value
-  const auto &input_tensor = get_tensor_attr(node, "value");
+  const auto &input_tensor = plier::tf::get_tensor_attr(node, "value");
   const auto &input_shape = input_tensor.tensor_shape();
   const auto &input_dims = input_shape.dim();
   assert(input_shape.dim_size() <= 6);
index 15cc402..20c6c0e 100644 (file)
@@ -22,6 +22,7 @@
 #include "IR/TFConst.h"
 
 #include <loco.h>
+#include <plier/tf/TestHelper.h>
 
 #include <gtest/gtest.h>
 
@@ -94,7 +95,7 @@ TEST(TensorFlowImport, const_float_01)
   signature.add_output(moco::tf::TensorName("const/float", 0));
 
   tensorflow::GraphDef graph_def;
-  EXPECT_TRUE(parse_graphdef(const_float_01_pbtxtdata, graph_def));
+  EXPECT_TRUE(plier::tf::parse_graphdef(const_float_01_pbtxtdata, graph_def));
 
   // Test "tf.GraphDef -> loco.TF" importer
   {
@@ -174,7 +175,7 @@ TEST(TensorFlowImport, const_float_02)
   signature.add_output(moco::tf::TensorName("const/float", 0));
 
   tensorflow::GraphDef graph_def;
-  EXPECT_TRUE(parse_graphdef(const_float_02_pbtxtdata, graph_def));
+  EXPECT_TRUE(plier::tf::parse_graphdef(const_float_02_pbtxtdata, graph_def));
 
   // Test "tf.GraphDef -> loco.TF" importer
   {
@@ -255,7 +256,7 @@ TEST(TensorFlowImport, const_float_03)
   signature.add_output(moco::tf::TensorName("const/float", 0));
 
   tensorflow::GraphDef graph_def;
-  EXPECT_TRUE(parse_graphdef(const_float_03_pbtxtdata, graph_def));
+  EXPECT_TRUE(plier::tf::parse_graphdef(const_float_03_pbtxtdata, graph_def));
 
   // Test "tf.GraphDef -> loco.TF" importer
   {
@@ -336,7 +337,7 @@ TEST(TensorFlowImport, const_float_04)
   signature.add_output(moco::tf::TensorName("const/float", 0));
 
   tensorflow::GraphDef graph_def;
-  EXPECT_TRUE(parse_graphdef(const_float_04_pbtxtdata, graph_def));
+  EXPECT_TRUE(plier::tf::parse_graphdef(const_float_04_pbtxtdata, graph_def));
 
   // Test "tf.GraphDef -> loco.TF" importer
   {
@@ -416,7 +417,7 @@ TEST(TensorFlowImport, const_int32_04)
   signature.add_output(moco::tf::TensorName("const/int", 0));
 
   tensorflow::GraphDef graph_def;
-  EXPECT_TRUE(parse_graphdef(const_int32_04_pbtxtdata, graph_def));
+  EXPECT_TRUE(plier::tf::parse_graphdef(const_int32_04_pbtxtdata, graph_def));
 
 // TODO Re-enable this
 #if 0
index c6d81e4..dad121c 100644 (file)
@@ -31,6 +31,7 @@
 #include <loco.h>
 #include <loco/IR/PermutingCodec.h>
 #include <stdex/Memory.h>
+#include <plier/tf/Convert.h>
 
 #include <tensorflow/core/framework/graph.pb.h>
 
@@ -130,7 +131,7 @@ bool Conv2DGraphBuilderBase::validate(const tensorflow::NodeDef &node) const
 
   // note: even though "data_format" is not entered when a model is written,
   //       TF seems to generate "data_format" field into a pb file
-  return has_attrs(node, {"T", "data_format", "dilations", "padding", "strides"});
+  return plier::tf::has_attrs(node, {"T", "data_format", "dilations", "padding", "strides"});
 }
 
 void Conv2DGraphBuilder::build(const tensorflow::NodeDef &node, GraphBuilderContext *context) const
@@ -152,6 +153,8 @@ void Conv2DGraphBuilder::build(const tensorflow::NodeDef &node, GraphBuilderCont
 void Conv2DGraphBuilderImpl<ImportTarget::Canonical>::build(const tensorflow::NodeDef &node,
                                                             GraphBuilderContext *context) const
 {
+  using plier::tf::DataLayout;
+
   loco::Graph *graph = context->graph();
   SymbolTable *tensor_names = context->tensor_names();
   UpdateQueue *updates = context->updates();
@@ -160,7 +163,7 @@ void Conv2DGraphBuilderImpl<ImportTarget::Canonical>::build(const tensorflow::No
   std::string conv2d_name = node.name();
 
   // tensorflow data_format, e.g., NHWC, NCHW, etc.
-  auto data_layout = get_data_layout(node, "data_format");
+  auto data_layout = plier::tf::get_data_layout(node, "data_format");
 
   auto feature_enc = graph->nodes()->create<loco::FeatureEncode>();
   {
@@ -208,7 +211,7 @@ void Conv2DGraphBuilderImpl<ImportTarget::Canonical>::build(const tensorflow::No
     //    to loco attr:     not defined, TBD,         TBD,       TBD,     stride
 
     // tf strides  -> loco stride
-    auto tf_strides = get_list_attr(node, "strides");
+    auto tf_strides = plier::tf::get_list_attr(node, "strides");
     auto stride = conv2d->stride();
 
     if (data_layout == DataLayout::NHWC)
@@ -223,7 +226,7 @@ void Conv2DGraphBuilderImpl<ImportTarget::Canonical>::build(const tensorflow::No
     }
 
     // tf paddings -> PaddingData annotation
-    auto tf_padding = moco::str_toupper(get_string_attr(node, "padding"));
+    auto tf_padding = moco::str_toupper(plier::tf::get_string_attr(node, "padding"));
     auto padding_data = stdex::make_unique<PaddingData>(tf_padding);
     conv2d->annot(std::move(padding_data));
   }
@@ -282,18 +285,18 @@ void Conv2DGraphBuilderImpl<ImportTarget::TensorFlow>::build(const tensorflow::N
   auto conv2d = graph->nodes()->create<TFConv2D>();
 
   // read attributes
-  auto data_layout = get_string_attr(node, "data_format");
+  auto data_layout = plier::tf::get_string_attr(node, "data_format");
   if (!(data_layout == "NHWC" || data_layout == "NCHW"))
   {
     throw std::runtime_error("Not yet supported");
   }
   conv2d->data_layout(data_layout);
 
-  auto tf_strides = get_list_attr(node, "strides");
-  auto strides = as_int64_list(tf_strides);
+  auto tf_strides = plier::tf::get_list_attr(node, "strides");
+  auto strides = plier::tf::as_int64_list(tf_strides);
   conv2d->strides(strides);
 
-  auto padding = moco::str_toupper(get_string_attr(node, "padding"));
+  auto padding = moco::str_toupper(plier::tf::get_string_attr(node, "padding"));
   assert(padding == "VALID" || padding == "SAME");
   conv2d->padding(padding);
 
index ce22b57..0d7c1ef 100644 (file)
@@ -24,6 +24,7 @@
 #include <loco.h>
 #include <loco/IR/TensorShape.h>
 #include <loco/IR/FeatureShape.h>
+#include <plier/tf/TestHelper.h>
 
 #include <gtest/gtest.h>
 
@@ -234,7 +235,7 @@ TEST(TensorFlowImport, Conv2D_01)
   signature.add_output(moco::tf::TensorName("conv2d", 0));
 
   tensorflow::GraphDef graph_def;
-  EXPECT_TRUE(parse_graphdef(conv2d_01_pbtxtdata, graph_def));
+  EXPECT_TRUE(plier::tf::parse_graphdef(conv2d_01_pbtxtdata, graph_def));
 
   // Test loco.TF Importer
   {
@@ -481,7 +482,7 @@ TEST(TensorFlowImport, Conv2D_inception_indexed_tensor_name)
   signature.add_output(moco::tf::TensorName("InceptionV3/InceptionV3/Conv2d_1a_3x3/Conv2D", 0));
 
   tensorflow::GraphDef graph_def;
-  EXPECT_TRUE(parse_graphdef(conv2d_inception_pbtxtdata, graph_def));
+  EXPECT_TRUE(plier::tf::parse_graphdef(conv2d_inception_pbtxtdata, graph_def));
   std::unique_ptr<loco::Graph> graph = importer.import(signature, graph_def);
 
   // Test loco.TF Importer
index ece31ed..94c982c 100644 (file)
 
 #include "IR/TFFusedBatchNorm.h"
 
-#include "Convert.h"
 #include "GraphBuilder.h"
 #include "GraphBuilderContext.h"
 
 #include <loco.h>
 #include <stdex/Memory.h>
+#include <plier/tf/Convert.h>
 
 #include <tensorflow/core/framework/graph.pb.h>
 
@@ -62,7 +62,7 @@ bool FusedBatchNormGraphBuilder::validate(const tensorflow::NodeDef &node) const
 {
   assert(node.input_size() == 5);
 
-  return has_attrs(node, {"epsilon"});
+  return plier::tf::has_attrs(node, {"epsilon"});
 }
 
 void FusedBatchNormGraphBuilder::build(const tensorflow::NodeDef &node,
@@ -74,7 +74,7 @@ void FusedBatchNormGraphBuilder::build(const tensorflow::NodeDef &node,
   SymbolTable *tensor_names = context->tensor_names();
   UpdateQueue *updates = context->updates();
 
-  float epsilon = get_float_attr(node, "epsilon");
+  float epsilon = plier::tf::get_float_attr(node, "epsilon");
 
   // creating TF dialect FusedBatchNorm node
   auto tf_fbn = graph->nodes()->create<TFFusedBatchNorm>();
index bcc9791..d9c45bc 100644 (file)
@@ -21,6 +21,7 @@
 #include "IR/TFFusedBatchNorm.h"
 
 #include <loco.h>
+#include <plier/tf/TestHelper.h>
 
 #include <gtest/gtest.h>
 
@@ -198,7 +199,7 @@ TEST(TensorFlowImport, tf_fbn_basic)
   signature.add_output(moco::tf::TensorName("FBN_01", 0));
 
   tensorflow::GraphDef graph_def;
-  EXPECT_TRUE(parse_graphdef(fbn_basic_pbtxt, graph_def));
+  EXPECT_TRUE(plier::tf::parse_graphdef(fbn_basic_pbtxt, graph_def));
   std::unique_ptr<loco::Graph> graph = importer.import(signature, graph_def);
 
   // what to test:
index f147b59..0407492 100644 (file)
@@ -14,7 +14,6 @@
  * limitations under the License.
  */
 
-#include "Convert.h"
 #include "GraphBuilder.h"
 #include "GraphBuilderContext.h"
 
@@ -24,6 +23,7 @@
 #include <loco.h>
 #include <loco/IR/PermutingCodec.h>
 #include <stdex/Memory.h>
+#include <plier/tf/Convert.h>
 
 #include <tensorflow/core/framework/graph.pb.h>
 
@@ -64,11 +64,13 @@ bool MaxPoolGraphBuilder::validate(const tensorflow::NodeDef &node) const
 {
   // note: even though "data_format" is not entered when a model is written,
   //       TF seems to generate "data_format" field into a pb file
-  return has_attrs(node, {"T", "data_format", "ksize", "padding", "strides"});
+  return plier::tf::has_attrs(node, {"T", "data_format", "ksize", "padding", "strides"});
 }
 
 void MaxPoolGraphBuilder::build(const tensorflow::NodeDef &node, GraphBuilderContext *context) const
 {
+  using plier::tf::DataLayout;
+
   assert(context != nullptr);
   assert(node.input_size() == 1);
 
@@ -85,7 +87,7 @@ void MaxPoolGraphBuilder::build(const tensorflow::NodeDef &node, GraphBuilderCon
   ::std::string maxpool2d_name = node.name();
 
   // tensorflow data_format, e.g., NHWC, NCHW, etc.
-  auto data_layout = get_data_layout(node, "data_format");
+  auto data_layout = plier::tf::get_data_layout(node, "data_format");
 
   // FeatureEncode
   {
@@ -111,7 +113,7 @@ void MaxPoolGraphBuilder::build(const tensorflow::NodeDef &node, GraphBuilderCon
     //    to loco attr:     not defined, TBD,         window,  TBD,     stride
 
     // tf ksize -> loco window
-    auto tf_ksize = get_list_attr(node, "ksize");
+    auto tf_ksize = plier::tf::get_list_attr(node, "ksize");
     auto window = maxpool2d_node->window();
 
     if (data_layout == DataLayout::NHWC)
@@ -126,7 +128,7 @@ void MaxPoolGraphBuilder::build(const tensorflow::NodeDef &node, GraphBuilderCon
     }
 
     // tf strides  -> loco stride
-    auto tf_strides = get_list_attr(node, "strides");
+    auto tf_strides = plier::tf::get_list_attr(node, "strides");
     auto stride = maxpool2d_node->stride();
 
     if (data_layout == DataLayout::NHWC)
@@ -141,7 +143,7 @@ void MaxPoolGraphBuilder::build(const tensorflow::NodeDef &node, GraphBuilderCon
     }
 
     // tf paddings -> PaddingData annotation
-    auto tf_padding = get_string_attr(node, "padding");
+    auto tf_padding = plier::tf::get_string_attr(node, "padding");
     auto padding_data = stdex::make_unique<PaddingData>(tf_padding);
     maxpool2d_node->annot(std::move(padding_data));
   }
index 54656b5..7f42496 100644 (file)
@@ -21,6 +21,7 @@
 #include <loco.h>
 #include <loco/IR/TensorShape.h>
 #include <loco/IR/FeatureShape.h>
+#include <plier/tf/TestHelper.h>
 
 #include <gtest/gtest.h>
 
@@ -123,7 +124,7 @@ TEST(TensorFlowImport, MaxPool_01)
   signature.add_output(moco::tf::TensorName("maxpool", 0));
 
   tensorflow::GraphDef graph_def;
-  EXPECT_TRUE(parse_graphdef(maxpool_01_pbtxtdata, graph_def));
+  EXPECT_TRUE(plier::tf::parse_graphdef(maxpool_01_pbtxtdata, graph_def));
   std::unique_ptr<loco::Graph> graph = importer.import(signature, graph_def);
 
   // what to test:
@@ -169,7 +170,7 @@ TEST(TensorFlowImport, MaxPool_02)
   signature.add_output(moco::tf::TensorName("maxpool", 0));
 
   tensorflow::GraphDef graph_def;
-  EXPECT_TRUE(parse_graphdef(maxpool_01_pbtxtdata, graph_def));
+  EXPECT_TRUE(plier::tf::parse_graphdef(maxpool_01_pbtxtdata, graph_def));
   std::unique_ptr<loco::Graph> graph = importer.import(signature, graph_def);
 
   // what to test: Encoder and Decoder dimension order
index e8f3c19..d764fe3 100644 (file)
  * limitations under the License.
  */
 
-#include "Convert.h"
 #include "GraphBuilder.h"
 #include "GraphBuilderContext.h"
 #include "CompilerArgs.h"
 
 #include <moco/tf/Names.h>
+#include <plier/tf/Convert.h>
 
 #include <tensorflow/core/framework/graph.pb.h>
 
@@ -43,7 +43,7 @@ public:
 
 bool PlaceholderGraphBuilder::validate(const tensorflow::NodeDef &node) const
 {
-  return has_attrs(node, {"dtype", "shape"});
+  return plier::tf::has_attrs(node, {"dtype", "shape"});
 }
 
 void PlaceholderGraphBuilder::build(const tensorflow::NodeDef &node,
@@ -54,8 +54,8 @@ void PlaceholderGraphBuilder::build(const tensorflow::NodeDef &node,
   loco::Graph *graph = context->graph();
   SymbolTable *tensor_names = context->tensor_names();
 
-  loco::DataType dtype = as_loco_datatype(get_datatype_attr(node, "dtype"));
-  const auto &shape = get_shape_attr(node, "shape");
+  loco::DataType dtype = plier::tf::as_loco_datatype(plier::tf::get_datatype_attr(node, "dtype"));
+  const auto &shape = plier::tf::get_shape_attr(node, "shape");
   // TODO handle for unknown rank
   assert(!shape.unknown_rank());
   int64_t num_dims = shape.dim_size();
index d9fd3e8..003e677 100644 (file)
@@ -23,6 +23,7 @@
 #include <loco/IR/TensorShape.h>
 #include <loco/IR/FeatureShape.h>
 #include <nncc/core/ADT/tensor/Shape.h>
+#include <plier/tf/TestHelper.h>
 
 #include <gtest/gtest.h>
 
@@ -73,7 +74,7 @@ TEST(TensorFlowImport, placeholder_knwon_batch)
   signature.add_output(moco::tf::TensorName("output", 0));
 
   tensorflow::GraphDef graph_def;
-  EXPECT_TRUE(parse_graphdef(known_batch_pbtxt, graph_def));
+  EXPECT_TRUE(plier::tf::parse_graphdef(known_batch_pbtxt, graph_def));
   std::unique_ptr<loco::Graph> graph = importer.import(signature, graph_def);
 
   // get loco::Pull
@@ -99,7 +100,7 @@ TEST(TensorFlowImport, placeholder_wrong_user_input_0)
   signature.add_output(moco::tf::TensorName("output", 0));
 
   tensorflow::GraphDef graph_def;
-  EXPECT_TRUE(parse_graphdef(known_batch_pbtxt, graph_def));
+  EXPECT_TRUE(plier::tf::parse_graphdef(known_batch_pbtxt, graph_def));
   ASSERT_ANY_THROW(importer.import(signature, graph_def));
 
   moco::tf::CompilerArgs::get()->clear();
@@ -154,7 +155,7 @@ TEST(TensorFlowImport, placeholder_unknwon_batch)
   signature.add_output(moco::tf::TensorName("output", 0));
 
   tensorflow::GraphDef graph_def;
-  EXPECT_TRUE(parse_graphdef(unknown_batch_pbtxt, graph_def));
+  EXPECT_TRUE(plier::tf::parse_graphdef(unknown_batch_pbtxt, graph_def));
   std::unique_ptr<loco::Graph> graph = importer.import(signature, graph_def);
 
   // get loco::Pull
@@ -184,7 +185,7 @@ TEST(TensorFlowImport, placeholder_wrong_user_input_1)
   signature.add_output(moco::tf::TensorName("output", 0));
 
   tensorflow::GraphDef graph_def;
-  EXPECT_TRUE(parse_graphdef(unknown_batch_pbtxt, graph_def));
+  EXPECT_TRUE(plier::tf::parse_graphdef(unknown_batch_pbtxt, graph_def));
   ASSERT_ANY_THROW(importer.import(signature, graph_def));
 
   moco::tf::CompilerArgs::get()->clear();
index 0e420f6..78a2174 100644 (file)
@@ -14,7 +14,6 @@
  * limitations under the License.
  */
 
-#include "Convert.h"
 #include "GraphBuilder.h"
 #include "GraphBuilderContext.h"
 
index 6d1e9d9..b7b1861 100644 (file)
@@ -19,6 +19,7 @@
 #include "Importer.h"
 
 #include <loco.h>
+#include <plier/tf/TestHelper.h>
 
 #include <gtest/gtest.h>
 
@@ -79,7 +80,7 @@ TEST(TensorFlowImport, relu_01)
   signature.add_output(moco::tf::TensorName("ReLU", 0));
 
   tensorflow::GraphDef graph_def;
-  EXPECT_TRUE(parse_graphdef(relu_01_pbtxtdata, graph_def));
+  EXPECT_TRUE(plier::tf::parse_graphdef(relu_01_pbtxtdata, graph_def));
   std::unique_ptr<loco::Graph> graph = importer.import(signature, graph_def);
 
   // what to test:
index 271b68c..e0eb410 100644 (file)
@@ -19,6 +19,7 @@
 #include "Importer.h"
 
 #include <loco.h>
+#include <plier/tf/TestHelper.h>
 
 #include <gtest/gtest.h>
 
@@ -79,7 +80,7 @@ TEST(TensorFlowImport, relu6_01)
   signature.add_output(moco::tf::TensorName("ReLU6", 0));
 
   tensorflow::GraphDef graph_def;
-  EXPECT_TRUE(parse_graphdef(relu6_01_pbtxtdata, graph_def));
+  EXPECT_TRUE(plier::tf::parse_graphdef(relu6_01_pbtxtdata, graph_def));
   std::unique_ptr<loco::Graph> graph = importer.import(signature, graph_def);
 
   // what to test:
index c53b13d..9dd77b6 100644 (file)
@@ -29,13 +29,6 @@ namespace tf
 namespace test
 {
 
-bool parse_graphdef(char const *pbtxt, tensorflow::GraphDef &graphdef)
-{
-  imemstream mempb(pbtxt, std::strlen(pbtxt));
-  google::protobuf::io::IstreamInputStream iis(&mempb);
-  return google::protobuf::TextFormat::Parse(&iis, &graphdef);
-}
-
 void setup_output_node(loco::Graph *graph, loco::Node *last_node)
 {
   // add push as output
index b3dfe91..6978efa 100644 (file)
@@ -32,25 +32,6 @@ namespace tf
 namespace test
 {
 
-struct membuf : std::streambuf
-{
-  membuf(char const *base, size_t size)
-  {
-    char *p(const_cast<char *>(base));
-    this->setg(p, p, p + size);
-  }
-};
-
-struct imemstream : virtual membuf, std::istream
-{
-  imemstream(char const *base, size_t size)
-      : membuf(base, size), std::istream(static_cast<std::streambuf *>(this))
-  {
-  }
-};
-
-bool parse_graphdef(char const *pbtxt, tensorflow::GraphDef &graphdef);
-
 template <typename T> T *find_first_node_bytype(loco::Graph *g)
 {
   T *first_node = nullptr;
index c337d65..7858ed5 100644 (file)
@@ -24,6 +24,7 @@
 #include <loco.h>
 #include <locop/FormattedGraph.h>
 #include <moco/Log.h>
+#include <plier/tf/TestHelper.h>
 
 #include <gtest/gtest.h>
 
@@ -87,7 +88,7 @@ TEST(ConstantFolding, case01)
   signature.add_output(moco::tf::TensorName("relu", 0));
 
   tensorflow::GraphDef graph_def;
-  EXPECT_TRUE(parse_graphdef(case01, graph_def));
+  EXPECT_TRUE(plier::tf::parse_graphdef(case01, graph_def));
   auto graph = importer.import(signature, graph_def);
 
   // Convert graph to hold only Canonical dialect
index 5c59297..d92639a 100644 (file)
@@ -16,7 +16,6 @@
 
 #include "FixPaddingTransform.h"
 
-#include "Convert.h"
 #include "Annotations/PaddingData.h"
 #include "Annotations/PadData.h"
 #include "Annotations/ShapeInferenceData.h"
index bc017d9..87a2c9e 100644 (file)
@@ -27,6 +27,7 @@
 #include <loco.h>
 #include <moco/Log.h>
 #include <stdex/Memory.h>
+#include <plier/tf/Convert.h>
 
 #include <cassert>
 #include <sstream>
@@ -642,13 +643,13 @@ bool fix_shape(moco::tf::TFConv2D *node)
     }
     auto stride_data = stdex::make_unique<StrideData>();
     auto strides = node->strides();
-    auto data_layout = as_DataLayout(node->data_layout());
-    if (data_layout == DataLayout::NHWC)
+    auto data_layout = plier::tf::as_data_layout(node->data_layout());
+    if (data_layout == plier::tf::DataLayout::NHWC)
     {
       stride_data->stride()->vertical(strides[1]);
       stride_data->stride()->horizontal(strides[2]);
     }
-    else if (data_layout == DataLayout::NCHW)
+    else if (data_layout == plier::tf::DataLayout::NCHW)
     {
       stride_data->stride()->vertical(strides[2]);
       stride_data->stride()->horizontal(strides[3]);
index f598ea1..0aa997a 100644 (file)
@@ -25,8 +25,6 @@
 #include "IR/TFConv2D.h"
 #include "IR/TFMul.h"
 
-#include "Convert.h"
-
 #include <loco.h>
 #include <moco/Log.h>
 #include <moco/tf/NodeShape.h>
index a2194c1..a54856a 100644 (file)
@@ -20,8 +20,6 @@
 #include "IR/TFConst.h"
 #include "IR/TFMul.h"
 
-#include "Convert.h"
-
 #include "IR/TFFusedBatchNorm.h"
 
 #include <loco.h>
index 749cf24..aee7fbb 100644 (file)
@@ -24,6 +24,7 @@
 #include <locop/FormattedGraph.h>
 #include <moco/Log.h>
 #include <stdex/Memory.h>
+#include <plier/tf/TestHelper.h>
 
 #include <google/protobuf/io/coded_stream.h>
 #include <google/protobuf/io/zero_copy_stream_impl.h>
@@ -211,7 +212,7 @@ TEST(ResolveFusedBatchNorm, fbn_resolve_basic)
   signature.add_output(moco::tf::TensorName("FBN_01", 0));
 
   tensorflow::GraphDef graph_def;
-  EXPECT_TRUE(parse_graphdef(fbn_basic_pbtxt, graph_def));
+  EXPECT_TRUE(plier::tf::parse_graphdef(fbn_basic_pbtxt, graph_def));
   auto graph = importer.import(signature, graph_def);
 
   INFO(l) << "Before ResolveFusedBatchNorm";