aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTee Jung <tee.ty.jung@openedges.com>2019-11-13 07:17:46 +0000
committerMatteo Martincigh <matteo.martincigh@arm.com>2019-11-18 11:08:56 +0000
commitaad2fe41ad5111ad4cde6dc91a794f5f8f8b16f9 (patch)
tree979b990edaf4fa217b98c204d64db3aaabf7834c
parentd9d6371d619a1715c47af82c37de5461fa24d266 (diff)
downloadarmnn-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
-rw-r--r--src/armnn/NetworkQuantizationScheme.hpp12
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));