类 Net
- java.lang.Object
-
- org.opencv.dnn.Net
-
public class Net extends java.lang.Object此类别允许创建和操作综合人工神经网络。神经网络表示为有向无环图 (DAG),其中顶点是 Layer 实例,边指定层输入和输出之间的关系。每个网络层都有唯一的整数 ID 和在其网络中唯一的字符串名称。LayerId 可以存储层名称或层 ID。此类别支持其实例的引用计数,即副本指向同一个实例。
-
-
字段摘要
字段 修饰符和类型 字段 描述 protected longnativeObj
-
方法摘要
所有方法 静态方法 实例方法 具体方法 已弃用方法 修饰符和类型 方法 描述 static Net__fromPtr__(long addr)voidconnect(java.lang.String outPin, java.lang.String inpPin)将第一个层的输出连接到第二个层的输入。java.lang.Stringdump()将网络转储为字符串voiddumpToFile(java.lang.String path)将网络结构、超参数、后端、目标和融合转储到 dot 文件voiddumpToPbtxt(java.lang.String path)将网络结构、超参数、后端、目标和融合转储到 pbtxt 文件booleanempty()如果网络中没有层,则返回 true。voidenableFusion(boolean fusion)启用或禁用网络中的层融合。voidenableWinograd(boolean useWinograd)启用或禁用 Winograd 计算分支。protected voidfinalize()Matforward()执行前向传播以计算名为outputName的层的输出。Matforward(java.lang.String outputName)执行前向传播以计算名为outputName的层的输出。voidforward(java.util.List<Mat> outputBlobs)执行前向传播以计算名为outputName的层的输出。voidforward(java.util.List<Mat> outputBlobs, java.lang.String outputName)执行前向传播以计算名为outputName的层的输出。voidforward(java.util.List<Mat> outputBlobs, java.util.List<java.lang.String> outBlobNames)执行前向传播以计算outBlobNames中列出的层的输出。longgetFLOPS(int layerId, java.util.List<MatOfInt> netInputShapes)longgetFLOPS(int layerId, MatOfInt netInputShape)longgetFLOPS(java.util.List<MatOfInt> netInputShapes)计算指定输入形状的整个加载模型的 FLOP。longgetFLOPS(MatOfInt netInputShape)voidgetInputDetails(MatOfFloat scales, MatOfInt zeropoints)返回量化Net的输入尺度和零点。LayergetLayer(int layerId)返回网络使用的具有指定 ID 或名称的层的指针。LayergetLayer(java.lang.String layerName)已弃用。使用 int getLayerId(const String &layer)LayergetLayer(DictValue layerId)已弃用。待移除intgetLayerId(java.lang.String layer)将层的字符串名称转换为整数标识符。java.util.List<java.lang.String>getLayerNames()intgetLayersCount(java.lang.String layerType)返回指定类型的层数。voidgetLayerTypes(java.util.List<java.lang.String> layersTypes)返回模型中使用的层的类型列表。voidgetMemoryConsumption(int layerId, java.util.List<MatOfInt> netInputShapes, long[] weights, long[] blobs)voidgetMemoryConsumption(int layerId, MatOfInt netInputShape, long[] weights, long[] blobs)voidgetMemoryConsumption(MatOfInt netInputShape, long[] weights, long[] blobs)longgetNativeObjAddr()voidgetOutputDetails(MatOfFloat scales, MatOfInt zeropoints)返回量化Net的输出尺度和零点。MatgetParam(int layer)返回层的参数 blob。MatgetParam(int layer, int numParam)返回层的参数 blob。MatgetParam(java.lang.String layerName)MatgetParam(java.lang.String layerName, int numParam)longgetPerfProfile(MatOfDouble timings)返回推理的总时间和层的计时(以刻度为单位)。MatOfIntgetUnconnectedOutLayers()返回具有未连接输出的层的索引。java.util.List<java.lang.String>getUnconnectedOutLayersNames()返回具有未连接输出的层的名称。Netquantize(java.util.List<Mat> calibData, int inputsDtype, int outputsDtype)从浮点网络返回一个量化网络。Netquantize(java.util.List<Mat> calibData, int inputsDtype, int outputsDtype, boolean perChannel)从浮点网络返回一个量化网络。static NetreadFromModelOptimizer(java.lang.String xml, java.lang.String bin)从 Intel 的 Model Optimizer 中间表示 (IR) 创建网络。static NetreadFromModelOptimizer(MatOfByte bufferModelConfig, MatOfByte bufferWeights)从 Intel 的 Model Optimizer 内存缓冲区中的中间表示 (IR) 创建网络。intregisterOutput(java.lang.String outputName, int layerId, int outputPort)注册带有名称的网络输出。函数可能会创建额外的“Identity”层。voidsetHalideScheduler(java.lang.String scheduler)编译 Halide 层。voidsetInput(Mat blob)设置网络的新输入值voidsetInput(Mat blob, java.lang.String name)设置网络的新输入值voidsetInput(Mat blob, java.lang.String name, double scalefactor)设置网络的新输入值voidsetInput(Mat blob, java.lang.String name, double scalefactor, Scalar mean)设置网络的新输入值voidsetInputShape(java.lang.String inputName, MatOfInt shape)指定网络输入的形状。voidsetInputsNames(java.util.List<java.lang.String> inputBlobNames)设置网络输入伪层的输出名称。voidsetParam(int layer, int numParam, Mat blob)设置层学习参数的新值。voidsetParam(java.lang.String layerName, int numParam, Mat blob)voidsetPreferableBackend(int backendId)要求网络在支持的情况下使用特定的计算后端。voidsetPreferableTarget(int targetId)要求网络在特定目标设备上进行计算。
-
-
-
方法详细信息
-
getNativeObjAddr
public long getNativeObjAddr()
-
__fromPtr__
public static Net __fromPtr__(long addr)
-
readFromModelOptimizer
public static Net readFromModelOptimizer(java.lang.String xml, java.lang.String bin)
从 Intel 的 Model Optimizer 中间表示 (IR) 创建网络。- 参数
xml- 带有网络拓扑的 XML 配置文件。bin- 带有训练权重的二进制文件。从 Intel 的 Model Optimizer 导入的网络将在 Intel 的 Inference Engine 后端启动。- 返回
- 自动生成
-
readFromModelOptimizer
public static Net readFromModelOptimizer(MatOfByte bufferModelConfig, MatOfByte bufferWeights)
从 Intel 的 Model Optimizer 内存缓冲区中的中间表示 (IR) 创建网络。- 参数
bufferModelConfig- 带有模型配置的缓冲区。bufferWeights- 带有模型训练权重的缓冲区。- 返回
- Net 对象。
-
empty
public boolean empty()
如果网络中没有层,则返回 true。- 返回
- 自动生成
-
dump
public java.lang.String dump()
将网络转储为字符串- 返回
- 包含结构、超参数、后端、目标和融合的字符串。在 setInput() 后调用此方法。要查看正确的后端、目标和融合,请在 forward() 后运行。
-
dumpToFile
public void dumpToFile(java.lang.String path)
将网络结构、超参数、后端、目标和融合转储到 dot 文件- 参数
path- 输出文件路径,扩展名为 .dot。参见:dump()
-
dumpToPbtxt
public void dumpToPbtxt(java.lang.String path)
将网络结构、超参数、后端、目标和融合转储到 pbtxt 文件- 参数
path- 输出文件路径,扩展名为 .pbtxt。使用 Netron (https://netron.app) 打开目标文件以可视化模型。在 setInput() 后调用此方法。要查看正确的后端、目标和融合,请在 forward() 后运行。
-
getLayerId
public int getLayerId(java.lang.String layer)
将层的字符串名称转换为整数标识符。- 参数
layer- 自动生成- 返回
- 层的 ID,如果未找到层则为 -1。
-
getLayerNames
public java.util.List<java.lang.String> getLayerNames()
-
getLayer
public Layer getLayer(int layerId)
返回网络使用的具有指定 ID 或名称的层的指针。- 参数
layerId- 自动生成- 返回
- 自动生成
-
getLayer
@Deprecated public Layer getLayer(java.lang.String layerName)
已弃用。使用 int getLayerId(const String &layer)- 参数
layerName- 自动生成- 返回
- 自动生成
-
connect
public void connect(java.lang.String outPin, java.lang.String inpPin)将第一个层的输出连接到第二个层的输入。- 参数
outPin- 第一个层输出的描述符。inpPin- 第二个层输入的描述符。描述符具有以下模板 <DFN><layer_name>[.input_number]</DFN>:- 模板的第一部分 <DFN>layer_name</DFN> 是添加层的字符串名称。如果此部分为空,则将使用网络输入伪层;- 模板的第二个可选部分 <DFN>input_number</DFN> 是层输入的编号或标签。如果此部分省略,则将使用第一个层输入。参见:setNetInputs(), Layer::inputNameToIndex(), Layer::outputNameToIndex()
-
registerOutput
public int registerOutput(java.lang.String outputName, int layerId, int outputPort)注册带有名称的网络输出。函数可能会创建额外的“Identity”层。- 参数
outputName- 输出的标识符layerId- 第二个层的标识符outputPort- 第二个层输入的编号- 返回
- 绑定层的索引(与 layerId 相同或新创建的)
-
setInputsNames
public void setInputsNames(java.util.List<java.lang.String> inputBlobNames)
设置网络输入伪层的输出名称。每个网络总是有一个特殊的自身网络输入伪层,其 id=0。此层仅存储用户 blob 并且不执行任何计算。实际上,此层提供了将用户数据传递到网络中的唯一方法。与任何其他层一样,此层可以标记其输出,此函数提供了一种简单的方法来执行此操作。- 参数
inputBlobNames- 自动生成
-
setInputShape
public void setInputShape(java.lang.String inputName, MatOfInt shape)指定网络输入的形状。- 参数
inputName- 自动生成shape- 自动生成
-
forward
public Mat forward(java.lang.String outputName)
执行前向传播以计算名为outputName的层的输出。- 参数
outputName- 需要获取其输出的层的名称- 返回
- 指定层第一个输出的 blob。默认情况下,为整个网络执行前向传播。
-
forward
public Mat forward()
执行前向传播以计算名为outputName的层的输出。- 返回
- 指定层第一个输出的 blob。默认情况下,为整个网络执行前向传播。
-
forward
public void forward(java.util.List<Mat> outputBlobs, java.lang.String outputName)
执行前向传播以计算名为outputName的层的输出。- 参数
outputBlobs- 包含指定层的所有输出 blob。outputName- 需要获取其输出的层的名称。如果outputName为空,则为整个网络执行前向传播。
-
forward
public void forward(java.util.List<Mat> outputBlobs)
执行前向传播以计算名为outputName的层的输出。- 参数
outputBlobs- 包含指定层第一个输出的 blob。如果outputName为空,则为整个网络执行前向传播。
-
forward
public void forward(java.util.List<Mat> outputBlobs, java.util.List<java.lang.String> outBlobNames)
执行前向传播以计算outBlobNames中列出的层的输出。- 参数
outputBlobs- 包含指定层第一个输出的 blob。outBlobNames- 需要获取其输出的层的名称
-
quantize
public Net quantize(java.util.List<Mat> calibData, int inputsDtype, int outputsDtype, boolean perChannel)
从浮点网络返回一个量化网络。- 参数
calibData- 用于计算量化参数的校准数据。inputsDtype- 量化网络输入的Dtype。可以是 CV_32F 或 CV_8S。outputsDtype- 量化网络输出的Dtype。可以是 CV_32F 或 CV_8S。perChannel- 量化网络的量化粒度。默认为 true,表示以逐通道(channel-wise)方式量化模型。将其设置为 false 则以逐张量(tensor-wise)方式量化模型。- 返回
- 自动生成
-
quantize
public Net quantize(java.util.List<Mat> calibData, int inputsDtype, int outputsDtype)
从浮点网络返回一个量化网络。- 参数
calibData- 用于计算量化参数的校准数据。inputsDtype- 量化网络输入的Dtype。可以是 CV_32F 或 CV_8S。outputsDtype- 量化网络输出的Dtype。可以是 CV_32F 或 CV_8S。以逐通道(channel-wise)方式量化模型。将其设置为 false 则以逐张量(tensor-wise)方式量化模型。- 返回
- 自动生成
-
getInputDetails
public void getInputDetails(MatOfFloat scales, MatOfInt zeropoints)
返回量化Net的输入尺度和零点。- 参数
scales- 返回输入尺度的输出参数。zeropoints- 返回输入零点的输出参数。
-
getOutputDetails
public void getOutputDetails(MatOfFloat scales, MatOfInt zeropoints)
返回量化Net的输出尺度和零点。- 参数
scales- 返回输出尺度的输出参数。zeropoints- 返回输出零点的输出参数。
-
setHalideScheduler
public void setHalideScheduler(java.lang.String scheduler)
编译 Halide 层。- 参数
scheduler- 包含调度指令的 YAML 文件路径。参见:setPreferableBackend 调度支持 Halide 后端的层。然后针对特定目标进行编译。对于调度文件中未表示或根本未使用手动调度的层,将应用自动调度。
-
setPreferableBackend
public void setPreferableBackend(int backendId)
要求网络在支持的情况下使用特定的计算后端。- 参数
backendId- 后端标识符。参见:Backend
-
setPreferableTarget
public void setPreferableTarget(int targetId)
要求网络在特定目标设备上进行计算。- 参数
targetId- 目标标识符。参见:Target 支持的后端/目标组合列表:| | DNN_BACKEND_OPENCV | DNN_BACKEND_INFERENCE_ENGINE | DNN_BACKEND_HALIDE | 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 | | + | | |
-
setInput
public void setInput(Mat blob, java.lang.String name, double scalefactor, Scalar mean)
设置网络的新输入值- 参数
blob- 一个新的 blob。应具有 CV_32F 或 CV_8U 深度。name- 输入层的名称。scalefactor- 可选的归一化尺度。mean- 可选的均值减去值。参见:connect(String, String) 了解描述符的格式。如果指定了尺度或均值,最终输入 blob 计算如下:\(input(n,c,h,w) = scalefactor \times (blob(n,c,h,w) - mean_c)\)
-
setInput
public void setInput(Mat blob, java.lang.String name, double scalefactor)
设置网络的新输入值- 参数
blob- 一个新的 blob。应具有 CV_32F 或 CV_8U 深度。name- 输入层的名称。scalefactor- 可选的归一化尺度。参见:connect(String, String) 了解描述符的格式。如果指定了尺度或均值,最终输入 blob 计算如下:\(input(n,c,h,w) = scalefactor \times (blob(n,c,h,w) - mean_c)\)
-
setInput
public void setInput(Mat blob, java.lang.String name)
设置网络的新输入值- 参数
blob- 一个新的 blob。应具有 CV_32F 或 CV_8U 深度。name- 输入层的名称。参见:connect(String, String) 了解描述符的格式。如果指定了尺度或均值,最终输入 blob 计算如下:\(input(n,c,h,w) = scalefactor \times (blob(n,c,h,w) - mean_c)\)
-
setInput
public void setInput(Mat blob)
设置网络的新输入值- 参数
blob- 一个新的 blob。应具有 CV_32F 或 CV_8U 深度。参见:connect(String, String) 了解描述符的格式。如果指定了尺度或均值,最终输入 blob 计算如下:\(input(n,c,h,w) = scalefactor \times (blob(n,c,h,w) - mean_c)\)
-
setParam
public void setParam(int layer, int numParam, Mat blob)设置层学习参数的新值。- 参数
layer- 层的名称或 ID。numParam- Layer::blobs 数组中层参数的索引。blob- 新值。参见:Layer::blobs 注意:如果新 blob 的形状与先前的形状不同,则随后的前向传播可能会失败。
-
setParam
public void setParam(java.lang.String layerName, int numParam, Mat blob)
-
getParam
public Mat getParam(int layer, int numParam)
返回层的参数 blob。- 参数
layer- 层的名称或 ID。numParam- Layer::blobs 数组中层参数的索引。参见:Layer::blobs- 返回
- 自动生成
-
getParam
public Mat getParam(int layer)
返回层的参数 blob。- 参数
layer- 层的名称或 ID。参见:Layer::blobs- 返回
- 自动生成
-
getParam
public Mat getParam(java.lang.String layerName, int numParam)
-
getParam
public Mat getParam(java.lang.String layerName)
-
getUnconnectedOutLayers
public MatOfInt getUnconnectedOutLayers()
返回未连接输出的层的索引。FIXIT:将 API 重构为 registerOutput() 方法,弃用此调用- 返回
- 自动生成
-
getUnconnectedOutLayersNames
public java.util.List<java.lang.String> getUnconnectedOutLayersNames()
返回未连接输出的层的名称。FIXIT:将 API 重构为 registerOutput() 方法,弃用此调用- 返回
- 自动生成
-
getFLOPS
public long getFLOPS(java.util.List<MatOfInt> netInputShapes)
计算指定输入形状的整个加载模型的 FLOP。- 参数
netInputShapes- 所有网络输入的形状向量。- 返回
- 计算出的 FLOPs。
-
getFLOPS
public long getFLOPS(MatOfInt netInputShape)
-
getFLOPS
public long getFLOPS(int layerId, java.util.List<MatOfInt> netInputShapes)
-
getFLOPS
public long getFLOPS(int layerId, MatOfInt netInputShape)
-
getLayerTypes
public void getLayerTypes(java.util.List<java.lang.String> layersTypes)
返回模型中使用的层的类型列表。- 参数
layersTypes- 返回类型的输出参数。
-
getLayersCount
public int getLayersCount(java.lang.String layerType)
返回指定类型的层数。- 参数
layerType- 类型。- 返回
- 层数
-
getMemoryConsumption
public void getMemoryConsumption(MatOfInt netInputShape, long[] weights, long[] blobs)
-
getMemoryConsumption
public void getMemoryConsumption(int layerId, java.util.List<MatOfInt> netInputShapes, long[] weights, long[] blobs)
-
getMemoryConsumption
public void getMemoryConsumption(int layerId, MatOfInt netInputShape, long[] weights, long[] blobs)
-
enableFusion
public void enableFusion(boolean fusion)
启用或禁用网络中的层融合。- 参数
fusion- true 启用融合,false 禁用。融合默认启用。
-
enableWinograd
public void enableWinograd(boolean useWinograd)
启用或禁用 Winograd 计算分支。Winograd 计算分支可以以较小的精度损失加速 3x3 卷积。- 参数
useWinograd- true 启用 Winograd 计算分支。默认为 true。
-
getPerfProfile
public long getPerfProfile(MatOfDouble timings)
返回推理的总时间和层的计时(以刻度为单位)。返回向量中的索引对应于层 ID。某些层可能与其他层融合,在这种情况下,跳过的层将返回零刻度计数。仅由 DNN_BACKEND_OPENCV 在 DNN_TARGET_CPU 上支持。- 参数
timings- 所有层的时间刻度向量。- 返回
- 模型推理的总时钟周期。
-
finalize
protected void finalize() throws java.lang.Throwable- 重写
finalize在类java.lang.Object中- 抛出
java.lang.Throwable
-
-