![]() |
OpenCV 5.0.0
Open Source Computer Vision
|
LSTM 再帰レイヤ。 詳細...
#include <opencv2/dnn/all_layers.hpp>
公開メンバ関数 | |
| 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 ¶ms) | |
| name、type、blobs フィールドのみを初期化する。 | |
| virtual | ~Layer () |
| virtual bool | alwaysSupportInplace () const |
| virtual std::ostream & | dump (std::ostream &strm, int indent, bool comma) const |
| virtual std::ostream & | dumpAttrs (std::ostream &strm, int indent) const |
| virtual bool | dynamicOutputShapes () const |
| virtual void | finalize (const std::vector< Mat * > &input, std::vector< Mat > &output) |
| 入力・出力・blobに応じて内部パラメータを計算し設定する。 | |
| std::vector< Mat > | finalize (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 int | getLayouts (const std::vector< DataLayout > &actualInputs, std::vector< DataLayout > &desiredInputs, const int requiredOutputs, std::vector< DataLayout > &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 void | getTypes (const std::vector< MatType > &inputs, const int requiredOutputs, const int requiredInternals, std::vector< MatType > &outputs, std::vector< MatType > &internals) const |
| virtual Ptr< BackendNode > | initCann (const std::vector< Ptr< BackendWrapper > > &inputs, const std::vector< Ptr< BackendWrapper > > &outputs, const std::vector< Ptr< BackendNode > > &nodes) |
| CANNバックエンドノードを返す。 | |
| virtual Ptr< BackendNode > | initCUDA (void *context, const std::vector< Ptr< BackendWrapper > > &inputs, const std::vector< Ptr< BackendWrapper > > &outputs) |
| CUDAバックエンドノードを返す。 | |
| virtual Ptr< BackendNode > | initNgraph (const std::vector< Ptr< BackendWrapper > > &inputs, const std::vector< Ptr< BackendNode > > &nodes) |
| virtual Ptr< BackendNode > | initTimVX (void *timVxInfo, const std::vector< Ptr< BackendWrapper > > &inputsWrapper, const std::vector< Ptr< BackendWrapper > > &outputsWrapper, bool isLast) |
| TimVXバックエンドノードを返す。 | |
| virtual Ptr< BackendNode > | initVkCom (const std::vector< Ptr< BackendWrapper > > &inputs, std::vector< Ptr< BackendWrapper > > &outputs) |
| virtual Ptr< BackendNode > | initWebnn (const std::vector< Ptr< BackendWrapper > > &inputs, const std::vector< Ptr< BackendNode > > &nodes) |
| virtual bool | isDataShuffling () const |
| 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 ¶ms) |
| name、type、blobs フィールドのみを初期化する。 | |
| virtual std::vector< Ptr< Graph > > * | subgraphs () const |
| virtual bool | supportBackend (int backendId) |
| 計算に特定のバックエンドをレイヤーがサポートしているか問い合わせる。 | |
| virtual bool | tryFuse (Ptr< Layer > &top) |
| 現在のレイヤーを次のレイヤーと融合しようとする。 | |
| 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 |
| virtual void | write (FileStorage &fs) const |
| アルゴリズムの引数をファイルストレージに保存する。 | |
| void | write (FileStorage &fs, const String &name) const |
静的公開メンバ関数 | |
| static Ptr< LSTMLayer > | create (const LayerParams ¶ms) |
Static Public Member Functions inherited from cv::Algorithm | |
| template<typename _Tp > | |
| static Ptr< _Tp > | load (const String &filename, const String &objname=String()) |
| ファイルからアルゴリズムを読み込む。 | |
| template<typename _Tp > | |
| static Ptr< _Tp > | loadFromString (const String &strModel, const String &objname=String()) |
| 文字列からアルゴリズムを読み込む。 | |
| template<typename _Tp > | |
| static Ptr< _Tp > | read (const FileNode &fn) |
| ファイルノードからアルゴリズムを読み込む。 | |
Additional Inherited Members | |
Public Attributes inherited from cv::dnn::Layer | |
| std::vector< Mat > | blobs |
| 学習済みの引数のリストは、Net::getParam() を使って読み出せるよう、ここに格納しなければならない。 | |
| std::vector< Arg > | inputs |
| String | name |
| レイヤーインスタンスの名前。ロギングやその他の内部目的に使用できる。 | |
| void * | netimpl |
| std::vector< Arg > | outputs |
| int | preferableTarget |
| レイヤーの順伝播において優先するターゲット | |
| String | type |
| レイヤーファクトリでレイヤーを作成する際に使用された型名。 | |
Protected Member Functions inherited from cv::Algorithm | |
| void | writeFormat (FileStorage &fs) const |
LSTM 再帰レイヤ。
|
static |
LSTM レイヤのインスタンスを生成する
|
virtual |
入力配列における入力blobのインデックスを返す。
| inputName | 入力blobのラベル |
各レイヤーの入力と出力には、"%<layer_name%>[.output_name]" 表記を用いて簡単に識別できるようラベルを付けられる。このメソッドは、入力blobのラベルを入力ベクトル内のインデックスにマッピングする。
cv::dnn::Layer から再実装されている。
|
virtual |
|
pure virtual |
出力 blob の形状を指定する。形状は [[T], N] + outTailShape となる。
この引数が空または未設定の場合、outTailShape = [Wh.size(0)] が使われる。ここで Wh は setWeights() の引数である。
|
pure virtual |
このフラグがtrueに設定されている場合、レイヤーは2番目の出力として \( c_t \) を生成する。
use_timestamp_dim を使用する。2番目の出力の形状は1番目の出力と同じである。
|
pure virtual |
入力blobの最初の次元をタイムスタンプ次元として解釈するか、サンプルとして解釈するかを指定する。
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つのタイムスタンプを生成する。
|
pure virtual |
LSTMレイヤーに学習済みの重みを設定する。
各ステップにおける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 \)) |