vai_q_pytorch 快速微调 - 3.5 简体中文

Vitis AI 用户指南 (UG1414)

Document ID
UG1414
Release Date
2023-09-28
Version
3.5 简体中文

通常量化后存在少量精度损失,但特定网络(如 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。