xref: /aosp_15_r20/external/ComputeLibrary/arm_compute/graph/GraphBuilder.h (revision c217d954acce2dbc11938adb493fc0abd69584f3)
1 /*
2  * Copyright (c) 2018-2021 Arm Limited.
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to
8  * deal in the Software without restriction, including without limitation the
9  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10  * sell copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in all
14  * copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22  * SOFTWARE.
23  */
24 #ifndef ARM_COMPUTE_GRAPH_GRAPH_BUILDER_H
25 #define ARM_COMPUTE_GRAPH_GRAPH_BUILDER_H
26 
27 #include "arm_compute/graph/ITensorAccessor.h"
28 #include "arm_compute/graph/LayerDescriptors.h"
29 #include "arm_compute/graph/Types.h"
30 
31 namespace arm_compute
32 {
33 namespace graph
34 {
35 // Forward declaration
36 class Graph;
37 
38 /** Graph builder class
39  *
40  * Builds and compiles a graph
41  */
42 class GraphBuilder final
43 {
44 public:
45     /** Adds a Const node to the graph
46      *
47      * @param[in] g        Graph to add the node to
48      * @param[in] params   Common node parameters
49      * @param[in] desc     Tensor descriptor of the node
50      * @param[in] accessor (Optional) Accessor of the const node data
51      *
52      * @return Node ID of the created node, EmptyNodeID in case of error
53      */
54     static NodeID add_const_node(Graph &g, NodeParams params, const TensorDescriptor &desc, ITensorAccessorUPtr accessor = nullptr);
55     /** Adds an input layer node to the graph
56      *
57      * @param[in] g        Graph to add the node to
58      * @param[in] params   Common node parameters
59      * @param[in] desc     Tensor descriptor of the Tensor
60      * @param[in] accessor (Optional) Accessor of the input node data
61      *
62      * @return Node ID of the created node, EmptyNodeID in case of error
63      */
64     static NodeID add_input_node(Graph &g, NodeParams params, const TensorDescriptor &desc, ITensorAccessorUPtr accessor = nullptr);
65     /** Adds an output layer node to the graph
66      *
67      * @param[in] g        Graph to add the node to
68      * @param[in] params   Common node parameters
69      * @param[in] input    Input to the output node as a NodeID-Index pair
70      * @param[in] accessor (Optional) Accessor of the output node data
71      *
72      * @return Node ID of the created node, EmptyNodeID in case of error
73      */
74     static NodeID add_output_node(Graph &g, NodeParams params, NodeIdxPair input, ITensorAccessorUPtr accessor = nullptr);
75     /** Adds an activation layer node to the graph
76      *
77      * @param[in] g              Graph to add the node to
78      * @param[in] params         Common node parameters
79      * @param[in] input          Input to the activation layer node as a NodeID-Index pair
80      * @param[in] act_info       Activation layer information
81      * @param[in] out_quant_info (Optional) Output quantization info
82      *
83      * @return Node ID of the created node, EmptyNodeID in case of error
84      */
85     static NodeID add_activation_node(Graph &g, NodeParams params, NodeIdxPair input, ActivationLayerInfo act_info,
86                                       const QuantizationInfo &out_quant_info = QuantizationInfo());
87     /** Adds an activation layer node to the graph
88      *
89      * @param[in] g              Graph to add the node to
90      * @param[in] params         Common node parameters
91      * @param[in] input          Input to the activation layer node as a NodeID-Index pair
92      * @param[in] op             Reduction Operation: min or max
93      * @param[in] axis           Axis to perform reduction operation across
94      * @param[in] out_data_type  (Optional) Output data type
95      * @param[in] out_quant_info (Optional) Output quantization info
96      *
97      * @return Node ID of the created node, EmptyNodeID in case of error
98      */
99     static NodeID add_arg_min_max_node(Graph &g, NodeParams params, NodeIdxPair input, ReductionOperation op, unsigned int axis,
100                                        DataType                out_data_type  = DataType::UNKNOWN,
101                                        const QuantizationInfo &out_quant_info = QuantizationInfo());
102     /** Adds a batch normalization layer node to the graph
103      *
104      * @param[in] g              Graph to add the node to
105      * @param[in] params         Common node parameters
106      * @param[in] input          Input to the batch normalization layer node as a NodeID-Index pair
107      * @param[in] epsilon        Epsilon parameter
108      * @param[in] mean_accessor  Const Node ID that contains the mean values
109      * @param[in] var_accessor   Const Node ID that contains the variance values
110      * @param[in] beta_accessor  Const Node ID that contains the beta values. Can be EmptyNodeID
111      * @param[in] gamma_accessor Const Node ID that contains the gamma values. Can be EmptyNodeID
112      *
113      * @return Node ID of the created node, EmptyNodeID in case of error
114      */
115     static NodeID add_batch_normalization_node(Graph &g, NodeParams params, NodeIdxPair input, float epsilon,
116                                                ITensorAccessorUPtr mean_accessor = nullptr, ITensorAccessorUPtr var_accessor = nullptr,
117                                                ITensorAccessorUPtr beta_accessor = nullptr, ITensorAccessorUPtr gamma_accessor = nullptr);
118     /** Adds a bounding box transform layer node to the graph
119      *
120      * @param[in] g      Graph to add the node to
121      * @param[in] params Common node parameters
122      * @param[in] input  Input to the bounding box transform layer node as a NodeID-Index pair
123      * @param[in] deltas Deltas input to the bounding box transform layer node as a NodeID-Index pair
124      * @param[in] info   Bounding Box Transform information
125      *
126      * @return Node ID of the created node, EmptyNodeID in case of error
127      */
128     static NodeID add_bounding_box_transform_node(Graph &g, NodeParams params, NodeIdxPair input, NodeIdxPair deltas, BoundingBoxTransformInfo info);
129     /** Adds an channel shuffle layer node to the graph
130      *
131      * @param[in] g          Graph to add the node to
132      * @param[in] params     Common node parameters
133      * @param[in] input      Input to the activation layer node as a NodeID-Index pair
134      * @param[in] num_groups Number of groups
135      *
136      * @return Node ID of the created node, EmptyNodeID in case of error
137      */
138     static NodeID add_channel_shuffle_node(Graph &g, NodeParams params, NodeIdxPair input, unsigned int num_groups);
139     /** Adds a convolution layer node to the graph
140      *
141      * @param[in] g                     Graph to add the node to
142      * @param[in] params                Common node parameters
143      * @param[in] input                 Input to the convolution layer node as a NodeID-Index pair
144      * @param[in] kernel_spatial_extend Spatial extend of convolution kernels
145      * @param[in] depth                 Number of convolution kernels
146      * @param[in] conv_info             Convolution layer information
147      * @param[in] num_groups            (Optional) Number of groups for a grouped convolution. Defaults to 1
148      * @param[in] method                (Optional) Convolution method to use
149      * @param[in] fast_math_hint        (Optional) Fast math hint
150      * @param[in] weights_accessor      (Optional) Accessor of the weights node data
151      * @param[in] bias_accessor         (Optional) Accessor of the bias node data
152      * @param[in] weights_quant_info    (Optional) Weights quantization info
153      * @param[in] out_quant_info        (Optional) Output quantization info
154      *
155      * @return Node ID of the created node, EmptyNodeID in case of error
156      */
157     static NodeID add_convolution_node(Graph &g, NodeParams params, NodeIdxPair input,
158                                        Size2D kernel_spatial_extend, unsigned int depth, PadStrideInfo conv_info, unsigned int num_groups = 1,
159                                        ConvolutionMethod method = ConvolutionMethod::Default, FastMathHint fast_math_hint = FastMathHint::Disabled,
160                                        ITensorAccessorUPtr weights_accessor = nullptr, ITensorAccessorUPtr bias_accessor = nullptr,
161                                        const QuantizationInfo &weights_quant_info = QuantizationInfo(),
162                                        const QuantizationInfo &out_quant_info     = QuantizationInfo());
163     /** Adds a deconvolution layer node to the graph
164      *
165      * @param[in] g                     Graph to add the node to
166      * @param[in] params                Common node parameters
167      * @param[in] input                 Input to the convolution layer node as a NodeID-Index pair
168      * @param[in] kernel_spatial_extend Spatial extend of convolution kernels
169      * @param[in] depth                 Number of convolution kernels
170      * @param[in] deconv_info           Convolution layer information
171      * @param[in] weights_accessor      (Optional) Accessor of the weights node data
172      * @param[in] bias_accessor         (Optional) Accessor of the bias node data
173      *
174      * @return Node ID of the created node, EmptyNodeID in case of error
175      */
176     static NodeID add_deconvolution_node(Graph &g, NodeParams params, NodeIdxPair input,
177                                          Size2D kernel_spatial_extend, unsigned int depth, PadStrideInfo deconv_info,
178                                          ITensorAccessorUPtr weights_accessor = nullptr, ITensorAccessorUPtr bias_accessor = nullptr);
179     /** Adds a depth concatenate node to the graph
180      *
181      * @param[in] g                 Graph to add the node to
182      * @param[in] params            Common node parameters
183      * @param[in] inputs            Inputs to the concatenate layer node as a NodeID-Index pair
184      * @param[in] concat_descriptor Concatenation layer descriptor
185      *
186      * @return Node ID of the created node, EmptyNodeID in case of error
187      */
188     static NodeID add_concatenate_node(Graph &g, NodeParams params, const std::vector<NodeIdxPair> &inputs, const descriptors::ConcatLayerDescriptor &concat_descriptor);
189     /** Adds an depth to space layer node to the graph
190      *
191      * @param[in] g           Graph to add the node to
192      * @param[in] params      Common node parameters
193      * @param[in] input       Input to the depth to space layer node as a NodeID-Index pair
194      * @param[in] block_shape Block shape to reshape tensor with
195      *
196      * @return Node ID of the created node, EmptyNodeID in case of error
197      */
198     static NodeID add_depth_to_space_node(Graph &g, NodeParams params, NodeIdxPair input, int32_t block_shape);
199     /** Adds a depth-wise convolution layer node to the graph
200      *
201      * @param[in] g                     Graph to add the node to
202      * @param[in] params                Common node parameters
203      * @param[in] input                 Input to the depthwise convolution layer node as a NodeID-Index pair
204      * @param[in] kernel_spatial_extend Spatial extend of convolution kernels
205      * @param[in] conv_info             Convolution layer information
206      * @param[in] depth_multiplier      (Optional) Depth multiplier parameter.
207      * @param[in] method                (Optional) Convolution method to use
208      * @param[in] weights_accessor      (Optional) Accessor of the weights node data
209      * @param[in] bias_accessor         (Optional) Accessor of the bias node data
210      * @param[in] quant_info            (Optional) Weights quantization info
211      * @param[in] out_quant_info        (Optional) Output quantization info
212      *
213      * @return Node ID of the created node, EmptyNodeID in case of error
214      */
215     static NodeID add_depthwise_convolution_node(Graph &g, NodeParams params, NodeIdxPair input,
216                                                  Size2D kernel_spatial_extend, PadStrideInfo conv_info, int depth_multiplier = 1,
217                                                  DepthwiseConvolutionMethod method    = DepthwiseConvolutionMethod::Default,
218                                                  ITensorAccessorUPtr weights_accessor = nullptr, ITensorAccessorUPtr bias_accessor = nullptr, const QuantizationInfo &quant_info = QuantizationInfo(),
219                                                  const QuantizationInfo &out_quant_info = QuantizationInfo());
220     /** Adds an element-wise layer node to the graph
221      *
222      * @param[in] g         Graph to add the node to
223      * @param[in] params    Common node parameters
224      * @param[in] input0    First input to the element-wise operation layer node as a NodeID-Index pair
225      * @param[in] input1    Second input to the element-wise operation layer node as a NodeID-Index pair
226      * @param[in] operation Element-wise operation to perform
227      *
228      * @return Node ID of the created node, EmptyNodeID in case of error
229      */
230     static NodeID add_elementwise_node(Graph &g, NodeParams params, NodeIdxPair input0, NodeIdxPair input1, EltwiseOperation operation);
231     /** Adds a dequantization node to the graph
232      *
233      * @param[in] g      Graph to add the node to
234      * @param[in] params Common node parameters
235      * @param[in] input  Input to the dequantization node as a NodeID-Index pair
236      *
237      * @return Node ID of the created node, EmptyNodeID in case of error
238      */
239     static NodeID add_dequantization_node(Graph &g, NodeParams params, NodeIdxPair input);
240     /** Adds a detection output layer node to the graph
241      *
242      * @param[in] g              Graph to add the node to
243      * @param[in] params         Common node parameters
244      * @param[in] input_loc      Location input to the detection output layer node as a NodeID-Index pair
245      * @param[in] input_conf     Confidence input to the detection output layer node as a NodeID-Index pair
246      * @param[in] input_priorbox PriorBox input to the detection output layer node as a NodeID-Index pair
247      * @param[in] detect_info    Detection output layer parameters
248      *
249      * @return Node ID of the created node, EmptyNodeID in case of error
250      */
251     static NodeID add_detection_output_node(Graph &g, NodeParams params, NodeIdxPair input_loc, NodeIdxPair input_conf, NodeIdxPair input_priorbox, const DetectionOutputLayerInfo &detect_info);
252     /** Adds a detection post process layer node to the graph
253      *
254      * @param[in] g                      Graph to add the node to
255      * @param[in] params                 Common node parameters
256      * @param[in] input_box_encoding     Boxes input to the detection output layer node as a NodeID-Index pair
257      * @param[in] input_class_prediction Class prediction input to the detection output layer node as a NodeID-Index pair
258      * @param[in] detect_info            Detection output layer parameters
259      * @param[in] anchors_accessor       (Optional) Const Node ID that contains the anchor values
260      * @param[in] anchor_quant_info      (Optional) Anchor quantization info
261      *
262      * @return Node ID of the created node, EmptyNodeID in case of error
263      */
264     static NodeID add_detection_post_process_node(Graph &g, NodeParams params, NodeIdxPair input_box_encoding, NodeIdxPair input_class_prediction,
265                                                   const DetectionPostProcessLayerInfo &detect_info, ITensorAccessorUPtr anchors_accessor = nullptr,
266                                                   const QuantizationInfo &anchor_quant_info = QuantizationInfo());
267     /** Adds a Dummy node to the graph
268      *
269      * @note this node if for debugging purposes. Just alters the shape of the graph pipeline as requested.
270      *
271      * @param[in] g      Graph to add the node to
272      * @param[in] params Common node parameters
273      * @param[in] input  Input to the dummy node as a NodeID-Index pair
274      * @param[in] shape  Output shape
275      *
276      * @return Node ID of the created node, EmptyNodeID in case of error
277      */
278     static NodeID add_dummy_node(Graph &g, NodeParams params, NodeIdxPair input, TensorShape shape);
279     /** Adds a flatten layer node to the graph
280      *
281      * @param[in] g      Graph to add the node to
282      * @param[in] params Common node parameters
283      * @param[in] input  Input to the flatten layer node as a NodeID-Index pair
284      *
285      * @return Node ID of the created node, EmptyNodeID in case of error
286      */
287     static NodeID add_flatten_node(Graph &g, NodeParams params, NodeIdxPair input);
288     /** Adds a fully connected layer node to the graph
289      *
290      * @param[in] g              Graph to add the layer to
291      * @param[in] params         Common node parameters
292      * @param[in] input          Input to the fully connected layer node as a NodeID-Index pair
293      * @param[in] num_outputs    Number of output neurons
294      * @param[in] weights_nid    Node ID of the weights node data
295      * @param[in] bias_nid       (Optional) Node ID of the bias node data. Defaults to EmptyNodeID
296      * @param[in] fc_info        (Optional) Fully connected layer metadata
297      * @param[in] out_quant_info (Optional) Output quantization info
298      * @param[in] fast_math_hint (Optional) Fast math hint
299      *
300      * @return Node ID of the created node, EmptyNodeID in case of error
301      */
302     static NodeID add_fully_connected_layer(Graph &g, NodeParams params, NodeIdxPair input, unsigned int num_outputs,
303                                             NodeID weights_nid, NodeID bias_nid = EmptyNodeID,
304                                             const FullyConnectedLayerInfo fc_info        = FullyConnectedLayerInfo(),
305                                             const QuantizationInfo       &out_quant_info = QuantizationInfo(),
306                                             FastMathHint                  fast_math_hint = FastMathHint::Disabled);
307     /** Adds a fully connected layer node to the graph
308      *
309      * @param[in] g                  Graph to add the layer to
310      * @param[in] params             Common node parameters
311      * @param[in] input              Input to the fully connected layer node as a NodeID-Index pair
312      * @param[in] num_outputs        Number of output neurons
313      * @param[in] weights_accessor   (Optional) Accessor of the weights node data
314      * @param[in] bias_accessor      (Optional) Accessor of the bias node data
315      * @param[in] fc_info            (Optional) Fully connected layer metadata
316      * @param[in] weights_quant_info (Optional) Weights quantization info
317      * @param[in] out_quant_info     (Optional) Output quantization info
318      * @param[in] fast_math_hint     (Optional) Fast math hint
319      *
320      * @return Node ID of the created node, EmptyNodeID in case of error
321      */
322     static NodeID add_fully_connected_layer(Graph &g, NodeParams params, NodeIdxPair input, unsigned int num_outputs,
323                                             ITensorAccessorUPtr weights_accessor = nullptr, ITensorAccessorUPtr bias_accessor = nullptr,
324                                             const FullyConnectedLayerInfo fc_info            = FullyConnectedLayerInfo(),
325                                             const QuantizationInfo       &weights_quant_info = QuantizationInfo(),
326                                             const QuantizationInfo       &out_quant_info     = QuantizationInfo(),
327                                             FastMathHint                  fast_math_hint     = FastMathHint::Disabled);
328     /** Adds a generate proposals layer node to the graph
329      *
330      * @param[in] g       Graph to add the layer to
331      * @param[in] params  Common node parameters
332      * @param[in] scores  Input scores to the generate proposals layer node as a NodeID-Index pair
333      * @param[in] deltas  Input deltas to the generate proposals layer node as a NodeID-Index pair
334      * @param[in] anchors Input anchors to the generate proposals layer node as a NodeID-Index pair
335      * @param[in] info    Generate proposals operation information
336      *
337      * @return Node ID of the created node, EmptyNodeID in case of error
338      */
339     static NodeID add_generate_proposals_node(Graph &g, NodeParams params, NodeIdxPair scores, NodeIdxPair deltas,
340                                               NodeIdxPair anchors, GenerateProposalsInfo info);
341     /** Adds a L2 Normalize layer node to the graph
342      *
343      * @param[in] g       Graph to add the node to
344      * @param[in] params  Common node parameters
345      * @param[in] input   Input to the normalization layer node as a NodeID-Index pair
346      * @param[in] axis    Axis to perform normalization on
347      * @param[in] epsilon Lower bound value for the normalization
348      *
349      * @return Node ID of the created node, EmptyNodeID in case of error
350      */
351     static NodeID add_l2_normalize_node(Graph &g, NodeParams params, NodeIdxPair input, int axis, float epsilon);
352     /** Adds a normalization layer node to the graph
353      *
354      * @param[in] g         Graph to add the node to
355      * @param[in] params    Common node parameters
356      * @param[in] input     Input to the normalization layer node as a NodeID-Index pair
357      * @param[in] norm_info Normalization layer information
358      *
359      * @return Node ID of the created node, EmptyNodeID in case of error
360      */
361     static NodeID add_normalization_node(Graph &g, NodeParams params, NodeIdxPair input, NormalizationLayerInfo norm_info);
362     /** Adds a normalize planar YUV layer node to the graph
363      *
364      * @param[in] g             Graph to add the node to
365      * @param[in] params        Common node parameters
366      * @param[in] input         Input to the normalize planar YUV layer node as a NodeID-Index pair
367      * @param[in] mean_accessor Const Node ID that contains the mean values
368      * @param[in] std_accessor  Const Node ID that contains the variance values
369      *
370      * @return Node ID of the created node, EmptyNodeID in case of error
371      */
372     static NodeID add_normalize_planar_yuv_node(Graph &g, NodeParams params, NodeIdxPair input,
373                                                 ITensorAccessorUPtr mean_accessor = nullptr, ITensorAccessorUPtr std_accessor = nullptr);
374     /** Adds a pad layer node to the graph
375      *
376      * @param[in] g         Graph to add the node to
377      * @param[in] params    Common node parameters
378      * @param[in] input     Input to the reshape layer node as a NodeID-Index pair
379      * @param[in] paddings  The padding for each spatial dimension of the input tensor. The pair padding[i]
380      *                      specifies the front and the end padding in the i-th dimension.
381      * @param[in] pad_value Padding value to be used. Defaults to 0
382      *
383      * @return Node ID of the created node, EmptyNodeID in case of error
384      */
385     static NodeID add_pad_node(Graph &g, NodeParams params, NodeIdxPair input, const PaddingList &paddings, PixelValue pad_value = PixelValue());
386     /** Adds a permute layer node to the graph
387      *
388      * @param[in] g      Graph to add the node to
389      * @param[in] params Common node parameters
390      * @param[in] input  Input to the reshape layer node as a NodeID-Index pair
391      * @param[in] perm   Permutation vector
392      * @param[in] layout (Optional) Data layout to assign to permuted tensor.
393      *                    If UNKNOWN then the input's layout will be used.
394      *
395      * @return Node ID of the created node, EmptyNodeID in case of error
396      */
397     static NodeID add_permute_node(Graph &g, NodeParams params, NodeIdxPair input, PermutationVector perm, DataLayout layout = DataLayout::UNKNOWN);
398     /** Adds a pooling layer node to the graph
399      *
400      * @param[in] g         Graph to add the node to
401      * @param[in] params    Common node parameters
402      * @param[in] input     Input to the pooling layer node as a NodeID-Index pair
403      * @param[in] pool_info Pooling layer information
404      *
405      * @return Node ID of the created node, EmptyNodeID in case of error
406      */
407     static NodeID add_pooling_node(Graph &g, NodeParams params, NodeIdxPair input, PoolingLayerInfo pool_info);
408     /** Adds a prelu layer node to the graph
409      *
410      * @param[in] g      Graph to add the node to
411      * @param[in] params Common node parameters
412      * @param[in] input  Input to the PRelu node as a NodeID-Index pair
413      * @param[in] alpha  Alpha input to the PRelu node as a NodeID-Index pair
414      *
415      * @return Node ID of the created node, EmptyNodeID in case of error
416      */
417     static NodeID add_prelu_node(Graph &g, NodeParams params, NodeIdxPair input, NodeIdxPair alpha);
418     /** Adds a print layer node to the graph
419      *
420      * @param[in] g           Graph to add the node to
421      * @param[in] params      Common node parameters
422      * @param[in] input       Input to the print layer node as a NodeID-Index pair
423      * @param[in] stream      Output stream.
424      * @param[in] format_info (Optional) Format info.
425      * @param[in] transform   (Optional) Transformation function to be applied to the input tensor before printing.
426      *
427      * @return Node ID of the created node, EmptyNodeID in case of error
428      */
429     static NodeID add_print_node(Graph &g, NodeParams params, NodeIdxPair input, std::ostream &stream, const IOFormatInfo &format_info = IOFormatInfo(),
430                                  const std::function<ITensor *(ITensor *)> transform = nullptr);
431     /** Adds a priorbox layer node to the graph
432      *
433      * @param[in] g          Graph to add the node to
434      * @param[in] params     Common node parameters
435      * @param[in] input0     First input to the priorbox layer node as a NodeID-Index pair
436      * @param[in] input1     Second input to the priorbox layer node as a NodeID-Index pair
437      * @param[in] prior_info PriorBox parameters
438      *
439      * @return Node ID of the created node, EmptyNodeID in case of error
440      */
441     static NodeID add_priorbox_node(Graph &g, NodeParams params, NodeIdxPair input0, NodeIdxPair input1, const PriorBoxLayerInfo &prior_info);
442     /** Adds a quantization layer node to the graph
443      *
444      * @param[in] g              Graph to add the node to
445      * @param[in] params         Common node parameters
446      * @param[in] input          Input to the quantization layer node as a NodeID-Index pair
447      * @param[in] out_quant_info Output quantization info
448      *
449      * @return Node ID of the created node, EmptyNodeID in case of error
450      */
451     static NodeID add_quantization_node(Graph &g, NodeParams params, NodeIdxPair input, const QuantizationInfo &out_quant_info);
452     /** Adds a reduction sum layer node to the graph
453      *
454      * @param[in] g         Graph to add the node to
455      * @param[in] params    Common node parameters
456      * @param[in] input     Input to the reorg layer node as a NodeID-Index pair
457      * @param[in] op        Reduction operation
458      * @param[in] axis      Reduction axis
459      * @param[in] keep_dims (Optional) Whether to keep the reduced dimension after the operation. Defaults to true.
460      *
461      * @return Node ID of the created node, EmptyNodeID in case of error
462      */
463     static NodeID add_reduction_operation_node(Graph &g, NodeParams params, NodeIdxPair input, ReductionOperation op, int axis, bool keep_dims = true);
464     /** Adds a reorg layer node to the graph
465      *
466      * @param[in] g      Graph to add the node to
467      * @param[in] params Common node parameters
468      * @param[in] input  Input to the reorg layer node as a NodeID-Index pair
469      * @param[in] stride Stride value to use for reorganizing the values in the output tensor.
470      *
471      * @return Node ID of the created node, EmptyNodeID in case of error
472      */
473     static NodeID add_reorg_node(Graph &g, NodeParams params, NodeIdxPair input, int stride);
474     /** Adds a reshape layer node to the graph
475      *
476      * @param[in] g      Graph to add the node to
477      * @param[in] params Common node parameters
478      * @param[in] input  Input to the reshape layer node as a NodeID-Index pair
479      * @param[in] shape  Output reshaped shape
480      *
481      * @return Node ID of the created node, EmptyNodeID in case of error
482      */
483     static NodeID add_reshape_node(Graph &g, NodeParams params, NodeIdxPair input, TensorShape shape);
484     /** Adds a resize layer node to the graph
485      *
486      * @param[in] g            Graph to add the node to
487      * @param[in] params       Common node parameters
488      * @param[in] input        Input to the reshape layer node as a NodeID-Index pair
489      * @param[in] policy       Interpolation policy
490      * @param[in] width_scale  Width scaling factor
491      * @param[in] height_scale Height scaling factor
492      *
493      * @return Node ID of the created node, EmptyNodeID in case of error
494      */
495     static NodeID add_resize_node(Graph &g, NodeParams params, NodeIdxPair input, InterpolationPolicy policy, float width_scale, float height_scale);
496     /** Adds a ROI align layer node to the graph
497      *
498      * @param[in] g         Graph to add the node to
499      * @param[in] params    Common node parameters
500      * @param[in] input     Input to the reshape layer node as a NodeID-Index pair
501      * @param[in] rois      Input containing the ROIs.
502      * @param[in] pool_info Contains pooling operation information described in @ref ROIPoolingLayerInfo.
503      *
504      * @return Node ID of the created node, EmptyNodeID in case of error
505      */
506     static NodeID add_roi_align_node(Graph &g, NodeParams params, NodeIdxPair input, NodeIdxPair rois, ROIPoolingLayerInfo pool_info);
507     /** Adds a scale layer node to the graph
508      * This layer computes a product of the input with a scale (read from mul_accessor) and it applies an offset (read from add_accessor).
509      * output = input * mul_w + add_w
510      *
511      * @param[in] g            Graph to add the layer to
512      * @param[in] params       Common node parameters
513      * @param[in] input        Input to the fully connected layer node as a NodeID-Index pair
514      * @param[in] mul_accessor (Optional) Accessor of the mul node data
515      * @param[in] add_accessor (Optional) Accessor of the add node data
516      *
517      * @return Node ID of the created node, EmptyNodeID in case of error
518      */
519     static NodeID add_scale_layer(Graph &g, const NodeParams &params, NodeIdxPair input,
520                                   ITensorAccessorUPtr mul_accessor = nullptr, ITensorAccessorUPtr add_accessor = nullptr);
521     /** Adds a softmax node to the graph
522      *
523      * @param[in] g      Graph to add the node to
524      * @param[in] params Common node parameters
525      * @param[in] input  Input to the softmax layer node as a NodeID-Index pair
526      * @param[in] beta   Beta parameter
527      *
528      * @return Node ID of the created node, EmptyNodeID in case of error
529      */
530     static NodeID add_softmax_node(Graph &g, NodeParams params, NodeIdxPair input, float beta = 1.f);
531     /** Adds a slice node to the graph
532      *
533      * @param[in] g      Graph to add the node to
534      * @param[in] params Common node parameters
535      * @param[in] input  Input to the slice layer node as a NodeID-Index pair
536      * @param[in] starts The starts of the dimensions of the input tensor to be sliced. The length must be of rank(input).
537      * @param[in] ends   The ends of the dimensions of the input tensor to be sliced. The length must be of rank(input).
538      *
539      * @return Node ID of the created node, EmptyNodeID in case of error
540      */
541     static NodeID add_slice_node(Graph &g, NodeParams params, NodeIdxPair input, Coordinates &starts, Coordinates &ends);
542     /** Adds a split node to the graph
543      *
544      * @param[in] g          Graph to add the node to
545      * @param[in] params     Common node parameters
546      * @param[in] input      Input to the split layer node as a NodeID-Index pair
547      * @param[in] num_splits Number of different splits
548      * @param[in] axis       (Optional) Split axis. Defaults to 0
549      *
550      * @return Node ID of the created node, EmptyNodeID in case of error
551      */
552     static NodeID add_split_node(Graph &g, NodeParams params, NodeIdxPair input, unsigned int num_splits, unsigned int axis = 0);
553     /** Adds a stack layer node to the graph
554      *
555      * @param[in] g      Graph to add the node to
556      * @param[in] params Common node parameters
557      * @param[in] inputs Inputs to the reorg layer node as a NodeID-Index pair
558      * @param[in] axis   Axis along which the input tensors have to be packed
559      *
560      * @return Node ID of the created node, EmptyNodeID in case of error
561      */
562     static NodeID add_stack_node(Graph &g, NodeParams params, const std::vector<NodeIdxPair> &inputs, int axis);
563     /** Adds a strided slice node to the graph
564      *
565      * @param[in] g       Graph to add the node to
566      * @param[in] params  Common node parameters
567      * @param[in] input   Input to the strided slice layer node as a NodeID-Index pair
568      * @param[in] starts  The starts of the dimensions of the input tensor to be sliced. The length must be of rank(input).
569      * @param[in] ends    The ends of the dimensions of the input tensor to be sliced. The length must be of rank(input).
570      * @param[in] strides The strides of the dimensions of the input tensor to be sliced. The length must be of rank(input).
571      * @param[in] info    Contains masks for the starts, ends and strides
572      *
573      * @return Node ID of the created node, EmptyNodeID in case of error
574      */
575     static NodeID add_strided_slice_node(Graph &g, NodeParams params, NodeIdxPair input, Coordinates &starts, Coordinates &ends, BiStrides &strides, StridedSliceLayerInfo info);
576     /** Adds a yolo layer to the graph
577      *
578      * @param[in] g        Graph to add the node to
579      * @param[in] params   Common node parameters
580      * @param[in] input    Input to the yolo layer node as a NodeID-Index pair
581      * @param[in] act_info Activation layer parameters
582      *
583      * @return Node ID of the created node, EmptyNodeID in case of error
584      */
585     static NodeID add_yolo_node(Graph &g, NodeParams params, NodeIdxPair input, ActivationLayerInfo act_info);
586 };
587 } // namespace graph
588 } // namespace arm_compute
589 #endif /* ARM_COMPUTE_GRAPH_GRAPH_BUILDER_H */
590