Net 类
- java.lang.Object
-
- org.opencv.dnn.Net
-
public class Net extends java.lang.Object
此类允许创建和操作全面的人工神经网络。神经网络表示为有向无环图 (DAG),其中顶点是 Layer 实例,边指定层输入和输出之间的关系。每个网络层在其网络内都有唯一的整数 ID 和唯一的字符串名称。LayerId 可以存储层名称或层 ID。此类支持其实例的引用计数,即副本指向相同的实例。
-
-
字段摘要
字段 修饰符和类型 字段 描述 protected long
nativeObj
-
方法摘要
所有方法 静态方法 实例方法 具体方法 已弃用方法 修饰符和类型 方法 描述 static Net
__fromPtr__(long addr)
void
connect(java.lang.String outPin, java.lang.String inpPin)
将第一层的输出连接到第二层的输入。java.lang.String
dump()
将网络转储到字符串void
dumpToFile(java.lang.String path)
将网络结构、超参数、后端、目标和融合转储到点文件void
dumpToPbtxt(java.lang.String path)
将网络结构、超参数、后端、目标和融合转储到 pbtxt 文件boolean
empty()
如果网络中没有层,则返回 true。void
enableFusion(boolean fusion)
启用或禁用网络中的层融合。void
enableWinograd(boolean useWinograd)
启用或禁用 Winograd 计算分支。protected void
finalize()
Mat
forward()
运行前向传递以计算名称为outputName
的层的输出。Mat
forward(java.lang.String outputName)
运行前向传递以计算名称为outputName
的层的输出。void
forward(java.util.List<Mat> outputBlobs)
运行前向传递以计算名称为outputName
的层的输出。void
forward(java.util.List<Mat> outputBlobs, java.lang.String outputName)
运行前向传递以计算名称为outputName
的层的输出。void
forward(java.util.List<Mat> outputBlobs, java.util.List<java.lang.String> outBlobNames)
运行前向传递以计算outBlobNames
中列出的层的输出。long
getFLOPS(int layerId, java.util.List<MatOfInt> netInputShapes)
long
getFLOPS(int layerId, MatOfInt netInputShape)
long
getFLOPS(java.util.List<MatOfInt> netInputShapes)
使用指定的输入形状计算整个加载模型的 FLOP。long
getFLOPS(MatOfInt netInputShape)
void
getInputDetails(MatOfFloat scales, MatOfInt zeropoints)
返回量化网络的输入比例和零点。Layer
getLayer(int layerId)
返回网络使用的具有指定 ID 或名称的层的指针。Layer
getLayer(java.lang.String layerName)
已弃用。使用 int getLayerId(const String &layer)Layer
getLayer(DictValue layerId)
已弃用。即将删除int
getLayerId(java.lang.String layer)
将层的字符串名称转换为整数标识符。java.util.List<java.lang.String>
getLayerNames()
int
getLayersCount(java.lang.String layerType)
返回指定类型的层的数量。void
getLayerTypes(java.util.List<java.lang.String> layersTypes)
返回模型中使用的层的类型列表。void
getMemoryConsumption(int layerId, java.util.List<MatOfInt> netInputShapes, long[] weights, long[] blobs)
void
getMemoryConsumption(int layerId, MatOfInt netInputShape, long[] weights, long[] blobs)
void
getMemoryConsumption(MatOfInt netInputShape, long[] weights, long[] blobs)
long
getNativeObjAddr()
void
getOutputDetails(MatOfFloat scales, MatOfInt zeropoints)
返回量化网络的输出比例和零点。Mat
getParam(int layer)
返回层的参数 blob。Mat
getParam(int layer, int numParam)
返回层的参数 blob。Mat
getParam(java.lang.String layerName)
Mat
getParam(java.lang.String layerName, int numParam)
long
getPerfProfile(MatOfDouble timings)
返回推理的总时间和各层的计时 (以时钟周期计)。MatOfInt
getUnconnectedOutLayers()
返回输出未连接的层的索引。java.util.List<java.lang.String>
getUnconnectedOutLayersNames()
返回输出未连接的层的名称。Net
quantize(java.util.List<Mat> calibData, int inputsDtype, int outputsDtype)
将浮点型网络转换为量化网络。Net
quantize(java.util.List<Mat> calibData, int inputsDtype, int outputsDtype, boolean perChannel)
将浮点型网络转换为量化网络。static Net
readFromModelOptimizer(java.lang.String xml, java.lang.String bin)
从Intel的模型优化器中间表示(IR)创建网络。static Net
readFromModelOptimizer(MatOfByte bufferModelConfig, MatOfByte bufferWeights)
从Intel模型优化器的内存缓冲区中创建网络,使用中间表示(IR)。void
setHalideScheduler(java.lang.String scheduler)
编译Halide层。void
setInput(Mat blob)
设置网络的新输入值。void
setInput(Mat blob, java.lang.String name)
设置网络的新输入值。void
setInput(Mat blob, java.lang.String name, double scalefactor)
设置网络的新输入值。void
setInput(Mat blob, java.lang.String name, double scalefactor, Scalar mean)
设置网络的新输入值。void
setInputShape(java.lang.String inputName, MatOfInt shape)
指定网络输入的形状。void
setInputsNames(java.util.List<java.lang.String> inputBlobNames)
设置网络输入伪层的输出名称。void
setParam(int layer, int numParam, Mat blob)
设置层的学习参数的新值。void
setParam(java.lang.String layerName, int numParam, Mat blob)
void
setPreferableBackend(int backendId)
要求网络使用支持的特定计算后端。void
setPreferableTarget(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
-
-