Publishing 2019 R1 content
[platform/upstream/dldt.git] / inference-engine / src / inference_engine / builders / ie_roi_pooling_layer.cpp
1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 //
4
5 #include <builders/ie_roi_pooling_layer.hpp>
6 #include <ie_cnn_layer_builder.h>
7 #include <vector>
8 #include <string>
9
10 using namespace InferenceEngine;
11
12 Builder::ROIPoolingLayer::ROIPoolingLayer(const std::string& name): LayerDecorator("ROIPooling", name) {
13     getLayer()->getOutputPorts().resize(1);
14     setPooled({0, 0});
15 }
16
17 Builder::ROIPoolingLayer::ROIPoolingLayer(const Layer::Ptr& layer): LayerDecorator(layer) {
18     checkType("ROIPooling");
19 }
20
21 Builder::ROIPoolingLayer::ROIPoolingLayer(const Layer::CPtr& layer): LayerDecorator(layer) {
22     checkType("ROIPooling");
23 }
24
25 Builder::ROIPoolingLayer& Builder::ROIPoolingLayer::setName(const std::string& name) {
26     getLayer()->setName(name);
27     return *this;
28 }
29 const std::vector<Port>& Builder::ROIPoolingLayer::getInputPorts() const {
30     return getLayer()->getInputPorts();
31 }
32 Builder::ROIPoolingLayer& Builder::ROIPoolingLayer::setInputPorts(const std::vector<Port>& ports) {
33     if (ports.size() != 2)
34         THROW_IE_EXCEPTION << "ROIPoolingLayer should have 2 inputs!";
35     getLayer()->getInputPorts() = ports;
36     return *this;
37 }
38 const Port& Builder::ROIPoolingLayer::getOutputPort() const {
39     return getLayer()->getOutputPorts()[0];
40 }
41 Builder::ROIPoolingLayer& Builder::ROIPoolingLayer::setOutputPort(const Port& port) {
42     getLayer()->getOutputPorts()[0] = port;
43     return *this;
44 }
45 float Builder::ROIPoolingLayer::getSpatialScale() const {
46     return getLayer()->getParameters().at("spatial_scale");
47 }
48 Builder::ROIPoolingLayer& Builder::ROIPoolingLayer::setSpatialScale(float spatialScale) {
49     getLayer()->getParameters()["spatial_scale"] = spatialScale;
50     return *this;
51 }
52 const std::vector<int> Builder::ROIPoolingLayer::getPooled() const {
53     return {getLayer()->getParameters().at("pooled_h"),
54             getLayer()->getParameters().at("pooled_w")};
55 }
56 Builder::ROIPoolingLayer& Builder::ROIPoolingLayer::setPooled(const std::vector<int>& pooled) {
57     if (pooled.size() != 2)
58         THROW_IE_EXCEPTION << "ROIPoolingLayer supports only pooled for height and width dimensions";
59     getLayer()->getParameters()["pooled_h"] = pooled[0];
60     getLayer()->getParameters()["pooled_w"] = pooled[1];
61     return *this;
62 }
63
64 REG_CONVERTER_FOR(ROIPooling, [](const CNNLayerPtr& cnnLayer, Builder::Layer& layer) {
65     layer.getParameters()["pooled_h"] = cnnLayer->GetParamAsInt("pooled_h", 0);
66     layer.getParameters()["pooled_w"] = cnnLayer->GetParamAsInt("pooled_w", 0);
67     layer.getParameters()["spatial_scale"] = cnnLayer->GetParamAsFloat("spatial_scale");
68 });