OpenCV 4.12.0
開源計算機視覺
載入中...
搜尋中...
無匹配項
cv::dnn::Net 類參考

此類允許建立和操作綜合人工神經網路。更多...

#include <opencv2/dnn/dnn.hpp>

cv::dnn::Net 的協作圖

公共型別

typedef DictValue LayerId
 字串和整數的容器。
 

公共成員函式

 Net ()
 預設建構函式。
 
 ~Net ()
 解構函式僅在網路不再有引用時才釋放網路。
 
int addLayer (const String &name, const String &type, const int &dtype, LayerParams &params)
 向網路新增新層。
 
int addLayer (const String &name, const String &type, LayerParams &params)
 
int addLayerToPrev (const String &name, const String &type, const int &dtype, LayerParams &params)
 新增新層,並將其第一個輸入連線到先前新增的層的第一個輸出。
 
int addLayerToPrev (const String &name, const String &type, LayerParams &params)
 
void connect (int outLayerId, int outNum, int inpLayerId, int inpNum)
 將第一個層的 #outNum 輸出連線到第二個層的 #inNum 輸入。
 
void connect (String outPin, String inpPin)
 將第一個層的輸出連線到第二個層的輸入。
 
String dump ()
 將網路轉儲為字串。
 
void dumpToFile (CV_WRAP_FILE_PATH const String &path)
 將網路結構、超引數、後端、目標和融合轉儲到 dot 檔案。
 
void dumpToPbtxt (CV_WRAP_FILE_PATH const String &path)
 將網路結構、超引數、後端、目標和融合轉儲到 pbtxt 檔案。
 
bool empty () const
 
void enableFusion (bool fusion)
 啟用或停用網路中的層融合。
 
void enableWinograd (bool useWinograd)
 啟用或停用 Winograd 計算分支。Winograd 計算分支可以在損失少量精度的情況下,將 3x3 卷積的速度提高 3 倍。
 
Mat forward (const String &outputName=String())
 執行前向傳播以計算名為 outputName 的層的輸出。
 
void forward (CV_ND OutputArrayOfArrays outputBlobs, const std::vector< String > &outBlobNames)
 執行前向傳播以計算 outBlobNames 中列出的層的輸出。
 
void forward (CV_ND OutputArrayOfArrays outputBlobs, const String &outputName=String())
 執行前向傳播以計算名為 outputName 的層的輸出。
 
void forward (std::vector< std::vector< Mat > > &outputBlobs, const std::vector< String > &outBlobNames)
 執行前向傳播以計算 outBlobNames 中列出的層的輸出。
 
AsyncArray forwardAsync (const String &outputName=String())
 執行前向傳播以計算名為 outputName 的層的輸出。
 
int64 getFLOPS (const int layerId, const MatShape &netInputShape) const
 
int64 getFLOPS (const int layerId, const std::vector< MatShape > &netInputShapes) const
 
int64 getFLOPS (const MatShape &netInputShape) const
 
int64 getFLOPS (const std::vector< MatShape > &netInputShapes) const
 計算載入模型的總 FLOPs,給定指定的輸入形狀。
 
Impl * getImpl () const
 
Impl & getImplRef () const
 
void getInputDetails (std::vector< float > &scales, std::vector< int > &zeropoints) const
 返回量化 Net 的輸入比例和零點。
 
Ptr< LayergetLayer (const LayerId &layerId) const
 
Ptr< LayergetLayer (const String &layerName) const
 
Ptr< LayergetLayer (int layerId) const
 返回網路使用的具有指定 ID 或名稱的層的指標。
 
int getLayerId (const String &layer) const
 將層的字串名稱轉換為整數識別符號。
 
std::vector< Ptr< Layer > > getLayerInputs (int layerId) const
 返回特定層的輸入層的指標。
 
std::vector< StringgetLayerNames () const
 
int getLayersCount (const String &layerType) const
 返回指定型別的層數。
 
void getLayerShapes (const MatShape &netInputShape, const int layerId, std::vector< MatShape > &inLayerShapes, std::vector< MatShape > &outLayerShapes) const
 返回載入模型中指定 ID 層的輸入和輸出形狀;無需預先推斷。
 
void getLayerShapes (const std::vector< MatShape > &netInputShapes, const int layerId, std::vector< MatShape > &inLayerShapes, std::vector< MatShape > &outLayerShapes) const
 
void getLayersShapes (const MatShape &netInputShape, std::vector< int > &layersIds, std::vector< std::vector< MatShape > > &inLayersShapes, std::vector< std::vector< MatShape > > &outLayersShapes) const
 
void getLayersShapes (const std::vector< MatShape > &netInputShapes, std::vector< int > &layersIds, std::vector< std::vector< MatShape > > &inLayersShapes, std::vector< std::vector< MatShape > > &outLayersShapes) const
 返回載入模型中所有層的輸入和輸出形狀;無需預先推斷。
 
void getLayerTypes (std::vector< String > &layersTypes) const
 返回模型中使用的層的型別列表。
 
void getMemoryConsumption (const int layerId, const MatShape &netInputShape, size_t &weights, size_t &blobs) const
 
void getMemoryConsumption (const int layerId, const std::vector< MatShape > &netInputShapes, size_t &weights, size_t &blobs) const
 
void getMemoryConsumption (const MatShape &netInputShape, size_t &weights, size_t &blobs) const
 
void getMemoryConsumption (const MatShape &netInputShape, std::vector< int > &layerIds, std::vector< size_t > &weights, std::vector< size_t > &blobs) const
 
void getMemoryConsumption (const std::vector< MatShape > &netInputShapes, size_t &weights, size_t &blobs) const
 計算儲存模型所有權重和中間 blob 所需的位元組數。
 
void getMemoryConsumption (const std::vector< MatShape > &netInputShapes, std::vector< int > &layerIds, std::vector< size_t > &weights, std::vector< size_t > &blobs) const
 計算儲存每個層的所有權重和中間 blob 所需的位元組數。
 
void getOutputDetails (std::vector< float > &scales, std::vector< int > &zeropoints) const
 返回量化 Net 的輸出比例和零點。
 
Mat getParam (const String &layerName, int numParam=0) const
 
Mat getParam (int layer, int numParam=0) const
 返回層的引數 blob。
 
int64 getPerfProfile (std::vector< double > &timings)
 返回推理的總時間和層的計時(以時鐘週期計)。
 
std::vector< int > getUnconnectedOutLayers () const
 返回具有未連線輸出的層的索引。
 
std::vector< StringgetUnconnectedOutLayersNames () const
 返回具有未連線輸出的層的名稱。
 
Net quantize (InputArrayOfArrays calibData, int inputsDtype, int outputsDtype, bool perChannel=true)
 從浮點 Net 返回量化 Net
 
int registerOutput (const std::string &outputName, int layerId, int outputPort)
 註冊帶有名稱的網路輸出。
 
void setHalideScheduler (const String &scheduler)
 編譯 Halide 層。
 
void setInput (CV_ND InputArray blob, const String &name="", double scalefactor=1.0, const Scalar &mean=Scalar())
 設定網路的新輸入值。
 
void setInputShape (const String &inputName, const MatShape &shape)
 指定網路輸入的形狀。
 
void setInputsNames (const std::vector< String > &inputBlobNames)
 設定網路輸入偽層的輸出名稱。
 
void setParam (const String &layerName, int numParam, CV_ND const Mat &blob)
 
void setParam (int layer, int numParam, CV_ND const Mat &blob)
 設定層學習引數的新值。
 
void setPreferableBackend (int backendId)
 要求網路在支援的情況下使用特定的計算後端。
 
void setPreferableTarget (int targetId)
 要求網路在特定目標裝置上進行計算。
 

靜態公共成員函式

static Net readFromModelOptimizer (const std::vector< uchar > &bufferModelConfig, const std::vector< uchar > &bufferWeights)
 從 Intel 的 Model Optimizer 記憶體中的中間表示 (IR) 緩衝區建立網路。
 
static Net readFromModelOptimizer (const uchar *bufferModelConfigPtr, size_t bufferModelConfigSize, const uchar *bufferWeightsPtr, size_t bufferWeightsSize)
 從 Intel 的 Model Optimizer 記憶體中的中間表示 (IR) 緩衝區建立網路。
 
static Net readFromModelOptimizer (CV_WRAP_FILE_PATH const String &xml, CV_WRAP_FILE_PATH const String &bin)
 從 Intel 的 Model Optimizer 中間表示 (IR) 建立網路。
 

保護屬性

Ptr< Impl > impl
 

友元

class accessor::DnnNetAccessor
 

詳細描述

此類允許建立和操作綜合人工神經網路。

神經網路表示為有向無環圖 (DAG),其中頂點是 Layer 例項,邊指定層輸入和輸出之間的關係。

每個網路層在其網路內都有唯一的整數 ID 和唯一的字串名稱。LayerId 可以儲存層名稱或層 ID。

此類別支援其例項的引用計數,即副本指向同一例項。

示例
samples/dnn/colorization.cppsamples/dnn/openpose.cpp

成員 Typedef 文件

◆ LayerId

字串和整數的容器。

已棄用
使用結果為 int 的 getLayerId()

建構函式 & 解構函式文件

◆ Net()

cv::dnn::Net::Net ( )
Python
cv.dnn.Net() -> <dnn_Net 物件>

預設建構函式。

◆ ~Net()

cv::dnn::Net::~Net ( )

解構函式僅在網路不再有引用時才釋放網路。

成員函式文件

◆ addLayer() [1/2]

int cv::dnn::Net::addLayer ( const String & name,
const String & type,
const int & dtype,
LayerParams & params )
Python
cv.dnn.Net.addLayer(name, type, dtype, params) -> retval

向網路新增新層。

引數
name新增層的唯一名稱。
type新增層的型別名稱(型別必須在 LayerRegister 中註冊)。
dtype輸出 blob 的資料型別。
params用於初始化建立層的引數。
返回
建立層的唯一識別符號,如果發生故障則為 -1。

◆ addLayer() [2/2]

int cv::dnn::Net::addLayer ( const String & name,
const String & type,
LayerParams & params )
Python
cv.dnn.Net.addLayer(name, type, dtype, params) -> retval

◆ addLayerToPrev() [1/2]

int cv::dnn::Net::addLayerToPrev ( const String & name,
const String & type,
const int & dtype,
LayerParams & params )
Python
cv.dnn.Net.addLayerToPrev(name, type, dtype, params) -> retval

新增新層,並將其第一個輸入連線到先前新增的層的第一個輸出。

另請參見
addLayer()

◆ addLayerToPrev() [2/2]

int cv::dnn::Net::addLayerToPrev ( const String & name,
const String & type,
LayerParams & params )
Python
cv.dnn.Net.addLayerToPrev(name, type, dtype, params) -> retval

這是一個過載成員函式,為了方便而提供。它與上述函式的區別僅在於它接受的引數。

◆ connect() [1/2]

void cv::dnn::Net::connect ( int outLayerId,
int outNum,
int inpLayerId,
int inpNum )
Python
cv.dnn.Net.connect(outPin, inpPin) ->

將第一個層的 #outNum 輸出連線到第二個層的 #inNum 輸入。

引數
outLayerId第一個層的識別符號
outNum第一個層的輸出編號
inpLayerId第二個層的識別符號
inpNum第二個層的輸入編號

◆ connect() [2/2]

void cv::dnn::Net::connect ( String outPin,
String inpPin )
Python
cv.dnn.Net.connect(outPin, inpPin) ->

將第一個層的輸出連線到第二個層的輸入。

引數
outPin第一個層輸出的描述符。
inpPin第二個層輸入的描述符。

描述符具有以下模板 <layer_name>[.input_number]

  • 模板的第一部分 layer_name 是新增層的字串名稱。如果此部分為空,則將使用網路輸入偽層;
  • 模板的第二個可選部分 input_number 是層輸入的編號或標籤。如果此部分省略,則將使用第一個層輸入。

    另請參見
    setNetInputs(), Layer::inputNameToIndex(), Layer::outputNameToIndex()

◆ dump()

String cv::dnn::Net::dump ( )
Python
cv.dnn.Net.dump() -> retval

將網路轉儲為字串。

返回
包含結構、超引數、後端、目標和融合的字串。在 setInput() 之後呼叫此方法。要檢視正確的後端、目標和融合,請在 forward() 之後執行。

◆ dumpToFile()

void cv::dnn::Net::dumpToFile ( CV_WRAP_FILE_PATH const String & 路徑)
Python
cv.dnn.Net.dumpToFile(路徑) ->

將網路結構、超引數、後端、目標和融合轉儲到 dot 檔案。

引數
路徑輸出檔案路徑,副檔名為 .dot
另請參見
dump()

◆ dumpToPbtxt()

void cv::dnn::Net::dumpToPbtxt ( CV_WRAP_FILE_PATH const String & 路徑)
Python
cv.dnn.Net.dumpToPbtxt(路徑) ->

將網路結構、超引數、後端、目標和融合轉儲到 pbtxt 檔案。

引數
路徑輸出檔案路徑,副檔名為 .pbtxt

使用 Netron (https://netron.app) 開啟目標檔案以視覺化模型。在 setInput() 之後呼叫此方法。要檢視正確的後端、目標和融合,請在 forward() 之後執行。

◆ empty()

bool cv::dnn::Net::empty ( ) const
Python
cv.dnn.Net.empty() -> retval

如果網路中沒有層,則返回 true。

◆ enableFusion()

void cv::dnn::Net::enableFusion ( bool fusion)
Python
cv.dnn.Net.enableFusion(fusion) ->

啟用或停用網路中的層融合。

引數
fusiontrue 啟用融合,false 停用。融合預設啟用。

◆ enableWinograd()

void cv::dnn::Net::enableWinograd ( bool useWinograd(使用Winograd演算法))
Python
cv.dnn.Net.enableWinograd(useWinograd(使用Winograd演算法)) ->

啟用或停用 Winograd 計算分支。Winograd 計算分支可以在損失少量精度的情況下,將 3x3 卷積的速度提高 3 倍。

引數
useWinograd(使用Winograd演算法)true 啟用 Winograd 計算分支。預設值為 true。

◆ forward() [1/4]

Mat cv::dnn::Net::forward ( const String & outputName = String())
Python
cv.dnn.Net.forward([, outputName]) -> retval
cv.dnn.Net.forward([, outputBlobs[, outputName]]) -> outputBlobs
cv.dnn.Net.forward(outBlobNames[, outputBlobs]) -> outputBlobs
cv.dnn.Net.forwardAndRetrieve(outBlobNames) -> outputBlobs

執行前向傳播以計算名為 outputName 的層的輸出。

引數
outputName需要獲取其輸出的層的名稱
返回
指定層的第一個輸出的 blob。

預設情況下,對整個網路執行前向傳播。

示例
samples/dnn/colorization.cppsamples/dnn/openpose.cpp

◆ forward() [2/4]

void cv::dnn::Net::forward ( CV_ND OutputArrayOfArrays outputBlobs,
const std::vector< String > & outBlobNames )
Python
cv.dnn.Net.forward([, outputName]) -> retval
cv.dnn.Net.forward([, outputBlobs[, outputName]]) -> outputBlobs
cv.dnn.Net.forward(outBlobNames[, outputBlobs]) -> outputBlobs
cv.dnn.Net.forwardAndRetrieve(outBlobNames) -> outputBlobs

執行前向傳播以計算 outBlobNames 中列出的層的輸出。

引數
outputBlobs包含指定層第一個輸出的 blob。
outBlobNames需要獲取其輸出的層的名稱。

◆ forward() [3/4]

void cv::dnn::Net::forward ( CV_ND OutputArrayOfArrays outputBlobs,
const String & outputName = String() )
Python
cv.dnn.Net.forward([, outputName]) -> retval
cv.dnn.Net.forward([, outputBlobs[, outputName]]) -> outputBlobs
cv.dnn.Net.forward(outBlobNames[, outputBlobs]) -> outputBlobs
cv.dnn.Net.forwardAndRetrieve(outBlobNames) -> outputBlobs

執行前向傳播以計算名為 outputName 的層的輸出。

引數
outputBlobs包含指定層的全部輸出 blob。
outputName需要獲取其輸出的層的名稱

如果 outputName 為空,則對整個網路執行前向傳播。

◆ forward() [4/4]

void cv::dnn::Net::forward ( std::vector< std::vector< Mat > > & outputBlobs,
const std::vector< String > & outBlobNames )
Python
cv.dnn.Net.forward([, outputName]) -> retval
cv.dnn.Net.forward([, outputBlobs[, outputName]]) -> outputBlobs
cv.dnn.Net.forward(outBlobNames[, outputBlobs]) -> outputBlobs
cv.dnn.Net.forwardAndRetrieve(outBlobNames) -> outputBlobs

執行前向傳播以計算 outBlobNames 中列出的層的輸出。

引數
outputBlobs包含 outBlobNames 中指定的每個層的所有輸出 blob。
outBlobNames需要獲取其輸出的層的名稱。

◆ forwardAsync()

AsyncArray cv::dnn::Net::forwardAsync ( const String & outputName = String())
Python
cv.dnn.Net.forwardAsync([, outputName]) -> retval

執行前向傳播以計算名為 outputName 的層的輸出。

引數
outputName需要獲取其輸出的層的名稱

預設情況下,對整個網路執行前向傳播。

這是 forward(const String&) 的非同步版本。需要 dnn::DNN_BACKEND_INFERENCE_ENGINE 後端。

◆ getFLOPS() [1/4]

int64 cv::dnn::Net::getFLOPS ( const int layerId,
const MatShape & netInputShape ) const
Python
cv.dnn.Net.getFLOPS(netInputShapes) -> retval
cv.dnn.Net.getFLOPS(netInputShape) -> retval
cv.dnn.Net.getFLOPS(layerId, netInputShapes) -> retval
cv.dnn.Net.getFLOPS(layerId, netInputShape) -> retval

這是一個過載成員函式,為了方便而提供。它與上述函式的區別僅在於它接受的引數。

◆ getFLOPS() [2/4]

int64 cv::dnn::Net::getFLOPS ( const int layerId,
const std::vector< MatShape > & netInputShapes ) const
Python
cv.dnn.Net.getFLOPS(netInputShapes) -> retval
cv.dnn.Net.getFLOPS(netInputShape) -> retval
cv.dnn.Net.getFLOPS(layerId, netInputShapes) -> retval
cv.dnn.Net.getFLOPS(layerId, netInputShape) -> retval

這是一個過載成員函式,為了方便而提供。它與上述函式的區別僅在於它接受的引數。

◆ getFLOPS() [3/4]

int64 cv::dnn::Net::getFLOPS ( const MatShape & netInputShape) const
Python
cv.dnn.Net.getFLOPS(netInputShapes) -> retval
cv.dnn.Net.getFLOPS(netInputShape) -> retval
cv.dnn.Net.getFLOPS(layerId, netInputShapes) -> retval
cv.dnn.Net.getFLOPS(layerId, netInputShape) -> retval

這是一個過載成員函式,為了方便而提供。它與上述函式的區別僅在於它接受的引數。

◆ getFLOPS() [4/4]

int64 cv::dnn::Net::getFLOPS ( const std::vector< MatShape > & netInputShapes) const
Python
cv.dnn.Net.getFLOPS(netInputShapes) -> retval
cv.dnn.Net.getFLOPS(netInputShape) -> retval
cv.dnn.Net.getFLOPS(layerId, netInputShapes) -> retval
cv.dnn.Net.getFLOPS(layerId, netInputShape) -> retval

計算載入模型的總 FLOPs,給定指定的輸入形狀。

引數
netInputShapes所有網路輸入的形狀向量。
返回
計算出的 FLOPs。

◆ getImpl()

Impl * cv::dnn::Net::getImpl ( ) const
inline

◆ getImplRef()

Impl & cv::dnn::Net::getImplRef ( ) const
inline

◆ getInputDetails()

void cv::dnn::Net::getInputDetails ( std::vector< float > & scales,
std::vector< int > & zeropoints ) const
Python
cv.dnn.Net.getInputDetails() -> scales, zeropoints

返回量化 Net 的輸入比例和零點。

引數
scales返回輸入比例的輸出引數。
zeropoints返回輸入零點的輸出引數。

◆ getLayer() [1/3]

Ptr< Layer > cv::dnn::Net::getLayer ( const LayerId & layerId) const
Python
cv.dnn.Net.getLayer(layerId) -> retval
cv.dnn.Net.getLayer(layerName) -> retval

這是一個過載成員函式,為了方便而提供。它與上述函式的區別僅在於它接受的引數。

已棄用
待移除

◆ getLayer() [2/3]

Ptr< Layer > cv::dnn::Net::getLayer ( const String & layerName) const
inline
Python
cv.dnn.Net.getLayer(layerId) -> retval
cv.dnn.Net.getLayer(layerName) -> retval

這是一個過載成員函式,為了方便而提供。它與上述函式的區別僅在於它接受的引數。

已棄用
使用 int getLayerId(const String &layer)
此函式的呼叫圖如下

◆ getLayer() [3/3]

Ptr< Layer > cv::dnn::Net::getLayer ( int layerId) const
Python
cv.dnn.Net.getLayer(layerId) -> retval
cv.dnn.Net.getLayer(layerName) -> retval

返回網路使用的具有指定 ID 或名稱的層的指標。

示例
samples/dnn/colorization.cpp.

◆ getLayerId()

int cv::dnn::Net::getLayerId ( const String & layer) const
Python
cv.dnn.Net.getLayerId(layer) -> retval

將層的字串名稱轉換為整數識別符號。

返回
層的 ID,如果未找到層則為 -1。

◆ getLayerInputs()

std::vector< Ptr< Layer > > cv::dnn::Net::getLayerInputs ( int layerId) const

返回特定層的輸入層的指標。

◆ getLayerNames()

std::vector< String > cv::dnn::Net::getLayerNames ( ) const
Python
cv.dnn.Net.getLayerNames() -> retval

◆ getLayersCount()

int cv::dnn::Net::getLayersCount ( const String & layerType) const
Python
cv.dnn.Net.getLayersCount(layerType) -> retval

返回指定型別的層數。

引數
layerType型別。
返回
層數

◆ getLayerShapes() [1/2]

void cv::dnn::Net::getLayerShapes ( const MatShape & netInputShape,
const int layerId,
std::vector< MatShape > & inLayerShapes,
std::vector< MatShape > & outLayerShapes ) const

返回載入模型中指定 ID 層的輸入和輸出形狀;無需預先推斷。

引數
netInputShape網路輸入層中的形狀輸入 blob。
layerId層的 ID。
inLayerShapes輸入層形狀的輸出引數;順序與 layersIds 中的順序相同
outLayerShapes輸出層形狀的輸出引數;順序與 layersIds 中的順序相同

◆ getLayerShapes() [2/2]

void cv::dnn::Net::getLayerShapes ( const std::vector< MatShape > & netInputShapes,
const int layerId,
std::vector< MatShape > & inLayerShapes,
std::vector< MatShape > & outLayerShapes ) const

這是一個過載成員函式,為了方便而提供。它與上述函式的區別僅在於它接受的引數。

◆ getLayersShapes() [1/2]

void cv::dnn::Net::getLayersShapes ( const MatShape & netInputShape,
std::vector< int > & layersIds,
std::vector< std::vector< MatShape > > & inLayersShapes,
std::vector< std::vector< MatShape > > & outLayersShapes ) const
Python
cv.dnn.Net.getLayersShapes(netInputShapes) -> layersIds, inLayersShapes, outLayersShapes
cv.dnn.Net.getLayersShapes(netInputShape) -> layersIds, inLayersShapes, outLayersShapes

這是一個過載成員函式,為了方便而提供。它與上述函式的區別僅在於它接受的引數。

◆ getLayersShapes() [2/2]

void cv::dnn::Net::getLayersShapes ( const std::vector< MatShape > & netInputShapes,
std::vector< int > & layersIds,
std::vector< std::vector< MatShape > > & inLayersShapes,
std::vector< std::vector< MatShape > > & outLayersShapes ) const
Python
cv.dnn.Net.getLayersShapes(netInputShapes) -> layersIds, inLayersShapes, outLayersShapes
cv.dnn.Net.getLayersShapes(netInputShape) -> layersIds, inLayersShapes, outLayersShapes

返回載入模型中所有層的輸入和輸出形狀;無需預先推斷。

引數
netInputShapes網路輸入層中所有輸入 blob 的形狀。
layersIds層 ID 的輸出引數。
inLayersShapes輸入層形狀的輸出引數;順序與 layersIds 中的順序相同
outLayersShapes輸出層形狀的輸出引數;順序與 layersIds 中的順序相同

◆ getLayerTypes()

void cv::dnn::Net::getLayerTypes ( std::vector< String > & layersTypes) const
Python
cv.dnn.Net.getLayerTypes() -> layersTypes

返回模型中使用的層的型別列表。

引數
layersTypes返回型別的輸出引數。

◆ getMemoryConsumption() [1/6]

void cv::dnn::Net::getMemoryConsumption ( const int layerId,
const MatShape & netInputShape,
size_t & weights,
size_t & blobs ) const
Python
cv.dnn.Net.getMemoryConsumption(netInputShape) -> weights, blobs
cv.dnn.Net.getMemoryConsumption(layerId, netInputShapes) -> weights, blobs
cv.dnn.Net.getMemoryConsumption(layerId, netInputShape) -> weights, blobs

這是一個過載成員函式,為了方便而提供。它與上述函式的區別僅在於它接受的引數。

◆ getMemoryConsumption() [2/6]

void cv::dnn::Net::getMemoryConsumption ( const int layerId,
const std::vector< MatShape > & netInputShapes,
size_t & weights,
size_t & blobs ) const
Python
cv.dnn.Net.getMemoryConsumption(netInputShape) -> weights, blobs
cv.dnn.Net.getMemoryConsumption(layerId, netInputShapes) -> weights, blobs
cv.dnn.Net.getMemoryConsumption(layerId, netInputShape) -> weights, blobs

這是一個過載成員函式,為了方便而提供。它與上述函式的區別僅在於它接受的引數。

◆ getMemoryConsumption() [3/6]

void cv::dnn::Net::getMemoryConsumption ( const MatShape & netInputShape,
size_t & weights,
size_t & blobs ) const
Python
cv.dnn.Net.getMemoryConsumption(netInputShape) -> weights, blobs
cv.dnn.Net.getMemoryConsumption(layerId, netInputShapes) -> weights, blobs
cv.dnn.Net.getMemoryConsumption(layerId, netInputShape) -> weights, blobs

這是一個過載成員函式,為了方便而提供。它與上述函式的區別僅在於它接受的引數。

◆ getMemoryConsumption() [4/6]

void cv::dnn::Net::getMemoryConsumption ( const MatShape & netInputShape,
std::vector< int > & layerIds,
std::vector< size_t > & weights,
std::vector< size_t > & blobs ) const
Python
cv.dnn.Net.getMemoryConsumption(netInputShape) -> weights, blobs
cv.dnn.Net.getMemoryConsumption(layerId, netInputShapes) -> weights, blobs
cv.dnn.Net.getMemoryConsumption(layerId, netInputShape) -> weights, blobs

這是一個過載成員函式,為了方便而提供。它與上述函式的區別僅在於它接受的引數。

◆ getMemoryConsumption() [5/6]

void cv::dnn::Net::getMemoryConsumption ( const std::vector< MatShape > & netInputShapes,
size_t & weights,
size_t & blobs ) const
Python
cv.dnn.Net.getMemoryConsumption(netInputShape) -> weights, blobs
cv.dnn.Net.getMemoryConsumption(layerId, netInputShapes) -> weights, blobs
cv.dnn.Net.getMemoryConsumption(layerId, netInputShape) -> weights, blobs

計算儲存模型所有權重和中間 blob 所需的位元組數。

引數
netInputShapes所有網路輸入的形狀向量。
weights儲存結果權重位元組的輸出引數。
blobs儲存結果中間 blob 位元組的輸出引數。

◆ getMemoryConsumption() [6/6]

void cv::dnn::Net::getMemoryConsumption ( const std::vector< MatShape > & netInputShapes,
std::vector< int > & layerIds,
std::vector< size_t > & weights,
std::vector< size_t > & blobs ) const
Python
cv.dnn.Net.getMemoryConsumption(netInputShape) -> weights, blobs
cv.dnn.Net.getMemoryConsumption(layerId, netInputShapes) -> weights, blobs
cv.dnn.Net.getMemoryConsumption(layerId, netInputShape) -> weights, blobs

計算儲存每個層的所有權重和中間 blob 所需的位元組數。

引數
netInputShapes所有網路輸入的形狀向量。
layerIds用於儲存層 ID 的輸出向量。
weights儲存結果權重位元組的輸出引數。
blobs儲存結果中間 blob 位元組的輸出引數。

◆ getOutputDetails()

void cv::dnn::Net::getOutputDetails ( std::vector< float > & scales,
std::vector< int > & zeropoints ) const
Python
cv.dnn.Net.getOutputDetails() -> scales, zeropoints

返回量化 Net 的輸出比例和零點。

引數
scales返回輸出比例的輸出引數。
zeropoints返回輸出零點的輸出引數。

◆ getParam() [1/2]

Mat cv::dnn::Net::getParam ( const String & layerName,
int numParam = 0 ) const
inline
Python
cv.dnn.Net.getParam(layer[, numParam]) -> retval
cv.dnn.Net.getParam(layerName[, numParam]) -> retval
此函式的呼叫圖如下

◆ getParam() [2/2]

Mat cv::dnn::Net::getParam ( int layer,
int numParam = 0 ) const
Python
cv.dnn.Net.getParam(layer[, numParam]) -> retval
cv.dnn.Net.getParam(layerName[, numParam]) -> retval

返回層的引數 blob。

引數
layer層的名稱或 ID。
numParam層引數在 Layer::blobs 陣列中的索引。
另請參見
Layer::blobs

◆ getPerfProfile()

int64 cv::dnn::Net::getPerfProfile ( std::vector< double > & timings)
Python
cv.dnn.Net.getPerfProfile() -> retval, timings

返回推理的總時間和層的計時(以時鐘週期計)。

返回向量中的索引對應於層 ID。某些層可能與其他層融合,在這種情況下,跳過的層將返回零時鐘週期。僅由 DNN_BACKEND_OPENCV 在 DNN_TARGET_CPU 上支援。

引數
[輸出]timings所有層的時鐘週期計時向量。
返回
模型推理的總時鐘週期。

◆ getUnconnectedOutLayers()

std::vector< int > cv::dnn::Net::getUnconnectedOutLayers ( ) const
Python
cv.dnn.Net.getUnconnectedOutLayers() -> retval

返回具有未連線輸出的層的索引。

FIXIT: 將 API 重構為 registerOutput() 方法,棄用此呼叫

◆ getUnconnectedOutLayersNames()

std::vector< String > cv::dnn::Net::getUnconnectedOutLayersNames ( ) const
Python
cv.dnn.Net.getUnconnectedOutLayersNames() -> retval

返回具有未連線輸出的層的名稱。

FIXIT: 將 API 重構為 registerOutput() 方法,棄用此呼叫

◆ quantize()

Net cv::dnn::Net::quantize ( InputArrayOfArrays calibData,
int inputsDtype,
int outputsDtype,
bool perChannel = true )
Python
cv.dnn.Net.quantize(calibData, inputsDtype, outputsDtype[, perChannel]) -> retval

從浮點 Net 返回量化 Net

引數
calibData用於計算量化引數的校準資料。
inputsDtype量化網路輸入的資料型別。可以是 CV_32F 或 CV_8S。
outputsDtype量化網路輸出的資料型別。可以是 CV_32F 或 CV_8S。
perChannel量化 Net 的量化粒度。預設值為 true,表示以逐通道(channel-wise)方式量化模型。設定為 false 則以逐張量(tensor-wise)方式量化模型。

◆ readFromModelOptimizer() [1/3]

static Net cv::dnn::Net::readFromModelOptimizer ( const std::vector< uchar > & bufferModelConfig,
const std::vector< uchar > & bufferWeights )
static
Python
cv.dnn.Net.readFromModelOptimizer(xml, bin) -> retval
cv.dnn.Net.readFromModelOptimizer(bufferModelConfig, bufferWeights) -> retval
cv.dnn.Net_readFromModelOptimizer(xml, bin) -> retval
cv.dnn.Net_readFromModelOptimizer(bufferModelConfig, bufferWeights) -> retval

從 Intel 的 Model Optimizer 記憶體中的中間表示 (IR) 緩衝區建立網路。

引數
[輸入]bufferModelConfig包含模型配置的緩衝區。
[輸入]bufferWeights包含模型訓練權重的緩衝區。
返回
Net 物件。

◆ readFromModelOptimizer() [2/3]

static Net cv::dnn::Net::readFromModelOptimizer ( const uchar * bufferModelConfigPtr,
size_t bufferModelConfigSize,
const uchar * bufferWeightsPtr,
size_t bufferWeightsSize )
static
Python
cv.dnn.Net.readFromModelOptimizer(xml, bin) -> retval
cv.dnn.Net.readFromModelOptimizer(bufferModelConfig, bufferWeights) -> retval
cv.dnn.Net_readFromModelOptimizer(xml, bin) -> retval
cv.dnn.Net_readFromModelOptimizer(bufferModelConfig, bufferWeights) -> retval

從 Intel 的 Model Optimizer 記憶體中的中間表示 (IR) 緩衝區建立網路。

引數
[輸入]bufferModelConfigPtr模型配置的緩衝區指標。
[輸入]bufferModelConfigSize模型配置的緩衝區大小。
[輸入]bufferWeightsPtr模型訓練權重的緩衝區指標。
[輸入]bufferWeightsSize模型訓練權重的緩衝區大小。
返回
Net 物件。

◆ readFromModelOptimizer() [3/3]

static Net cv::dnn::Net::readFromModelOptimizer ( CV_WRAP_FILE_PATH const String & xml,
CV_WRAP_FILE_PATH const String & bin )
static
Python
cv.dnn.Net.readFromModelOptimizer(xml, bin) -> retval
cv.dnn.Net.readFromModelOptimizer(bufferModelConfig, bufferWeights) -> retval
cv.dnn.Net_readFromModelOptimizer(xml, bin) -> retval
cv.dnn.Net_readFromModelOptimizer(bufferModelConfig, bufferWeights) -> retval

從 Intel 的 Model Optimizer 中間表示 (IR) 建立網路。

引數
[輸入]xmlXML configuration file with network's topology.
[輸入]bin包含訓練權重的二進位制檔案。從 Intel 的 Model Optimizer 匯入的網路將在 Intel 的 Inference Engine 後端啟動。

◆ registerOutput()

int cv::dnn::Net::registerOutput ( const std::string & outputName,
int layerId,
int outputPort )
Python
cv.dnn.Net.registerOutput(outputName, layerId, outputPort) -> retval

註冊帶有名稱的網路輸出。

函式可能會建立額外的“Identity”層。

引數
outputName輸出的識別符號
layerId第二個層的識別符號
outputPort第二個層的輸入編號
返回
繫結層的索引(與 layerId 相同或新建立的)

◆ setHalideScheduler()

void cv::dnn::Net::setHalideScheduler ( const String & scheduler)
Python
cv.dnn.Net.setHalideScheduler(scheduler) ->

編譯 Halide 層。

引數
[輸入]scheduler包含排程指令的 YAML 檔案路徑。
另請參見
setPreferableBackend

排程支援 Halide 後端的層。然後針對特定目標編譯它們。對於排程檔案中未表示的層或完全沒有使用手動排程的層,將應用自動排程。

◆ setInput()

void cv::dnn::Net::setInput ( CV_ND InputArray blob,
const String & name = "",
double scalefactor = 1.0,
const Scalar & mean = Scalar() )
Python
cv.dnn.Net.setInput(blob[, name[, scalefactor[, mean]]]) ->

設定網路的新輸入值。

引數
blob一個新的 blob。應該具有 CV_32F 或 CV_8U 深度。
name輸入層的名稱。
scalefactor可選的歸一化比例因子。
mean可選的均值減去值。
另請參見
connect(String, String) 以瞭解描述符的 format

如果指定了比例因子或均值,則最終輸入 blob 的計算方式如下:

\[input(n,c,h,w) = scalefactor \times (blob(n,c,h,w) - mean_c)\]

示例
samples/dnn/colorization.cppsamples/dnn/openpose.cpp

◆ setInputShape()

void cv::dnn::Net::setInputShape ( const String & inputName,
const MatShape & shape )
Python
cv.dnn.Net.setInputShape(inputName, shape) ->

指定網路輸入的形狀。

◆ setInputsNames()

void cv::dnn::Net::setInputsNames ( const std::vector< String > & inputBlobNames)
Python
cv.dnn.Net.setInputsNames(inputBlobNames) ->

設定網路輸入偽層的輸出名稱。

每個網路總是有一個特殊的自身網路輸入偽層,其 ID 為 0。該層僅儲存使用者 blob 並且不進行任何計算。事實上,該層提供了將使用者資料傳入網路的唯一方式。與任何其他層一樣,該層可以標記其輸出,此函式提供了一種簡單的方法來完成此操作。

◆ setParam() [1/2]

void cv::dnn::Net::setParam ( const String & layerName,
int numParam,
CV_ND const Mat & blob )
inline
Python
cv.dnn.Net.setParam(layer, numParam, blob) ->
cv.dnn.Net.setParam(layerName, numParam, blob) ->
此函式的呼叫圖如下

◆ setParam() [2/2]

void cv::dnn::Net::setParam ( int layer,
int numParam,
CV_ND const Mat & blob )
Python
cv.dnn.Net.setParam(layer, numParam, blob) ->
cv.dnn.Net.setParam(layerName, numParam, blob) ->

設定層學習引數的新值。

引數
layer層的名稱或 ID。
numParam層引數在 Layer::blobs 陣列中的索引。
blob新值。
另請參見
Layer::blobs
注意
如果新 blob 的形狀與先前的形狀不同,則後續前向傳播可能會失敗。

◆ setPreferableBackend()

void cv::dnn::Net::setPreferableBackend ( int backendId)
Python
cv.dnn.Net.setPreferableBackend(backendId) ->

要求網路在支援的情況下使用特定的計算後端。

引數
[輸入]backendId後端識別符號。
另請參見
Backend

◆ setPreferableTarget()

void cv::dnn::Net::setPreferableTarget ( int targetId)
Python
cv.dnn.Net.setPreferableTarget(targetId) ->

要求網路在特定目標裝置上進行計算。

引數
[輸入]targetId目標識別符號。
另請參見
Target

支援的後端/目標組合列表

DNN_BACKEND_OPENCVDNN_BACKEND_INFERENCE_ENGINEDNN_BACKEND_HALIDEDNN_BACKEND_CUDA
DNN_TARGET_CPU+ + +
DNN_TARGET_OPENCL+ + +
DNN_TARGET_OPENCL_FP16+ +
DNN_TARGET_MYRIAD+
DNN_TARGET_FPGA+
DNN_TARGET_CUDA+
DNN_TARGET_CUDA_FP16+
DNN_TARGET_HDDL+
示例
samples/dnn/colorization.cpp.

友元和相關符號文件

◆ accessor::DnnNetAccessor

friend class accessor::DnnNetAccessor
friend

成員資料文件

◆ impl

Ptr<Impl> cv::dnn::Net::impl
保護

此類的文件是從以下檔案生成的