一般的に、量子化はわずかな精度ロスを引き起こす可能性がありますが、MobileNet などの一部のネットワークでは、この精度ロスが大きくなる可能性があります。そのような場合、まずは高速微調整を試してみることを推奨します。高速微調整の結果が十分でない場合、量子化認識トレーニング (QAT) を使用すると、量子化されたモデルの精度をさらに高めることができます。
ただし、QAT API を使用してモデルをトレーニングするには特定の要件が存在します。量子化されるすべての動作は、torch 関数や Python 演算子ではなく、torch.nn.Module
オブジェクトのインスタンスでなければなりません。たとえば、
'+'
を使用して 2 つのテンソルを追加することは PyTorch では一般的ですが、QAT ではサポートされていません。代わりに、'+'
を pytorch_nndct.nn.modules.functional.Add
に置き換えます。次の表に、置き換えが必要な動作のリストを示します。
動作 | 置換対象 |
---|---|
+
|
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
を使用します。ネットワークは、全体でも部分的なサブネットワークでもかまいません。