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

透過層工廠建立層時使用的型別名稱。


此類的文件生成自以下檔案