diff options
author | Alex Gilday <alexander.gilday@arm.com> | 2018-03-05 16:22:48 +0000 |
---|---|---|
committer | Anthony Barbier <anthony.barbier@arm.com> | 2018-11-02 16:49:16 +0000 |
commit | 60954c671ffdc3422bbdb728fc022eb6896c1e17 (patch) | |
tree | 67f57a6683562bf6611d46cfc409edf32e891ac7 /arm_compute/core | |
parent | f47bfb97fa8bc928a7860b84b7b227f716f65e58 (diff) | |
download | ComputeLibrary-60954c671ffdc3422bbdb728fc022eb6896c1e17.tar.gz |
COMPMID-754: Add validation to (De)QuantizationLayers
Change-Id: If8fa1277e8dc5b8e28a8bcad4ff9fc672b00ce9a
Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/123275
Reviewed-by: Anthony Barbier <anthony.barbier@arm.com>
Tested-by: Jenkins <bsgcomp@arm.com>
Reviewed-by: Michalis Spyrou <michalis.spyrou@arm.com>
Diffstat (limited to 'arm_compute/core')
7 files changed, 72 insertions, 3 deletions
diff --git a/arm_compute/core/CL/kernels/CLDequantizationLayerKernel.h b/arm_compute/core/CL/kernels/CLDequantizationLayerKernel.h index 03112d282a..38aa63e98f 100644 --- a/arm_compute/core/CL/kernels/CLDequantizationLayerKernel.h +++ b/arm_compute/core/CL/kernels/CLDequantizationLayerKernel.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 ARM Limited. + * Copyright (c) 2017-2018 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -58,6 +58,16 @@ public: * The dimensions over the second must match the batched dimensions of the input tensor. Data type supported: F32. */ void configure(const ICLTensor *input, ICLTensor *output, const ICLTensor *min_max); + /** Static function to check if given info will lead to a valid configuration of @ref CLDequantizationLayerKernel + * + * @param[in] input Input tensor info. Data types supported: U8. + * @param[in] output Output tensor info. Data types supported: F32. + * @param[in] min_max Info for the tensor with shape [2, batches] which stores the minimum and maximum value for each 3D input tensor. + * The dimensions over the second must match the batched dimensions of the input tensor. Data type supported: F32. + * + * @return a status + */ + static Status validate(const ITensorInfo *input, const ITensorInfo *output, const ITensorInfo *min_max); // Inherited methods overridden: void run(const Window &window, cl::CommandQueue &queue) override; diff --git a/arm_compute/core/CL/kernels/CLMinMaxLayerKernel.h b/arm_compute/core/CL/kernels/CLMinMaxLayerKernel.h index a0eba4879b..0faa5c0bde 100644 --- a/arm_compute/core/CL/kernels/CLMinMaxLayerKernel.h +++ b/arm_compute/core/CL/kernels/CLMinMaxLayerKernel.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 ARM Limited. + * Copyright (c) 2017-2018 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -49,9 +49,18 @@ public: * * @param[in] input Input tensor with at least 3 dimensions. The dimensions over the third will be interpreted as batches.Data types supported: F32. * @param[out] output Output tensor with shape [2, batches, ...] which stores the minimum and maximum values for each 3D input tensor. - * The dimensions over the second must match the batched dimensions of the input tensor. Data types supported: F32. + * The dimensions over the second must match the batched dimensions of the input tensor. Data types supported: F32. */ void configure(const ICLTensor *input, ICLTensor *output); + /** Static function to check if given info will lead to a valid configuration of @ref CLMinMaxLayerKernel + * + * @param[in] input Input tensor info. Data types supported: F32. + * @param[in] output Output tensor info with shape [2, batches, ...] which stores the minimum and maximum values for each 3D input tensor. + * The dimensions over the second must match the batched dimensions of the input tensor. Data types supported: F32. + * + * @return a status + */ + static Status validate(const ITensorInfo *input, const ITensorInfo *output); /** Resets global minimum and maximum * diff --git a/arm_compute/core/CL/kernels/CLQuantizationLayerKernel.h b/arm_compute/core/CL/kernels/CLQuantizationLayerKernel.h index a24ddb1a3a..49d76087b5 100644 --- a/arm_compute/core/CL/kernels/CLQuantizationLayerKernel.h +++ b/arm_compute/core/CL/kernels/CLQuantizationLayerKernel.h @@ -57,6 +57,16 @@ public: * The dimensions over the second must match the batched dimensions of the input tensor. Data type supported: F32. */ void configure(const ICLTensor *input, ICLTensor *output, ICLTensor *min_max); + /** Static function to check if given info will lead to a valid configuration of @ref CLQuantizationLayerKernel + * + * @param[in] input Input tensor info. Data types supported: F32. + * @param[in] output Output tensor info. Output data type must be U8. + * @param[in] min_max Info for the tensor with shape [2, batches] which stores the minimum and maximum value for each 3D input tensor. + * The dimensions over the second must match the batched dimensions of the input tensor. Data type supported: F32. + * + * @return a status + */ + static Status validate(const ITensorInfo *input, const ITensorInfo *output, const ITensorInfo *min_max); // Inherited methods overridden: void run(const Window &window, cl::CommandQueue &queue) override; diff --git a/arm_compute/core/NEON/kernels/NEDequantizationLayerKernel.h b/arm_compute/core/NEON/kernels/NEDequantizationLayerKernel.h index 25383aa7dc..7ee2078e9e 100644 --- a/arm_compute/core/NEON/kernels/NEDequantizationLayerKernel.h +++ b/arm_compute/core/NEON/kernels/NEDequantizationLayerKernel.h @@ -62,6 +62,16 @@ public: * The dimensions over the second must match the batched dimensions of the input tensor. Data type supported: F32 */ void configure(const ITensor *input, ITensor *output, const ITensor *min_max); + /** Static function to check if given info will lead to a valid configuration of @ref NEDequantizationLayerKernel + * + * @param[in] input Input tensor info. Data types supported: U8. + * @param[in] output Output tensor info. Data types supported: F32. + * @param[in] min_max Info for the tensor with shape [2, batches] which stores the minimum and maximum value for each 3D input tensor. + * The dimensions over the second must match the batched dimensions of the input tensor. Data type supported: F32. + * + * @return a status + */ + static Status validate(const ITensorInfo *input, const ITensorInfo *output, const ITensorInfo *min_max); // Inherited methods overridden: void run(const Window &window, const ThreadInfo &info) override; diff --git a/arm_compute/core/NEON/kernels/NEMinMaxLayerKernel.h b/arm_compute/core/NEON/kernels/NEMinMaxLayerKernel.h index 592b5941b5..cfc3ee5290 100644 --- a/arm_compute/core/NEON/kernels/NEMinMaxLayerKernel.h +++ b/arm_compute/core/NEON/kernels/NEMinMaxLayerKernel.h @@ -65,6 +65,15 @@ public: * The dimensions over the second must match the batched dimensions of the input tensor. Data types supported: F32 */ void configure(const ITensor *input, ITensor *output); + /** Static function to check if given info will lead to a valid configuration of @ref CLMinMaxLayerKernel + * + * @param[in] input Input tensor info. Data types supported: F32. + * @param[in] output Output tensor info with shape [2, batches, ...] which stores the minimum and maximum values for each 3D input tensor. + * The dimensions over the second must match the batched dimensions of the input tensor. Data types supported: F32. + * + * @return a status + */ + static Status validate(const ITensorInfo *input, const ITensorInfo *output); /** Resets global minimum and maximum. */ void reset(); diff --git a/arm_compute/core/NEON/kernels/NEQuantizationLayerKernel.h b/arm_compute/core/NEON/kernels/NEQuantizationLayerKernel.h index 9642ac52a7..e7cf0a8ca4 100644 --- a/arm_compute/core/NEON/kernels/NEQuantizationLayerKernel.h +++ b/arm_compute/core/NEON/kernels/NEQuantizationLayerKernel.h @@ -62,6 +62,16 @@ public: * The dimensions over the second must match the batched dimensions of the input tensor. Data type supported: F32 */ void configure(const ITensor *input, ITensor *output, const ITensor *min_max); + /** Static function to check if given info will lead to a valid configuration of @ref NEQuantizationLayerKernel + * + * @param[in] input Input tensor info. Data types supported: F32. + * @param[in] output Output tensor info. Data types supported: U8. + * @param[in] min_max Info for the tensor with shape [2, batches] which stores the minimum and maximum value for each 3D input tensor. + * The dimensions over the second must match the batched dimensions of the input tensor. Data type supported: F32. + * + * @return a status + */ + static Status validate(const ITensorInfo *input, const ITensorInfo *output, const ITensorInfo *min_max); // Inherited methods overridden: void run(const Window &window, const ThreadInfo &info) override; diff --git a/arm_compute/core/utils/misc/ShapeCalculator.h b/arm_compute/core/utils/misc/ShapeCalculator.h index 9cb8023463..1e90927a93 100644 --- a/arm_compute/core/utils/misc/ShapeCalculator.h +++ b/arm_compute/core/utils/misc/ShapeCalculator.h @@ -249,6 +249,17 @@ inline TensorShape compute_deep_convolution_shape(const ITensorInfo &input, cons return output_shape; } + +inline TensorShape compute_min_max_shape(const ITensorInfo *input) +{ + TensorShape output_shape{ input->tensor_shape() }; + output_shape.set(Window::DimX, 2); + output_shape.remove_dimension(1); + output_shape.remove_dimension(1); + + return output_shape; +} + } // namespace shape_calculator } // namespace misc } // namespace arm_compute |