[LPT] Symmetric quantization support for efficientnet-b0 (#1773)

* [LPT] Symmetric quantization for efficientnet-b0

* [LPT] zero point calculation fix

Co-authored-by: Zinoviev, Vladimir <vladimir.zinoviev@intel.com>
This commit is contained in:
Edward Shogulin
2020-08-19 11:36:48 +03:00
committed by GitHub
parent 29873d2338
commit 819bd9bd82

View File

@@ -39,7 +39,7 @@ LayerTransformation::LayerTransformation(const Params& params) :
precisionsOnWeights(params.precisionsOnWeights),
layerTransformationsManager(nullptr),
paramsManager(nullptr),
quantizationIntervalAsymmetryThreshold(2.e-4),
quantizationIntervalAsymmetryThreshold(0.002f),
zeroThreshold(1.e-6f),
dequantizationShiftToZeroRatioTreshold(4.e-4f),
minQuantizationLevels(2ul) {}
@@ -352,12 +352,11 @@ LayerTransformation::PrecisionDetails LayerTransformation::getPrecisionDetails(c
const float expectedRatio = quantizationDetails.levels == 256 ? asymmetricIntervalSideRatio256 : -1.f;
const float actualRatio = quantizationDetails.outputLowValues[i] / quantizationDetails.outputHighValues[i];
const float actual = std::fabs(
(actualRatio - expectedRatio) /
std::max(fabs(quantizationDetails.outputLowValues[i]), fabs(quantizationDetails.outputHighValues[i])));
const float actual = std::fabs((actualRatio - expectedRatio) / std::min(actualRatio, expectedRatio));
if (actual > quantizationIntervalAsymmetryThreshold) {
hasZeroPoint = true;
}
#ifdef LPT_PRINT_DEQUANTIZATION_INFO
if (hasZeroPoint) {
std::cout << " actual: " << actual << ", threshold: " << quantizationIntervalAsymmetryThreshold << std::endl;