From 8a6bd1dba332981044d35951924fe9e27161d99d Mon Sep 17 00:00:00 2001 From: Nikita Kudriavtsev Date: Thu, 23 Jul 2020 16:58:03 +0300 Subject: [PATCH] [IE][VPU]: Added Mish layer (#1158) * Add Mish stage in GraphTransformer * Add Mish per-layer tests --- .../include/vpu/frontend/frontend.hpp | 1 + .../include/vpu/model/stage.hpp | 1 + .../src/frontend/frontend.cpp | 1 + .../vpu/graph_transformer/src/stages/mish.cpp | 38 +++++++++++++++++++ .../single_layer_tests/activation.cpp | 3 +- 5 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 inference-engine/src/vpu/graph_transformer/src/stages/mish.cpp diff --git a/inference-engine/src/vpu/graph_transformer/include/vpu/frontend/frontend.hpp b/inference-engine/src/vpu/graph_transformer/include/vpu/frontend/frontend.hpp index 4a3718b5218..b3c0a41be89 100644 --- a/inference-engine/src/vpu/graph_transformer/include/vpu/frontend/frontend.hpp +++ b/inference-engine/src/vpu/graph_transformer/include/vpu/frontend/frontend.hpp @@ -154,6 +154,7 @@ public: void parseOutShapeOfReshape(const Model& model, const ie::CNNLayerPtr& layer, const DataVector& inputs, const DataVector& outputs) const; void parseBroadcast(const Model& model, const ie::CNNLayerPtr& layer, const DataVector& inputs, const DataVector& outputs) const; void parseStaticShapeNMS(const Model& model, const ie::CNNLayerPtr& layer, const DataVector& inputs, const DataVector& outputs) const; + void parseMish(const Model& model, const ie::CNNLayerPtr& layer, const DataVector& inputs, const DataVector& outputs) const; void parseGelu(const Model& model, const ie::CNNLayerPtr& layer, const DataVector& inputs, const DataVector& outputs) const; // diff --git a/inference-engine/src/vpu/graph_transformer/include/vpu/model/stage.hpp b/inference-engine/src/vpu/graph_transformer/include/vpu/model/stage.hpp index 44a82152a8c..0952c9a73e9 100644 --- a/inference-engine/src/vpu/graph_transformer/include/vpu/model/stage.hpp +++ b/inference-engine/src/vpu/graph_transformer/include/vpu/model/stage.hpp @@ -167,6 +167,7 @@ VPU_DECLARE_ENUM(StageType, Concat = 128, Broadcast = 129, StaticShapeNMS = 130, + Mish = 131, Gelu = 132, StridedSlice = 133, ) diff --git a/inference-engine/src/vpu/graph_transformer/src/frontend/frontend.cpp b/inference-engine/src/vpu/graph_transformer/src/frontend/frontend.cpp index d27fb3c8729..1ac3b798095 100644 --- a/inference-engine/src/vpu/graph_transformer/src/frontend/frontend.cpp +++ b/inference-engine/src/vpu/graph_transformer/src/frontend/frontend.cpp @@ -118,6 +118,7 @@ FrontEnd::FrontEnd(StageBuilder::Ptr stageBuilder) {"StaticShapeBroadcast", LAYER_PARSER(parseBroadcast)}, {"StaticShapeNonMaxSuppression", LAYER_PARSER(parseStaticShapeNMS)}, {"StaticShapeReshape", LAYER_PARSER(parseReshape)}, + {"Mish", LAYER_PARSER(parseMish)}, {"Gelu", LAYER_PARSER(parseGelu)}, }} {} diff --git a/inference-engine/src/vpu/graph_transformer/src/stages/mish.cpp b/inference-engine/src/vpu/graph_transformer/src/stages/mish.cpp new file mode 100644 index 00000000000..b628fca1e8e --- /dev/null +++ b/inference-engine/src/vpu/graph_transformer/src/stages/mish.cpp @@ -0,0 +1,38 @@ +// Copyright (C) 2020 Intel Corporation +// SPDX-License-Identifier: Apache-2.0 +// + +#include +#include + +namespace vpu { + +namespace { + +class MishStage final : public PostOpStage { +public: + using PostOpStage::PostOpStage; + +private: + StagePtr cloneImpl() const override { + return std::make_shared(*this); + } + + void serializeParamsImpl(BlobSerializer&) const override { + } +}; + +} // namespace + +void FrontEnd::parseMish(const Model& model, const ie::CNNLayerPtr& layer, const DataVector& inputs, const DataVector& outputs) const { + VPU_THROW_UNLESS(inputs.size() == 1, + "Mish stage with name %s must have only 1 input, " + "actually provided %d", layer->name, inputs.size()); + VPU_THROW_UNLESS(outputs.size() == 1, + "Mish stage with name %s must have only 1 output, " + "actually provided %d", layer->name, outputs.size()); + + model->addNewStage(layer->name, StageType::Mish, layer, inputs, outputs); +} + +} // namespace vpu diff --git a/inference-engine/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/activation.cpp b/inference-engine/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/activation.cpp index 67037146556..25fba8951a1 100644 --- a/inference-engine/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/activation.cpp +++ b/inference-engine/tests/functional/plugin/myriad/shared_tests_instances/single_layer_tests/activation.cpp @@ -21,7 +21,8 @@ const std::vector activationTypes = { Relu, Exp, Log, - Gelu + Gelu, + Mish }; std::map, std::vector>> basic = {