模型量化Calibration

  • 量化校準過程(預處理階段),我們使用驗證集中的一小部分圖片(通常爲整個數據集的 1-5%)來收集數據分佈的信息,包括最小值 / 最大值、基於熵理論的最佳閾值、基於對稱量化的量化因子等。最終,這些量化參數會被記錄在新生成的量化模型中。
  • Calibration

           如果要讓最後的精度損失不大,是要考慮一些先驗知識的,這個先驗知識就是每一層在 FP32精度下的激活值分佈,只有根據這個才能找到更加合理的 閾值|T|。也就是說首先得有一個以FP32精度訓練好的模型。基本上現有的深度學習框架都是默認 FP32精度的,有些模型還支持FP16精度訓練,貌似 Caffe2和MXNet是支持FP16的,其他的不太清楚。所以基本上只要沒有特別設定,訓練出來的模型肯定是 FP32 的。

    那激活值分佈如何得到?難道我們要將FP32的模型先在所有的測試集(或驗證集)上跑一邊記錄下每一層的FP32激活值,然後再去推斷 |T|?

    這裏的做法是 從驗證集 選取一個子集作爲校準集(Calibration Dataset ),校準集應該具有代表性,多樣性,最好是驗證集的一個子集,不應該只是分類類別的一小部分。激活值分佈就是從校準集中得到的。

    按照NVIDIA 官方的說法

    Note: The calibration set must be representative of the input provided to TensorRT at runtime; for example, for image classification networks, it should not consist of images from just a small subset of categories. For ImageNet networks, around

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章