vai_q_pytorch QAT 要求 - 3.5 简体中文

Vitis AI 用户指南 (UG1414)

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

通常,量化可能会造成轻微的精度损失,但对于某些网络(如 MobileNet),精度损失可能更大。在这种情况下,建议先尝试快速微调。如果快速微调不能产生令人满意的结果,量化感知训练 (QAT) 可以进一步提高量化模型的精度。

不过,使用 QAT API 训练模型有具体的要求。所有要量化的运算都必须是 torch.nn.Module 对象的实例,而不是 Torch 函数或 Python 运算符。例如,在 PyTorch 中使用 '+' 添加两个张量很常见,但 QAT 却不支持。请改为将 '+' 替换为 pytorch_nndct.nn.modules.functional.Add。下表列出了需替换的运算。

表 1. 运算替换映射
运算 替换
+ pytorch_nndct.nn.modules.functional.Add
- pytorch_nndct.nn.modules.functional.Sub
torch.add pytorch_nndct.nn.modules.functional.Add
torch.sub pytorch_nndct.nn.modules.functional.Sub
重要: 在前传中由于量化信息冲突,无法多次调用要量化的模块。
在要量化的网络的头尾使用 pytorch_nndct.nn.QuantStubpytorch_nndct.nn.DeQuantStub。该网络可以是完整子网络,也可以是部分子网络。