AIMET PyTorch Bias Correction API¶
User Guide Link¶
To learn more about this technique, please see Cross-Layer Equalization
Bias Correction API¶
-
aimet_torch.bias_correction.
correct_bias
(model, quant_params, num_quant_samples, data_loader, num_bias_correct_samples, conv_bn_dict=None, perform_only_empirical_bias_corr=True, layers_to_ignore=None)[source]¶ Corrects bias for each Conv layer of model (unless ignored). A combination of Analytical and Empirical Bias Correction is used i.e. all the layers which can be corrected using Analytical Bias Correction are corrected using Analytical Bias Correction and remaining layers are corrected using Empirical method.
Returns an in-place corrected floating point model
- Parameters
model (
Module
) – Model to be correctedquant_params (
QuantParams
) – Named tuple for quantization simulation for bias correctionnum_quant_samples (
int
) – number of samples of images to pass through quantization sim for bias correction.data_loader – data loader for the model
num_bias_correct_samples (
int
) – number of samples for Bias correctionconv_bn_dict (
Optional
[Dict
[Module
,ConvBnInfoType
]]) – Dict of conv and bn with information related to activation. If None, the function calc itperform_only_empirical_bias_corr (
bool
) – Default True. If true will perform only empirical Bias Corr for all layers irrespective of the fact that layer is eligible for Analytical Bias Corr.layers_to_ignore (
Optional
[List
[Module
]]) – list of layer names for which we need to skip bias correction.
ConvBnInfoType¶
-
class
aimet_common.bias_correction.
ConvBnInfoType
(input_bn=None, output_bn=None, in_activation_type=<ActivationType.no_activation: 0>, out_activation_type=<ActivationType.no_activation: 0>)[source]¶ Type for hoding convs with bn info and activation types Activation types supported are Relu and Relu6
- Parameters
input_bn – Reference to Input BatchNorm to layer
output_bn – Reference to Output BatchNorm to layer
in_activation_type (
ActivationType
) – Type of Activationout_activation_type (
ActivationType
) – Type of Activation
ActivationType¶
Quantization Params¶
-
class
aimet_torch.quantsim.
QuantParams
(weight_bw=8, act_bw=8, round_mode='nearest', quant_scheme=<QuantScheme.post_training_tf_enhanced: 2>, config_file=None)[source]¶ Data type to hold quantization related params.
Constructor
- Parameters
weight_bw (
int
) – Weight bitwidth (4-31) to use for quantizing layer weights. Default = 8act_bw (
int
) – Activation bitwidth(4-31) to use for quantizing layer activations. Default = 8round_mode (
str
) – Rounding mode. Supported options are ‘nearest’ or ‘stochastic’quant_scheme (
Union
[QuantScheme
,str
]) – Quantization scheme. Supported options are ‘tf_enhanced’ or ‘tf’ or using Quant Scheme Enum QuantScheme.post_training_tf or QuantScheme.post_training_tf_enhancedconfig_file (
Optional
[str
]) – Path to Configuration file for model quantizers
Code Example #1 Empirical Bias Correction¶
Load the model
model = MobileNetV2()
model.eval()
Apply Empirical Bias Correction
from aimet_torch import bias_correction
from aimet_torch.quantsim import QuantParams
params = QuantParams(weight_bw=4, act_bw=4, round_mode="nearest", quant_scheme='tf_enhanced')
# User action required
# The following line of code is an example of how to use the ImageNet data's validation data loader.
# Replace the following line with your own dataset's validation data loader.
data_loader = ImageNetDataPipeline.get_val_dataloader()
# Perform Empirical Bias Correction
bias_correction.correct_bias(model.to(device="cuda"), params, num_quant_samples=1000,
data_loader=data_loader, num_bias_correct_samples=512)
Code Example #2 Analytical + Empirical Bias correction¶
Load the model
model = MobileNetV2()
model.eval()
Find BN and Conv Modules
Find BN + Conv module pairs for analytical Bias Correction and remaining Conv modules for Empirical Bias Correction.
module_prop_dict = bias_correction.find_all_conv_bn_with_activation(model, input_shape=(1, 3, 224, 224))
Apply Analytical + Empirical Bias Correction
from aimet_torch import bias_correction
from aimet_torch.quantsim import QuantParams
params = QuantParams(weight_bw=4, act_bw=4, round_mode="nearest", quant_scheme='tf_enhanced')
# User action required
# The following line of code is an example of how to use the ImageNet data's validation data loader.
# Replace the following line with your own dataset's validation data loader.
data_loader = ImageNetDataPipeline.get_val_dataloader()
# Perform Bias Correction
bias_correction.correct_bias(model.to(device="cuda"), params, num_quant_samples=1000,
data_loader=data_loader, num_bias_correct_samples=512,
conv_bn_dict=module_prop_dict, perform_only_empirical_bias_corr=False)