From 102b0ce919bf5415993cdd6b0e4385b35734d38d Mon Sep 17 00:00:00 2001 From: Georgios Pinitas Date: Thu, 13 Feb 2020 17:59:09 +0000 Subject: COMPMID-3105: Update pad layer to PadV2 Adds the ability to set the padding value in the pad layer node. Change-Id: I2f323146cbdfdfd6cfd617ee4bcafb5ffafedbbb Signed-off-by: Georgios Pinitas Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/2727 Reviewed-by: Michele Di Giorgio Comments-Addressed: Arm Jenkins Tested-by: Arm Jenkins --- arm_compute/graph/GraphBuilder.h | 13 +++++++------ arm_compute/graph/Types.h | 2 ++ arm_compute/graph/backends/FunctionHelpers.h | 9 +++++---- arm_compute/graph/frontend/Layers.h | 12 +++++++----- arm_compute/graph/nodes/PadLayerNode.h | 13 ++++++++++--- 5 files changed, 31 insertions(+), 18 deletions(-) (limited to 'arm_compute') diff --git a/arm_compute/graph/GraphBuilder.h b/arm_compute/graph/GraphBuilder.h index 23541c4a0f..612703cae5 100644 --- a/arm_compute/graph/GraphBuilder.h +++ b/arm_compute/graph/GraphBuilder.h @@ -335,15 +335,16 @@ public: ITensorAccessorUPtr mean_accessor = nullptr, ITensorAccessorUPtr std_accessor = nullptr); /** Adds a pad layer node to the graph * - * @param[in] g Graph to add the node to - * @param[in] params Common node parameters - * @param[in] input Input to the reshape layer node as a NodeID-Index pair - * @param[in] padding The padding for each spatial dimension of the input tensor. The pair padding[i] - * specifies the front and the end padding in the i-th dimension. + * @param[in] g Graph to add the node to + * @param[in] params Common node parameters + * @param[in] input Input to the reshape layer node as a NodeID-Index pair + * @param[in] paddings The padding for each spatial dimension of the input tensor. The pair padding[i] + * specifies the front and the end padding in the i-th dimension. + * @param[in] pad_value Padding value to be used. Defaults to 0 * * @return Node ID of the created node, EmptyNodeID in case of error */ - static NodeID add_pad_node(Graph &g, NodeParams params, NodeIdxPair input, PaddingList padding); + static NodeID add_pad_node(Graph &g, NodeParams params, NodeIdxPair input, const PaddingList &paddings, PixelValue pad_value = PixelValue()); /** Adds a permute layer node to the graph * * @param[in] g Graph to add the node to diff --git a/arm_compute/graph/Types.h b/arm_compute/graph/Types.h index 7c81641cbe..296f757c9b 100644 --- a/arm_compute/graph/Types.h +++ b/arm_compute/graph/Types.h @@ -25,6 +25,7 @@ #define ARM_COMPUTE_GRAPH_TYPES_H #include "arm_compute/core/Error.h" +#include "arm_compute/core/PixelValue.h" #include "arm_compute/core/Types.h" #include "arm_compute/runtime/CL/CLTunerTypes.h" @@ -45,6 +46,7 @@ using arm_compute::DataLayoutDimension; using arm_compute::TensorShape; using arm_compute::Size2D; using arm_compute::PermutationVector; +using arm_compute::PixelValue; using arm_compute::ActivationLayerInfo; using arm_compute::DetectionOutputLayerInfo; diff --git a/arm_compute/graph/backends/FunctionHelpers.h b/arm_compute/graph/backends/FunctionHelpers.h index 9f352edb9a..20c69bfffa 100644 --- a/arm_compute/graph/backends/FunctionHelpers.h +++ b/arm_compute/graph/backends/FunctionHelpers.h @@ -1048,15 +1048,16 @@ std::unique_ptr create_pad_layer(PadLayerNode &node) validate_node(node, 1 /* expected inputs */, 1 /* expected outputs */); // Extract IO and info - typename TargetInfo::TensorType *input = get_backing_tensor(node.input(0)); - typename TargetInfo::TensorType *output = get_backing_tensor(node.output(0)); - const PaddingList &padding = node.padding(); + typename TargetInfo::TensorType *input = get_backing_tensor(node.input(0)); + typename TargetInfo::TensorType *output = get_backing_tensor(node.output(0)); + const PaddingList &padding = node.padding(); + const PixelValue pad_value = node.pad_value(); ARM_COMPUTE_ERROR_ON(input == nullptr); ARM_COMPUTE_ERROR_ON(output == nullptr); // Create and configure function auto func = support::cpp14::make_unique(); - func->configure(input, output, padding); + func->configure(input, output, padding, pad_value); // Log info ARM_COMPUTE_LOG_GRAPH_INFO("Instantiated " diff --git a/arm_compute/graph/frontend/Layers.h b/arm_compute/graph/frontend/Layers.h index 420f715674..61a6fd47ee 100644 --- a/arm_compute/graph/frontend/Layers.h +++ b/arm_compute/graph/frontend/Layers.h @@ -832,11 +832,12 @@ class PadLayer final : public ILayer public: /** Construct a pad layer. * - * @param[in] padding The padding for each spatial dimension of the input tensor. The pair padding[i] - * specifies the front and the end padding in the i-th dimension. + * @param[in] padding The padding for each spatial dimension of the input tensor. The pair padding[i] + * specifies the front and the end padding in the i-th dimension. + * @param[in] pad_value Padding value to use. Defaults to 0. */ - PadLayer(PaddingList padding) - : _padding(padding) + PadLayer(PaddingList padding, PixelValue pad_value = PixelValue()) + : _padding(padding), _pad_value(pad_value) { } @@ -844,11 +845,12 @@ public: { NodeParams common_params = { name(), s.hints().target_hint }; NodeIdxPair input = { s.tail_node(), 0 }; - return GraphBuilder::add_pad_node(s.graph(), common_params, input, _padding); + return GraphBuilder::add_pad_node(s.graph(), common_params, input, _padding, _pad_value); } private: PaddingList _padding; + PixelValue _pad_value; }; /** Permute Layer */ diff --git a/arm_compute/graph/nodes/PadLayerNode.h b/arm_compute/graph/nodes/PadLayerNode.h index 0b1bddac9b..852427a593 100644 --- a/arm_compute/graph/nodes/PadLayerNode.h +++ b/arm_compute/graph/nodes/PadLayerNode.h @@ -36,15 +36,21 @@ class PadLayerNode final : public INode public: /** Constructor * - * @param[in] padding The padding for each spatial dimension of the input tensor. The pair padding[i] - * specifies the front and the end padding in the i-th dimension. + * @param[in] padding The padding for each spatial dimension of the input tensor. The pair padding[i] + * specifies the front and the end padding in the i-th dimension. + * @param[in] pad_value Padding value to be used. Defaults to 0 */ - PadLayerNode(const PaddingList &padding); + PadLayerNode(const PaddingList &padding, PixelValue pad_value = PixelValue()); /** Padding list accessor * * @return Padding list */ const PaddingList &padding() const; + /** Padding value accessor + * + * @return Padding value + */ + PixelValue pad_value() const; // Inherited overridden methods: NodeType type() const override; @@ -54,6 +60,7 @@ public: private: PaddingList _padding; + PixelValue _pad_value; }; } // namespace graph } // namespace arm_compute -- cgit v1.2.1