Compute Library
 23.11
ConvolutionLayerNode Class Referencefinal

Convolution Layer node. More...

#include <ConvolutionLayerNode.h>

Collaboration diagram for ConvolutionLayerNode:
[legend]

Public Member Functions

 ConvolutionLayerNode (PadStrideInfo info, unsigned int num_groups=1, ConvolutionMethod method=ConvolutionMethod::Default, FastMathHint fast_math_hint=FastMathHint::Disabled, QuantizationInfo out_quant_info=QuantizationInfo())
 Constructor. More...
 
void set_convolution_method (ConvolutionMethod method)
 Sets the convolution layer method to use. More...
 
ConvolutionMethod convolution_method () const
 Convolution layer method accessor. More...
 
void set_fast_math_hint (FastMathHint hint)
 Sets the fast math fast hint. More...
 
FastMathHint fast_math_hint () const
 Fast math hint accessor. More...
 
PadStrideInfo convolution_info () const
 Convolution metadata accessor. More...
 
unsigned int num_groups () const
 Number of groups in convolution accessor. More...
 
ActivationLayerInfo fused_activation () const
 Returns fused activation. More...
 
void set_fused_activation (ActivationLayerInfo fused_activation)
 Sets fused activation. More...
 
void set_convolution_info (PadStrideInfo info)
 Sets convolution info. More...
 
NodeType type () const override
 Returns node's type. More...
 
bool forward_descriptors () override
 Forwards descriptor information to outputs if possible. More...
 
TensorDescriptor configure_output (size_t idx) const override
 Calculates output configuration. More...
 
void accept (INodeVisitor &v) override
 Accepts a node visitor. More...
 
- Public Member Functions inherited from INode
 INode ()
 Constructor. More...
 
virtual ~INode ()=default
 Destructor. More...
 
 INode (const INode &)=delete
 Prevent instances of this class from being copied (As this class contains pointers) More...
 
INodeoperator= (const INode &)=delete
 Prevent instances of this class from being copy assigned (As this class contains pointers) More...
 
 INode (INode &&)=default
 Allow instances of this class to be moved. More...
 
INodeoperator= (INode &&)=default
 Allow instances of this class to be move assigned. More...
 
virtual Status validate () const
 Validate node. More...
 
std::string name () const
 Returns node's name. More...
 
NodeID id () const
 Returns node's ID. More...
 
const Graphgraph () const
 Returns node's Graph. More...
 
Graphgraph ()
 Returns node's Graph. More...
 
void set_graph (Graph *g)
 Sets the graph that this node is registered to. More...
 
void set_id (NodeID id)
 Sets the node id. More...
 
void set_common_node_parameters (NodeParams common_params)
 Sets common node parameters. More...
 
void set_requested_target (Target target)
 Sets target preference. More...
 
void set_assigned_target (Target target)
 Sets the final execution target. More...
 
void set_output_tensor (TensorID tid, size_t idx)
 Sets the output tensor of at a given index. More...
 
const std::vector< TensorID > & inputs () const
 Returns inputs of the node. More...
 
const std::vector< TensorID > & outputs () const
 Returns outputs of the node. More...
 
const std::vector< EdgeID > & input_edges () const
 Returns input edge set. More...
 
const std::set< EdgeID > & output_edges () const
 Returns output edge set. More...
 
TensorID input_id (size_t idx) const
 Returns the tensor ID of a given input of the node. More...
 
TensorID output_id (size_t idx) const
 Returns the tensor ID of a given output of the node. More...
 
Tensorinput (size_t idx) const
 Returns the tensor of a given input of the node. More...
 
Tensoroutput (size_t idx) const
 Returns the tensor of a given output of the node. More...
 
EdgeID input_edge_id (size_t idx) const
 Returns the edge ID of a given input of the node. More...
 
Edgeinput_edge (size_t idx) const
 Returns the edge of a given input of the node. More...
 
size_t num_inputs () const
 Returns number of inputs of the node. More...
 
size_t num_outputs () const
 Returns number of outputs of the node. More...
 
NodeParams common_node_params () const
 Returns common node parameters. More...
 
Target requested_target () const
 Returns requested target for this node. More...
 
Target assigned_target () const
 Returns assigned target for this node. More...
 

Static Public Member Functions

static TensorDescriptor compute_output_descriptor (const TensorDescriptor &input_descriptor, const TensorDescriptor &weights_descriptor, const PadStrideInfo &info)
 Computes convolution output descriptor. More...
 

Static Public Attributes

static constexpr NodeType node_type = NodeType::ConvolutionLayer
 

Detailed Description

Convolution Layer node.

Definition at line 34 of file ConvolutionLayerNode.h.

Constructor & Destructor Documentation

◆ ConvolutionLayerNode()

ConvolutionLayerNode ( PadStrideInfo  info,
unsigned int  num_groups = 1,
ConvolutionMethod  method = ConvolutionMethod::Default,
FastMathHint  fast_math_hint = FastMathHint::Disabled,
QuantizationInfo  out_quant_info = QuantizationInfo() 
)

Constructor.

Parameters
[in]infoConvolution layer attributes
[in]num_groups(Optional) Number of groups (Defaults to 1)
[in]method(Optional) Convolution method to use
[in]fast_math_hint(Optional) Fast math hint
[in]out_quant_info(Optional) Output quantization info

Definition at line 35 of file ConvolutionLayerNode.cpp.

40  : _info(std::move(info)),
41  _num_groups(num_groups),
42  _method(method),
43  _fast_math_hint(fast_math_hint),
44  _out_quant_info(std::move(out_quant_info)),
45  _fused_activation()
46 {
47  _input_edges.resize(3, EmptyEdgeID);
48  _outputs.resize(1, NullTensorID);
49 }

Member Function Documentation

◆ accept()

void accept ( INodeVisitor v)
overridevirtual

Accepts a node visitor.

Parameters
[in]vVisitor to accept

Implements INode.

Definition at line 155 of file ConvolutionLayerNode.cpp.

156 {
157  v.visit(*this);
158 }

References INodeVisitor::visit().

◆ compute_output_descriptor()

TensorDescriptor compute_output_descriptor ( const TensorDescriptor input_descriptor,
const TensorDescriptor weights_descriptor,
const PadStrideInfo info 
)
static

Computes convolution output descriptor.

Parameters
[in]input_descriptorInput descriptor
[in]weights_descriptorWeights descriptor
[in]infoConvolution operation attributes
Returns
Output descriptor

Definition at line 96 of file ConvolutionLayerNode.cpp.

99 {
100  unsigned int output_width = 0;
101  unsigned int output_height = 0;
102 
103  const unsigned int input_width = get_dimension_size(input_descriptor, DataLayoutDimension::WIDTH);
104  const unsigned int input_height = get_dimension_size(input_descriptor, DataLayoutDimension::HEIGHT);
105  const unsigned int kernel_width = get_dimension_size(weights_descriptor, DataLayoutDimension::WIDTH);
106  const unsigned int kernel_height = get_dimension_size(weights_descriptor, DataLayoutDimension::HEIGHT);
107 
108  std::tie(output_width, output_height) =
109  scaled_dimensions(input_width, input_height, kernel_width, kernel_height, info);
110 
111  const DataLayout data_layout = input_descriptor.layout;
112  TensorDescriptor output_descriptor = input_descriptor;
113  output_descriptor.shape.set(get_dimension_idx(data_layout, DataLayoutDimension::WIDTH), output_width);
114  output_descriptor.shape.set(get_dimension_idx(data_layout, DataLayoutDimension::HEIGHT), output_height);
115  output_descriptor.shape.set(get_dimension_idx(data_layout, DataLayoutDimension::CHANNEL),
116  weights_descriptor.shape[3]);
117 
118  return output_descriptor;
119 }

References arm_compute::CHANNEL, arm_compute::cpu::data_layout, arm_compute::graph::get_dimension_idx(), arm_compute::graph::get_dimension_size(), arm_compute::HEIGHT, arm_compute::test::validation::info, TensorDescriptor::layout, arm_compute::scaled_dimensions(), TensorShape::set(), TensorDescriptor::shape, and arm_compute::WIDTH.

Referenced by ConvolutionLayerNode::configure_output().

◆ configure_output()

TensorDescriptor configure_output ( size_t  idx) const
overridevirtual

Calculates output configuration.

Parameters
[in]idxOutput index to configure
Returns
Output descriptor configuration

Implements INode.

Definition at line 133 of file ConvolutionLayerNode.cpp.

134 {
135  ARM_COMPUTE_UNUSED(idx);
136  const Tensor *src = input(0);
137  const Tensor *weights = input(1);
138 
139  ARM_COMPUTE_ERROR_ON(src == nullptr || weights == nullptr);
140 
141  TensorDescriptor output_info = compute_output_descriptor(src->desc(), weights->desc(), _info);
142  if (!_out_quant_info.empty())
143  {
144  output_info.quant_info = _out_quant_info;
145  }
146 
147  return output_info;
148 }

References ARM_COMPUTE_ERROR_ON, ARM_COMPUTE_UNUSED, ConvolutionLayerNode::compute_output_descriptor(), Tensor::desc(), QuantizationInfo::empty(), INode::input(), arm_compute::test::validation::output_info, and arm_compute::test::validation::src.

Referenced by ConvolutionLayerNode::forward_descriptors().

◆ convolution_info()

PadStrideInfo convolution_info ( ) const

Convolution metadata accessor.

Returns
Convolution information

Definition at line 71 of file ConvolutionLayerNode.cpp.

72 {
73  return _info;
74 }

Referenced by arm_compute::graph::backends::detail::create_convolution_layer(), and arm_compute::graph::backends::detail::validate_convolution_layer().

◆ convolution_method()

ConvolutionMethod convolution_method ( ) const

Convolution layer method accessor.

Note
This is an indication on which convolution layer implementation to use, if it fails to be created the library's heuristic approach will be used
Returns
Convolution layer method to be used by the node

Definition at line 56 of file ConvolutionLayerNode.cpp.

57 {
58  return _method;
59 }

Referenced by arm_compute::graph::backends::detail::create_convolution_layer(), arm_compute::graph::backends::detail::validate_convolution_layer(), and DotGraphVisitor::visit().

◆ fast_math_hint()

FastMathHint fast_math_hint ( ) const

Fast math hint accessor.

Returns
Fast math hint to be used by the node

Definition at line 66 of file ConvolutionLayerNode.cpp.

67 {
68  return _fast_math_hint;
69 }

Referenced by arm_compute::graph::backends::detail::create_convolution_layer(), and arm_compute::graph::backends::detail::validate_convolution_layer().

◆ forward_descriptors()

bool forward_descriptors ( )
overridevirtual

Forwards descriptor information to outputs if possible.

Returns
True if descriptor information could be forwarded otherwise false

Implements INode.

Definition at line 121 of file ConvolutionLayerNode.cpp.

122 {
123  if ((input_id(0) != NullTensorID) && (input_id(1) != NullTensorID) && (output_id(0) != NullTensorID))
124  {
125  Tensor *dst = output(0);
126  ARM_COMPUTE_ERROR_ON(dst == nullptr);
127  dst->desc() = configure_output(0);
128  return true;
129  }
130  return false;
131 }

References ARM_COMPUTE_ERROR_ON, ConvolutionLayerNode::configure_output(), arm_compute::test::validation::dst, INode::input_id(), arm_compute::graph::NullTensorID, INode::output(), and INode::output_id().

◆ fused_activation()

ActivationLayerInfo fused_activation ( ) const

Returns fused activation.

Returns
Fused activation

Definition at line 81 of file ConvolutionLayerNode.cpp.

82 {
83  return _fused_activation;
84 }

Referenced by arm_compute::graph::backends::detail::create_convolution_layer(), and ConvolutionLayerNode::set_fused_activation().

◆ num_groups()

unsigned int num_groups ( ) const

Number of groups in convolution accessor.

Returns
Number of groups in convolution

Definition at line 76 of file ConvolutionLayerNode.cpp.

77 {
78  return _num_groups;
79 }

Referenced by arm_compute::graph::backends::detail::create_convolution_layer(), and arm_compute::graph::backends::detail::validate_convolution_layer().

◆ set_convolution_info()

void set_convolution_info ( PadStrideInfo  info)

Sets convolution info.

Parameters
[in]infoConvolution info to set

Definition at line 91 of file ConvolutionLayerNode.cpp.

92 {
93  _info = info;
94 }

References arm_compute::test::validation::info.

◆ set_convolution_method()

void set_convolution_method ( ConvolutionMethod  method)

Sets the convolution layer method to use.

Parameters
[in]methodMethod to use for convolution

Definition at line 51 of file ConvolutionLayerNode.cpp.

52 {
53  _method = method;
54 }

◆ set_fast_math_hint()

void set_fast_math_hint ( FastMathHint  hint)

Sets the fast math fast hint.

Parameters
[in]hintHint to use for convolution

Definition at line 61 of file ConvolutionLayerNode.cpp.

62 {
63  _fast_math_hint = hint;
64 }

◆ set_fused_activation()

void set_fused_activation ( ActivationLayerInfo  fused_activation)

Sets fused activation.

Parameters
[in]fused_activationFused activation to set

Definition at line 86 of file ConvolutionLayerNode.cpp.

87 {
88  _fused_activation = fused_activation;
89 }

References ConvolutionLayerNode::fused_activation().

◆ type()

NodeType type ( ) const
overridevirtual

Returns node's type.

Returns
Node's type

Implements INode.

Definition at line 150 of file ConvolutionLayerNode.cpp.

151 {
153 }

References ConvolutionLayerNode::node_type.

Field Documentation

◆ node_type

constexpr NodeType node_type = NodeType::ConvolutionLayer
staticconstexpr

Definition at line 117 of file ConvolutionLayerNode.h.

Referenced by ConvolutionLayerNode::type().


The documentation for this class was generated from the following files:
arm_compute::graph::EmptyEdgeID
constexpr EdgeID EmptyEdgeID
Definition: Types.h:81
arm_compute::test::validation::src
SimpleTensor< float > src
Definition: DFT.cpp:155
arm_compute::DataLayout
DataLayout
[DataLayout enum definition]
Definition: CoreTypes.h:110
arm_compute::DataLayoutDimension::CHANNEL
@ CHANNEL
channel
arm_compute::graph::ConvolutionLayerNode::fast_math_hint
FastMathHint fast_math_hint() const
Fast math hint accessor.
Definition: ConvolutionLayerNode.cpp:66
arm_compute::graph::INode::input_id
TensorID input_id(size_t idx) const
Returns the tensor ID of a given input of the node.
Definition: INode.cpp:137
arm_compute::test::validation::dst
auto dst
Definition: DFT.cpp:170
arm_compute::graph::INode::output
Tensor * output(size_t idx) const
Returns the tensor of a given output of the node.
Definition: INode.cpp:158
arm_compute::scaled_dimensions
std::pair< unsigned int, unsigned int > scaled_dimensions(int width, int height, int kernel_width, int kernel_height, const PadStrideInfo &pad_stride_info, const Size2D &dilation=Size2D(1U, 1U))
Returns expected width and height of output scaled tensor depending on dimensions rounding mode.
Definition: Utils.cpp:288
arm_compute::graph::ConvolutionLayerNode::num_groups
unsigned int num_groups() const
Number of groups in convolution accessor.
Definition: ConvolutionLayerNode.cpp:76
arm_compute::graph::get_dimension_size
size_t get_dimension_size(const TensorDescriptor &descriptor, const DataLayoutDimension data_layout_dimension)
Get size of a tensor's given dimension depending on its layout.
Definition: Utils.cpp:143
arm_compute::DataLayoutDimension::WIDTH
@ WIDTH
width
arm_compute::cpu::data_layout
constexpr auto data_layout
Definition: impl.h:36
ARM_COMPUTE_ERROR_ON
#define ARM_COMPUTE_ERROR_ON(cond)
If the condition is true then an error message is printed and an exception thrown.
Definition: Error.h:466
arm_compute::test::validation::output_info
output_info
Definition: DirectConvolutionLayer.cpp:547
arm_compute::graph::ConvolutionLayerNode::node_type
static constexpr NodeType node_type
Definition: ConvolutionLayerNode.h:117
arm_compute::DataLayoutDimension::HEIGHT
@ HEIGHT
height
arm_compute::detail::ObjectType::Tensor
@ Tensor
ARM_COMPUTE_UNUSED
#define ARM_COMPUTE_UNUSED(...)
To avoid unused variables warnings.
Definition: Error.h:151
arm_compute::graph::ConvolutionLayerNode::fused_activation
ActivationLayerInfo fused_activation() const
Returns fused activation.
Definition: ConvolutionLayerNode.cpp:81
arm_compute::graph::get_dimension_idx
size_t get_dimension_idx(DataLayout data_layout, const DataLayoutDimension data_layout_dimension)
Get index of a tensor's given dimension depending on its layout.
Definition: Utils.cpp:150
arm_compute::graph::ConvolutionLayerNode::configure_output
TensorDescriptor configure_output(size_t idx) const override
Calculates output configuration.
Definition: ConvolutionLayerNode.cpp:133
arm_compute::QuantizationInfo::empty
bool empty() const
Indicates whether this QuantizationInfo has valid settings or not.
Definition: QuantizationInfo.h:132
arm_compute::graph::INode::input
Tensor * input(size_t idx) const
Returns the tensor of a given input of the node.
Definition: INode.cpp:150
arm_compute::graph::INode::output_id
TensorID output_id(size_t idx) const
Returns the tensor ID of a given output of the node.
Definition: INode.cpp:144
arm_compute::graph::NullTensorID
constexpr TensorID NullTensorID
Constant NodeID specifying an equivalent of null node.
Definition: Types.h:77
arm_compute::test::validation::info
ScaleKernelInfo info(interpolation_policy, default_border_mode, PixelValue(), sampling_policy, false)
arm_compute::graph::ConvolutionLayerNode::compute_output_descriptor
static TensorDescriptor compute_output_descriptor(const TensorDescriptor &input_descriptor, const TensorDescriptor &weights_descriptor, const PadStrideInfo &info)
Computes convolution output descriptor.
Definition: ConvolutionLayerNode.cpp:96