OpenCV: Deep Neural Network module

| OpenCV 3.4.2 Open Source Computer Vision

Modules | Classes | Typedefs | Enumerations | Functions
Deep Neural Network module

## Modules
| Partial List of Implemented Layers
| Utilities for New Layers Registration

## Classes
class | cv::dnn::BackendNode
| Derivatives of this class encapsulates functions of certain backends. More...
class | cv::dnn::BackendWrapper
| Derivatives of this class wraps cv::Mat for different backends and targets. More...
class | cv::dnn::Dict
| This class implements name-value dictionary, values are instances of DictValue. More...
struct | cv::dnn::DictValue
| This struct stores the scalar value (or array) of one of the following type: double, cv::String or int64. More...
class | cv::dnn::Layer
| This interface class allows to build new Layers - are building blocks of networks. More...
class | cv::dnn::LayerParams
| This class provides all data needed to initialize layer. More...
class | cv::dnn::Net
| This class allows to create and manipulate comprehensive artificial neural networks. More...

## Typedefs
typedef std::vector< int > | cv::dnn::MatShape

## Enumerations
enum | cv::dnn::Backend { cv::dnn::DNN_BACKEND_DEFAULT, cv::dnn::DNN_BACKEND_HALIDE, cv::dnn::DNN_BACKEND_INFERENCE_ENGINE, cv::dnn::DNN_BACKEND_OPENCV }
| Enum of computation backends supported by layers. More...
enum | cv::dnn::Target { cv::dnn::DNN_TARGET_CPU, cv::dnn::DNN_TARGET_OPENCL, cv::dnn::DNN_TARGET_OPENCL_FP16, cv::dnn::DNN_TARGET_MYRIAD }
| Enum of target devices for computations. More...

## Functions
Mat | cv::dnn::blobFromImage (InputArray image, double scalefactor=1.0, const Size &size=Size(), const Scalar &mean=Scalar(), bool swapRB=true, bool crop=true)
| Creates 4-dimensional blob from image. Optionally resizes and crops `image` from center, subtract `mean` values, scales values by `scalefactor`, swap Blue and Red channels. More...
void | cv::dnn::blobFromImage (InputArray image, OutputArray blob, double scalefactor=1.0, const Size &size=Size(), const Scalar &mean=Scalar(), bool swapRB=true, bool crop=true)
| Creates 4-dimensional blob from image. More...
Mat | cv::dnn::blobFromImages (InputArrayOfArrays images, double scalefactor=1.0, Size size=Size(), const Scalar &mean=Scalar(), bool swapRB=true, bool crop=true)
| Creates 4-dimensional blob from series of images. Optionally resizes and crops `images` from center, subtract `mean` values, scales values by `scalefactor`, swap Blue and Red channels. More...
void | cv::dnn::blobFromImages (InputArrayOfArrays images, OutputArray blob, double scalefactor=1.0, Size size=Size(), const Scalar &mean=Scalar(), bool swapRB=true, bool crop=true)
| Creates 4-dimensional blob from series of images. More...
void | cv::dnn::imagesFromBlob (const cv::Mat &blob_, OutputArrayOfArrays images_)
| Parse a 4D blob and output the images it contains as 2D arrays through a simpler data structure (std::vector<cv::Mat>). More...
void | cv::dnn::NMSBoxes (const std::vector< Rect > &bboxes, const std::vector< float > &scores, const float score_threshold, const float nms_threshold, std::vector< int > &indices, const float eta=1.f, const int top_k=0)
| Performs non maximum suppression given boxes and corresponding scores. More...
void | cv::dnn::NMSBoxes (const std::vector< RotatedRect > &bboxes, const std::vector< float > &scores, const float score_threshold, const float nms_threshold, std::vector< int > &indices, const float eta=1.f, const int top_k=0)
Net | cv::dnn::readNet (const String &model, const String &config="", const String &framework="")
| Read deep learning network represented in one of the supported formats. More...
Net | cv::dnn::readNetFromCaffe (const String &prototxt, const String &caffeModel=String())
| Reads a network model stored in Caffe framework's format. More...
Net | cv::dnn::readNetFromCaffe (const char *bufferProto, size_t lenProto, const char *bufferModel=NULL, size_t lenModel=0)
| Reads a network model stored in Caffe model in memory. More...
Net | cv::dnn::readNetFromDarknet (const String &cfgFile, const String &darknetModel=String())
| Reads a network model stored in Darknet model files. More...
Net | cv::dnn::readNetFromModelOptimizer (const String &xml, const String &bin)
| Load a network from Intel's Model Optimizer intermediate representation. More...
Net | cv::dnn::readNetFromTensorflow (const String &model, const String &config=String())
| Reads a network model stored in TensorFlow framework's format. More...
Net | cv::dnn::readNetFromTensorflow (const char *bufferModel, size_t lenModel, const char *bufferConfig=NULL, size_t lenConfig=0)
| Reads a network model stored in TensorFlow framework's format. More...
Net | cv::dnn::readNetFromTorch (const String &model, bool isBinary=true)
| Reads a network model stored in Torch7 framework's format. More...
Mat | cv::dnn::readTorchBlob (const String &filename, bool isBinary=true)
| Loads blob which was serialized as torch.Tensor object of Torch7 framework. More...
void | cv::dnn::shrinkCaffeModel (const String &src, const String &dst, const std::vector< String > &layersTypes=std::vector< String >())
| Convert all weights of Caffe network to half precision floating point. More...

## Detailed Description

This module contains:

- API for new layers creation, layers are building bricks of neural networks;
- set of built-in most-useful Layers;
- API to construct and modify comprehensive neural networks from layers;
- functionality for loading serialized networks models from different frameworks.

Functionality of this module is designed only for forward pass computations (i.e. network testing). A network training is in principle not supported.

## Typedef Documentation

## ◆ MatShape

typedef std::vector<int> cv::dnn::MatShape

## Enumeration Type Documentation

## ◆ Backend

enum cv::dnn::Backend

Enum of computation backends supported by layers.

See also
  Net::setPreferableBackend

Enumerator
DNN_BACKEND_DEFAULT | DNN_BACKEND_DEFAULT equals to DNN_BACKEND_INFERENCE_ENGINE if OpenCV is built with Intel's Inference Engine library or DNN_BACKEND_OPENCV otherwise.
DNN_BACKEND_HALIDE |
DNN_BACKEND_INFERENCE_ENGINE |
DNN_BACKEND_OPENCV |

## ◆ Target

enum cv::dnn::Target

Enum of target devices for computations.

See also
  Net::setPreferableTarget

Enumerator
DNN_TARGET_CPU |
DNN_TARGET_OPENCL |
DNN_TARGET_OPENCL_FP16 |
DNN_TARGET_MYRIAD |

## Function Documentation

## ◆ blobFromImage() [1/2]

Mat cv::dnn::blobFromImage | ( | InputArray | image,
|  | double | scalefactor = `1.0`,
|  | const Size & | size = `Size()`,
|  | const Scalar & | mean = `Scalar()`,
|  | bool | swapRB = `true`,
|  | bool | crop = `true`
| ) |  |

Creates 4-dimensional blob from image. Optionally resizes and crops `image` from center, subtract `mean` values, scales values by `scalefactor`, swap Blue and Red channels.

Parameters

  image | input image (with 1-, 3- or 4-channels).
  size | spatial size for output image
  mean | scalar with mean values which are subtracted from channels. Values are intended to be in (mean-R, mean-G, mean-B) order if `image` has BGR ordering and `swapRB` is true.
  scalefactor | multiplier for `image` values.
  swapRB | flag which indicates that swap first and last channels in 3-channel image is necessary.
  crop | flag which indicates whether image will be cropped after resize or not

if `crop` is true, input image is resized so one side after resize is equal to corresponding dimension in `size` and another one is equal or larger. Then, crop from the center is performed. If `crop` is false, direct resize without cropping and preserving aspect ratio is performed.

Returns
  4-dimensional Mat with NCHW dimensions order.

## ◆ blobFromImage() [2/2]

void cv::dnn::blobFromImage | ( | InputArray | image,
|  | OutputArray | blob,
|  | double | scalefactor = `1.0`,
|  | const Size & | size = `Size()`,
|  | const Scalar & | mean = `Scalar()`,
|  | bool | swapRB = `true`,
|  | bool | crop = `true`
| ) |  |

Creates 4-dimensional blob from image.

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

## ◆ blobFromImages() [1/2]

Mat cv::dnn::blobFromImages | ( | InputArrayOfArrays | images,
|  | double | scalefactor = `1.0`,
|  | Size | size = `Size()`,
|  | const Scalar & | mean = `Scalar()`,
|  | bool | swapRB = `true`,
|  | bool | crop = `true`
| ) |  |

Creates 4-dimensional blob from series of images. Optionally resizes and crops `images` from center, subtract `mean` values, scales values by `scalefactor`, swap Blue and Red channels.

Parameters

  images | input images (all with 1-, 3- or 4-channels).
  size | spatial size for output image
  mean | scalar with mean values which are subtracted from channels. Values are intended to be in (mean-R, mean-G, mean-B) order if `image` has BGR ordering and `swapRB` is true.
  scalefactor | multiplier for `images` values.
  swapRB | flag which indicates that swap first and last channels in 3-channel image is necessary.
  crop | flag which indicates whether image will be cropped after resize or not

if `crop` is true, input image is resized so one side after resize is equal to corresponding dimension in `size` and another one is equal or larger. Then, crop from the center is performed. If `crop` is false, direct resize without cropping and preserving aspect ratio is performed.

Returns
  4-dimansional Mat with NCHW dimensions order.

## ◆ blobFromImages() [2/2]

void cv::dnn::blobFromImages | ( | InputArrayOfArrays | images,
|  | OutputArray | blob,
|  | double | scalefactor = `1.0`,
|  | Size | size = `Size()`,
|  | const Scalar & | mean = `Scalar()`,
|  | bool | swapRB = `true`,
|  | bool | crop = `true`
| ) |  |

Creates 4-dimensional blob from series of images.

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

## ◆ imagesFromBlob()

void cv::dnn::imagesFromBlob | ( | const cv::Mat & | blob_,
|  | OutputArrayOfArrays | images_
| ) |  |

Parse a 4D blob and output the images it contains as 2D arrays through a simpler data structure (std::vector<cv::Mat>).

Parameters

  [in] | blob_ | 4 dimensional array (images, channels, height, width) in floating point precision (CV_32F) from which you would like to extract the images.
  [out] | images_ | array of 2D Mat containing the images extracted from the blob in floating point precision (CV_32F). They are non normalized neither mean added. The number of returned images equals the first dimension of the blob (batch size). Every image has a number of channels equals to the second dimension of the blob (depth).

## ◆ NMSBoxes() [1/2]

void cv::dnn::NMSBoxes | ( | const std::vector< Rect > & | bboxes,
|  | const std::vector< float > & | scores,
|  | const float | score_threshold,
|  | const float | nms_threshold,
|  | std::vector< int > & | indices,
|  | const float | eta = `1.f`,
|  | const int | top_k = `0`
| ) |  |

Performs non maximum suppression given boxes and corresponding scores.

Parameters

  bboxes | a set of bounding boxes to apply NMS.
  scores | a set of corresponding confidences.
  score_threshold | a threshold used to filter boxes by score.
  nms_threshold | a threshold used in non maximum suppression.
  indices | the kept indices of bboxes after NMS.
  eta | a coefficient in adaptive threshold formula: \(nms\_threshold_{i+1}=eta\cdot nms\_threshold_i\).
  top_k | if `>0`, keep at most `top_k` picked indices.

## ◆ NMSBoxes() [2/2]

void cv::dnn::NMSBoxes | ( | const std::vector< RotatedRect > & | bboxes,
|  | const std::vector< float > & | scores,
|  | const float | score_threshold,
|  | const float | nms_threshold,
|  | std::vector< int > & | indices,
|  | const float | eta = `1.f`,
|  | const int | top_k = `0`
| ) |  |

## ◆ readNet()

Net cv::dnn::readNet | ( | const String & | model,
|  | const String & | config = `""`,
|  | const String & | framework = `""`
| ) |  |

Read deep learning network represented in one of the supported formats.

Parameters

  [in] | model | Binary file contains trained weights. The following file extensions are expected for models from different frameworks: `*.caffemodel` (Caffe, http://caffe.berkeleyvision.org/) `*.pb` (TensorFlow, https://www.tensorflow.org/) `*.t7` | `*.net` (Torch, http://torch.ch/) `*.weights` (Darknet, https://pjreddie.com/darknet/) `*.bin` (DLDT, https://software.intel.com/openvino-toolkit)
  [in] | config | Text file contains network configuration. It could be a file with the following extensions: `*.prototxt` (Caffe, http://caffe.berkeleyvision.org/) `*.pbtxt` (TensorFlow, https://www.tensorflow.org/) `*.cfg` (Darknet, https://pjreddie.com/darknet/) `*.xml` (DLDT, https://software.intel.com/openvino-toolkit)
  [in] | framework | Explicit framework name tag to determine a format.

Returns
  Net object.

This function automatically detects an origin framework of trained model and calls an appropriate function such readNetFromCaffe, readNetFromTensorflow, readNetFromTorch or readNetFromDarknet. An order of `model` and `config` arguments does not matter.

## ◆ readNetFromCaffe() [1/2]

Net cv::dnn::readNetFromCaffe | ( | const String & | prototxt,
|  | const String & | caffeModel = `String()`
| ) |  |

Reads a network model stored in Caffe framework's format.

Parameters

  prototxt | path to the .prototxt file with text description of the network architecture.
  caffeModel | path to the .caffemodel file with learned network.

Returns
  Net object.

## ◆ readNetFromCaffe() [2/2]

Net cv::dnn::readNetFromCaffe | ( | const char * | bufferProto,
|  | size_t | lenProto,
|  | const char * | bufferModel = `NULL`,
|  | size_t | lenModel = `0`
| ) |  |

Reads a network model stored in Caffe model in memory.

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

Parameters

  bufferProto | buffer containing the content of the .prototxt file
  lenProto | length of bufferProto
  bufferModel | buffer containing the content of the .caffemodel file
  lenModel | length of bufferModel

Returns
  Net object.

## ◆ readNetFromDarknet()

Net cv::dnn::readNetFromDarknet | ( | const String & | cfgFile,
|  | const String & | darknetModel = `String()`
| ) |  |

Reads a network model stored in Darknet model files.

Parameters

  cfgFile | path to the .cfg file with text description of the network architecture.
  darknetModel | path to the .weights file with learned network.

Returns
  Network object that ready to do forward, throw an exception in failure cases.
  Net object.

## ◆ readNetFromModelOptimizer()

Net cv::dnn::readNetFromModelOptimizer | ( | const String & | xml,
|  | const String & | bin
| ) |  |

Load a network from Intel's Model Optimizer intermediate representation.

Parameters

  [in] | xml | XML configuration file with network's topology.
  [in] | bin | Binary file with trained weights.

Returns
  Net object. Networks imported from Intel's Model Optimizer are launched in Intel's Inference Engine backend.

## ◆ readNetFromTensorflow() [1/2]

Net cv::dnn::readNetFromTensorflow | ( | const String & | model,
|  | const String & | config = `String()`
| ) |  |

Reads a network model stored in TensorFlow framework's format.

Parameters

  model | path to the .pb file with binary protobuf description of the network architecture
  config | path to the .pbtxt file that contains text graph definition in protobuf format. Resulting Net object is built by text graph using weights from a binary one that let us make it more flexible.

Returns
  Net object.

## ◆ readNetFromTensorflow() [2/2]

Net cv::dnn::readNetFromTensorflow | ( | const char * | bufferModel,
|  | size_t | lenModel,
|  | const char * | bufferConfig = `NULL`,
|  | size_t | lenConfig = `0`
| ) |  |

Reads a network model stored in TensorFlow framework's format.

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

Parameters

  bufferModel | buffer containing the content of the pb file
  lenModel | length of bufferModel
  bufferConfig | buffer containing the content of the pbtxt file
  lenConfig | length of bufferConfig

## ◆ readNetFromTorch()

Net cv::dnn::readNetFromTorch | ( | const String & | model,
|  | bool | isBinary = `true`
| ) |  |

Reads a network model stored in Torch7 framework's format.

Parameters

  model | path to the file, dumped from Torch by using torch.save() function.
  isBinary | specifies whether the network was serialized in ascii mode or binary.

Returns
  Net object.

Note
  Ascii mode of Torch serializer is more preferable, because binary mode extensively use `long` type of C language, which has various bit-length on different systems.

The loading file must contain serialized nn.Module object with importing network. Try to eliminate a custom objects from serialazing data to avoid importing errors.

List of supported layers (i.e. object instances derived from Torch nn.Module class):

- nn.Sequential
- nn.Parallel
- nn.Concat
- nn.Linear
- nn.SpatialConvolution
- nn.SpatialMaxPooling, nn.SpatialAveragePooling
- nn.ReLU, nn.TanH, nn.Sigmoid
- nn.Reshape
- nn.SoftMax, nn.LogSoftMax

Also some equivalents of these classes from cunn, cudnn, and fbcunn may be successfully imported.

## ◆ readTorchBlob()

Mat cv::dnn::readTorchBlob | ( | const String & | filename,
|  | bool | isBinary = `true`
| ) |  |

Loads blob which was serialized as torch.Tensor object of Torch7 framework.

Warning
  This function has the same limitations as readNetFromTorch().

## ◆ shrinkCaffeModel()

void cv::dnn::shrinkCaffeModel | ( | const String & | src,
|  | const String & | dst,
|  | const std::vector< String > & | layersTypes = `std::vector< String >()`
| ) |  |

Convert all weights of Caffe network to half precision floating point.

Parameters

  src | Path to origin model from Caffe framework contains single precision floating point weights (usually has `.caffemodel` extension).
  dst | Path to destination model with updated weights.
  layersTypes | Set of layers types which parameters will be converted. By default, converts only Convolutional and Fully-Connected layers' weights.

Note
  Shrinked model has no origin float32 weights so it can't be used in origin Caffe framework anymore. However the structure of data is taken from NVidia's Caffe fork: https://github.com/NVIDIA/caffe. So the resulting model may be used there.