aboutsummaryrefslogtreecommitdiff
path: root/tests/validation/Helpers.cpp
diff options
context:
space:
mode:
authorGeorgios Pinitas <georgios.pinitas@arm.com>2019-12-02 19:01:25 +0000
committerGeorgios Pinitas <georgios.pinitas@arm.com>2019-12-04 12:44:28 +0000
commit6e1791b1bfabc81f08d3117939f6eb5264ed4edf (patch)
treeb984d58856ef9baa168bcf878659caddf599f623 /tests/validation/Helpers.cpp
parent5cb49dcf7ad74cc6e7e91790b7132ae4dd845515 (diff)
downloadComputeLibrary-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.cpp35
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");