Publishing 2019 R1 content
[platform/upstream/dldt.git] / inference-engine / src / inference_engine / builders / ie_prior_box_clustered_layer.cpp
1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 //
4
5 #include <builders/ie_prior_box_clustered_layer.hpp>
6 #include <ie_cnn_layer_builder.h>
7
8 #include <vector>
9 #include <string>
10
11 using namespace InferenceEngine;
12
13 Builder::PriorBoxClusteredLayer::PriorBoxClusteredLayer(const std::string& name): LayerDecorator("PriorBoxClustered", name) {
14     getLayer()->getOutputPorts().resize(1);
15     getLayer()->getInputPorts().resize(2);
16 }
17
18 Builder::PriorBoxClusteredLayer::PriorBoxClusteredLayer(const Layer::Ptr& layer): LayerDecorator(layer) {
19     checkType("PriorBoxClustered");
20 }
21
22 Builder::PriorBoxClusteredLayer::PriorBoxClusteredLayer(const Layer::CPtr& layer): LayerDecorator(layer) {
23     checkType("PriorBoxClustered");
24 }
25
26 Builder::PriorBoxClusteredLayer& Builder::PriorBoxClusteredLayer::setName(const std::string& name) {
27     getLayer()->setName(name);
28     return *this;
29 }
30
31 const std::vector<Port>& Builder::PriorBoxClusteredLayer::getInputPorts() const {
32     return getLayer()->getInputPorts();
33 }
34
35 Builder::PriorBoxClusteredLayer& Builder::PriorBoxClusteredLayer::setInputPorts(const std::vector<Port> &ports) {
36     if (ports.size() != 2)
37         THROW_IE_EXCEPTION << "Incorrect number of inputs for PriorBoxClustered getLayer().";
38     getLayer()->getInputPorts() = ports;
39     return *this;
40 }
41
42 const Port& Builder::PriorBoxClusteredLayer::getOutputPort() const {
43     return getLayer()->getOutputPorts()[0];
44 }
45
46 Builder::PriorBoxClusteredLayer& Builder::PriorBoxClusteredLayer::setOutputPort(const Port &port) {
47     getLayer()->getOutputPorts()[0] = port;
48     return *this;
49 }
50
51 float Builder::PriorBoxClusteredLayer::getVariance() const {
52     return getLayer()->getParameters().at("variance");
53 }
54 Builder::PriorBoxClusteredLayer& Builder::PriorBoxClusteredLayer::setVariance(float variance) {
55     getLayer()->getParameters()["variance"] = variance;
56     return *this;
57 }
58
59 float Builder::PriorBoxClusteredLayer::getOffset() const {
60     return getLayer()->getParameters().at("offset");
61 }
62 Builder::PriorBoxClusteredLayer& Builder::PriorBoxClusteredLayer::setOffset(float offset) {
63     getLayer()->getParameters()["offset"] = offset;
64     return *this;
65 }
66
67 float Builder::PriorBoxClusteredLayer::getWidth() const {
68     return getLayer()->getParameters().at("width");
69 }
70 Builder::PriorBoxClusteredLayer& Builder::PriorBoxClusteredLayer::setWidth(float width) {
71     getLayer()->getParameters()["width"] = width;
72     return *this;
73 }
74
75 float Builder::PriorBoxClusteredLayer::getHeight() const {
76     return getLayer()->getParameters().at("height");
77 }
78 Builder::PriorBoxClusteredLayer& Builder::PriorBoxClusteredLayer::setHeight(float height) {
79     getLayer()->getParameters()["height"] = height;
80     return *this;
81 }
82
83 const std::vector<float> Builder::PriorBoxClusteredLayer::getSteps() const {
84     return {getLayer()->getParameters().at("step_h"), getLayer()->getParameters().at("step_w")};
85 }
86 Builder::PriorBoxClusteredLayer& Builder::PriorBoxClusteredLayer::setSteps(const std::vector<float> steps) {
87     if (steps.size() != 2)
88         THROW_IE_EXCEPTION << "PriorBoxClusteredLayer supports sizes only for height and width dimensions!";
89     getLayer()->getParameters()["step_h"] = steps[0];
90     getLayer()->getParameters()["step_w"] = steps[1];
91     return *this;
92 }
93
94 const std::vector<float> Builder::PriorBoxClusteredLayer::getImgSizes() const {
95     return {getLayer()->getParameters().at("img_h"), getLayer()->getParameters().at("img_w")};
96 }
97 Builder::PriorBoxClusteredLayer& Builder::PriorBoxClusteredLayer::setImgSizes(const std::vector<float> sizes) {
98     if (sizes.size() != 2)
99         THROW_IE_EXCEPTION << "PriorBoxClusteredLayer allows to specify only height and width dimensions of an input image!";
100     getLayer()->getParameters()["img_h"] = sizes[0];
101     getLayer()->getParameters()["img_w"] = sizes[1];
102     return *this;
103 }
104
105 float Builder::PriorBoxClusteredLayer::getStep() const {
106     return getLayer()->getParameters().at("step");
107 }
108 Builder::PriorBoxClusteredLayer& Builder::PriorBoxClusteredLayer::setStep(float step) {
109     getLayer()->getParameters()["step"] = step;
110     return *this;
111 }
112
113 bool Builder::PriorBoxClusteredLayer::getClip() const {
114     return getLayer()->getParameters().at("clip");
115 }
116 Builder::PriorBoxClusteredLayer& Builder::PriorBoxClusteredLayer::setClip(bool flag) {
117     getLayer()->getParameters()["clip"] = flag;
118     return *this;
119 }
120
121 bool Builder::PriorBoxClusteredLayer::getFlip() const {
122     return getLayer()->getParameters().at("flip");
123 }
124 Builder::PriorBoxClusteredLayer& Builder::PriorBoxClusteredLayer::setFlip(bool flag) {
125     getLayer()->getParameters()["flip"] = flag;
126     return *this;
127 }
128
129 REG_CONVERTER_FOR(PriorBoxClustered, [](const CNNLayerPtr& cnnLayer, Builder::Layer& layer) {
130     layer.getParameters()["flip"] = cnnLayer->GetParamAsBool("flip", false);
131     layer.getParameters()["clip"] = cnnLayer->GetParamAsBool("clip", false);
132     layer.getParameters()["step"] = cnnLayer->GetParamAsFloat("step");
133     layer.getParameters()["img_h"] = cnnLayer->GetParamAsFloat("img_h", 0);
134     layer.getParameters()["img_w"] = cnnLayer->GetParamAsFloat("img_w", 0);
135     layer.getParameters()["step_h"] = cnnLayer->GetParamAsFloat("step_h", 0);
136     layer.getParameters()["step_w"] = cnnLayer->GetParamAsFloat("step_w", 0);
137     layer.getParameters()["height"] = cnnLayer->GetParamAsFloat("height", 0);
138     layer.getParameters()["width"] = cnnLayer->GetParamAsFloat("width", 0);
139     layer.getParameters()["offset"] = cnnLayer->GetParamAsFloat("offset", 0);
140     layer.getParameters()["variance"] = cnnLayer->GetParamAsFloat("variance", 0);
141 });