[neurun/cpu] Enable squeeze operation (#9057)
author오형석/On-Device Lab(SR)/Staff Engineer/삼성전자 <hseok82.oh@samsung.com>
Wed, 20 Nov 2019 07:28:18 +0000 (16:28 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Wed, 20 Nov 2019 07:28:18 +0000 (16:28 +0900)
Enable squeeze operation on neurun cpu backend
Squeeze operation use reshape kernel

Signed-off-by: Hyeongseok Oh <hseok82.oh@samsung.com>
runtime/neurun/backend/cpu/KernelGenerator.cc
runtime/neurun/backend/cpu/KernelGenerator.h
runtime/neurun/backend/cpu/ShapeFixer.cc
runtime/neurun/backend/cpu/ShapeFixer.h
tests/nnapi/nnapi_gtest.skip.armv7l-linux.cpu
tests/nnapi/nnapi_gtest.skip.x86_64-linux
tests/scripts/neurun_frameworktest_list.armv7l.cpu.txt
tests/scripts/neurun_frameworktest_list.x86-64.cpu.txt

index 0433121..53de721 100644 (file)
@@ -309,6 +309,28 @@ void KernelGenerator::visit(const model::operation::Reshape &node)
   _execution_builder->append(std::move(fn));
 }
 
+void KernelGenerator::visit(const model::operation::Squeeze &node)
+{
+  const auto output_index{node.getOutputs().at(0)};
+  const auto input_index{node.getInputs().at(model::operation::Squeeze::Input::INPUT)};
+
+  const auto ofm_backend_descr = ::neurun::backend::cpu::kernel::getTensorDescriptor(
+      _ctx.at(output_index), _current_subg_layout);
+  const auto ifm_backend_descr = ::neurun::backend::cpu::kernel::getTensorDescriptor(
+      _ctx.at(input_index), _current_subg_layout);
+
+  auto output_alloc = _tensor_builder->at(output_index).get();
+  auto input_alloc = _tensor_builder->at(input_index).get();
+
+  // Squeeze can share same kernel with reshape
+  auto fn = nnfw::cpp14::make_unique<::neurun::backend::cpu::kernel::ReshapeLayer>();
+
+  fn->configure(input_alloc->buffer(), ifm_backend_descr, output_alloc->buffer(),
+                ofm_backend_descr);
+
+  _execution_builder->append(std::move(fn));
+}
+
 void KernelGenerator::visit(const model::operation::Softmax &node)
 {
   const auto output_index{node.getOutputs().at(0)};
index 6aa1f7f..2753aee 100644 (file)
@@ -48,6 +48,7 @@ public:
   void visit(const model::operation::FullyConnected &) override;
   void visit(const model::operation::Mul &) override;
   void visit(const model::operation::Reshape &) override;
+  void visit(const model::operation::Squeeze &) override;
   void visit(const model::operation::Softmax &) override;
   void visit(const model::operation::Add &) override;
   void visit(const model::operation::Sub &) override;
index cb1e032..9f483ce 100644 (file)
@@ -72,6 +72,8 @@ void ShapeFixer::visit(const model::operation::Mul &) { throw std::runtime_error
 
 void ShapeFixer::visit(const model::operation::Reshape &) { /* DO NOTHING */}
 
+void ShapeFixer::visit(const model::operation::Squeeze &) { /* DO NOTHING */}
+
 void ShapeFixer::visit(const model::operation::Softmax &) { /* DO NOTHING */}
 
 void ShapeFixer::visit(const model::operation::Gather &) { /* DO NOTHING */}
index cc98712..d52b76a 100644 (file)
@@ -46,6 +46,7 @@ public:
   void visit(const model::operation::FullyConnected &) override;
   void visit(const model::operation::Mul &) override;
   void visit(const model::operation::Reshape &) override;
+  void visit(const model::operation::Squeeze &) override;
   void visit(const model::operation::Softmax &) override;
   void visit(const model::operation::Add &) override;
   void visit(const model::operation::Gather &) override;
index 5f8d406..ac5f130 100644 (file)
@@ -59,7 +59,6 @@ GeneratedTests.tanh_
 GeneratedTests.batch_to_space*
 GeneratedTests.div_*
 GeneratedTests.space_to_batch*
-GeneratedTests.squeeze*
 GeneratedTests.strided_slice*
 GeneratedTests.sub_broadcast*
 GeneratedTests.sub_quant*
index 151b164..d990298 100644 (file)
@@ -60,7 +60,6 @@ GeneratedTests.tanh_
 GeneratedTests.batch_to_space*
 GeneratedTests.div_*
 GeneratedTests.space_to_batch*
-GeneratedTests.squeeze*
 GeneratedTests.strided_slice*
 GeneratedTests.sub_broadcast*
 GeneratedTests.sub_quant*
index f486f2d..f9055c2 100644 (file)
@@ -6,6 +6,7 @@ fullyconnected/fc1
 max_pool_2d
 softmax
 reshape/reshape1
+squeeze
 add
 logistic
 MODELS/inception_module