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)将网络结构、超参数、后端、目标和融合转储到点文件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)返回量化网络的输入比例和零点。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)返回量化网络的输出比例和零点。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的模型优化器中间表示(IR)创建网络。static NetreadFromModelOptimizer(MatOfByte bufferModelConfig, MatOfByte bufferWeights)从Intel模型优化器的内存缓冲区中创建网络,使用中间表示(IR)。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的模型优化器中间表示(IR)创建网络。- 参数
xml- 包含网络拓扑结构的XML配置文件。bin- 包含训练权重的二进制文件。从Intel的模型优化器导入的网络在Intel的推理引擎后端启动。- 返回
- 自动生成
-
readFromModelOptimizer
public static Net readFromModelOptimizer(MatOfByte bufferModelConfig, MatOfByte bufferWeights)
从Intel模型优化器的内存缓冲区中创建网络,使用中间表示(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)
将网络结构、超参数、后端、目标和融合转储到点文件- 参数
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()
-
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- 包含指定层的第一个输出的blobs。outBlobNames- 需要获取输出的层的名称
-
quantize
public Net quantize(java.util.List<Mat> calibData, int inputsDtype, int outputsDtype, boolean perChannel)
将浮点型网络转换为量化网络。- 参数
calibData- 用于计算量化参数的校准数据。inputsDtype- 量化网络输入的数据类型。可以是CV_32F或CV_8S。outputsDtype- 量化网络输出的数据类型。可以是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- 量化网络输入的数据类型。可以是CV_32F或CV_8S。outputsDtype- 量化网络输出的数据类型。可以是CV_32F或CV_8S。以逐通道方式(channel-wise)量化模型。将其设置为false以以逐张量方式(或tensor-wise)量化模型。- 返回
- 自动生成
-
getInputDetails
public void getInputDetails(MatOfFloat scales, MatOfInt zeropoints)
返回量化网络的输入比例和零点。- 参数
scales- 用于返回输入比例的输出参数。zeropoints- 用于返回输入零点的输出参数。
-
getOutputDetails
public void getOutputDetails(MatOfFloat scales, MatOfInt zeropoints)
返回量化网络的输出比例和零点。- 参数
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) 以了解描述符的格式。如果指定了 scale 或 mean 值,则最终输入 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) 以了解描述符的格式。如果指定了 scale 或 mean 值,则最终输入 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) 以了解描述符的格式。如果指定了 scale 或 mean 值,则最终输入 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) 以了解描述符的格式。如果指定了 scale 或 mean 值,则最终输入 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()
返回输出未连接的层的索引。修复:重做 API 到 registerOutput() 方法,弃用此调用- 返回
- 自动生成
-
getUnconnectedOutLayersNames
public java.util.List<java.lang.String> getUnconnectedOutLayersNames()
返回输出未连接的层的名称。修复:重做 API 到 registerOutput() 方法,弃用此调用- 返回
- 自动生成
-
getFLOPS
public long getFLOPS(java.util.List<MatOfInt> netInputShapes)
使用指定的输入形状计算整个加载模型的 FLOP。- 参数
netInputShapes- 所有网络输入的形状向量。- 返回
- 计算出的 FLOP。
-
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
-
-