Class cv::dnn::LSTMLayer#

LSTM recurrent layer.

Collaboration diagram for cv::dnn::LSTMLayer:

cv::dnn::LSTMLayer Node1 cv::dnn::LSTMLayer   + inputNameToIndex() + outputNameToIndex() + setOutShape() + setProduceCellOutput() + setUseTimstampsDim() + setWeights() + create() Node2 cv::dnn::Layer   + Layer() + Layer() + ~Layer() + alwaysSupportInplace() + dump() + dumpAttrs() + dynamicOutputShapes() + finalize() + finalize() + finalize() and 27 more... Node2->Node1 Node3 cv::Algorithm   + Algorithm() + ~Algorithm() + clear() + empty() + getDefaultName() + read() + save() + write() + write() + load() + loadFromString() + read() # writeFormat() Node3->Node2 Node4 std::vector< cv::Mat >     Node4->Node2 +blobs Node5 cv::Mat   + Mat() + Mat() + Mat() + Mat() + Mat() + Mat() + Mat() + Mat() + Mat() + Mat() and 152 more... + diag() + eye() + eye() + getDefaultAllocator() + getStdAllocator() + ones() + ones() + ones() + ones() + setDefaultAllocator() + zeros() + zeros() + zeros() + zeros() # forEach_impl() Node5->Node4 +elements Node6 int     Node6->Node2 +preferableTarget Node6->Node5 +cols +dims +dummy +flags +rows Node15 cv::dnn::Arg   + Arg() + Arg() + empty() Node6->Node15 +idx Node7 uint8_t     Node7->Node5 +data +dataend +datalimit +datastart Node8 cv::MatAllocator   + MatAllocator() + ~MatAllocator() + allocate() + allocate() + copy() + deallocate() + download() + getBufferPoolController() + map() + unmap() + upload() Node8->Node5 +allocator Node9 UMatData *     Node9->Node5 +u Node10 MatSize     Node10->Node5 +size Node11 MatStep     Node11->Node5 +step Node12 std::vector< T >     Node12->Node4 < cv::Mat > Node14 std::vector< cv::dnn ::Arg >     Node12->Node14 < cv::dnn::Arg > Node13 T     Node13->Node12 +elements Node14->Node2 +inputs +outputs Node15->Node14 +elements Node16 void *     Node16->Node2 +netimpl Node17 std::string     Node17->Node2 +name +type Node18 std::basic_string< Char >     Node18->Node17

cv::dnn::LSTMLayer Node1 cv::dnn::LSTMLayer   + inputNameToIndex() + outputNameToIndex() + setOutShape() + setProduceCellOutput() + setUseTimstampsDim() + setWeights() + create() Node2 cv::dnn::Layer   + Layer() + Layer() + ~Layer() + alwaysSupportInplace() + dump() + dumpAttrs() + dynamicOutputShapes() + finalize() + finalize() + finalize() and 27 more... Node2->Node1 Node3 cv::Algorithm   + Algorithm() + ~Algorithm() + clear() + empty() + getDefaultName() + read() + save() + write() + write() + load() + loadFromString() + read() # writeFormat() Node3->Node2 Node4 std::vector< cv::Mat >     Node4->Node2 +blobs Node5 cv::Mat   + Mat() + Mat() + Mat() + Mat() + Mat() + Mat() + Mat() + Mat() + Mat() + Mat() and 152 more... + diag() + eye() + eye() + getDefaultAllocator() + getStdAllocator() + ones() + ones() + ones() + ones() + setDefaultAllocator() + zeros() + zeros() + zeros() + zeros() # forEach_impl() Node5->Node4 +elements Node6 int     Node6->Node2 +preferableTarget Node6->Node5 +cols +dims +dummy +flags +rows Node15 cv::dnn::Arg   + Arg() + Arg() + empty() Node6->Node15 +idx Node7 uint8_t     Node7->Node5 +data +dataend +datalimit +datastart Node8 cv::MatAllocator   + MatAllocator() + ~MatAllocator() + allocate() + allocate() + copy() + deallocate() + download() + getBufferPoolController() + map() + unmap() + upload() Node8->Node5 +allocator Node9 UMatData *     Node9->Node5 +u Node10 MatSize     Node10->Node5 +size Node11 MatStep     Node11->Node5 +step Node12 std::vector< T >     Node12->Node4 < cv::Mat > Node14 std::vector< cv::dnn ::Arg >     Node12->Node14 < cv::dnn::Arg > Node13 T     Node13->Node12 +elements Node14->Node2 +inputs +outputs Node15->Node14 +elements Node16 void *     Node16->Node2 +netimpl Node17 std::string     Node17->Node2 +name +type Node18 std::basic_string< Char >     Node18->Node17

Public Member Functions#

Public Member Functions inherited from cv::dnn::Layer

Return

Name

Description

Layer()

Layer(const LayerParams & params)

Initializes only name, type and blobs fields.

~Layer()

bool

alwaysSupportInplace()

std::ostream &

dump(
    std::ostream & strm,
    int indent,
    bool comma )

std::ostream &

dumpAttrs(
    std::ostream & strm,
    int indent )

bool

dynamicOutputShapes()

void

finalize(
    const std::vector< Mat * > & input,
    std::vector< Mat > & output )

Computes and sets internal parameters according to inputs, outputs and blobs.

std::vector< Mat >

finalize(const std::vector< Mat > & inputs)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

void

finalize(
    const std::vector< Mat > & inputs,
    std::vector< Mat > & outputs )

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

void

finalize(
    InputArrayOfArrays inputs,
    OutputArrayOfArrays outputs )

Computes and sets internal parameters according to inputs, outputs and blobs.

void

forward(
    InputArrayOfArrays inputs,
    OutputArrayOfArrays outputs,
    OutputArrayOfArrays internals )

Given the input blobs, computes the output blobs.

void

forward(
    std::vector< Mat * > & input,
    std::vector< Mat > & output,
    std::vector< Mat > & internals )

Given the input blobs, computes the output blobs.

void

forward_fallback(
    InputArrayOfArrays inputs,
    OutputArrayOfArrays outputs,
    OutputArrayOfArrays internals )

Given the input blobs, computes the output blobs.

int64

getFLOPS(
    const std::vector< MatShape > & inputs,
    const std::vector< MatShape > & outputs )

int

getLayouts(
    const std::vector< DataLayout > & actualInputs,
    std::vector< DataLayout > & desiredInputs,
    const int requiredOutputs,
    std::vector< DataLayout > & outputs )

bool

getMemoryShapes(
    const std::vector< MatShape > & inputs,
    const int requiredOutputs,
    std::vector< MatShape > & outputs,
    std::vector< MatShape > & internals )

void

getScaleShift(
    Mat & scale,
    Mat & shift )

Returns parameters of layers with channel-wise multiplication and addition.

void

getScaleZeropoint(
    float & scale,
    int & zeropoint )

Returns scale and zeropoint of layers.

void

getTypes(
    const std::vector< MatType > & inputs,
    const int requiredOutputs,
    const int requiredInternals,
    std::vector< MatType > & outputs,
    std::vector< MatType > & internals )

Ptr< BackendNode >

initCann(
    const std::vector< Ptr< BackendWrapper > > & inputs,
    const std::vector< Ptr< BackendWrapper > > & outputs,
    const std::vector< Ptr< BackendNode > > & nodes )

Returns a CANN backend node.

Ptr< BackendNode >

initCUDA(
    void * context,
    const std::vector< Ptr< BackendWrapper > > & inputs,
    const std::vector< Ptr< BackendWrapper > > & outputs )

Returns a CUDA backend node.

Ptr< BackendNode >

initNgraph(
    const std::vector< Ptr< BackendWrapper > > & inputs,
    const std::vector< Ptr< BackendNode > > & nodes )

Ptr< BackendNode >

initTimVX(
    void * timVxInfo,
    const std::vector< Ptr< BackendWrapper > > & inputsWrapper,
    const std::vector< Ptr< BackendWrapper > > & outputsWrapper,
    bool isLast )

Returns a TimVX backend node.

Ptr< BackendNode >

initVkCom(
    const std::vector< Ptr< BackendWrapper > > & inputs,
    std::vector< Ptr< BackendWrapper > > & outputs )

Ptr< BackendNode >

initWebnn(
    const std::vector< Ptr< BackendWrapper > > & inputs,
    const std::vector< Ptr< BackendNode > > & nodes )

int

inputNameToIndex(String inputName)

Returns index of input blob into the input array.

bool

isDataShuffling()

int

outputNameToIndex(const String & outputName)

Returns index of output blob in output array.

void

run(
    const std::vector< Mat > & inputs,
    std::vector< Mat > & outputs,
    std::vector< Mat > & internals )

Allocates layer and computes output.

bool

setActivation(const Ptr< ActivationLayer > & layer)

Tries to attach to the layer the subsequent activation layer, i.e. do the layer fusion in a partial case.

void

setParamsFrom(const LayerParams & params)

Initializes only name, type and blobs fields.

std::vector< Ptr< Graph > > *

subgraphs()

bool

supportBackend(int backendId)

Ask layer if it support specific backend for doing computations.

bool

tryFuse(Ptr< Layer > & top)

Try to fuse current layer with a next one.

void

unsetAttached()

“Detaches” all the layers, attached to particular layer.

bool

updateMemoryShapes(const std::vector< MatShape > & inputs)

Public Member Functions inherited from cv::Algorithm

Return

Name

Description

Algorithm()

~Algorithm()

void

clear()

Clears the algorithm state.

bool

empty()

Returns true if the Algorithm is empty (e.g. in the very beginning or after unsuccessful read.

String

getDefaultName()

void

read(const FileNode & fn)

Reads algorithm parameters from a file storage.

void

save(const String & filename)

void

write(
    const Ptr< FileStorage > & fs,
    const String & name = String() )

void

write(FileStorage & fs)

Stores algorithm parameters in a file storage.

void

write(
    FileStorage & fs,
    const String & name )

Static Public Member Functions#

Static Public Member Functions inherited from cv::Algorithm

Return

Name

Description

static Ptr< _Tp >

load(
    const String & filename,
    const String & objname = String() )

Loads algorithm from the file.

static Ptr< _Tp >

loadFromString(
    const String & strModel,
    const String & objname = String() )

Loads algorithm from a String.

static Ptr< _Tp >

read(const FileNode & fn)

Reads algorithm from the file node.

Public Attributes#

Public Attributes inherited from cv::dnn::Layer

Return

Name

Description

std::vector< Mat >

blobs

List of learned parameters must be stored here to allow read them by using Net::getParam().

std::vector< Arg >

inputs

String

name

Name of the layer instance, can be used for logging or other internal purposes.

void *

netimpl

std::vector< Arg >

outputs

int

preferableTarget

prefer target for layer forwarding

String

type

Type name which was used for creating layer by layer factory.

Additional Inherited Members#

Protected Member Functions inherited from cv::Algorithm

Return

Name

Description

void

writeFormat(FileStorage & fs)

Detailed Description#

LSTM recurrent layer.

Member Function Documentation#

create()#

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

Creates instance of LSTM layer

inputNameToIndex()#

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

Returns index of input blob into the input array.

Each layer input and output can be labeled to easily identify them using “%<layer_name%>[.output_name]” notation. This method maps label of input blob to its index into input vector.

Parameters

  • inputName — label of input blob

outputNameToIndex()#

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

Returns index of output blob in output array.

setOutShape()#

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

Specifies shape of output blob which will be [[T], N] + outTailShape.

If this parameter is empty or unset then outTailShape = [Wh.size(0)] will be used, where Wh is parameter from setWeights().

setProduceCellOutput()#

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

If this flag is set to true then layer will produce \( c_t \) as second output.

Deprecated

Use flag use_timestamp_dim in LayerParams.

Shape of the second output is the same as first output.

setUseTimstampsDim()#

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

Specifies either interpret first dimension of input blob as timestamp dimension either as sample.

Deprecated

Use flag produce_cell_output in LayerParams.

If flag is set to true then shape of input blob will be interpreted as [T, N, [data dims]] where T specifies number of timestamps, N is number of independent streams. In this case each forward() call will iterate through T timestamps and update layer’s state T times.

If flag is set to false then shape of input blob will be interpreted as [N, [data dims]]. In this case each forward() call will make one iteration and produce one timestamp with shape [N, [out dims]].

setWeights()#

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

Set trained weights for LSTM layer.

Deprecated

Use LayerParams::blobs instead.

LSTM behavior on each step is defined by current input, previous output, previous cell state and learned weights.

Let \(x_t\) be current input, \(h_t\) be current output, \(c_t\) be current state. Than current output and current cell state is computed as follows: \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*} where \(\odot\) is per-element multiply operation and \(i_t, f_t, o_t, g_t\) is internal gates that are computed using learned weights.

Gates are computed as follows: \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*} where \(W_{x?}\), \(W_{h?}\) and \(b_{?}\) are learned weights represented as matrices: \(W_{x?} \in R^{N_h \times N_x}\), \(W_{h?} \in R^{N_h \times N_h}\), \(b_? \in R^{N_h}\).

For simplicity and performance purposes we use \( W_x = [W_{xi}; W_{xf}; W_{xo}, W_{xg}] \) (i.e. \(W_x\) is vertical concatenation of \( W_{x?} \)), \( W_x \in R^{4N_h \times N_x} \). The same for \( W_h = [W_{hi}; W_{hf}; W_{ho}, W_{hg}], W_h \in R^{4N_h \times N_h} \) and for \( b = [b_i; b_f, b_o, b_g]\), \(b \in R^{4N_h} \).

Parameters

  • Wh — is matrix defining how previous output is transformed to internal gates (i.e. according to above mentioned notation is \( W_h \))

  • Wx — is matrix defining how current input is transformed to internal gates (i.e. according to above mentioned notation is \( W_x \))

  • b — is bias vector (i.e. according to above mentioned notation is \( b \))

Source file#

The documentation for this class was generated from the following file: