量化感知訓練

由 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 中進行評估。

範例

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

  • MNIST 手寫數字分類工作上使用量化的 CNN 模型:程式碼

如需類似內容的背景資訊,請參閱《神經網路的量化和訓練,以實現高效能的純整數算術推論》論文。本文介紹此工具使用的一些概念。實作並不完全相同,而且此工具中還使用了其他概念 (例如,每軸量化)。