Class Net
java.lang.Object
org.opencv.dnn.Net
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.
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic Net__fromPtr__(long addr) voidConnects output of the first layer to input of the second layer.voidDisables KV-Cache for all AttentionOnnxI layersdump()Dump net to StringvoiddumpToFile(String path) Dump net structure, hyperparameters, backend, target and fusion to dot filevoiddumpToPbtxt(String path) Dump net structure, hyperparameters, backend, target and fusion to pbtxt filebooleanempty()Returns true if there are no layers in the network.voidenableFusion(boolean fusion) Enables or disables layer fusion in the network.voidEnables KV-Cache for all AttentionOnnxI layersvoidenableWinograd(boolean useWinograd) Enables or disables the Winograd compute branch.voidFinalizes the network configuration and prepares it for inference.forward()Runs forward pass to compute output of layer with nameoutputName.Runs forward pass to compute output of layer with nameoutputName.voidRuns forward pass to compute output of layer with nameoutputName.voidRuns forward pass to compute output of layer with nameoutputName.voidRuns forward pass to compute outputs of layers listed inoutBlobNames.voidRuns forward pass to compute outputs of layers listed inoutBlobNames.longComputes FLOP for whole loaded model with specified input shapes.getLayer(int layerId) Returns pointer to layer with specified id or name which the network use.Deprecated.Use int getLayerId(const String &layer)Deprecated.to be removedintgetLayerId(String layer) Converts string name of the layer to the integer identifier.intgetLayersCount(String layerType) Returns count of layers of specified type.voidgetLayerShapes(List<MatOfInt> netInputShapes, MatOfInt netInputTypes, int layerId, List<MatOfInt> inLayerShapes, List<MatOfInt> outLayerShapes) The only overload of getLayerShapes that should be kept in 5.xvoidgetLayerTypes(List<String> layersTypes) Returns list of types for layer used in model.voidgetMemoryConsumption(List<MatOfInt> netInputShapes, MatOfInt netInputTypes, long[] weights, long[] blobs) Computes bytes number which are required to store all weights and intermediate blobs for model.longgetParam(int layer) Returns parameter blob of the layer.getParam(int layer, int numParam) Returns parameter blob of the layer.voidReturns profiling data captured during the last forward pass.longgetPerfProfile(MatOfDouble timings) Returns overall time for inference and timings (in ticks) for layers.Returns indexes of layers with unconnected outputs.Returns names of layers with unconnected outputs.voidPrints the profile captured during the last forward pass in a formatted table using CV_LOG_INFO.static NetreadFromModelOptimizer(String xml, String bin) Create a network from Intel's Model Optimizer intermediate representation (IR).static NetreadFromModelOptimizer(MatOfByte bufferModelConfig, MatOfByte bufferWeights) Create a network from Intel's Model Optimizer in-memory buffers with intermediate representation (IR).intregisterOutput(String outputName, int layerId, int outputPort) Registers network output with name Function may create additional 'Identity' layer.voidResets KV-Cache for all AttentionOnnxI layersvoidSets the new input value for the networkvoidSets the new input value for the networkvoidSets the new input value for the networkvoidSets the new input value for the networkvoidsetInputShape(String inputName, MatOfInt shape) Specify shape of network input.voidsetInputsNames(List<String> inputBlobNames) Sets outputs names of the network input pseudo layer.voidSets the new value for the learned param of the layer.voidSets the parameter blob of a layer identified by its name or output tensor name.voidsetPreferableBackend(int backendId) Ask network to use specific computation backend where it supported.voidsetPreferableTarget(int targetId) Ask network to make computations on specific target device.
-
Field Details
-
nativeObj
protected final long nativeObj
-
-
Constructor Details
-
Net
protected Net(long addr) -
Net
public Net()
-
-
Method Details
-
getNativeObjAddr
public long getNativeObjAddr() -
__fromPtr__
-
readFromModelOptimizer
Create a network from Intel's Model Optimizer intermediate representation (IR).- Parameters:
xml- XML configuration file with network's topology.bin- Binary file with trained weights. Networks imported from Intel's Model Optimizer are launched in Intel's Inference Engine backend.- Returns:
- automatically generated
-
readFromModelOptimizer
Create a network from Intel's Model Optimizer in-memory buffers with intermediate representation (IR).- Parameters:
bufferModelConfig- buffer with model's configuration.bufferWeights- buffer with model's trained weights.- Returns:
- Net object.
-
empty
public boolean empty()Returns true if there are no layers in the network.- Returns:
- automatically generated
-
dump
Dump net to String- Returns:
- String with structure, hyperparameters, backend, target and fusion Call method after setInput(). To see correct backend, target and fusion run after forward().
-
dumpToFile
Dump net structure, hyperparameters, backend, target and fusion to dot file- Parameters:
path- path to output file with .dot extension SEE: dump()
-
dumpToPbtxt
Dump net structure, hyperparameters, backend, target and fusion to pbtxt file- Parameters:
path- path to output file with .pbtxt extension Use Netron (https://netron.app) to open the target file to visualize the model. Call method after setInput(). To see correct backend, target and fusion run after forward().
-
getLayerId
Converts string name of the layer to the integer identifier.- Parameters:
layer- automatically generated- Returns:
- id of the layer, or -1 if the layer wasn't found.
-
getLayerNames
-
getLayer
Returns pointer to layer with specified id or name which the network use.- Parameters:
layerId- automatically generated- Returns:
- automatically generated
-
getLayer
Deprecated.Use int getLayerId(const String &layer)- Parameters:
layerName- automatically generated- Returns:
- automatically generated
-
getLayer
Deprecated.to be removed- Parameters:
layerId- automatically generated- Returns:
- automatically generated
-
connect
Connects output of the first layer to input of the second layer.- Parameters:
outPin- descriptor of the first layer output.inpPin- descriptor of the second layer input. Descriptors have the following template <DFN><layer_name>[.input_number]</DFN>: - the first part of the template <DFN>layer_name</DFN> is string 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 <DFN>input_number</DFN> is either number of the layer input, either label one. If this part is omitted then the first layer input will be used. SEE: setNetInputs(), Layer::inputNameToIndex(), Layer::outputNameToIndex()
-
registerOutput
Registers network output with name Function may create additional 'Identity' layer.- Parameters:
outputName- identifier of the outputlayerId- identifier of the second layeroutputPort- number of the second layer input- Returns:
- index of bound layer (the same as layerId or newly created)
-
setInputsNames
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.- Parameters:
inputBlobNames- automatically generated
-
setInputShape
-
forward
-
forward
Runs forward pass to compute output of layer with nameoutputName.- Returns:
- blob for first output of specified layer. By default runs forward pass for the whole network.
-
forward
Runs forward pass to compute output of layer with nameoutputName.- Parameters:
outputBlobs- contains all output blobs for specified layer.outputName- name for layer which output is needed to get IfoutputNameis empty, runs forward pass for the whole network.
-
forward
-
forward
-
forwardAndRetrieve
Runs forward pass to compute outputs of layers listed inoutBlobNames.- Parameters:
outputBlobs- contains all output blobs for each layer specified inoutBlobNames.outBlobNames- names for layers which outputs are needed to get
-
setPreferableBackend
public void setPreferableBackend(int backendId) Ask network to use specific computation backend where it supported.- Parameters:
backendId- backend identifier. SEE: Backend
-
setPreferableTarget
public void setPreferableTarget(int targetId) Ask network to make computations on specific target device.- Parameters:
targetId- target identifier. SEE: Target List of supported combinations backend / target: | | DNN_BACKEND_OPENCV | DNN_BACKEND_INFERENCE_ENGINE | DNN_BACKEND_CUDA | |------------------------|--------------------|------------------------------|-------------------| | DNN_TARGET_CPU | + | + | | | DNN_TARGET_OPENCL | + | + | | | DNN_TARGET_OPENCL_FP16 | + | + | | | DNN_TARGET_MYRIAD | | + | | | DNN_TARGET_FPGA | | + | | | DNN_TARGET_CUDA | | | + | | DNN_TARGET_CUDA_FP16 | | | + | | DNN_TARGET_HDDL | | + | |
-
finalizeNet
public void finalizeNet()Finalizes the network configuration and prepares it for inference. This method must be called after setting backend/target via setPreferableBackend() and setPreferableTarget(), and before the first forward() call. It creates the underlying execution session (e.g. ONNX Runtime session) on the configured backend/target. If not called explicitly, the first forward() will call it automatically. Calling finalizeNet() early lets you pay the one-time setup cost at a predictable point and catch configuration errors before inference. -
setInput
Sets the new input value for the network- Parameters:
blob- A new blob. Should have CV_32F or CV_8U depth.name- A name of input layer.scalefactor- An optional normalization scale.mean- An optional mean subtraction values. SEE: connect(String, String) to know format of the descriptor. If scale or mean values are specified, a final input blob is computed as: \(input(n,c,h,w) = scalefactor \times (blob(n,c,h,w) - mean_c)\)
-
setInput
Sets the new input value for the network- Parameters:
blob- A new blob. Should have CV_32F or CV_8U depth.name- A name of input layer.scalefactor- An optional normalization scale. SEE: connect(String, String) to know format of the descriptor. If scale or mean values are specified, a final input blob is computed as: \(input(n,c,h,w) = scalefactor \times (blob(n,c,h,w) - mean_c)\)
-
setInput
Sets the new input value for the network- Parameters:
blob- A new blob. Should have CV_32F or CV_8U depth.name- A name of input layer. SEE: connect(String, String) to know format of the descriptor. If scale or mean values are specified, a final input blob is computed as: \(input(n,c,h,w) = scalefactor \times (blob(n,c,h,w) - mean_c)\)
-
setInput
Sets the new input value for the network- Parameters:
blob- A new blob. Should have CV_32F or CV_8U depth. SEE: connect(String, String) to know format of the descriptor. If scale or mean values are specified, a final input blob is computed as: \(input(n,c,h,w) = scalefactor \times (blob(n,c,h,w) - mean_c)\)
-
setParam
Sets the new value for the learned param of the layer.- Parameters:
layer- name or id of the layer.numParam- index of the layer parameter in the Layer::blobs array.blob- the new value. SEE: Layer::blobs Note: If shape of the new blob differs from the previous shape, then the following forward pass may fail.
-
setParam
Sets the parameter blob of a layer identified by its name or output tensor name.- Parameters:
layerName- layer name (classic engine) or raw ONNX output tensor name (ENGINE_NEW).numParam- index of the constant weight input to update (0 = kernel, 1 = bias, etc.).blob- the new parameter value.
-
getParam
Returns parameter blob of the layer.- Parameters:
layer- name or id of the layer.numParam- index of the layer parameter in the Layer::blobs array. SEE: Layer::blobs- Returns:
- automatically generated
-
getParam
Returns parameter blob of the layer.- Parameters:
layer- name or id of the layer. SEE: Layer::blobs- Returns:
- automatically generated
-
getParam
-
getParam
-
getUnconnectedOutLayers
Returns indexes of layers with unconnected outputs. FIXIT: Rework API to registerOutput() approach, deprecate this call- Returns:
- automatically generated
-
getUnconnectedOutLayersNames
-
getLayerShapes
public void getLayerShapes(List<MatOfInt> netInputShapes, MatOfInt netInputTypes, int layerId, List<MatOfInt> inLayerShapes, List<MatOfInt> outLayerShapes) The only overload of getLayerShapes that should be kept in 5.x- Parameters:
netInputShapes- automatically generatednetInputTypes- automatically generatedlayerId- automatically generatedinLayerShapes- automatically generatedoutLayerShapes- automatically generated
-
getFLOPS
-
getLayerTypes
-
getLayersCount
Returns count of layers of specified type.- Parameters:
layerType- type.- Returns:
- count of layers
-
getMemoryConsumption
public void getMemoryConsumption(List<MatOfInt> netInputShapes, MatOfInt netInputTypes, long[] weights, long[] blobs) Computes bytes number which are required to store all weights and intermediate blobs for model.- Parameters:
netInputShapes- vector of shapes for all net inputs.netInputTypes- vector of types for all net inputs.weights- output parameter to store resulting bytes for weights.blobs- output parameter to store resulting bytes for intermediate blobs.
-
enableFusion
public void enableFusion(boolean fusion) Enables or disables layer fusion in the network.- Parameters:
fusion- true to enable the fusion, false to disable. The fusion is enabled by default.
-
enableWinograd
public void enableWinograd(boolean useWinograd) Enables or disables the Winograd compute branch. The Winograd compute branch can speed up 3x3 Convolution at a small loss of accuracy.- Parameters:
useWinograd- true to enable the Winograd compute branch. The default is true.
-
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. Supported by DNN_BACKEND_OPENCV on DNN_TARGET_CPU only.- Parameters:
timings- vector for tick timings for all layers.- Returns:
- overall ticks for model inference.
-
enableKVCache
public void enableKVCache()Enables KV-Cache for all AttentionOnnxI layers -
disableKVCache
public void disableKVCache()Disables KV-Cache for all AttentionOnnxI layers -
resetKVCache
public void resetKVCache()Resets KV-Cache for all AttentionOnnxI layers -
getPerfProfile
Returns profiling data captured during the last forward pass. Entries are sorted by time in descending order. Empty vectors are returned if profiling is disabled (DNN_PROFILE_NONE).- Parameters:
names- automatically generatedtimems- automatically generatedcounts- automatically generated
-
printPerfProfile
public void printPerfProfile()Prints the profile captured during the last forward pass in a formatted table using CV_LOG_INFO. In DNN_PROFILE_DETAILED mode, prints per-layer label, time, and percentage. In DNN_PROFILE_SUMMARY mode, prints per-type count, time, and percentage. Does nothing if profiling is disabled (DNN_PROFILE_NONE) or all timings are zero.
-