633d457c5de40e3faf5546201339d42f611ccf90
[platform/upstream/dldt.git] / inference-engine / src / vpu / graph_transformer / src / stages / grn.cpp
1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 //
4
5 #include <vpu/frontend/frontend.hpp>
6
7 #include <vector>
8 #include <unordered_set>
9 #include <memory>
10 #include <set>
11
12 namespace vpu {
13
14 namespace {
15
16 class GRNStage final : public StageNode {
17 private:
18     StagePtr cloneImpl() const override {
19         return std::make_shared<GRNStage>(*this);
20     }
21
22     void propagateDataOrderImpl() const override {
23         IE_ASSERT(_inputEdges.size() == 1);
24         IE_ASSERT(_outputEdges.size() == 1);
25
26         auto input = _inputEdges[0]->input();
27
28         _orderInfo.setOutput(_outputEdges[0], input->desc().dimsOrder());
29     }
30
31     void getDataStridesRequirementsImpl() const override {
32     }
33
34     void finalizeDataLayoutImpl() override {
35     }
36
37     void getBatchSupportInfoImpl() const override {
38         IE_ASSERT(_inputEdges.size() == 1);
39         IE_ASSERT(_outputEdges.size() == 1);
40
41         _batchInfo.setInput(_inputEdges[0], BatchSupport::Split);
42         _batchInfo.setOutput(_outputEdges[0], BatchSupport::Split);
43     }
44
45     void finalCheckImpl() const override {
46     }
47
48     void serializeParamsImpl(BlobSerializer& serializer) const override {
49         auto bias = attrs().get<float>("bias");
50
51         serializer.append(static_cast<float>(bias));
52     }
53
54     void serializeDataImpl(BlobSerializer& serializer) const override {
55         IE_ASSERT(_inputEdges.size() == 1);
56         IE_ASSERT(_outputEdges.size() == 1);
57         IE_ASSERT(_tempBufferEdges.empty());
58
59         auto input = _inputEdges[0]->input();
60         auto output = _outputEdges[0]->output();
61
62         input->serializeNewBuffer(serializer);
63         output->serializeNewBuffer(serializer);
64     }
65 };
66
67 }  // namespace
68
69 void FrontEnd::parseGRN(
70         const Model::Ptr& model,
71         const ie::CNNLayerPtr& _layer,
72         const DataVector& inputs,
73         const DataVector& outputs) {
74     IE_ASSERT(inputs.size() == 1);
75     IE_ASSERT(outputs.size() == 1);
76
77     auto layer = std::dynamic_pointer_cast<ie::GRNLayer>(_layer);
78     IE_ASSERT(layer != nullptr);
79
80     auto stage = model->addNewStage<GRNStage>(
81         layer->name,
82         StageType::GRN,
83         layer,
84         inputs,
85         outputs);
86
87     stage->attrs().set<float>("bias", layer->bias);
88 }
89
90 }  // namespace vpu