Publishing 2019 R1 content
[platform/upstream/dldt.git] / inference-engine / src / inference_engine / builders / ie_proposal_layer.cpp
1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 //
4
5 #include <builders/ie_proposal_layer.hpp>
6 #include <ie_cnn_layer_builder.h>
7
8 #include <vector>
9 #include <string>
10
11 using namespace InferenceEngine;
12
13 Builder::ProposalLayer::ProposalLayer(const std::string& name): LayerDecorator("Proposal", name) {
14     getLayer()->getOutputPorts().resize(1);
15     getLayer()->getInputPorts().resize(3);
16 }
17
18 Builder::ProposalLayer::ProposalLayer(const Layer::Ptr& layer): LayerDecorator(layer) {
19     checkType("Proposal");
20 }
21
22 Builder::ProposalLayer::ProposalLayer(const Layer::CPtr& layer): LayerDecorator(layer) {
23     checkType("Proposal");
24 }
25
26 Builder::ProposalLayer& Builder::ProposalLayer::setName(const std::string& name) {
27     getLayer()->setName(name);
28     return *this;
29 }
30
31 const std::vector<Port>& Builder::ProposalLayer::getInputPorts() const {
32     return getLayer()->getInputPorts();
33 }
34
35 Builder::ProposalLayer& Builder::ProposalLayer::setInputPorts(const std::vector<Port> &ports) {
36     if (ports.size() != 3)
37         THROW_IE_EXCEPTION << "Incorrect number of inputs for Proposal getLayer().";
38     getLayer()->getInputPorts() = ports;
39     return *this;
40 }
41
42 const Port& Builder::ProposalLayer::getOutputPort() const {
43     return getLayer()->getOutputPorts()[0];
44 }
45
46 Builder::ProposalLayer& Builder::ProposalLayer::setOutputPort(const Port &port) {
47     getLayer()->getOutputPorts()[0] = port;
48     return *this;
49 }
50
51 size_t Builder::ProposalLayer::getPostNMSTopN() const {
52     return getLayer()->getParameters().at("post_nms_topn");
53 }
54 Builder::ProposalLayer& Builder::ProposalLayer::setPostNMSTopN(size_t topN) {
55     getLayer()->getParameters()["post_nms_topn"] = topN;
56     return *this;
57 }
58 size_t Builder::ProposalLayer::getPreNMSTopN() const {
59     return getLayer()->getParameters().at("pre_nms_topn");
60 }
61 Builder::ProposalLayer& Builder::ProposalLayer::setPreNMSTopN(size_t topN) {
62     getLayer()->getParameters()["pre_nms_topn"] = topN;
63     return *this;
64 }
65 float Builder::ProposalLayer::getNMSThresh() const {
66     return getLayer()->getParameters().at("nms_thresh");
67 }
68 Builder::ProposalLayer& Builder::ProposalLayer::setNMSThresh(float thresh) {
69     getLayer()->getParameters()["nms_thresh"] = thresh;
70     return *this;
71 }
72 size_t Builder::ProposalLayer::getBaseSize() const {
73     return getLayer()->getParameters().at("base_size");
74 }
75 Builder::ProposalLayer& Builder::ProposalLayer::setBaseSize(size_t baseSize) {
76     getLayer()->getParameters()["base_size"] = baseSize;
77     return *this;
78 }
79 size_t Builder::ProposalLayer::getMinSize() const {
80     return getLayer()->getParameters().at("min_size");
81 }
82 Builder::ProposalLayer& Builder::ProposalLayer::setMinSize(size_t minSize) {
83     getLayer()->getParameters()["min_size"] = minSize;
84     return *this;
85 }
86 size_t Builder::ProposalLayer::getFeatStride() const {
87     return getLayer()->getParameters().at("feat_stride");
88 }
89 Builder::ProposalLayer& Builder::ProposalLayer::setFeatStride(size_t featStride) {
90     getLayer()->getParameters()["feat_stride"] = featStride;
91     return *this;
92 }
93 const std::vector<float> Builder::ProposalLayer::getScale() const {
94     return getLayer()->getParameters().at("scale");
95 }
96 Builder::ProposalLayer& Builder::ProposalLayer::setScale(const std::vector<float>& scales) {
97     getLayer()->getParameters()["scale"] = scales;
98     return *this;
99 }
100 const std::vector<float> Builder::ProposalLayer::getRatio() const {
101     return getLayer()->getParameters().at("ratio");
102 }
103 Builder::ProposalLayer& Builder::ProposalLayer::setRatio(const std::vector<float>& ratios) {
104     getLayer()->getParameters()["ratio"] = ratios;
105     return *this;
106 }
107
108 REG_CONVERTER_FOR(Proposal, [](const CNNLayerPtr& cnnLayer, Builder::Layer& layer) {
109     layer.getParameters()["post_nms_topn"] = static_cast<size_t>(cnnLayer->GetParamAsUInt("post_nms_topn", 0));
110     layer.getParameters()["pre_nms_topn"] = static_cast<size_t>(cnnLayer->GetParamAsUInt("pre_nms_topn", 0));
111     layer.getParameters()["nms_thresh"] = cnnLayer->GetParamAsFloat("nms_thresh", 0);
112     layer.getParameters()["min_size"] = static_cast<size_t>(cnnLayer->GetParamAsUInt("base_size", 0));
113     layer.getParameters()["max_size"] = static_cast<size_t>(cnnLayer->GetParamAsUInt("max_size", 0));
114     layer.getParameters()["max_size"] = static_cast<size_t>(cnnLayer->GetParamAsUInt("feat_stride", 0));
115     layer.getParameters()["scale"] = cnnLayer->GetParamAsFloats("scale");
116     layer.getParameters()["ratio"] = cnnLayer->GetParamAsFloats("ratio");
117 });