vai_q_pytorch QAT の要件 - 2.5 日本語

Vitis AI ユーザー ガイド (UG1414)

Document ID
UG1414
Release Date
2022-06-15
Version
2.5 日本語

一般的に量子化後の精度ロスはわずかとなりますが、MobileNet などの一部のネットワークでは、大きくなる可能性があります。このような状況では、まず最初に高速微調整を試します。高速微調整を実行しても満足のいく結果が得られない場合は、QAT を使用して、量子化モデルの精度をさらに向上させることができます。

QAT API には、モデルのトレーニングのための必要条件がいくつかあります。

  1. 量子化されるすべての動作は、torch 関数や Python 演算子ではなく、torch.nn.Module オブジェクトのインスタンスでなければなりません。たとえば、PyTorch では一般的に ‘+’ を使用して 2 つのテンソルを加算します。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
    重要: 量子化されるモジュールをフォワード パス内で複数回呼び出すことはできません。
  2. 量子化されるネットワークの始めと終わりに、pytorch_nndct.nn.QuantStub および pytorch_nndct.nn.DeQuantStub を使用します。ネットワークは、ネットワーク全体でも部分的なサブネットワークでもかまいません。