From aad2fe41ad5111ad4cde6dc91a794f5f8f8b16f9 Mon Sep 17 00:00:00 2001 From: Tee Jung Date: Wed, 13 Nov 2019 07:17:46 +0000 Subject: Fix quantizer crash by zero tensor Signed-off-by: Jung Tae-young Signed-off-by: Matteo Martincigh Change-Id: I1f0dfa4ca76e1c85a2b8fb5de12039a260224951 --- src/armnn/NetworkQuantizationScheme.hpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/armnn/NetworkQuantizationScheme.hpp b/src/armnn/NetworkQuantizationScheme.hpp index a5f96a106b..0effa1fd64 100644 --- a/src/armnn/NetworkQuantizationScheme.hpp +++ b/src/armnn/NetworkQuantizationScheme.hpp @@ -40,6 +40,12 @@ struct QAsymm8QuantizationScheme : IQuantizationScheme min = std::min(0.0, min); // min <= 0.0 max = std::max(0.0, max); // max >= 0.0 + // To avoid dividing by zero when quantizing a zero filled tensor + if (min == 0.0 && max == 0.0) + { + max = 1.0; + } + // Assumes quantization range [0-highest] double scale = (max-min) / highest; double offset = -min / scale; @@ -64,6 +70,12 @@ struct QSymm16QuantizationScheme : IQuantizationScheme throw InvalidArgumentException("min > max will result in invalid quantization."); } + // To avoid dividing by zero when quantizing a zero filled tensor + if (min == 0.0 && max == 0.0) + { + max = 1.0; + } + double highest = (1 << (NumBits()-1)) - 1; // (numbits-1) accounts for the sign bit double extent = std::max(std::abs(min), std::abs(max)); -- cgit v1.2.1