Net 类


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

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

      构造函数 
      修饰符 构造函数 描述
        Net()  
      protected 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)
      将网络结构、超参数、后端、目标和融合转储到点文件
      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)
      要求网络在特定目标设备上进行计算。
      • 继承自类 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的模型优化器中间表示(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 - 自动生成
        返回
        自动生成
      • 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()
      • 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