通常量化后存在少量精度损失,但特定网络(如 MobileNet)可能发生更为显著的精度损失。在此类情况下,您可先尝试通过快速微调来提升量化模型的精度。如果快速微调方法仍无法得到令人满意的结果,可以考虑使用量化感知训练 (QAT) 来进一步提高量化模型的精度。QAT 包括利用量化感知优化进行模型训练,以提升量化状态下的精度。
AdaQuant 算法 #idz1605002441796__note1 使用一小部分未标记数据进行激活校准和权重微调。Vitis AI 量化器在“fast fine-tuning”下整合了将此算法。虽然快速微调速度稍慢,但能产生比训练后量化更好的性能。与量化感知训练 (QAT) 类似,每一轮快速微调都可能生成不同的结果。
快速微调并不包含模型训练,仅需有限次数的迭代即可。对于 ImageNet 数据集上的分类模型,实验中有 5120 张图像足矣。快速微调过程中使用的数据不需要注解。快速微调的主要要求是修改模型评估脚本;训练无需设置优化器。要使用快速微调,需要一个函数用于模型前传迭代,在此进程期间会调用该函数。建议使用原始推断代码进行重新校准以确保准确性。
您可在开源示例中找到完整示例。
# fast finetune model or load finetuned parameter before the test
if fast_finetune == True:
ft_loader, _ = load_data(
subset_len=5120,
train=False,
batch_size=batch_size,
sample_method='random',
data_dir=args.data_dir,
model_name=model_name)
if quant_mode == 'calib':
quantizer.fast_finetune(evaluate, (quant_model, ft_loader, loss_fn))
elif quant_mode == 'test':
quantizer.load_ft_param()
要对此 ResNet18 示例进行参数微调和重新校准,请运行以下命令:
python resnet18_quant.py --quant_mode calib --fast_finetune
要测试微调后的量化模型精度,请运行以下命令:
python resnet18_quant.py --quant_mode test --fast_finetune
要部署微调后的量化模型,请运行以下命令:
python resnet18_quant.py --quant_mode test --fast_finetune --subset_len 1 --batch_size 1 --deploy
注释: Itay Hubara 等,《Improving Post Training Neural Quantization: Layer-wise Calibration and Integer Programming》,arXiv:2006.10518, 2020。