diff options
author | Tee Jung <tee.ty.jung@openedges.com> | 2019-11-13 07:17:46 +0000 |
---|---|---|
committer | Matteo Martincigh <matteo.martincigh@arm.com> | 2019-11-18 11:08:56 +0000 |
commit | aad2fe41ad5111ad4cde6dc91a794f5f8f8b16f9 (patch) | |
tree | 979b990edaf4fa217b98c204d64db3aaabf7834c /src/armnn/NetworkQuantizationScheme.hpp | |
parent | d9d6371d619a1715c47af82c37de5461fa24d266 (diff) | |
download | armnn-aad2fe41ad5111ad4cde6dc91a794f5f8f8b16f9.tar.gz |
Fix quantizer crash by zero tensor
Signed-off-by: Jung Tae-young <tee.ty.jung@openedges.com>
Signed-off-by: Matteo Martincigh <matteo.martincigh@arm.com>
Change-Id: I1f0dfa4ca76e1c85a2b8fb5de12039a260224951
Diffstat (limited to 'src/armnn/NetworkQuantizationScheme.hpp')
-rw-r--r-- | src/armnn/NetworkQuantizationScheme.hpp | 12 |
1 files changed, 12 insertions, 0 deletions
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)); |