一般的に量子化後の精度ロスはわずかとなりますが、MobileNet などの一部のネットワークでは、大きくなる可能性があります。このような状況では、まず最初に高速微調整を試します。高速微調整を実行しても満足のいく結果が得られない場合は、QAT を使用して、量子化モデルの精度をさらに向上させることができます。
QAT API には、モデルのトレーニングのための必要条件がいくつかあります。
- 量子化されるすべての動作は、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
重要: 量子化されるモジュールをフォワード パス内で複数回呼び出すことはできません。 - 量子化されるネットワークの始めと終わりに、
pytorch_nndct.nn.QuantStub
およびpytorch_nndct.nn.DeQuantStub
を使用します。ネットワークは、ネットワーク全体でも部分的なサブネットワークでもかまいません。