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,
52 StageDataInfo<float>& scaleInfo) override {
53 auto power = attrs().get<float>("power");
54 auto& scale = attrs().get<float>("scale");
55 auto& bias = attrs().get<float>("bias");
58 scaleInfo.setInput(inputEdge(0), 1.0f);
59 scaleInfo.setOutput(outputEdge(0), 1.0f);
61 auto inputScale = inputScales[0];
63 scaleInfo.setOutput(outputEdge(0), inputScale);
65 if (step == ScalePropagationStep::ScaleInput) {
68 if (step != ScalePropagationStep::Check) {
74 void serializeParamsImpl(BlobSerializer& serializer) const override {
75 auto scale = attrs().get<float>("scale");
76 auto power = attrs().get<float>("power");
77 auto bias = attrs().get<float>("bias");
79 serializer.append(static_cast<float>(bias));
80 serializer.append(static_cast<float>(scale));
81 serializer.append(static_cast<float>(power));
87 Stage StageBuilder::addPowerStage(
88 const Model::Ptr& model,
89 const std::string& name,
90 const ie::CNNLayerPtr& layer,
96 auto stage = model->addNewStage<PowerStage>(
103 stage->attrs().set<float>("scale", scale);
104 stage->attrs().set<float>("power", power);
105 stage->attrs().set<float>("bias", bias);