24.02.1
|
Go to the documentation of this file.
24 #ifndef ARM_COMPUTE_QUANTIZATION_INFO_H
25 #define ARM_COMPUTE_QUANTIZATION_INFO_H
116 const std::vector<float> &
scale()
const
124 const std::vector<int32_t> &
offset()
const
134 return _scale.empty() && _offset.empty();
143 uqinfo.
scale = _scale.empty() ? 0 : _scale[0];
144 uqinfo.
offset = _offset.empty() ? 0 : _offset[0];
150 std::vector<float> _scale;
151 std::vector<int32_t> _offset;
201 template <
typename QUANTIZED_TYPE = u
int8_t>
204 static_assert(std::is_same<QUANTIZED_TYPE, uint8_t>::value || std::is_same<QUANTIZED_TYPE, int8_t>::value,
205 "quantized type should be either uint8_t or int8_t.");
218 return static_cast<QUANTIZED_TYPE
>(arm_compute::utility::clamp<decltype(quantized), QUANTIZED_TYPE>(quantized));
229 static inline QUANTIZED_TYPE
239 return static_cast<QUANTIZED_TYPE
>(arm_compute::utility::clamp<decltype(quantized), QUANTIZED_TYPE>(quantized));
250 static inline QUANTIZED_TYPE
256 return static_cast<QUANTIZED_TYPE
>(arm_compute::utility::clamp<decltype(quantized), QUANTIZED_TYPE>(quantized));
281 return (
static_cast<int>(value) - uqinfo.
offset) * uqinfo.
scale;
293 template <
typename INFO_TYPE>
308 template <
typename INFO_TYPE>
310 const INFO_TYPE &
qinfo,
326 quantized = std::max(-128, std::min(quantized, 127));
341 quantized = std::max(-128, std::min(quantized, 127));
352 template <
typename INFO_TYPE>
365 template <
typename INFO_TYPE>
405 return value *
scale;
417 return value *
scale;
446 quantized = arm_compute::utility::clamp<int, int16_t>(quantized);
499 quantized = arm_compute::utility::clamp<int, uint16_t>(quantized);
572 float scale_to_apply = uqinfo_out.
scale;
573 int32_t offset_to_apply = uqinfo_out.
offset;
575 scale_to_apply /= uqinfo_in.
scale;
579 offset_to_apply -=
static_cast<int32_t
>(
static_cast<float>(uqinfo_in.
offset) * uqinfo_in.
scale / uqinfo_out.
scale);
float dequantize_qasymm8(uint8_t value, const INFO_TYPE &qinfo)
Dequantize a value given an unsigned 8-bit asymmetric quantization scheme.
QuantizationInfo() noexcept
Default constructor.
Quantization information.
int16_t quantize_qsymm16(float value, const UniformQuantizationInfo &qinfo, RoundingPolicy rounding_policy=RoundingPolicy::TO_NEAREST_UP)
Quantize a value given a 16-bit symmetric quantization scheme.
int8_t quantize_qsymm8(float value, const QuantizationInfo &qinfo)
Quantize a value given a 8-bit symmetric quantization scheme.
uint8_t quantize_qasymm8(float value, const INFO_TYPE &qinfo, RoundingPolicy rounding_policy=RoundingPolicy::TO_NEAREST_UP)
Quantize a value given an unsigned 8-bit asymmetric quantization scheme.
QuantizationInfo(std::vector< float > scale)
Construct quantization info.
QuantizationInfo(float scale, int offset)
Construct quantization info.
bool operator==(const Dimensions< T > &lhs, const Dimensions< T > &rhs)
Check that given dimensions are equal.
static QUANTIZED_TYPE quantize(float value, const QuantizationInfo &qinfo, RoundingPolicy rounding_policy=RoundingPolicy::TO_NEAREST_UP)
Quantize a value given a 8-bit asymmetric quantization scheme.
@ TO_NEAREST_UP
Rounds to nearest value; half rounds away from zero.
UniformQuantizationInfo compute_requantization_scale_offset(const UniformQuantizationInfo &uqinfo_in, const UniformQuantizationInfo &uqinfo_out)
#define ARM_COMPUTE_ERROR_ON(cond)
If the condition is true then an error message is printed and an exception thrown.
static QUANTIZED_TYPE quantize(float value, const UniformQuantizationInfo &qinfo)
Quantize a value given a 8-bit asymmetric quantization scheme.
static QUANTIZED_TYPE quantize(float value, const UniformQuantizationInfo &qinfo, RoundingPolicy rounding_policy)
Quantize a value given a 8-bit asymmetric quantization scheme using a specific rounding policy.
RoundingPolicy
Rounding method.
int8_t quantize_qasymm8_signed(float value, const INFO_TYPE &qinfo, RoundingPolicy rounding_policy=RoundingPolicy::TO_NEAREST_UP)
Quantize a value given a signed 8-bit asymmetric quantization scheme.
QuantizationInfo(std::vector< float > scale, std::vector< int32_t > offset)
Construct quantization info.
int round(float x, RoundingPolicy rounding_policy)
Return a rounded value of x.
const std::vector< float > & scale() const
Scale vector accessor.
uint16_t qasymm16_t
16 bit quantized asymmetric scalar value
__global uchar * offset(const Image *img, int x, int y)
Get the pointer position of a Image.
float dequantize_qasymm16(uint16_t value, const UniformQuantizationInfo &qinfo)
Dequantize a value given a 16-bit asymmetric quantization scheme.
float dequantize_qsymm16(int16_t value, const UniformQuantizationInfo &qinfo)
Dequantize a value given a 16-bit symmetric quantization scheme.
UniformQuantizationInfo uniform() const
Return per layer quantization info.
static float dequantize(QUANTIZED_TYPE value, const UniformQuantizationInfo &qinfo)
Dequantize a value given a 8-bit asymmetric quantization scheme.
int8_t qasymm8_signed_t
8 bit signed quantized asymmetric scalar value
int16_t qsymm16_t
16 bit quantized symmetric scalar value
float dequantize_qasymm8_signed(int8_t value, const INFO_TYPE &qinfo)
Dequantize a value given a signed 8-bit asymmetric quantization scheme.
Copyright (c) 2017-2024 Arm Limited.
bool empty() const
Indicates whether this QuantizationInfo has valid settings or not.
float dequantize(uint8_t value, float scale, int32_t offset)
Dequantize a value given an 8-bit asymmetric quantization scheme.
uint16_t quantize_qasymm16(float value, const UniformQuantizationInfo &qinfo, RoundingPolicy rounding_policy=RoundingPolicy::TO_NEAREST_UP)
Quantize a value given a 16-bit asymmetric quantization scheme.
int8_t quantize_qsymm8_per_channel(float value, const QuantizationInfo &qinfo, size_t channel_id=0)
Quantize a value given a 8-bit symmetric per channel quantization scheme.
uint8_t qasymm8_t
8 bit quantized asymmetric scalar value
QuantizationInfo(float scale)
Construct quantization info.
static float dequantize(QUANTIZED_TYPE value, const QuantizationInfo &qinfo)
Dequantize a value given a 8-bit asymmetric quantization scheme.
const QuantizationInfo qinfo
bool operator!=(const Dimensions< T > &lhs, const Dimensions< T > &rhs)
Check that given dimensions are not equal.
const std::vector< int32_t > & offset() const
Offset vector accessor.
float dequantize_qsymm8(int8_t value, const UniformQuantizationInfo &qinfo)
Dequantize a value given a 8-bit symmetric quantization scheme.
long lround(T value)
Round floating-point value with half value rounding away from zero and cast to long.