1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
5 #include <vpu/frontend/frontend.hpp>
8 #include <unordered_set>
16 class GRNStage final : public StageNode {
18 StagePtr cloneImpl() const override {
19 return std::make_shared<GRNStage>(*this);
22 void propagateDataOrderImpl() const override {
23 IE_ASSERT(_inputEdges.size() == 1);
24 IE_ASSERT(_outputEdges.size() == 1);
26 auto input = _inputEdges[0]->input();
28 _orderInfo.setOutput(_outputEdges[0], input->desc().dimsOrder());
31 void getDataStridesRequirementsImpl() const override {
34 void finalizeDataLayoutImpl() override {
37 void getBatchSupportInfoImpl() const override {
38 IE_ASSERT(_inputEdges.size() == 1);
39 IE_ASSERT(_outputEdges.size() == 1);
41 _batchInfo.setInput(_inputEdges[0], BatchSupport::Split);
42 _batchInfo.setOutput(_outputEdges[0], BatchSupport::Split);
45 void finalCheckImpl() const override {
48 void serializeParamsImpl(BlobSerializer& serializer) const override {
49 auto bias = attrs().get<float>("bias");
51 serializer.append(static_cast<float>(bias));
54 void serializeDataImpl(BlobSerializer& serializer) const override {
55 IE_ASSERT(_inputEdges.size() == 1);
56 IE_ASSERT(_outputEdges.size() == 1);
57 IE_ASSERT(_tempBufferEdges.empty());
59 auto input = _inputEdges[0]->input();
60 auto output = _outputEdges[0]->output();
62 input->serializeNewBuffer(serializer);
63 output->serializeNewBuffer(serializer);
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);
77 auto layer = std::dynamic_pointer_cast<ie::GRNLayer>(_layer);
78 IE_ASSERT(layer != nullptr);
80 auto stage = model->addNewStage<GRNStage>(
87 stage->attrs().set<float>("bias", layer->bias);