OpenCV  4.10.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)
 根据输入、输出和 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]shift逐通道偏移量。值的总数应等于通道数。

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

◆ getScaleZeropoint()

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

返回层的缩放比例和零点。

参数
[out]scale输出比例
[out]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 后端节点。

参数
[in]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< 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计算后端标识符。
另请参阅
Backend

◆ 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

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


该类的文档是从以下文件生成的