OpenCV 4.12.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)
 
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)
显式

仅初始化 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 自动调度。

参数
[输入]node带有Halide函数的后端节点。
[输入]inputs将在前向调用中使用的blobs。
[输入]outputs将在前向调用中使用的blobs。
[输入]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

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

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

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

◆ 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

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

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

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

◆ forward() [1/2]

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

给定 input blobs,计算输出 blobs

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

◆ forward() [2/2]

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

给定 input blobs,计算输出 blobs

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

◆ forward_fallback()

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

给定 input blobs,计算输出 blobs

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

◆ 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 所需输出,
std::vector< MatShape > & outputs,
std::vector< MatShape > & internals ) const
virtual

◆ getScaleShift()

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

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

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

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

◆ getScaleZeropoint()

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

返回层的缩放和零点。

参数
[输出]scale输出缩放
[输出]zeropoint输出零点

默认情况下,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 后端节点。

参数
[输入]inputs输入Halide缓冲区。
另请参见
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< BackendWrapper > 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 的标签

每个层的输入和输出都可以被标记,以便使用“%[.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

尝试将后续激活层附加到当前层,即在特定情况下进行层融合。

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

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

◆ setParamsFrom()

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

仅初始化 nametypeblobs 字段。

◆ supportBackend()

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

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

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

◆ tryAttach()

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

实现层融合。

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

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

◆ tryFuse()

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

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

参数
[输入]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

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

参数
[输入]scales输入和输出缩放。
[输入]zeropoints输入和输出零点。
[输出]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

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


此类的文档生成自以下文件