量化感知訓練

由 TensorFlow 模型最佳化維護

量化有兩種形式:訓練後量化和量化感知訓練。從 訓練後量化開始,因為它更容易使用,但量化感知訓練通常更適合模型準確度。

本頁面提供量化感知訓練的總覽,以協助您判斷其如何符合您的使用案例。

總覽

量化感知訓練會模擬推論時期的量化,建立一個模型,下游工具將使用該模型來產生實際量化的模型。量化模型使用較低的精確度 (例如 8 位元而不是 32 位元浮點數),從而在部署期間帶來好處。

使用量化部署

量化透過模型壓縮和減少延遲帶來改進。使用 API 預設值,模型大小縮小 4 倍,而且我們通常在測試的後端中看到 CPU 延遲改善 1.5 到 4 倍。最終,可以在相容的機器學習加速器 (例如 EdgeTPU 和 NNAPI) 上看到延遲改善。

這項技術已在語音、視覺、文字和翻譯使用案例的生產環境中使用。程式碼目前支援這些模型的一個子集

試用量化和相關硬體

使用者可以設定量化參數 (例如位元數) 以及在某種程度上設定底層演算法。請注意,如果從 API 預設值進行這些變更,目前沒有支援部署到後端的路徑。例如,TFLite 轉換和核心實作僅支援 8 位元量化。

針對此組態的 API 屬於實驗性質,不受回溯相容性約束。

API 相容性

使用者可以使用下列 API 套用量化

  • 模型建構:keras,僅限循序和函式模型。
  • TensorFlow 版本:適用於 tf-nightly 的 TF 2.x。
  • TensorFlow 執行模式:立即執行

我們計畫在以下領域新增支援

  • 模型建構:釐清子類別模型如何幾乎不受支援
  • 分散式訓練:tf.distribute

一般支援矩陣

以下領域提供支援

  • 模型涵蓋範圍:使用允許清單圖層的模型、在 Conv2D 和 DepthwiseConv2D 圖層之後的 BatchNormalization,以及在有限情況下使用的 Concat
  • 硬體加速:我們的 API 預設值與 EdgeTPU、NNAPI 和 TFLite 後端等上的加速相容。請參閱藍圖中的注意事項。
  • 使用量化部署:目前僅支援卷積層的每軸量化,而非每張量化。

我們計畫在以下領域新增支援

  • 模型涵蓋範圍:擴充以包含 RNN/LSTM 和一般 Concat 支援。
  • 硬體加速:確保 TFLite 轉換器可以產生完整整數模型。如需詳細資訊,請參閱 此問題
  • 試用量化使用案例
    • 試用跨越 Keras 圖層或需要訓練步驟的量化演算法。
    • 穩定 API。

結果

使用工具進行圖片分類

模型 非量化 Top-1 準確度 8 位元量化準確度
MobilenetV1 224 71.03% 71.06%
Resnet v1 50 76.3% 76.1%
MobilenetV2 224 70.77% 70.01%

模型已在 Imagenet 上測試,並在 TensorFlow 和 TFLite 中評估。

圖片分類技術

模型 非量化 Top-1 準確度 8 位元量化準確度
Nasnet-Mobile 74% 73%
Resnet-v2 50 75.6% 75%

模型已在 Imagenet 上測試,並在 TensorFlow 和 TFLite 中評估。

範例

除了量化感知訓練範例之外,另請參閱下列範例

  • CNN 模型在 MNIST 手寫數字分類任務上使用量化:程式碼

如需類似內容的背景資訊,請參閱《Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference論文。本文介紹了此工具使用的一些概念。實作並不完全相同,而且此工具中還使用了其他概念 (例如每軸量化)。