OpenCV 4.11.0
开源计算机视觉库
加载中…
搜索中…
无匹配项
cv::dnn::Layer 类参考

此接口类允许构建新的层——网络的构建块。 更多…

#include <opencv2/dnn/dnn.hpp>

cv::dnn::Layer 的协作图

公共成员函数

 Layer ()
 
 Layer (const LayerParams &params)
 仅初始化nametypeblobs 字段。
 
virtual ~Layer ()
 
virtual void applyHalideScheduler (Ptr< BackendNode > &node, const std::vector< Mat * > &inputs, const std::vector< Mat > &outputs, int targetId) const
 基于层超参数的自动 Halide 调度。
 
virtual void finalize (const std::vector< Mat * > &input, std::vector< Mat > &output)
 根据输入、输出和 blobs 计算并设置内部参数。
 
std::vector< Matfinalize (const std::vector< Mat > &inputs)
 这是一个重载的成员函数,为了方便提供。它与上面的函数的区别仅在于它接受的参数。
 
void finalize (const std::vector< Mat > &inputs, std::vector< Mat > &outputs)
 这是一个重载的成员函数,为了方便提供。它与上面的函数的区别仅在于它接受的参数。
 
virtual void finalize (InputArrayOfArrays inputs, OutputArrayOfArrays outputs)
 根据输入、输出和 blobs 计算并设置内部参数。
 
virtual void forward (InputArrayOfArrays inputs, OutputArrayOfArrays outputs, OutputArrayOfArrays internals)
 给定input blobs,计算输出blobs
 
virtual void forward (std::vector< Mat * > &input, std::vector< Mat > &output, std::vector< Mat > &internals)
 给定input blobs,计算输出blobs
 
void forward_fallback (InputArrayOfArrays inputs, OutputArrayOfArrays outputs, OutputArrayOfArrays internals)
 给定input blobs,计算输出blobs
 
virtual int64 getFLOPS (const std::vector< MatShape > &inputs, const std::vector< MatShape > &outputs) const
 
virtual bool getMemoryShapes (const std::vector< MatShape > &inputs, const int requiredOutputs, std::vector< MatShape > &outputs, std::vector< MatShape > &internals) const
 
virtual void getScaleShift (Mat &scale, Mat &shift) const
 返回具有通道乘法和加法的层的参数。
 
virtual void getScaleZeropoint (float &scale, int &zeropoint) const
 返回层的比例和零点。
 
virtual Ptr< BackendNodeinitCann (const std::vector< Ptr< BackendWrapper > > &inputs, const std::vector< Ptr< BackendWrapper > > &outputs, const std::vector< Ptr< BackendNode > > &nodes)
 返回一个 CANN 后端节点。
 
virtual Ptr< BackendNodeinitCUDA (void *context, const std::vector< Ptr< BackendWrapper > > &inputs, const std::vector< Ptr< BackendWrapper > > &outputs)
 返回一个 CUDA 后端节点。
 
virtual Ptr< BackendNodeinitHalide (const std::vector< Ptr< BackendWrapper > > &inputs)
 返回 Halide 后端节点。
 
virtual Ptr< BackendNodeinitNgraph (const std::vector< Ptr< BackendWrapper > > &inputs, const std::vector< Ptr< BackendNode > > &nodes)
 
virtual Ptr< BackendNodeinitTimVX (void *timVxInfo, const std::vector< Ptr< BackendWrapper > > &inputsWrapper, const std::vector< Ptr< BackendWrapper > > &outputsWrapper, bool isLast)
 返回一个 TimVX 后端节点。
 
virtual Ptr< BackendNodeinitVkCom (const std::vector< Ptr< BackendWrapper > > &inputs, std::vector< Ptr< BackendWrapper > > &outputs)
 
virtual Ptr< BackendNodeinitWebnn (const std::vector< Ptr< BackendWrapper > > &inputs, const std::vector< Ptr< BackendNode > > &nodes)
 
虚拟 int inputNameToIndex (String inputName)
 返回输入 blob 在输入数组中的索引。
 
虚拟 int outputNameToIndex (const String &outputName)
 返回输出 blob 在输出数组中的索引。
 
void run (const std::vector< Mat > &inputs, std::vector< Mat > &outputs, std::vector< Mat > &internals)
 分配层并计算输出。
 
virtual bool setActivation (const Ptr< ActivationLayer > &layer)
 尝试将后续激活层附加到该层,即在部分情况下进行层融合。
 
void setParamsFrom (const LayerParams &params)
 仅初始化nametypeblobs 字段。
 
virtual bool supportBackend (int backendId)
 询问层是否支持特定后端进行计算。
 
virtual Ptr< BackendNodetryAttach (const Ptr< BackendNode > &node)
 实现层融合。
 
virtual bool tryFuse (Ptr< Layer > &top)
 尝试将当前层与下一层融合。
 
virtual bool tryQuantize (const std::vector< std::vector< float > > &scales, const std::vector< std::vector< int > > &zeropoints, LayerParams &params)
 尝试量化给定层并计算定点实现所需的量化参数。
 
virtual void unsetAttached ()
 “分离”附加到特定层的所有层。
 
virtual bool updateMemoryShapes (const std::vector< MatShape > &inputs)
 
- 继承自 cv::Algorithm 的公有成员函数
 Algorithm ()
 
virtual ~Algorithm ()
 
virtual void clear ()
 清除算法状态。
 
virtual bool empty () const
 如果 Algorithm 为空(例如,在开始时或读取失败后),则返回 true。
 
虚拟 String getDefaultName () const
 
virtual void read (const FileNode &fn)
 从文件存储中读取算法参数。
 
virtual void save (const String &filename) const
 
void write (const Ptr< FileStorage > &fs, const String &name=String()) const
 
virtual void write (FileStorage &fs) const
 将算法参数存储到文件存储中。
 
void write (FileStorage &fs, const String &name) const
 

公有属性

std::vector< Matblobs
 必须在此处存储学习到的参数列表,以便可以使用 Net::getParam() 读取它们。
 
String name
 层实例的名称,可用于日志记录或其他内部用途。
 
int preferableTarget
 层前向传播的首选目标
 
String type
 通过层工厂创建层时使用的类型名称。
 

其他继承的成员

- 继承自 cv::Algorithm 的静态公有成员函数
模板<typename _Tp >
静态 Ptr< _Tpload (const String &filename, const String &objname=String())
 从文件中加载算法。
 
模板<typename _Tp >
静态 Ptr< _TploadFromString (const String &strModel, const String &objname=String())
 从字符串加载算法。
 
模板<typename _Tp >
静态 Ptr< _Tpread (const FileNode &fn)
 从文件节点读取算法。
 
- 继承自 cv::Algorithm 的保护成员函数
void writeFormat (FileStorage &fs) const
 

详细描述

此接口类允许构建新的层——网络的构建块。

每个从 Layer 派生的类都必须实现 forward() 方法来计算输出。此外,在将新层用于网络之前,必须使用 LayerFactory 宏之一注册您的层。

构造函数和析构函数文档

◆ Layer() [1/2]

cv::dnn::Layer::Layer ( )

◆ Layer() [2/2]

cv::dnn::Layer::Layer ( const LayerParams & params)
显式

仅初始化nametypeblobs 字段。

◆ ~Layer()

virtual cv::dnn::Layer::~Layer ( )
虚拟

成员函数文档

◆ applyHalideScheduler()

virtual void cv::dnn::Layer::applyHalideScheduler ( Ptr< BackendNode > & node,
const std::vector< Mat * > & 输入,
const std::vector< Mat > & 输出,
int targetId ) const
虚拟

基于层超参数的自动 Halide 调度。

参数
[输入]node带有 Halide 函数的后端节点。
[输入]输入将在前向调用中使用的 Blob。
[输入]输出将在前向调用中使用的 Blob。
[输入]targetId目标标识符
参见
BackendNodeTarget

Layer 不使用自己的 Halide::Func 成员,因为我们可能已经应用了层融合。这样,融合的函数应该被调度。

◆ finalize() [1/4]

virtual void cv::dnn::Layer::finalize ( const std::vector< Mat * > & 输入,
std::vector< Mat > & output )
虚拟
Python
cv.dnn.Layer.finalize(inputs[, outputs]) -> 输出

根据输入、输出和 blobs 计算并设置内部参数。

已弃用
请改用 Layer::finalize(InputArrayOfArrays, OutputArrayOfArrays)
参数
[输入]输入已分配的输入 blobs 向量
[输出]output已分配的输出 blobs 向量

此方法在网络为输入和输出 blobs 分配所有内存之后以及推理之前调用。

◆ finalize() [2/4]

std::vector< Mat > cv::dnn::Layer::finalize ( const std::vector< Mat > & 输入)
Python
cv.dnn.Layer.finalize(inputs[, outputs]) -> 输出

这是一个重载的成员函数,为了方便提供。它与上面的函数的区别仅在于它接受的参数。

已弃用
请改用 Layer::finalize(InputArrayOfArrays, OutputArrayOfArrays)

◆ finalize() [3/4]

void cv::dnn::Layer::finalize ( const std::vector< Mat > & 输入,
std::vector< Mat > & outputs )
Python
cv.dnn.Layer.finalize(inputs[, outputs]) -> 输出

这是一个重载的成员函数,为了方便提供。它与上面的函数的区别仅在于它接受的参数。

已弃用
请改用 Layer::finalize(InputArrayOfArrays, OutputArrayOfArrays)

◆ finalize() [4/4]

virtual void cv::dnn::Layer::finalize ( InputArrayOfArrays 输入,
OutputArrayOfArrays outputs )
虚拟
Python
cv.dnn.Layer.finalize(inputs[, outputs]) -> 输出

根据输入、输出和 blobs 计算并设置内部参数。

参数
[输入]输入已分配的输入 blobs 向量
[输出]输出已分配的输出 blobs 向量

此方法在网络为输入和输出 blobs 分配所有内存之后以及推理之前调用。

◆ forward() [1/2]

virtual void cv::dnn::Layer::forward ( InputArrayOfArrays 输入,
OutputArrayOfArrays 输出,
OutputArrayOfArrays internals )
虚拟

给定input blobs,计算输出blobs

参数
[输入]输入输入 blobs。
[输出]输出已分配的输出 blobs,将存储计算结果。
[输出]internals已分配的内部 blobs

◆ forward() [2/2]

virtual void cv::dnn::Layer::forward ( std::vector< Mat * > & 输入,
std::vector< Mat > & output,
std::vector< Mat > & internals )
虚拟

给定input blobs,计算输出blobs

已弃用
请改用 Layer::forward(InputArrayOfArrays, OutputArrayOfArrays, OutputArrayOfArrays)
参数
[输入]输入输入 blobs。
[输出]output已分配的输出 blobs,将存储计算结果。
[输出]internals已分配的内部 blobs

◆ forward_fallback()

void cv::dnn::Layer::forward_fallback ( InputArrayOfArrays 输入,
OutputArrayOfArrays 输出,
OutputArrayOfArrays internals )

给定input blobs,计算输出blobs

参数
[输入]输入输入 blobs。
[输出]输出已分配的输出 blobs,将存储计算结果。
[输出]internals已分配的内部 blobs

◆ getFLOPS()

virtual int64 cv::dnn::Layer::getFLOPS ( const std::vector< MatShape > & 输入,
const std::vector< MatShape > & outputs ) const
inlinevirtual

◆ getMemoryShapes()

virtual bool cv::dnn::Layer::getMemoryShapes ( const std::vector< MatShape > & 输入,
const int requiredOutputs,
std::vector< MatShape > & 输出,
std::vector< MatShape > & internals ) const
虚拟

◆ getScaleShift()

virtual void cv::dnn::Layer::getScaleShift ( Mat & scale,
Mat & shift ) const
虚拟

返回具有通道乘法和加法的层的参数。

参数
[输出]scale逐通道乘数。值的总数应等于通道数。
[输出]shift逐通道偏移量。值的总数应等于通道数。

某些层可以将其变换与后面的层融合。例如,卷积 + 批量归一化。这样,基础层使用来自其后层的权重。融合层被跳过。默认情况下,scaleshift 为空,这意味着层没有逐元素乘法或加法。

◆ getScaleZeropoint()

virtual void cv::dnn::Layer::getScaleZeropoint ( float & scale,
int & zeropoint ) const
虚拟

返回层的比例和零点。

参数
[输出]scale输出比例
[输出]zeropoint输出零点

默认情况下,scale 为 1,zeropoint 为 0。

◆ initCann()

virtual Ptr< BackendNode > cv::dnn::Layer::initCann ( const std::vector< Ptr< BackendWrapper > > & 输入,
const std::vector< Ptr< BackendWrapper > > & 输出,
const std::vector< Ptr< BackendNode > > & nodes )
虚拟

返回一个 CANN 后端节点。

参数
输入CANN 算子的输入张量
输出CANN 算子的输出张量
nodes输入张量的节点

◆ initCUDA()

virtual Ptr< BackendNode > cv::dnn::Layer::initCUDA ( void * context,
const std::vector< Ptr< BackendWrapper > > & 输入,
const std::vector< Ptr< BackendWrapper > > & outputs )
虚拟

返回一个 CUDA 后端节点。

参数
context指向 CSLContext 对象的 void 指针
输入层输入
输出层输出

◆ initHalide()

virtual Ptr< BackendNode > cv::dnn::Layer::initHalide ( const std::vector< Ptr< BackendWrapper > > & 输入)
虚拟

返回 Halide 后端节点。

参数
[输入]输入输入 Halide 缓冲区。
参见
BackendNodeBackendWrapper

输入缓冲区应该与前向调用中使用的缓冲区完全相同。尽管我们可以仅基于输入形状使用 Halide::ImageParam,但这有助于防止某些内存管理问题(如果出现错误,Halide 测试将失败)。

◆ initNgraph()

virtual Ptr< BackendNode > cv::dnn::Layer::initNgraph ( const std::vector< Ptr< BackendWrapper > > & 输入,
const std::vector< Ptr< BackendNode > > & nodes )
虚拟

◆ initTimVX()

virtual Ptr< BackendNode > cv::dnn::Layer::initTimVX ( void * timVxInfo,
const std::vector< Ptr< BackendWrapper > > & 输入包装器 (inputsWrapper),
const std::vector< Ptr< BackendWrapper > > & 输出包装器 (outputsWrapper),
布尔值 (bool) isLast )
虚拟

返回一个 TimVX 后端节点。

参数
timVxInfo指向 CSLContext 对象的 void 指针
输入包装器 (inputsWrapper)层输入
输出包装器 (outputsWrapper)层输出
isLast如果节点是TimVX图的最后一个节点。

◆ initVkCom()

virtual Ptr< BackendNode > cv::dnn::Layer::initVkCom ( const std::vector< Ptr< BackendWrapper > > & 输入,
std::vector< Ptr< BackendWrapper > > & outputs )
虚拟

◆ initWebnn()

virtual Ptr< BackendNode > cv::dnn::Layer::initWebnn ( const std::vector< Ptr< BackendWrapper > > & 输入,
const std::vector< Ptr< BackendNode > > & nodes )
虚拟

◆ inputNameToIndex()

virtual int cv::dnn::Layer::inputNameToIndex ( 字符串 (String) inputName)
虚拟

返回输入 blob 在输入数组中的索引。

参数
inputName输入blob的标签。

每一层的输入和输出都可以被标记,以便使用“%<layer_name%>[.output_name]”符号轻松识别它们。此方法将输入blob的标签映射到其在输入向量中的索引。

cv::dnn::LSTMLayer 中重新实现。

◆ outputNameToIndex()

virtual int cv::dnn::Layer::outputNameToIndex ( const String & outputName)
虚拟
Python
cv.dnn.Layer.outputNameToIndex(outputName) -> 返回值 (retval)

返回输出 blob 在输出数组中的索引。

参见
inputNameToIndex()

cv::dnn::LSTMLayer 中重新实现。

◆ run()

void cv::dnn::Layer::run ( const std::vector< Mat > & 输入,
std::vector< Mat > & 输出,
std::vector< Mat > & internals )
Python
cv.dnn.Layer.run(inputs, internals[, outputs]) -> outputs, internals

分配层并计算输出。

已弃用
此方法将在未来的版本中移除。

◆ setActivation()

virtual bool cv::dnn::Layer::setActivation ( const Ptr< ActivationLayer > & layer)
虚拟

尝试将后续激活层附加到该层,即在部分情况下进行层融合。

参数
[输入]layer后续的激活层。

如果激活层已成功附加,则返回true。

◆ setParamsFrom()

void cv::dnn::Layer::setParamsFrom ( const LayerParams & params)

仅初始化nametypeblobs 字段。

◆ supportBackend()

virtual bool cv::dnn::Layer::supportBackend ( int backendId)
虚拟

询问层是否支持特定后端进行计算。

参数
[输入]backendId计算后端标识符。
参见
后端 (Backend)

◆ tryAttach()

virtual Ptr< BackendNode > cv::dnn::Layer::tryAttach ( const Ptr< BackendNode > & node)
虚拟

实现层融合。

参数
[输入]node底层的后端节点。
参见
BackendNode

对于基于图的后端来说是实际的。如果层成功附加,则返回对相同后端节点的非空cv::Ptr。仅对最后一个函数进行融合。

◆ tryFuse()

virtual bool cv::dnn::Layer::tryFuse ( Ptr< Layer > & top)
虚拟

尝试将当前层与下一层融合。

参数
[输入]top要融合的下一层。
返回值 (Returns)
如果执行了融合,则返回True。

◆ tryQuantize()

virtual bool cv::dnn::Layer::tryQuantize ( const std::vector< std::vector< float > > & scales,
const std::vector< std::vector< int > > & zeropoints,
LayerParams & params )
虚拟

尝试量化给定层并计算定点实现所需的量化参数。

参数
[输入]scales输入和输出比例。
[输入]zeropoints输入和输出零点。
[输出]params该层定点实现所需的量化参数。
返回值 (Returns)
如果层可以量化,则返回True。

◆ unsetAttached()

virtual void cv::dnn::Layer::unsetAttached ( )
虚拟

“分离”附加到特定层的所有层。

◆ updateMemoryShapes()

virtual bool cv::dnn::Layer::updateMemoryShapes ( const std::vector< MatShape > & 输入)
虚拟

成员数据文档 (Member Data Documentation)

◆ blobs

std::vector<Mat> cv::dnn::Layer::blobs

必须在此处存储学习到的参数列表,以便可以使用 Net::getParam() 读取它们。

◆ name

String cv::dnn::Layer::name

层实例的名称,可用于日志记录或其他内部用途。

◆ preferableTarget

int cv::dnn::Layer::preferableTarget

层前向传播的首选目标

◆ type

String cv::dnn::Layer::type

通过层工厂创建层时使用的类型名称。


此类的文档是从以下文件生成的: