[exo-tflite] Introducing TFLMaxPool2D (#7087)
author윤현식/On-Device Lab(SR)/Principal Engineer/삼성전자 <hyunsik.yoon@samsung.com>
Mon, 2 Sep 2019 22:30:59 +0000 (07:30 +0900)
committer박세희/On-Device Lab(SR)/Principal Engineer/삼성전자 <saehie.park@samsung.com>
Mon, 2 Sep 2019 22:30:59 +0000 (07:30 +0900)
This adds TFLMaxPool2D into TFLDialect.

Signed-off-by: Hyun Sik Yoon <hyunsik.yoon@samsung.com>
compiler/exo-tflite/src/Dialect/IR/TFLNodes.h
compiler/exo-tflite/src/Dialect/IR/TFLNodes.lst
compiler/exo-tflite/src/TFLFormattedGraph.cpp

index 31184a9..e8fab4f 100644 (file)
@@ -154,7 +154,37 @@ private:
 
 // TODO TFLDiv
 
-// TODO TFLMaxPool2D
+/**
+ * @brief MAX_POOL_2D in TensorFlow Lite
+ */
+class TFLMaxPool2D final : public FixedArityNode<1, TFLNodeImpl<TFLOpcode::MAX_POOL_2D>>
+{
+public:
+  TFLMaxPool2D()
+      : _fused_act_fun(FusedActFunc::UNDEFINED), _padding(Padding::UNDEFINED) { /* empty */}
+
+public:
+  loco::Node *value(void) const { return at(0)->node(); }
+  void value(loco::Node *node) { at(0)->node(node); }
+
+  FusedActFunc fusedActivationFunction() const { return _fused_act_fun; }
+  void fusedActivationFunction(FusedActFunc fused_act_fun) { _fused_act_fun = fused_act_fun; }
+
+  Padding padding() const { return _padding; }
+  void padding(Padding padding) { _padding = padding; }
+
+  const Filter *filter(void) const { return &_filter; }
+  Filter *filter(void) { return &_filter; }
+
+  const Stride *stride(void) const { return &_stride; }
+  Stride *stride(void) { return &_stride; }
+
+private:
+  FusedActFunc _fused_act_fun;
+  Padding _padding;
+  Stride _stride;
+  Filter _filter;
+};
 
 // TODO TFLMul
 
index 61c294e..4c9a527 100644 (file)
@@ -11,7 +11,7 @@ TFL_NODE(AVERAGE_POOL_2D, locoex::TFLAveragePool2D)
 // TODO TFLConv2D
 // TODO TFLDepthwiseConv2D
 // TODO TFLDiv
-// TODO TFLMaxPool2D
+TFL_NODE(MAX_POOL_2D, locoex::TFLMaxPool2D)
 // TODO TFLMul
 TFL_NODE(RELU, locoex::TFLRelu)
 // TODO TFLRelu6
index cb0a6f3..7be3c2a 100644 (file)
@@ -109,7 +109,13 @@ bool TFLNodeSummaryBuilder::summary(const locoex::TFLAveragePool2D *node,
 
 // TODO TFLDiv
 
-// TODO TFLMaxPool2D
+bool TFLNodeSummaryBuilder::summary(const locoex::TFLMaxPool2D *node, locop::NodeSummary &s) const
+{
+  s.opname("TFL.MAX_POOL_2D");
+  s.args().append("input", tbl()->lookup(node->value()));
+  s.state(locop::NodeSummary::State::PartiallyKnown);
+  return true;
+}
 
 // TODO TFLMul