From 29a01c90fc372d31188ab7157b45b32ce24fa9b3 Mon Sep 17 00:00:00 2001 From: Michalis Spyrou Date: Thu, 22 Aug 2019 11:44:04 +0100 Subject: COMPMID-2417: NEDequantizationLayer support for QASYMM8_PER_CHANNEL Change-Id: I1ef4ce8610e11e81702b0b7f0f7c437fed49833e Signed-off-by: Michalis Spyrou Reviewed-on: https://review.mlplatform.org/c/1795 Tested-by: Arm Jenkins Reviewed-by: Michele Di Giorgio Comments-Addressed: Arm Jenkins --- .../fixtures/DequantizationLayerFixture.h | 57 +++++++++++++--------- 1 file changed, 35 insertions(+), 22 deletions(-) (limited to 'tests/validation/fixtures') diff --git a/tests/validation/fixtures/DequantizationLayerFixture.h b/tests/validation/fixtures/DequantizationLayerFixture.h index 2c8f05746d..4842ee1c59 100644 --- a/tests/validation/fixtures/DequantizationLayerFixture.h +++ b/tests/validation/fixtures/DequantizationLayerFixture.h @@ -49,7 +49,7 @@ public: template void setup(TensorShape shape, DataType src_data_type, DataType dst_datatype) { - _quantization_info = generate_quantization_info(src_data_type); + _quantization_info = generate_quantization_info(src_data_type, shape.z()); _target = compute_target(shape, src_data_type, dst_datatype); _reference = compute_reference(shape, src_data_type); } @@ -92,32 +92,34 @@ protected: SimpleTensor compute_reference(const TensorShape &shape, DataType src_data_type) { - if(src_data_type == DataType::QASYMM8) + switch(src_data_type) { - SimpleTensor src{ shape, src_data_type, 1, _quantization_info }; - fill(src); - return reference::dequantization_layer(src); - } - else if(src_data_type == DataType::QSYMM8) - { - SimpleTensor src{ shape, src_data_type, 1, _quantization_info }; - fill(src); - return reference::dequantization_layer(src); - } - else if(src_data_type == DataType::QSYMM16) - { - SimpleTensor src{ shape, src_data_type, 1, _quantization_info }; - fill(src); - return reference::dequantization_layer(src); - } - else - { - ARM_COMPUTE_ERROR("Unsupported data type"); + case DataType::QASYMM8: + case DataType::QASYMM8_PER_CHANNEL: + { + SimpleTensor src{ shape, src_data_type, 1, _quantization_info }; + fill(src); + return reference::dequantization_layer(src); + } + case DataType::QSYMM8: + { + SimpleTensor src{ shape, src_data_type, 1, _quantization_info }; + fill(src); + return reference::dequantization_layer(src); + } + case DataType::QSYMM16: + { + SimpleTensor src{ shape, src_data_type, 1, _quantization_info }; + fill(src); + return reference::dequantization_layer(src); + } + default: + ARM_COMPUTE_ERROR("Unsupported data type"); } } protected: - QuantizationInfo generate_quantization_info(DataType data_type) + QuantizationInfo generate_quantization_info(DataType data_type, int32_t num_channels) { std::mt19937 gen(library.get()->seed()); std::uniform_int_distribution<> distribution_scale_q8(1, 255); @@ -130,6 +132,17 @@ protected: return QuantizationInfo(1.f / distribution_scale_q16(gen)); case DataType::QSYMM8: return QuantizationInfo(1.f / distribution_scale_q8(gen)); + case DataType::QASYMM8_PER_CHANNEL: + { + std::vector scale(num_channels); + std::vector offset(num_channels); + for(int32_t i = 0; i < num_channels; ++i) + { + scale[i] = 1.f / distribution_scale_q8(gen); + offset[i] = distribution_offset_q8(gen); + } + return QuantizationInfo(scale, offset); + } case DataType::QASYMM8: return QuantizationInfo(1.f / distribution_scale_q8(gen), distribution_offset_q8(gen)); default: -- cgit v1.2.1