Compute Library
 22.05
DepthwiseConvolutionLayerNode Class Referencefinal

Depthwise Convolution Layer node. More...

#include <DepthwiseConvolutionLayerNode.h>

Collaboration diagram for DepthwiseConvolutionLayerNode:
[legend]

Public Member Functions

 DepthwiseConvolutionLayerNode (PadStrideInfo info, int depth_multiplier=1, DepthwiseConvolutionMethod method=DepthwiseConvolutionMethod::Default, QuantizationInfo out_quant_info=QuantizationInfo())
 Constructor. More...
 
void set_depthwise_convolution_method (DepthwiseConvolutionMethod method)
 Sets the depthwise convolution method to use. More...
 
DepthwiseConvolutionMethod depthwise_convolution_method () const
 Depthwise convolution layer method accessor. More...
 
int depth_multiplier () const
 Depth multiplier accessor. More...
 
PadStrideInfo convolution_info () const
 Convolution metadata 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...
 
const std::list< std::unique_ptr< ConvPostOpInfo > > & post_op_info_list () const
 Post operator info list. More...
 
std::list< std::unique_ptr< ConvPostOpInfo > > & post_op_info_list ()
 Post operator info list. More...
 

Static Public Member Functions

static TensorDescriptor compute_output_descriptor (const TensorDescriptor &input_descriptor, const TensorDescriptor &weights_descriptor, const PadStrideInfo &info, int depth_multiplier=1)
 Computes depthwise convolution output descriptor. More...
 

Static Public Attributes

static constexpr NodeType node_type = NodeType::DepthwiseConvolutionLayer
 

Detailed Description

Depthwise Convolution Layer node.

Definition at line 34 of file DepthwiseConvolutionLayerNode.h.

Constructor & Destructor Documentation

◆ DepthwiseConvolutionLayerNode()

Constructor.

Parameters
[in]infoConvolution layer attributes
[in]depth_multiplier(Optional) Depth multiplier parameter.
[in]method(Optional) Depthwise convolution method to use
[in]out_quant_info(Optional) Output quantization info

Definition at line 35 of file DepthwiseConvolutionLayerNode.cpp.

37  : _info(std::move(info)), _depth_multiplier(depth_multiplier), _method(method), _out_quant_info(std::move(out_quant_info)), _fused_activation()
38 {
39  _input_edges.resize(3, EmptyEdgeID);
40  _outputs.resize(1, NullTensorID);
41 }
constexpr EdgeID EmptyEdgeID
Definition: Types.h:78
ScaleKernelInfo info(interpolation_policy, default_border_mode, PixelValue(), sampling_policy, false)
constexpr TensorID NullTensorID
Constant NodeID specifying an equivalent of null node.
Definition: Types.h:74

Member Function Documentation

◆ accept()

void accept ( INodeVisitor v)
overridevirtual

Accepts a node visitor.

Parameters
[in]vVisitor to accept

Implements INode.

Definition at line 137 of file DepthwiseConvolutionLayerNode.cpp.

References INodeVisitor::visit().

138 {
139  v.visit(*this);
140 }

◆ compute_output_descriptor()

TensorDescriptor compute_output_descriptor ( const TensorDescriptor input_descriptor,
const TensorDescriptor weights_descriptor,
const PadStrideInfo info,
int  depth_multiplier = 1 
)
static

Computes depthwise convolution output descriptor.

Parameters
[in]input_descriptorInput descriptor
[in]weights_descriptorWeights descriptor
[in]infoConvolution operation attributes
[in]depth_multiplier(Optional) Depth multiplier parameter.
Returns
Output descriptor

Definition at line 78 of file DepthwiseConvolutionLayerNode.cpp.

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

Referenced by DepthwiseConvolutionLayerNode::configure_output().

82 {
83  unsigned int output_width = 0;
84  unsigned int output_height = 0;
85 
86  const unsigned int input_width = get_dimension_size(input_descriptor, DataLayoutDimension::WIDTH);
87  const unsigned int input_height = get_dimension_size(input_descriptor, DataLayoutDimension::HEIGHT);
88  const unsigned int input_channels = get_dimension_size(input_descriptor, DataLayoutDimension::CHANNEL);
89  const unsigned int kernel_width = get_dimension_size(weights_descriptor, DataLayoutDimension::WIDTH);
90  const unsigned int kernel_height = get_dimension_size(weights_descriptor, DataLayoutDimension::HEIGHT);
91 
92  std::tie(output_width, output_height) = scaled_dimensions(input_width, input_height, kernel_width, kernel_height, info);
93 
94  const DataLayout data_layout = input_descriptor.layout;
95  TensorDescriptor output_descriptor = input_descriptor;
96  output_descriptor.shape.set(get_dimension_idx(data_layout, DataLayoutDimension::WIDTH), output_width);
97  output_descriptor.shape.set(get_dimension_idx(data_layout, DataLayoutDimension::HEIGHT), output_height);
98  output_descriptor.shape.set(get_dimension_idx(data_layout, DataLayoutDimension::CHANNEL), input_channels * depth_multiplier);
99 
100  return output_descriptor;
101 }
size_t get_dimension_size(const TensorDescriptor &descriptor, const DataLayoutDimension data_layout_dimension)
Get size of a tensor&#39;s given dimension depending on its layout.
Definition: Utils.cpp:142
const size_t input_height
Definition: impl.cpp:61
const size_t input_width
Definition: impl.cpp:62
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:427
ScaleKernelInfo info(interpolation_policy, default_border_mode, PixelValue(), sampling_policy, false)
DataLayout
[DataLayout enum definition]
Definition: Types.h:113
size_t get_dimension_idx(DataLayout data_layout, const DataLayoutDimension data_layout_dimension)
Get index of a tensor&#39;s given dimension depending on its layout.
Definition: Utils.cpp:148

◆ 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 115 of file DepthwiseConvolutionLayerNode.cpp.

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

Referenced by DepthwiseConvolutionLayerNode::forward_descriptors().

116 {
117  ARM_COMPUTE_UNUSED(idx);
118  const Tensor *src = input(0);
119  const Tensor *weights = input(1);
120 
121  ARM_COMPUTE_ERROR_ON(src == nullptr || weights == nullptr);
122 
123  TensorDescriptor output_info = compute_output_descriptor(src->desc(), weights->desc(), _info, _depth_multiplier);
124  if(!_out_quant_info.empty())
125  {
126  output_info.quant_info = _out_quant_info;
127  }
128 
129  return output_info;
130 }
#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
SimpleTensor< float > src
Definition: DFT.cpp:155
QuantizationInfo quant_info
Quantization info.
#define ARM_COMPUTE_UNUSED(...)
To avoid unused variables warnings.
Definition: Error.h:152
bool empty() const
Indicates whether this QuantizationInfo has valid settings or not.
Tensor * input(size_t idx) const
Returns the tensor of a given input of the node.
Definition: INode.cpp:151
static TensorDescriptor compute_output_descriptor(const TensorDescriptor &input_descriptor, const TensorDescriptor &weights_descriptor, const PadStrideInfo &info, int depth_multiplier=1)
Computes depthwise convolution output descriptor.

◆ convolution_info()

PadStrideInfo convolution_info ( ) const

Convolution metadata accessor.

Returns
Convolution information

Definition at line 58 of file DepthwiseConvolutionLayerNode.cpp.

Referenced by arm_compute::graph::backends::detail::validate_depthwise_convolution_layer().

59 {
60  return _info;
61 }

◆ depth_multiplier()

int depth_multiplier ( ) const

Depth multiplier accessor.

Returns
Depth multiplier

Definition at line 43 of file DepthwiseConvolutionLayerNode.cpp.

Referenced by arm_compute::graph::backends::detail::validate_depthwise_convolution_layer().

44 {
45  return _depth_multiplier;
46 }

◆ depthwise_convolution_method()

DepthwiseConvolutionMethod depthwise_convolution_method ( ) const

Depthwise convolution layer method accessor.

Note
This is an indication on which depthwise implementation to use, if it fails to be created the generic approach will be used
Returns
Depthwise convolution layer method do be used by the node

Definition at line 53 of file DepthwiseConvolutionLayerNode.cpp.

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

54 {
55  return _method;
56 }

◆ 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 103 of file DepthwiseConvolutionLayerNode.cpp.

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

104 {
105  if((input_id(0) != NullTensorID) && (input_id(1) != NullTensorID) && (output_id(0) != NullTensorID))
106  {
107  Tensor *dst = output(0);
108  ARM_COMPUTE_ERROR_ON(dst == nullptr);
109  dst->desc() = configure_output(0);
110  return true;
111  }
112  return false;
113 }
TensorDescriptor configure_output(size_t idx) const override
Calculates output configuration.
#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
Tensor * output(size_t idx) const
Returns the tensor of a given output of the node.
Definition: INode.cpp:159
TensorID input_id(size_t idx) const
Returns the tensor ID of a given input of the node.
Definition: INode.cpp:138
TensorID output_id(size_t idx) const
Returns the tensor ID of a given output of the node.
Definition: INode.cpp:145
constexpr TensorID NullTensorID
Constant NodeID specifying an equivalent of null node.
Definition: Types.h:74

◆ fused_activation()

ActivationLayerInfo fused_activation ( ) const

Returns fused activation.

Returns
Fused activation

Definition at line 63 of file DepthwiseConvolutionLayerNode.cpp.

Referenced by DepthwiseConvolutionLayerNode::set_fused_activation().

64 {
65  return _fused_activation;
66 }

◆ set_convolution_info()

void set_convolution_info ( PadStrideInfo  info)

Sets convolution info.

Parameters
[in]infoConvolution info to set

Definition at line 73 of file DepthwiseConvolutionLayerNode.cpp.

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

74 {
75  _info = info;
76 }
ScaleKernelInfo info(interpolation_policy, default_border_mode, PixelValue(), sampling_policy, false)

◆ set_depthwise_convolution_method()

void set_depthwise_convolution_method ( DepthwiseConvolutionMethod  method)

Sets the depthwise convolution method to use.

Parameters
[in]methodDepthwise convolution method to use

Definition at line 48 of file DepthwiseConvolutionLayerNode.cpp.

49 {
50  _method = method;
51 }

◆ set_fused_activation()

void set_fused_activation ( ActivationLayerInfo  fused_activation)

Sets fused activation.

Parameters
[in]fused_activationFused activation to set

Definition at line 68 of file DepthwiseConvolutionLayerNode.cpp.

References DepthwiseConvolutionLayerNode::fused_activation().

69 {
70  _fused_activation = fused_activation;
71 }
ActivationLayerInfo fused_activation() const
Returns fused activation.

◆ type()

NodeType type ( ) const
overridevirtual

Returns node's type.

Returns
Node's type

Implements INode.

Definition at line 132 of file DepthwiseConvolutionLayerNode.cpp.

References DepthwiseConvolutionLayerNode::node_type.

Field Documentation

◆ node_type

constexpr NodeType node_type = NodeType::DepthwiseConvolutionLayer
static

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