类 Net


  • public class Net
    extends java.lang.Object
    此类别允许创建和操作综合人工神经网络。神经网络表示为有向无环图 (DAG),其中顶点是 Layer 实例,边指定层输入和输出之间的关系。每个网络层都有唯一的整数 ID 和在其网络中唯一的字符串名称。LayerId 可以存储层名称或层 ID。此类别支持其实例的引用计数,即副本指向同一个实例。
    • 字段摘要

      字段 
      修饰符和类型 字段 描述
      protected long nativeObj  
    • 构造函数摘要

      构造函数 
      修饰符 构造函数 描述
        Net()  
      保护 Net​(long addr)  
    • 方法摘要

      所有方法 静态方法 实例方法 具体方法 已弃用方法 
      修饰符和类型 方法 描述
      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)
      将网络结构、超参数、后端、目标和融合转储到 dot 文件
      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)
      返回量化Net的输入尺度和零点。
      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)
      返回量化Net的输出尺度和零点。
      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 的 Model Optimizer 中间表示 (IR) 创建网络。
      static Net readFromModelOptimizer​(MatOfByte bufferModelConfig, MatOfByte bufferWeights)
      从 Intel 的 Model Optimizer 内存缓冲区中的中间表示 (IR) 创建网络。
      int registerOutput​(java.lang.String outputName, int layerId, int outputPort)
      注册带有名称的网络输出。函数可能会创建额外的“Identity”层。
      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)
      要求网络在特定目标设备上进行计算。
      • 从类继承的方法 java.lang.Object

        clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • 字段详细信息

      • nativeObj

        protected final long nativeObj
    • 构造函数详细信息

      • Net

        protected Net​(long addr)
      • Net

        public Net()
    • 方法详细信息

      • 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 - 自动生成
        返回
        自动生成
      • getLayer

        @Deprecated
        public Layer getLayer​(DictValue layerId)
        已弃用。
        待移除
        参数
        layerId - 自动生成
        返回
        自动生成
      • connect

        public void connect​(java.lang.String outPin,
                            java.lang.String inpPin)
        将第一个层的输出连接到第二个层的输入。
        参数
        outPin - 第一个层输出的描述符。
        inpPin - 第二个层输入的描述符。描述符具有以下模板 <DFN>&lt;layer_name&gt;[.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