OpenCV 4.13.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 4.13.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。

LSTM 再帰レイヤ。 詳細...

#include <opencv2/dnn/all_layers.hpp>

Collaboration diagram for cv::dnn::LSTMLayer:

公開メンバ関数

int inputNameToIndex (String inputName) CV_OVERRIDE
 入力配列における入力blobのインデックスを返す。
 
int outputNameToIndex (const String &outputName) CV_OVERRIDE
 出力配列における出力blobのインデックスを返す。
 
virtual void setOutShape (const MatShape &outTailShape=MatShape())=0
 出力 blob の形状を指定する。形状は [[T], N] + outTailShape となる。
 
virtual void setProduceCellOutput (bool produce=false)=0
 このフラグを true に設定すると、レイヤは2番目の出力として \( c_t \) を生成する。
 
virtual void setUseTimstampsDim (bool use=true)=0
 入力 blob の最初の次元をタイムスタンプ次元として解釈するか、サンプルとして解釈するかを指定する。
 
virtual void setWeights (const Mat &Wh, const Mat &Wx, const Mat &b)=0
 LSTM レイヤに学習済みの重みを設定する。
 
- Public Member Functions inherited from 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)
 
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)
 
- Public Member Functions inherited from 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
 

静的公開メンバ関数

static Ptr< LSTMLayercreate (const LayerParams &params)
 
- Static Public Member Functions inherited from 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)
 ファイルノードからアルゴリズムを読み込む。
 

Additional Inherited Members

- Public Attributes inherited from cv::dnn::Layer
std::vector< Matblobs
 学習済みの引数のリストは、Net::getParam() を使って読み出せるよう、ここに格納しなければならない。
 
String name
 レイヤーインスタンスの名前。ロギングやその他の内部目的に使用できる。
 
int preferableTarget
 レイヤーの順伝播において優先するターゲット
 
String type
 レイヤーファクトリでレイヤーを作成する際に使用された型名。
 
- Protected Member Functions inherited from cv::Algorithm
void writeFormat (FileStorage &fs) const
 

詳細説明

LSTM 再帰レイヤ。

メンバ関数詳解

◆ create()

static Ptr< LSTMLayer > cv::dnn::LSTMLayer::create ( const LayerParams & params)
static

LSTM レイヤのインスタンスを生成する

◆ inputNameToIndex()

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

入力配列における入力blobのインデックスを返す。

引数
inputName入力blobのラベル

各レイヤーの入力と出力には、"%<layer_name%>[.output_name]" 表記を用いて簡単に識別できるようラベルを付けられる。このメソッドは、入力blobのラベルを入力ベクトル内のインデックスにマッピングする。

cv::dnn::Layer から再実装されている。

◆ outputNameToIndex()

int cv::dnn::LSTMLayer::outputNameToIndex ( const String & outputName)
virtual

出力配列における出力blobのインデックスを返す。

参照
inputNameToIndex()

cv::dnn::Layer から再実装されている。

◆ setOutShape()

virtual void cv::dnn::LSTMLayer::setOutShape ( const MatShape & outTailShape = MatShape())
pure virtual

出力 blob の形状を指定する。形状は [[T], N] + outTailShape となる。

この引数が空または未設定の場合、outTailShape = [Wh.size(0)] が使われる。ここで WhsetWeights() の引数である。

◆ setProduceCellOutput()

virtual void cv::dnn::LSTMLayer::setProduceCellOutput ( bool produce = false)
pure virtual

このフラグがtrueに設定されている場合、レイヤーは2番目の出力として \( c_t \) を生成する。

非推奨Deprecated
LayerParams 内のフラグ use_timestamp_dim を使用する。

2番目の出力の形状は1番目の出力と同じである。

◆ setUseTimstampsDim()

virtual void cv::dnn::LSTMLayer::setUseTimstampsDim ( bool use = true)
pure virtual

入力blobの最初の次元をタイムスタンプ次元として解釈するか、サンプルとして解釈するかを指定する。

非推奨Deprecated
LayerParams 内のフラグ produce_cell_output を使用する。

フラグがtrueに設定されている場合、入力blobの形状は [T, N, [data dims]] として解釈される。ここで T はタイムスタンプ数を、N は独立したストリーム数を指定する。この場合、各 forward() 呼び出しは T 個のタイムスタンプを反復処理し、レイヤーの状態を T 回更新する。

フラグがfalseに設定されている場合、入力blobの形状は [N, [data dims]] として解釈される。この場合、各 forward() 呼び出しは1回の反復を行い、形状 [N, [out dims]] を持つ1つのタイムスタンプを生成する。

◆ setWeights()

virtual void cv::dnn::LSTMLayer::setWeights ( const Mat & Wh,
const Mat & Wx,
const Mat & b )
pure virtual

LSTMレイヤーに学習済みの重みを設定する。

非推奨Deprecated
代わりに LayerParams::blobs を使用する。

各ステップにおけるLSTMの動作は、現在の入力、前の出力、前のセル状態、および学習済みの重みによって定義される。

\(x_t\) を現在の入力、\(h_t\) を現在の出力、\(c_t\) を現在の状態とする。このとき、現在の出力と現在のセル状態は次のように計算される。

\begin{eqnarray*} h_t &= o_t \odot tanh(c_t), \\ c_t &= f_t \odot c_{t-1} + i_t \odot g_t, \\ \end{eqnarray*}

ここで \(\odot\) は要素ごとの乗算演算であり、\(i_t, f_t, o_t, g_t\) は学習済みの重みを用いて計算される内部ゲートである。

ゲートは次のように計算される。

\begin{eqnarray*} i_t &= sigmoid&(W_{xi} x_t + W_{hi} h_{t-1} + b_i), \\ f_t &= sigmoid&(W_{xf} x_t + W_{hf} h_{t-1} + b_f), \\ o_t &= sigmoid&(W_{xo} x_t + W_{ho} h_{t-1} + b_o), \\ g_t &= tanh &(W_{xg} x_t + W_{hg} h_{t-1} + b_g), \\ \end{eqnarray*}

ここで \(W_{x?}\)、\(W_{h?}\)、\(b_{?}\) は行列として表される学習済みの重みである。\(W_{x?} \in R^{N_h \times N_x}\), \(W_{h?} \in R^{N_h \times N_h}\), \(b_? \in R^{N_h}\)。

簡潔さと性能のため、\( W_x = [W_{xi}; W_{xf}; W_{xo}, W_{xg}] \) を用いる(すなわち \(W_x\) は \( W_{x?} \) の垂直方向の連結である)、\( W_x \in R^{4N_h \times N_x} \)。\( W_h = [W_{hi}; W_{hf}; W_{ho}, W_{hg}], W_h \in R^{4N_h \times N_h} \) および \( b = [b_i; b_f, b_o, b_g]\), \(b \in R^{4N_h} \) についても同様である。

引数
Wh直前の出力がどのように内部ゲートへ変換されるかを定義する行列(すなわち、前述の表記によれば \( W_h \))
Wx現在の入力がどのように内部ゲートへ変換されるかを定義する行列(すなわち、前述の表記によれば \( W_x \))
bバイアスベクトル(すなわち、前述の表記によれば \( b \))

このクラス詳解は次のファイルから抽出されました: