diff options
author | Georgios Pinitas <georgios.pinitas@arm.com> | 2019-12-02 19:01:25 +0000 |
---|---|---|
committer | Georgios Pinitas <georgios.pinitas@arm.com> | 2019-12-04 12:44:28 +0000 |
commit | 6e1791b1bfabc81f08d3117939f6eb5264ed4edf (patch) | |
tree | b984d58856ef9baa168bcf878659caddf599f623 /tests/validation/Helpers.cpp | |
parent | 5cb49dcf7ad74cc6e7e91790b7132ae4dd845515 (diff) | |
download | ComputeLibrary-6e1791b1bfabc81f08d3117939f6eb5264ed4edf.tar.gz |
COMPMID-2764: Add support for QASYMM8_SIGNED in NEConvolutionLayer.
Change-Id: I8fbbd2e399f48968337a60147098d04f27c2d1c0
Signed-off-by: Georgios Pinitas <georgios.pinitas@arm.com>
Reviewed-on: https://review.mlplatform.org/c/2402
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Michele Di Giorgio <michele.digiorgio@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'tests/validation/Helpers.cpp')
-rw-r--r-- | tests/validation/Helpers.cpp | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/tests/validation/Helpers.cpp b/tests/validation/Helpers.cpp index fef4510405..afefee77be 100644 --- a/tests/validation/Helpers.cpp +++ b/tests/validation/Helpers.cpp @@ -122,53 +122,53 @@ SimpleTensor<float> convert_from_asymmetric(const SimpleTensor<uint8_t> &src) } template <> -SimpleTensor<float> convert_from_asymmetric(const SimpleTensor<uint16_t> &src) +SimpleTensor<float> convert_from_asymmetric(const SimpleTensor<int8_t> &src) { const UniformQuantizationInfo &quantization_info = src.quantization_info().uniform(); SimpleTensor<float> dst{ src.shape(), DataType::F32, 1, QuantizationInfo(), src.data_layout() }; for(int i = 0; i < src.num_elements(); ++i) { - dst[i] = dequantize_qasymm16(src[i], quantization_info); + dst[i] = dequantize_qasymm8_signed(src[i], quantization_info); } return dst; } template <> -SimpleTensor<uint8_t> convert_to_asymmetric(const SimpleTensor<float> &src, const QuantizationInfo &quantization_info) +SimpleTensor<float> convert_from_asymmetric(const SimpleTensor<uint16_t> &src) { - SimpleTensor<uint8_t> dst{ src.shape(), DataType::QASYMM8, 1, quantization_info }; - const UniformQuantizationInfo &qinfo = quantization_info.uniform(); + const UniformQuantizationInfo &quantization_info = src.quantization_info().uniform(); + SimpleTensor<float> dst{ src.shape(), DataType::F32, 1, QuantizationInfo(), src.data_layout() }; for(int i = 0; i < src.num_elements(); ++i) { - dst[i] = quantize_qasymm8(src[i], qinfo); + dst[i] = dequantize_qasymm16(src[i], quantization_info); } return dst; } template <> -SimpleTensor<int8_t> convert_to_asymmetric(const SimpleTensor<float> &src, const QuantizationInfo &quantization_info) +SimpleTensor<uint8_t> convert_to_asymmetric(const SimpleTensor<float> &src, const QuantizationInfo &quantization_info) { - SimpleTensor<int8_t> dst{ src.shape(), DataType::QASYMM8_SIGNED, 1, quantization_info }; + SimpleTensor<uint8_t> dst{ src.shape(), DataType::QASYMM8, 1, quantization_info }; const UniformQuantizationInfo &qinfo = quantization_info.uniform(); for(int i = 0; i < src.num_elements(); ++i) { - dst[i] = quantize_qasymm8_signed(src[i], qinfo); + dst[i] = quantize_qasymm8(src[i], qinfo); } return dst; } template <> -SimpleTensor<float> convert_from_asymmetric(const SimpleTensor<int8_t> &src) +SimpleTensor<int8_t> convert_to_asymmetric(const SimpleTensor<float> &src, const QuantizationInfo &quantization_info) { - const UniformQuantizationInfo &quantization_info = src.quantization_info().uniform(); - SimpleTensor<float> dst{ src.shape(), DataType::F32, 1, QuantizationInfo(), src.data_layout() }; + SimpleTensor<int8_t> dst{ src.shape(), DataType::QASYMM8_SIGNED, 1, quantization_info }; + const UniformQuantizationInfo &qinfo = quantization_info.uniform(); for(int i = 0; i < src.num_elements(); ++i) { - dst[i] = dequantize_qasymm8_signed(src[i], quantization_info); + dst[i] = quantize_qasymm8_signed(src[i], qinfo); } return dst; } @@ -354,6 +354,15 @@ std::pair<int, int> get_quantized_bounds(const QuantizationInfo &quant_info, flo return std::pair<int, int> { min_bound, max_bound }; } +std::pair<int, int> get_quantized_qasymm8_signed_bounds(const QuantizationInfo &quant_info, float min, float max) +{ + ARM_COMPUTE_ERROR_ON_MSG(min > max, "min must be lower equal than max"); + + const int min_bound = quantize_qasymm8_signed(min, quant_info.uniform()); + const int max_bound = quantize_qasymm8_signed(max, quant_info.uniform()); + return std::pair<int, int> { min_bound, max_bound }; +} + std::pair<int, int> get_symm_quantized_per_channel_bounds(const QuantizationInfo &quant_info, float min, float max, size_t channel_id) { ARM_COMPUTE_ERROR_ON_MSG(min > max, "min must be lower equal than max"); |