Class cv::dnn::GRULayer#

GRU recurrent one-layer. View details

Collaboration diagram for cv::dnn::GRULayer:

cv::dnn::GRULayer Node1 cv::dnn::GRULayer   + 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::GRULayer Node1 cv::dnn::GRULayer   + 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#

GRU recurrent one-layer.

Accepts input sequence and computes the final hidden state for each element in the batch.

  • input[0] containing the features of the input sequence. input[0] should have shape [T, N, data_dims] where T is sequence length, N is batch size, data_dims is input size

  • output would have shape [T, N, D * hidden_size] where D = 2 if layer is bidirectional otherwise D = 1

Depends on the following attributes:

  • hidden_size - Number of neurons in the hidden layer

  • direction - RNN could be bidirectional or forward

The final hidden state \( h_t \) computes by the following formulas:

\[\begin{split}\begin{eqnarray*} r_t = \sigma(W_{ir} x_t + b_{ir} + W_{hr} h_{(t-1)} + b_{hr}) \\ z_t = \sigma(W_{iz} x_t + b_{iz} + W_{hz} h_{(t-1)} + b_{hz}) \\ n_t = \tanh(W_{in} x_t + b_{in} + r_t \odot (W_{hn} h_{(t-1)}+ b_{hn})) \\ h_t = (1 - z_t) \odot n_t + z_t \odot h_{(t-1)} \\ \end{eqnarray*}\end{split}\]
Where \(x_t\) is current input, \(h_{(t-1)}\) is previous or initial hidden state.

\(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}\).

\(\odot\) is per-element multiply operation.

Member Function Documentation#

create()#

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

Creates instance of GRU layer

Source file#

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