1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
5 #include <vpu/frontend/frontend.hpp>
12 #include <vpu/sw/post_op_stage.hpp>
16 void FrontEnd::parsePower(
17 const Model::Ptr& model,
18 const ie::CNNLayerPtr& _layer,
19 const DataVector& inputs,
20 const DataVector& outputs) {
21 IE_ASSERT(inputs.size() == 1);
22 IE_ASSERT(outputs.size() == 1);
24 auto input = inputs[0];
25 auto output = outputs[0];
27 auto layer = std::dynamic_pointer_cast<ie::PowerLayer>(_layer);
28 IE_ASSERT(layer != nullptr);
30 _stageBuilder->addPowerStage(
43 class PowerStage final : public PostOpStage {
45 StagePtr cloneImpl() const override {
46 return std::make_shared<PowerStage>(*this);
49 void propagateScaleFactorsImpl(
50 const SmallVector<float>& inputScales,
51 ScalePropagationStep step) override {
52 IE_ASSERT(_inputEdges.size() == 1);
53 IE_ASSERT(_outputEdges.size() == 1);
55 auto power = attrs().get<float>("power");
56 auto& scale = attrs().get<float>("scale");
57 auto& bias = attrs().get<float>("bias");
60 _scaleInfo.setInput(_inputEdges[0], 1.0f);
61 _scaleInfo.setOutput(_outputEdges[0], 1.0f);
63 auto inputScale = inputScales[0];
65 _scaleInfo.setOutput(_outputEdges[0], inputScale);
67 if (step == ScalePropagationStep::ScaleInput) {
70 if (step != ScalePropagationStep::Check) {
76 void serializeParamsImpl(BlobSerializer& serializer) const override {
77 auto scale = attrs().get<float>("scale");
78 auto power = attrs().get<float>("power");
79 auto bias = attrs().get<float>("bias");
81 serializer.append(static_cast<float>(bias));
82 serializer.append(static_cast<float>(scale));
83 serializer.append(static_cast<float>(power));
89 Stage StageBuilder::addPowerStage(
90 const Model::Ptr& model,
91 const std::string& name,
92 const ie::CNNLayerPtr& layer,
98 auto stage = model->addNewStage<PowerStage>(
105 stage->attrs().set<float>("scale", scale);
106 stage->attrs().set<float>("power", power);
107 stage->attrs().set<float>("bias", bias);