OpenCV  3.4.1
Open Source Computer Vision
Public Types | Public Member Functions | List of all members
cv::dnn::Net Class Reference

This class allows to create and manipulate comprehensive artificial neural networks. More...

#include "dnn.hpp"

Public Types

typedef DictValue LayerId
 Container for strings and integers. More...
 

Public Member Functions

 Net ()
 Default constructor. More...
 
 ~Net ()
 Destructor frees the net only if there aren't references to the net anymore. More...
 
int addLayer (const String &name, const String &type, LayerParams &params)
 Adds new layer to the net. More...
 
int addLayerToPrev (const String &name, const String &type, LayerParams &params)
 Adds new layer and connects its first input to the first output of previously added layer. More...
 
void connect (String outPin, String inpPin)
 Connects output of the first layer to input of the second layer. More...
 
void connect (int outLayerId, int outNum, int inpLayerId, int inpNum)
 Connects #outNum output of the first layer to #inNum input of the second layer. More...
 
void deleteLayer (LayerId layer)
 Delete layer for the network (not implemented yet) More...
 
bool empty () const
 
void enableFusion (bool fusion)
 Enables or disables layer fusion in the network. More...
 
Mat forward (const String &outputName=String())
 Runs forward pass to compute output of layer with name outputName. More...
 
void forward (OutputArrayOfArrays outputBlobs, const String &outputName=String())
 Runs forward pass to compute output of layer with name outputName. More...
 
void forward (OutputArrayOfArrays outputBlobs, const std::vector< String > &outBlobNames)
 Runs forward pass to compute outputs of layers listed in outBlobNames. More...
 
void forward (std::vector< std::vector< Mat > > &outputBlobs, const std::vector< String > &outBlobNames)
 Runs forward pass to compute outputs of layers listed in outBlobNames. More...
 
int64 getFLOPS (const std::vector< MatShape > &netInputShapes) const
 Computes FLOP for whole loaded model with specified input shapes. More...
 
int64 getFLOPS (const MatShape &netInputShape) const
 
int64 getFLOPS (const int layerId, const std::vector< MatShape > &netInputShapes) const
 
int64 getFLOPS (const int layerId, const MatShape &netInputShape) const
 
Ptr< LayergetLayer (LayerId layerId)
 Returns pointer to layer with specified id or name which the network use. More...
 
int getLayerId (const String &layer)
 Converts string name of the layer to the integer identifier. More...
 
std::vector< Ptr< Layer > > getLayerInputs (LayerId layerId)
 Returns pointers to input layers of specific layer. More...
 
std::vector< StringgetLayerNames () const
 
int getLayersCount (const String &layerType) const
 Returns count of layers of specified type. More...
 
void getLayerShapes (const MatShape &netInputShape, const int layerId, std::vector< MatShape > &inLayerShapes, std::vector< MatShape > &outLayerShapes) const
 Returns input and output shapes for layer with specified id in loaded model; preliminary inferencing isn't necessary. More...
 
void getLayerShapes (const std::vector< MatShape > &netInputShapes, const int layerId, std::vector< MatShape > &inLayerShapes, std::vector< MatShape > &outLayerShapes) const
 
void getLayersShapes (const std::vector< MatShape > &netInputShapes, std::vector< int > &layersIds, std::vector< std::vector< MatShape > > &inLayersShapes, std::vector< std::vector< MatShape > > &outLayersShapes) const
 Returns input and output shapes for all layers in loaded model; preliminary inferencing isn't necessary. More...
 
void getLayersShapes (const MatShape &netInputShape, std::vector< int > &layersIds, std::vector< std::vector< MatShape > > &inLayersShapes, std::vector< std::vector< MatShape > > &outLayersShapes) const
 
void getLayerTypes (std::vector< String > &layersTypes) const
 Returns list of types for layer used in model. More...
 
void getMemoryConsumption (const std::vector< MatShape > &netInputShapes, size_t &weights, size_t &blobs) const
 Computes bytes number which are requered to store all weights and intermediate blobs for model. More...
 
void getMemoryConsumption (const MatShape &netInputShape, size_t &weights, size_t &blobs) const
 
void getMemoryConsumption (const int layerId, const std::vector< MatShape > &netInputShapes, size_t &weights, size_t &blobs) const
 
void getMemoryConsumption (const int layerId, const MatShape &netInputShape, size_t &weights, size_t &blobs) const
 
void getMemoryConsumption (const std::vector< MatShape > &netInputShapes, std::vector< int > &layerIds, std::vector< size_t > &weights, std::vector< size_t > &blobs) const
 Computes bytes number which are requered to store all weights and intermediate blobs for each layer. More...
 
void getMemoryConsumption (const MatShape &netInputShape, std::vector< int > &layerIds, std::vector< size_t > &weights, std::vector< size_t > &blobs) const
 
Mat getParam (LayerId layer, int numParam=0)
 Returns parameter blob of the layer. More...
 
int64 getPerfProfile (std::vector< double > &timings)
 Returns overall time for inference and timings (in ticks) for layers. Indexes in returned vector correspond to layers ids. Some layers can be fused with others, in this case zero ticks count will be return for that skipped layers. More...
 
std::vector< int > getUnconnectedOutLayers () const
 Returns indexes of layers with unconnected outputs. More...
 
void setHalideScheduler (const String &scheduler)
 Compile Halide layers. More...
 
void setInput (InputArray blob, const String &name="")
 Sets the new value for the layer output blob. More...
 
void setInputsNames (const std::vector< String > &inputBlobNames)
 Sets outputs names of the network input pseudo layer. More...
 
void setParam (LayerId layer, int numParam, const Mat &blob)
 Sets the new value for the learned param of the layer. More...
 
void setPreferableBackend (int backendId)
 Ask network to use specific computation backend where it supported. More...
 
void setPreferableTarget (int targetId)
 Ask network to make computations on specific target device. More...
 

Detailed Description

This class allows to create and manipulate comprehensive artificial neural networks.

Neural network is presented as directed acyclic graph (DAG), where vertices are Layer instances, and edges specify relationships between layers inputs and outputs.

Each network layer has unique integer id and unique string name inside its network. LayerId can store either layer name or layer id.

This class supports reference counting of its instances, i. e. copies point to the same instance.

Member Typedef Documentation

§ LayerId

Container for strings and integers.

Constructor & Destructor Documentation

§ Net()

cv::dnn::Net::Net ( )
Python:
<dnn_Net object>=cv.dnn_Net()

Default constructor.

§ ~Net()

cv::dnn::Net::~Net ( )

Destructor frees the net only if there aren't references to the net anymore.

Member Function Documentation

§ addLayer()

int cv::dnn::Net::addLayer ( const String name,
const String type,
LayerParams params 
)

Adds new layer to the net.

Parameters
nameunique name of the adding layer.
typetypename of the adding layer (type must be registered in LayerRegister).
paramsparameters which will be used to initialize the creating layer.
Returns
unique identifier of created layer, or -1 if a failure will happen.

§ addLayerToPrev()

int cv::dnn::Net::addLayerToPrev ( const String name,
const String type,
LayerParams params 
)

Adds new layer and connects its first input to the first output of previously added layer.

See also
addLayer()

§ connect() [1/2]

void cv::dnn::Net::connect ( String  outPin,
String  inpPin 
)
Python:
None=cv.dnn_Net.connect(outPin, inpPin)

Connects output of the first layer to input of the second layer.

Parameters
outPindescriptor of the first layer output.
inpPindescriptor of the second layer input.

Descriptors have the following template <layer_name>[.input_number]:

  • the first part of the template layer_name is sting name of the added layer. If this part is empty then the network input pseudo layer will be used;
  • the second optional part of the template input_number is either number of the layer input, either label one. If this part is omitted then the first layer input will be used.

    See also
    setNetInputs(), Layer::inputNameToIndex(), Layer::outputNameToIndex()

§ connect() [2/2]

void cv::dnn::Net::connect ( int  outLayerId,
int  outNum,
int  inpLayerId,
int  inpNum 
)
Python:
None=cv.dnn_Net.connect(outPin, inpPin)

Connects #outNum output of the first layer to #inNum input of the second layer.

Parameters
outLayerIdidentifier of the first layer
inpLayerIdidentifier of the second layer
outNumnumber of the first layer output
inpNumnumber of the second layer input

§ deleteLayer()

void cv::dnn::Net::deleteLayer ( LayerId  layer)
Python:
None=cv.dnn_Net.deleteLayer(layer)

Delete layer for the network (not implemented yet)

§ empty()

bool cv::dnn::Net::empty ( ) const
Python:
retval=cv.dnn_Net.empty()

Returns true if there are no layers in the network.

§ enableFusion()

void cv::dnn::Net::enableFusion ( bool  fusion)
Python:
None=cv.dnn_Net.enableFusion(fusion)

Enables or disables layer fusion in the network.

Parameters
fusiontrue to enable the fusion, false to disable. The fusion is enabled by default.

§ forward() [1/4]

Mat cv::dnn::Net::forward ( const String outputName = String())
Python:
retval=cv.dnn_Net.forward([, outputName])
outputBlobs=cv.dnn_Net.forward([, outputBlobs[, outputName]])
outputBlobs=cv.dnn_Net.forward(outBlobNames[, outputBlobs])
outputBlobs=cv.dnn_Net.forwardAndRetrieve(outBlobNames)

Runs forward pass to compute output of layer with name outputName.

Parameters
outputNamename for layer which output is needed to get
Returns
blob for first output of specified layer.

By default runs forward pass for the whole network.

§ forward() [2/4]

void cv::dnn::Net::forward ( OutputArrayOfArrays  outputBlobs,
const String outputName = String() 
)
Python:
retval=cv.dnn_Net.forward([, outputName])
outputBlobs=cv.dnn_Net.forward([, outputBlobs[, outputName]])
outputBlobs=cv.dnn_Net.forward(outBlobNames[, outputBlobs])
outputBlobs=cv.dnn_Net.forwardAndRetrieve(outBlobNames)

Runs forward pass to compute output of layer with name outputName.

Parameters
outputBlobscontains all output blobs for specified layer.
outputNamename for layer which output is needed to get

If outputName is empty, runs forward pass for the whole network.

§ forward() [3/4]

void cv::dnn::Net::forward ( OutputArrayOfArrays  outputBlobs,
const std::vector< String > &  outBlobNames 
)
Python:
retval=cv.dnn_Net.forward([, outputName])
outputBlobs=cv.dnn_Net.forward([, outputBlobs[, outputName]])
outputBlobs=cv.dnn_Net.forward(outBlobNames[, outputBlobs])
outputBlobs=cv.dnn_Net.forwardAndRetrieve(outBlobNames)

Runs forward pass to compute outputs of layers listed in outBlobNames.

Parameters
outputBlobscontains blobs for first outputs of specified layers.
outBlobNamesnames for layers which outputs are needed to get

§ forward() [4/4]

void cv::dnn::Net::forward ( std::vector< std::vector< Mat > > &  outputBlobs,
const std::vector< String > &  outBlobNames 
)
Python:
retval=cv.dnn_Net.forward([, outputName])
outputBlobs=cv.dnn_Net.forward([, outputBlobs[, outputName]])
outputBlobs=cv.dnn_Net.forward(outBlobNames[, outputBlobs])
outputBlobs=cv.dnn_Net.forwardAndRetrieve(outBlobNames)

Runs forward pass to compute outputs of layers listed in outBlobNames.

Parameters
outputBlobscontains all output blobs for each layer specified in outBlobNames.
outBlobNamesnames for layers which outputs are needed to get

§ getFLOPS() [1/4]

int64 cv::dnn::Net::getFLOPS ( const std::vector< MatShape > &  netInputShapes) const
Python:
retval=cv.dnn_Net.getFLOPS(netInputShapes)
retval=cv.dnn_Net.getFLOPS(netInputShape)
retval=cv.dnn_Net.getFLOPS(layerId, netInputShapes)
retval=cv.dnn_Net.getFLOPS(layerId, netInputShape)

Computes FLOP for whole loaded model with specified input shapes.

Parameters
netInputShapesvector of shapes for all net inputs.
Returns
computed FLOP.

§ getFLOPS() [2/4]

int64 cv::dnn::Net::getFLOPS ( const MatShape netInputShape) const
Python:
retval=cv.dnn_Net.getFLOPS(netInputShapes)
retval=cv.dnn_Net.getFLOPS(netInputShape)
retval=cv.dnn_Net.getFLOPS(layerId, netInputShapes)
retval=cv.dnn_Net.getFLOPS(layerId, netInputShape)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

§ getFLOPS() [3/4]

int64 cv::dnn::Net::getFLOPS ( const int  layerId,
const std::vector< MatShape > &  netInputShapes 
) const
Python:
retval=cv.dnn_Net.getFLOPS(netInputShapes)
retval=cv.dnn_Net.getFLOPS(netInputShape)
retval=cv.dnn_Net.getFLOPS(layerId, netInputShapes)
retval=cv.dnn_Net.getFLOPS(layerId, netInputShape)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

§ getFLOPS() [4/4]

int64 cv::dnn::Net::getFLOPS ( const int  layerId,
const MatShape netInputShape 
) const
Python:
retval=cv.dnn_Net.getFLOPS(netInputShapes)
retval=cv.dnn_Net.getFLOPS(netInputShape)
retval=cv.dnn_Net.getFLOPS(layerId, netInputShapes)
retval=cv.dnn_Net.getFLOPS(layerId, netInputShape)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

§ getLayer()

Ptr<Layer> cv::dnn::Net::getLayer ( LayerId  layerId)
Python:
retval=cv.dnn_Net.getLayer(layerId)

Returns pointer to layer with specified id or name which the network use.

§ getLayerId()

int cv::dnn::Net::getLayerId ( const String layer)
Python:
retval=cv.dnn_Net.getLayerId(layer)

Converts string name of the layer to the integer identifier.

Returns
id of the layer, or -1 if the layer wasn't found.

§ getLayerInputs()

std::vector<Ptr<Layer> > cv::dnn::Net::getLayerInputs ( LayerId  layerId)

Returns pointers to input layers of specific layer.

§ getLayerNames()

std::vector<String> cv::dnn::Net::getLayerNames ( ) const
Python:
retval=cv.dnn_Net.getLayerNames()

§ getLayersCount()

int cv::dnn::Net::getLayersCount ( const String layerType) const
Python:
retval=cv.dnn_Net.getLayersCount(layerType)

Returns count of layers of specified type.

Parameters
layerTypetype.
Returns
count of layers

§ getLayerShapes() [1/2]

void cv::dnn::Net::getLayerShapes ( const MatShape netInputShape,
const int  layerId,
std::vector< MatShape > &  inLayerShapes,
std::vector< MatShape > &  outLayerShapes 
) const

Returns input and output shapes for layer with specified id in loaded model; preliminary inferencing isn't necessary.

Parameters
netInputShapeshape input blob in net input layer.
layerIdid for layer.
inLayerShapesoutput parameter for input layers shapes; order is the same as in layersIds
outLayerShapesoutput parameter for output layers shapes; order is the same as in layersIds

§ getLayerShapes() [2/2]

void cv::dnn::Net::getLayerShapes ( const std::vector< MatShape > &  netInputShapes,
const int  layerId,
std::vector< MatShape > &  inLayerShapes,
std::vector< MatShape > &  outLayerShapes 
) const

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

§ getLayersShapes() [1/2]

void cv::dnn::Net::getLayersShapes ( const std::vector< MatShape > &  netInputShapes,
std::vector< int > &  layersIds,
std::vector< std::vector< MatShape > > &  inLayersShapes,
std::vector< std::vector< MatShape > > &  outLayersShapes 
) const
Python:
layersIds, inLayersShapes, outLayersShapes=cv.dnn_Net.getLayersShapes(netInputShapes)
layersIds, inLayersShapes, outLayersShapes=cv.dnn_Net.getLayersShapes(netInputShape)

Returns input and output shapes for all layers in loaded model; preliminary inferencing isn't necessary.

Parameters
netInputShapesshapes for all input blobs in net input layer.
layersIdsoutput parameter for layer IDs.
inLayersShapesoutput parameter for input layers shapes; order is the same as in layersIds
outLayersShapesoutput parameter for output layers shapes; order is the same as in layersIds

§ getLayersShapes() [2/2]

void cv::dnn::Net::getLayersShapes ( const MatShape netInputShape,
std::vector< int > &  layersIds,
std::vector< std::vector< MatShape > > &  inLayersShapes,
std::vector< std::vector< MatShape > > &  outLayersShapes 
) const
Python:
layersIds, inLayersShapes, outLayersShapes=cv.dnn_Net.getLayersShapes(netInputShapes)
layersIds, inLayersShapes, outLayersShapes=cv.dnn_Net.getLayersShapes(netInputShape)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

§ getLayerTypes()

void cv::dnn::Net::getLayerTypes ( std::vector< String > &  layersTypes) const
Python:
layersTypes=cv.dnn_Net.getLayerTypes()

Returns list of types for layer used in model.

Parameters
layersTypesoutput parameter for returning types.

§ getMemoryConsumption() [1/6]

void cv::dnn::Net::getMemoryConsumption ( const std::vector< MatShape > &  netInputShapes,
size_t &  weights,
size_t &  blobs 
) const
Python:
weights, blobs=cv.dnn_Net.getMemoryConsumption(netInputShape)
weights, blobs=cv.dnn_Net.getMemoryConsumption(layerId, netInputShapes)
weights, blobs=cv.dnn_Net.getMemoryConsumption(layerId, netInputShape)

Computes bytes number which are requered to store all weights and intermediate blobs for model.

Parameters
netInputShapesvector of shapes for all net inputs.
weightsoutput parameter to store resulting bytes for weights.
blobsoutput parameter to store resulting bytes for intermediate blobs.

§ getMemoryConsumption() [2/6]

void cv::dnn::Net::getMemoryConsumption ( const MatShape netInputShape,
size_t &  weights,
size_t &  blobs 
) const
Python:
weights, blobs=cv.dnn_Net.getMemoryConsumption(netInputShape)
weights, blobs=cv.dnn_Net.getMemoryConsumption(layerId, netInputShapes)
weights, blobs=cv.dnn_Net.getMemoryConsumption(layerId, netInputShape)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

§ getMemoryConsumption() [3/6]

void cv::dnn::Net::getMemoryConsumption ( const int  layerId,
const std::vector< MatShape > &  netInputShapes,
size_t &  weights,
size_t &  blobs 
) const
Python:
weights, blobs=cv.dnn_Net.getMemoryConsumption(netInputShape)
weights, blobs=cv.dnn_Net.getMemoryConsumption(layerId, netInputShapes)
weights, blobs=cv.dnn_Net.getMemoryConsumption(layerId, netInputShape)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

§ getMemoryConsumption() [4/6]

void cv::dnn::Net::getMemoryConsumption ( const int  layerId,
const MatShape netInputShape,
size_t &  weights,
size_t &  blobs 
) const
Python:
weights, blobs=cv.dnn_Net.getMemoryConsumption(netInputShape)
weights, blobs=cv.dnn_Net.getMemoryConsumption(layerId, netInputShapes)
weights, blobs=cv.dnn_Net.getMemoryConsumption(layerId, netInputShape)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

§ getMemoryConsumption() [5/6]

void cv::dnn::Net::getMemoryConsumption ( const std::vector< MatShape > &  netInputShapes,
std::vector< int > &  layerIds,
std::vector< size_t > &  weights,
std::vector< size_t > &  blobs 
) const
Python:
weights, blobs=cv.dnn_Net.getMemoryConsumption(netInputShape)
weights, blobs=cv.dnn_Net.getMemoryConsumption(layerId, netInputShapes)
weights, blobs=cv.dnn_Net.getMemoryConsumption(layerId, netInputShape)

Computes bytes number which are requered to store all weights and intermediate blobs for each layer.

Parameters
netInputShapesvector of shapes for all net inputs.
layerIdsoutput vector to save layer IDs.
weightsoutput parameter to store resulting bytes for weights.
blobsoutput parameter to store resulting bytes for intermediate blobs.

§ getMemoryConsumption() [6/6]

void cv::dnn::Net::getMemoryConsumption ( const MatShape netInputShape,
std::vector< int > &  layerIds,
std::vector< size_t > &  weights,
std::vector< size_t > &  blobs 
) const
Python:
weights, blobs=cv.dnn_Net.getMemoryConsumption(netInputShape)
weights, blobs=cv.dnn_Net.getMemoryConsumption(layerId, netInputShapes)
weights, blobs=cv.dnn_Net.getMemoryConsumption(layerId, netInputShape)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

§ getParam()

Mat cv::dnn::Net::getParam ( LayerId  layer,
int  numParam = 0 
)
Python:
retval=cv.dnn_Net.getParam(layer[, numParam])

Returns parameter blob of the layer.

Parameters
layername or id of the layer.
numParamindex of the layer parameter in the Layer::blobs array.
See also
Layer::blobs

§ getPerfProfile()

int64 cv::dnn::Net::getPerfProfile ( std::vector< double > &  timings)
Python:
retval, timings=cv.dnn_Net.getPerfProfile()

Returns overall time for inference and timings (in ticks) for layers. Indexes in returned vector correspond to layers ids. Some layers can be fused with others, in this case zero ticks count will be return for that skipped layers.

Parameters
timingsvector for tick timings for all layers.
Returns
overall ticks for model inference.

§ getUnconnectedOutLayers()

std::vector<int> cv::dnn::Net::getUnconnectedOutLayers ( ) const
Python:
retval=cv.dnn_Net.getUnconnectedOutLayers()

Returns indexes of layers with unconnected outputs.

§ setHalideScheduler()

void cv::dnn::Net::setHalideScheduler ( const String scheduler)
Python:
None=cv.dnn_Net.setHalideScheduler(scheduler)

Compile Halide layers.

Parameters
[in]schedulerPath to YAML file with scheduling directives.
See also
setPreferableBackend

Schedule layers that support Halide backend. Then compile them for specific target. For layers that not represented in scheduling file or if no manual scheduling used at all, automatic scheduling will be applied.

§ setInput()

void cv::dnn::Net::setInput ( InputArray  blob,
const String name = "" 
)
Python:
None=cv.dnn_Net.setInput(blob[, name])

Sets the new value for the layer output blob.

Parameters
namedescriptor of the updating layer output blob.
blobnew blob.
See also
connect(String, String) to know format of the descriptor.
Note
If updating blob is not empty then blob must have the same shape, because network reshaping is not implemented yet.

§ setInputsNames()

void cv::dnn::Net::setInputsNames ( const std::vector< String > &  inputBlobNames)
Python:
None=cv.dnn_Net.setInputsNames(inputBlobNames)

Sets outputs names of the network input pseudo layer.

Each net always has special own the network input pseudo layer with id=0. This layer stores the user blobs only and don't make any computations. In fact, this layer provides the only way to pass user data into the network. As any other layer, this layer can label its outputs and this function provides an easy way to do this.

§ setParam()

void cv::dnn::Net::setParam ( LayerId  layer,
int  numParam,
const Mat blob 
)
Python:
None=cv.dnn_Net.setParam(layer, numParam, blob)

Sets the new value for the learned param of the layer.

Parameters
layername or id of the layer.
numParamindex of the layer parameter in the Layer::blobs array.
blobthe new value.
See also
Layer::blobs
Note
If shape of the new blob differs from the previous shape, then the following forward pass may fail.

§ setPreferableBackend()

void cv::dnn::Net::setPreferableBackend ( int  backendId)
Python:
None=cv.dnn_Net.setPreferableBackend(backendId)

Ask network to use specific computation backend where it supported.

Parameters
[in]backendIdbackend identifier.
See also
Backend

§ setPreferableTarget()

void cv::dnn::Net::setPreferableTarget ( int  targetId)
Python:
None=cv.dnn_Net.setPreferableTarget(targetId)

Ask network to make computations on specific target device.

Parameters
[in]targetIdtarget identifier.
See also
Target

The documentation for this class was generated from the following file: