Enable ResizeBilinear op for ACL neon (#7151)
author장지섭/On-Device Lab(SR)/Engineer/삼성전자 <jiseob.jang@samsung.com>
Wed, 4 Sep 2019 11:56:25 +0000 (20:56 +0900)
committer이한종/On-Device Lab(SR)/Engineer/삼성전자 <hanjoung.lee@samsung.com>
Wed, 4 Sep 2019 11:56:25 +0000 (20:56 +0900)
This commit enables to support ResizeBilinear op for ACL neon.

Signed-off-by: jiseob.jang <jiseob.jang@samsung.com>
runtimes/neurun/backend/acl_neon/KernelGenerator.cc
runtimes/neurun/backend/acl_neon/KernelGenerator.h
runtimes/neurun/backend/acl_neon/ShapeFixer.cc
runtimes/neurun/backend/acl_neon/ShapeFixer.h
tests/nnapi/nnapi_gtest.skip.armv7l-linux.acl_neon
tests/scripts/neurun_frameworktest_list.armv7l.acl_neon.txt

index 456ac5b..5deeea7 100644 (file)
@@ -811,6 +811,34 @@ void KernelGenerator::visit(const model::operation::ReshapeNode &node)
   _execution_builder->append(std::move(acl_fn));
 }
 
+void KernelGenerator::visit(const model::operation::ResizeBilinearNode &node)
+{
+  const auto ofm_index{node.getOutputs().at(0)};
+
+  const auto ifm_index{node.getInputs().at(model::operation::ResizeBilinearNode::Input::INPUT)};
+  const auto height_index{node.param().height_index};
+  const auto width_index{node.param().width_index};
+  (void)height_index;
+  (void)width_index;
+
+  auto ofm_alloc = _tensor_builder->at(ofm_index).get();
+  auto ifm_alloc = _tensor_builder->at(ifm_index).get();
+
+  std::unique_ptr<::arm_compute::IFunction> fn;
+
+  auto l = nnfw::cpp14::make_unique<::arm_compute::NEScale>();
+
+  l->configure(ifm_alloc->handle(), ofm_alloc->handle(),
+               ::arm_compute::InterpolationPolicy::BILINEAR, ::arm_compute::BorderMode::REPLICATE,
+               ::arm_compute::PixelValue(0.f), ::arm_compute::SamplingPolicy::TOP_LEFT);
+
+  fn = std::move(l);
+
+  auto acl_fn = asAclFunction(std::move(fn));
+
+  _execution_builder->append(std::move(acl_fn));
+}
+
 void KernelGenerator::visit(const model::operation::RNNNode &node)
 {
   const auto output_index{node.getOutputs().at(model::operation::RNNNode::Output::OUTPUT)};
index ba65c55..0d9882b 100644 (file)
@@ -54,6 +54,7 @@ public:
   void visit(const model::operation::ReLU1Node &) override;
   void visit(const model::operation::ReLU6Node &) override;
   void visit(const model::operation::ReshapeNode &) override;
+  void visit(const model::operation::ResizeBilinearNode &) override;
   void visit(const model::operation::RNNNode &) override;
   void visit(const model::operation::RSQRTNode &) override;
   void visit(const model::operation::SqueezeNode &) override;
index 1630d4c..4d614ee 100644 (file)
@@ -136,6 +136,8 @@ void ShapeFixer::visit(const model::operation::ReshapeNode &node)
   _tensor_builder->dimCorrection(output_index, false);
 }
 
+void ShapeFixer::visit(const model::operation::ResizeBilinearNode &) { /* DO NOTHING */}
+
 void ShapeFixer::visit(const model::operation::RNNNode &) { /* DO NOTHING */}
 
 void ShapeFixer::visit(const model::operation::ComparisonNode &node)
index 938501e..1d8d60e 100644 (file)
@@ -56,6 +56,7 @@ public:
   void visit(const model::operation::ReLU1Node &) override;
   void visit(const model::operation::ReLU6Node &) override;
   void visit(const model::operation::ReshapeNode &) override;
+  void visit(const model::operation::ResizeBilinearNode &) override;
   void visit(const model::operation::RNNNode &) override;
   void visit(const model::operation::RSQRTNode &) override;
   void visit(const model::operation::SqueezeNode &) override;
index 50991d9..f9a115e 100644 (file)
@@ -21,7 +21,6 @@ GeneratedTests.neg*
 GeneratedTests.notequal*
 GeneratedTests.prelu_ex*
 GeneratedTests.reduce_min*
-GeneratedTests.resize_bilinear*
 GeneratedTests.pad*
 GeneratedTests.space_to_depth*
 GeneratedTests.svdf*