OpenCV 4.13.0
开源计算机视觉库 (Open Source Computer Vision)
正在加载...
正在搜索...
未找到匹配项
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)
 根据输入、输出和 blob 计算并设置内部参数。
 
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)
 根据输入、输出和 blob 计算并设置内部参数。
 
virtual void forward (InputArrayOfArrays inputs, OutputArrayOfArrays outputs, OutputArrayOfArrays internals)
 给定 `input` blob,计算输出 `blobs`。
 
virtual void forward (std::vector< Mat * > &input, std::vector< Mat > &output, std::vector< Mat > &internals)
 给定 `input` blob,计算输出 `blobs`。
 
void forward_fallback (InputArrayOfArrays inputs, OutputArrayOfArrays outputs, OutputArrayOfArrays internals)
 给定 `input` blob,计算输出 `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)
 
virtual int inputNameToIndex (String inputName)
 返回输入 blob 在输入数组中的索引。
 
virtual 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。
 
virtual 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 继承的静态公共成员函数
template<typename _Tp >
static Ptr< _Tpload (const String &filename, const String &objname=String())
 从文件中加载算法。
 
template<typename _Tp >
static Ptr< _TploadFromString (const String &strModel, const String &objname=String())
 从字符串中加载算法。
 
template<typename _Tp >
static 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)
explicit (显式)

仅初始化 nametypeblobs 字段。

◆ ~Layer()

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

成员函数说明

◆ applyHalideScheduler()

virtual void cv::dnn::Layer::applyHalideScheduler ( Ptr< BackendNode > & node,
const std::vector< Mat * > & inputs,
const std::vector< Mat > & outputs,
int targetId ) const
virtual

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

参数
[in]node带有 Halide 函数的后端节点。
[in]inputs将在前向调用中使用的 Blob。
[in]outputs将在前向调用中使用的 Blob。
[in]targetId目标标识符
另请参阅
BackendNode, Target

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

◆ finalize() [1/4]

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

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

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

此方法在网络分配所有输入和输出 blob 的内存之后、推断之前调用。

◆ finalize() [2/4]

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

这是一个重载的成员函数,为方便起见而提供。它与上述函数的区别仅在于所接受的参数不同。

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

◆ finalize() [3/4]

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

这是一个重载的成员函数,为方便起见而提供。它与上述函数的区别仅在于所接受的参数不同。

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

◆ finalize() [4/4]

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

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

参数
[in]inputs已分配的输入 blob 向量
[out]outputs已分配的输出 blob 向量

此方法在网络分配所有输入和输出 blob 的内存之后、推断之前调用。

◆ forward() [1/2]

virtual void cv::dnn::Layer::forward ( InputArrayOfArrays inputs,
OutputArrayOfArrays outputs,
OutputArrayOfArrays internals )
virtual

给定 `input` blob,计算输出 `blobs`。

参数
[in]inputs输入 blob。
[out]outputs已分配的输出 blob,将存储计算结果。
[out]internals已分配的内部 blob

◆ forward() [2/2]

virtual void cv::dnn::Layer::forward ( std::vector< Mat * > & input,
std::vector< Mat > & output,
std::vector< Mat > & internals )
virtual

给定 `input` blob,计算输出 `blobs`。

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

◆ forward_fallback()

void cv::dnn::Layer::forward_fallback ( InputArrayOfArrays inputs,
OutputArrayOfArrays outputs,
OutputArrayOfArrays internals )

给定 `input` blob,计算输出 `blobs`。

参数
[in]inputs输入 blob。
[out]outputs已分配的输出 blob,将存储计算结果。
[out]internals已分配的内部 blob

◆ getFLOPS()

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

◆ getMemoryShapes()

virtual bool cv::dnn::Layer::getMemoryShapes ( const std::vector< MatShape > & inputs,
const int requiredOutputs,
std::vector< MatShape > & outputs,
std::vector< MatShape > & internals ) const
virtual

◆ getScaleShift()

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

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

参数
[out]scale按通道乘数。总值数应等于通道数。
[out]移位按通道偏移。总值数应等于通道数。

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

◆ getScaleZeropoint()

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

返回层的比例和零点。

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

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

◆ initCann()

virtual Ptr< BackendNode > cv::dnn::Layer::initCann ( const std::vector< Ptr< BackendWrapper > > & inputs,
const std::vector< Ptr< BackendWrapper > > & outputs,
const std::vector< Ptr< BackendNode > > & nodes )
virtual

返回 CANN 后端节点。

参数
inputsCANN 运算符的输入张量
outputsCANN 运算符的输出张量
nodes输入张量的节点

◆ initCUDA()

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

返回 CUDA 后端节点。

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

◆ initHalide()

virtual Ptr< BackendNode > cv::dnn::Layer::initHalide ( const std::vector< Ptr< BackendWrapper > > & inputs)
virtual

返回 Halide 后端节点。

参数
[in]inputsHalide 输入缓冲区。
另请参阅
BackendNode, BackendWrapper

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

◆ initNgraph()

virtual Ptr< BackendNode > cv::dnn::Layer::initNgraph ( const std::vector< Ptr< BackendWrapper > > & inputs,
const std::vector< Ptr< BackendNode > > & nodes )
virtual

◆ initTimVX()

virtual Ptr< BackendNode > cv::dnn::Layer::initTimVX ( void * timVxInfo,
const std::vector< Ptr< BackendWrapper > > & inputsWrapper,
const std::vector< Ptr< BackendWrapper > > & outputsWrapper,
bool isLast )
virtual

返回 TimVX 后端节点。

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

◆ initVkCom()

virtual Ptr< BackendNode > cv::dnn::Layer::initVkCom ( const std::vector< Ptr< BackendWrapper > > & inputs,
std::vector< Ptr< BackendWrapper > > & outputs )
virtual

◆ initWebnn()

virtual Ptr< BackendNode > cv::dnn::Layer::initWebnn ( const std::vector< Ptr< BackendWrapper > > & inputs,
const std::vector< Ptr< BackendNode > > & nodes )
virtual

◆ inputNameToIndex()

virtual int cv::dnn::Layer::inputNameToIndex ( String inputName)
virtual

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

参数
inputName输入 blob 的标签

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

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

◆ outputNameToIndex()

virtual int cv::dnn::Layer::outputNameToIndex ( const String & outputName)
virtual
Python
cv.dnn.Layer.outputNameToIndex(outputName) -> retval

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

另请参阅
inputNameToIndex()

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

◆ run()

void cv::dnn::Layer::run ( const std::vector< Mat > & inputs,
std::vector< Mat > & outputs,
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)
virtual

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

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

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

◆ setParamsFrom()

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

仅初始化 nametypeblobs 字段。

◆ supportBackend()

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

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

参数
[in]backendId计算后端标识符。
另请参阅
后端

◆ tryAttach()

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

实现层融合。

参数
[in]node底层后端节点。
另请参阅
BackendNode

适用于基于图的后端。如果层成功附加,则返回非空的相同后端节点的 cv::Ptr。仅在最后一个函数上进行融合。

◆ tryFuse()

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

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

参数
[in]top (上)要融合的下一层。
返回
如果执行了融合,则为 True。

◆ tryQuantize()

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

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

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

◆ unsetAttached()

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

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

◆ updateMemoryShapes()

virtual bool cv::dnn::Layer::updateMemoryShapes ( const std::vector< MatShape > & inputs)
virtual

成员数据文档

◆ 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

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


该类的文档由以下文件生成: