ie_cnn_network.h
Go to the documentation of this file.
1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 //
4 
5 /**
6  * @brief A header file that provides wrapper for ICNNNetwork object
7  * @file ie_cnn_network.h
8  */
9 #pragma once
10 
13 #include <ie_icnn_network.hpp>
14 #include <ie_icnn_net_reader.h>
15 #include "ie_common.h"
16 #include "ie_data.h"
17 #include "ie_blob.h"
18 #include <vector>
19 #include <string>
20 #include <map>
21 #include <utility>
22 #include <memory>
23 
24 namespace InferenceEngine {
25 
26 /**
27  * @brief This class contains all the information about the Neural Network and the related binary information
28  */
29 class CNNNetwork {
30 public:
31  /**
32  * @brief A default constructor
33  */
34  CNNNetwork() = default;
35 
36  /**
37  * @deprecated Use CNNNetwork::CNNNetwork(std::shared_ptr<ICNNNetwork>) to construct a network
38  * @brief Initialises helper class from externally managed pointer
39  * @param actual Pointer to the network object
40  */
41  INFERENCE_ENGINE_DEPRECATED
42  explicit CNNNetwork(ICNNNetwork* actual) : actual(actual) {
43  if (actual == nullptr) {
44  THROW_IE_EXCEPTION << "CNNNetwork was not initialized.";
45  }
46  }
47 
48  /**
49  * @brief Allows helper class to manage lifetime of network object
50  * @param network Pointer to the network object
51  */
52  explicit CNNNetwork(std::shared_ptr<ICNNNetwork> network)
53  : network(network) {
54  actual = network.get();
55  if (actual == nullptr) {
56  THROW_IE_EXCEPTION << "CNNNetwork was not initialized.";
57  }
58  }
59 
60  /**
61  * @brief A constructor from ICNNNetReader object
62  * @param reader Pointer to the ICNNNetReader object
63  */
64  explicit CNNNetwork(std::shared_ptr<ICNNNetReader> reader)
65  : reader(reader)
66  , actual(reader->getNetwork(nullptr)) {
67  if (actual == nullptr) {
68  THROW_IE_EXCEPTION << "CNNNetwork was not initialized.";
69  }
70  }
71 
72  /**
73  * @brief A destructor
74  */
75  virtual ~CNNNetwork() {}
76 
77  /**
78  * @brief Wraps original method
79  * ICNNNetwork::getPrecision
80  */
81  virtual Precision getPrecision() const {
82  return actual->getPrecision();
83  }
84 
85  /**
86  * @brief Wraps original method
87  * ICNNNetwork::getOutputsInfo
88  */
89  virtual OutputsDataMap getOutputsInfo() const {
90  OutputsDataMap outputs;
91  actual->getOutputsInfo(outputs);
92  return std::move(outputs);
93  }
94 
95  /**
96  * @brief Wraps original method
97  * ICNNNetwork::getInputsInfo
98  */
99  virtual InputsDataMap getInputsInfo() const {
100  InputsDataMap inputs;
101  actual->getInputsInfo(inputs);
102  return std::move(inputs);
103  }
104 
105  /**
106  * @brief Wraps original method
107  * ICNNNetwork::layerCount
108  */
109  size_t layerCount() const {
110  return actual->layerCount();
111  }
112 
113  /**
114  * @brief Wraps original method
115  * ICNNNetwork::getName
116  */
117  const std::string& getName() const noexcept {
118  return actual->getName();
119  }
120 
121  /**
122  * @brief Wraps original method
123  * ICNNNetwork::setBatchSize
124  */
125  virtual void setBatchSize(const size_t size) {
126  CALL_STATUS_FNC(setBatchSize, size);
127  }
128 
129  /**
130  * @brief Wraps original method
131  * ICNNNetwork::getBatchSize
132  */
133  virtual size_t getBatchSize() const {
134  return actual->getBatchSize();
135  }
136 
137  /**
138  * @brief An overloaded operator & to get current network
139  * @return An instance of the current network
140  */
141  operator ICNNNetwork &() const {
142  return *actual;
143  }
144 
145  /**
146  * @deprecated No needs to specify target device to the network. Use InferenceEngine::Core with target device directly
147  * @brief Sets tha target device
148  * @param device Device instance to set
149  */
150  #ifndef _WIN32
151  INFERENCE_ENGINE_DEPRECATED
152  #endif
154  IE_SUPPRESS_DEPRECATED_START
155  actual->setTargetDevice(device);
156  IE_SUPPRESS_DEPRECATED_END
157  }
158 
159  /**
160  * @brief Wraps original method
161  * ICNNNetwork::addOutput
162  */
163  void addOutput(const std::string &layerName, size_t outputIndex = 0) {
164  CALL_STATUS_FNC(addOutput, layerName, outputIndex);
165  }
166 
167  /**
168  * @brief Wraps original method
169  * ICNNNetwork::getLayerByName
170  */
171  CNNLayerPtr getLayerByName(const char *layerName) const {
172  CNNLayerPtr layer;
173  CALL_STATUS_FNC(getLayerByName, layerName, layer);
174  return layer;
175  }
176 
177  /**
178  * @brief Begin layer iterator
179  * Order of layers is implementation specific,
180  * and can be changed in future
181  */
182  details::CNNNetworkIterator begin() const {
183  return details::CNNNetworkIterator(actual);
184  }
185 
186  /**
187  * @brief End layer iterator
188  */
189  details::CNNNetworkIterator end() const {
190  return details::CNNNetworkIterator();
191  }
192 
193  /**
194  * @brief number of layers in network object
195  * @return
196  */
197  size_t size() const {
198  return std::distance(std::begin(*this), std::end(*this));
199  }
200 
201  /**
202  * @brief Registers extension within the plugin
203  * @param extension Pointer to already loaded reader extension with shape propagation implementations
204  */
205  void AddExtension(InferenceEngine::IShapeInferExtensionPtr extension) {
206  CALL_STATUS_FNC(AddExtension, extension);
207  }
208 
209  /**
210  * @brief - Helper method to get collect all input shapes with names of corresponding Data objects
211  * @return Map of pairs: input's name and its dimension.
212  */
215  InputsDataMap inputs;
216  actual->getInputsInfo(inputs);
217  for (const auto& pair : inputs) {
218  auto info = pair.second;
219  if (info) {
220  auto data = info->getInputData();
221  if (data) {
222  shapes[data->getName()] = data->getTensorDesc().getDims();
223  }
224  }
225  }
226  return std::move(shapes);
227  }
228 
229  /**
230  * @brief Run shape inference with new input shapes for the network
231  * @param inputShapes - map of pairs: name of corresponding data and its dimension.
232  */
233  virtual void reshape(const ICNNNetwork::InputShapes &inputShapes) {
234  CALL_STATUS_FNC(reshape, inputShapes);
235  }
236 
237  /**
238  * @brief Serialize network to IR and weights files.
239  * @param xmlPath Path to output IR file.
240  * @param binPath Path to output weights file. The parameter is skipped in case
241  * of executable graph info serialization.
242  */
243  void serialize(const std::string &xmlPath, const std::string &binPath = "") const {
244  CALL_STATUS_FNC(serialize, xmlPath, binPath);
245  }
246 
247 protected:
248  /**
249  * @brief reader extra reference, might be nullptr
250  */
251  std::shared_ptr<ICNNNetReader> reader;
252  /**
253  * @brief network extra interface, might be nullptr
254  */
255  std::shared_ptr<ICNNNetwork> network;
256 
257  /**
258  * @brief A pointer to the current network
259  */
260  ICNNNetwork *actual = nullptr;
261  /**
262  * @brief A pointer to output data
263  */
265 };
266 
267 } // namespace InferenceEngine
CNNLayerPtr getLayerByName(const char *layerName) const
Wraps original method ICNNNetwork::getLayerByName.
Definition: ie_cnn_network.h:171
virtual void getName(char *pName, size_t len) const noexcept=0
Gets the network name. The name is stored in the given pName string.
#define THROW_IE_EXCEPTION
A macro used to throw the exception with a notable description.
Definition: ie_exception.hpp:22
virtual ~CNNNetwork()
A destructor.
Definition: ie_cnn_network.h:75
CNNNetwork(std::shared_ptr< ICNNNetwork > network)
Allows helper class to manage lifetime of network object.
Definition: ie_cnn_network.h:52
TargetDevice
Describes known device types.
Definition: ie_device.hpp:24
ICNNNetwork * actual
A pointer to the current network.
Definition: ie_cnn_network.h:260
Definition: ie_argmax_layer.hpp:11
std::shared_ptr< CNNLayer > CNNLayerPtr
A smart pointer to the CNNLayer.
Definition: ie_common.h:36
A header file that provides macros to handle no exception methods.
virtual ICNNNetwork::InputShapes getInputShapes() const
Helper method to get collect all input shapes with names of corresponding Data objects ...
Definition: ie_cnn_network.h:213
const std::string & getName() const noexcept
Wraps original method ICNNNetwork::getName.
Definition: ie_cnn_network.h:117
virtual void getInputsInfo(InputsDataMap &inputs) const noexcept=0
Gets the network input Data node information. The received info is stored in the given InputsDataMap ...
virtual InputsDataMap getInputsInfo() const
Wraps original method ICNNNetwork::getInputsInfo.
Definition: ie_cnn_network.h:99
void addOutput(const std::string &layerName, size_t outputIndex=0)
Wraps original method ICNNNetwork::addOutput.
Definition: ie_cnn_network.h:163
A header file for Blob and generic TBlob<>
A header file for the CNNNetworkIterator class.
details::CNNNetworkIterator begin() const
Begin layer iterator Order of layers is implementation specific, and can be changed in future...
Definition: ie_cnn_network.h:182
void setTargetDevice(TargetDevice device)
Sets tha target device.
Definition: ie_cnn_network.h:153
This is a header file for the ICNNNetwork class.
std::map< std::string, InputInfo::Ptr > InputsDataMap
A collection that contains string as key, and InputInfo smart pointer as value.
Definition: ie_input_info.hpp:198
virtual void reshape(const ICNNNetwork::InputShapes &inputShapes)
Run shape inference with new input shapes for the network.
Definition: ie_cnn_network.h:233
size_t layerCount() const
Wraps original method ICNNNetwork::layerCount.
Definition: ie_cnn_network.h:109
virtual size_t getBatchSize() const noexcept=0
Gets the inference batch size.
virtual Precision getPrecision() const
Wraps original method ICNNNetwork::getPrecision.
Definition: ie_cnn_network.h:81
virtual size_t getBatchSize() const
Wraps original method ICNNNetwork::getBatchSize.
Definition: ie_cnn_network.h:133
std::shared_ptr< ICNNNetReader > reader
reader extra reference, might be nullptr
Definition: ie_cnn_network.h:251
This is the main interface to describe the NN topology.
Definition: ie_icnn_network.hpp:35
details::CNNNetworkIterator end() const
End layer iterator.
Definition: ie_cnn_network.h:189
void serialize(const std::string &xmlPath, const std::string &binPath="") const
Serialize network to IR and weights files.
Definition: ie_cnn_network.h:243
CNNNetwork(std::shared_ptr< ICNNNetReader > reader)
A constructor from ICNNNetReader object.
Definition: ie_cnn_network.h:64
virtual OutputsDataMap getOutputsInfo() const
Wraps original method ICNNNetwork::getOutputsInfo.
Definition: ie_cnn_network.h:89
This class contains all the information about the Neural Network and the related binary information...
Definition: ie_cnn_network.h:29
This header file defines the main Data representation node.
std::shared_ptr< ICNNNetwork > network
network extra interface, might be nullptr
Definition: ie_cnn_network.h:255
virtual void setTargetDevice(TargetDevice device) noexcept=0
Sets a desirable device to perform all work on. Some plug-ins might not support some target devices a...
CNNNetwork(ICNNNetwork *actual)
Initialises helper class from externally managed pointer.
Definition: ie_cnn_network.h:42
virtual size_t layerCount() const noexcept=0
Returns the number of layers in the network as an integer value.
virtual void setBatchSize(const size_t size)
Wraps original method ICNNNetwork::setBatchSize.
Definition: ie_cnn_network.h:125
size_t size() const
number of layers in network object
Definition: ie_cnn_network.h:197
DataPtr output
A pointer to output data.
Definition: ie_cnn_network.h:264
A header file that provides interface for network reader that is used to build networks from a given ...
std::shared_ptr< Data > DataPtr
Smart pointer to Data.
Definition: ie_common.h:50
void AddExtension(InferenceEngine::IShapeInferExtensionPtr extension)
Registers extension within the plugin.
Definition: ie_cnn_network.h:205
std::map< std::string, DataPtr > OutputsDataMap
A collection that contains string as key, and Data smart pointer as value.
Definition: ie_icnn_network.hpp:30
std::map< std::string, SizeVector > InputShapes
Map of pairs: name of corresponding data and its dimension.
Definition: ie_icnn_network.hpp:177
virtual Precision getPrecision() const noexcept=0
Returns the main network operating precision. This may be MIXED if not homogeneous.
virtual void getOutputsInfo(OutputsDataMap &out) const noexcept=0
Gets the network output Data node information. The received info is stored in the given Data node...
CNNNetwork()=default
A default constructor.
This is a header file with common inference engine definitions.
This class holds precision value and provides precision related operations.
Definition: ie_precision.hpp:19