深度學習模型剪枝 量化和TensorRT推理

2021-10-10 09:30:30 字數 2321 閱讀 9394

rethinking the value of network pruning這篇文獻主要介紹了以下幾種剪枝演算法,並在github上開源了**,在imagenet和cifar兩個資料集上進行了測試,**也驗證了對比了對剪枝模型進行fine tune和根據剪枝後的網路結構從頭訓練網路的準確率,在作者提供的準確率中,一般情況下,對於分類網路,從頭訓練的準確率比剪枝後fine tune後的準確率高。

剪枝方法

參考文獻

github

剪枝原理

l1-norm based filter pruning

pruning filters for efficient convnets

l1-norm-pruning

在每乙個卷積層,根據卷積核的權重值的l1 norm大小,修剪掉相應百分比的通道數。

thinet

thinet: a filter level pruning method for deep neural network compression

剪枝時,不根據當前層進行剪枝,而是修剪去對下一卷積層啟用值影響最小的權重值。

regression based feature reconstruction

channel pruning for accelerating very deep neural networks

根據lasso回歸演算法選出有代表性的卷積層通道,減枝去掉冗餘通道,使用最小二乘法重建剩餘通道。

剪枝方法

參考文獻

github

剪枝原理

network slimming

(1) learning efficient convolutional networks through network slimming

(1) network-slimming

(2)

在剪枝時,對bn層的gamma引數進行懲罰進行稀疏訓練,剪枝時選擇稀疏訓練後bn層gamma值較大的引數進行保留

sparse structure selection

data-driven sparse structure selection for deep neural networks

除了對通道進行稀疏訓練,還可以對殘差模組進行稀疏訓練。

def updatebn():

for m in model.modules():

if isinstance(m, nn.batchnorm2d):

m.weight.grad.data.add_(args.s*torch.sign(m.weight.data))

參考連線:8-bit inference with tensorrt

動態範圍

最小精度

fp32

-3.4 x 1038 ~ +3.4 x 1038

1.4 x 10-45

fp16

-65504 ~ +65504

5.96 x 10-8

int8

-128 ~ +127

1公式:

tensor values = fp32 scale factor * int8 array

根據量化公式僅需求fp32 scale factor即可進行int8量化,那麼如何求fp32 scale factor?

從上圖中可以看出,有兩種int8量化方法,一種是非飽和對映(左),另一種是飽和對映(右)。經過驗證,非飽和對映會造成嚴重的準確率損失,原因是由於卷積層計算的正負分布很不均勻,如果按照對稱非飽和對映(原意是為了盡可能多地保留原資訊)的話,那麼+max那邊有一塊區域就浪費了,也就是說scale到int8後,int8的動態範圍就更小了,舉個極限的例子就是量化後正的樣本沒有,負的全部扎堆在乙個很小的值附近,這樣會造成嚴重的精度損失。飽和對映方法是先找乙個閾值t,將低於最低閾值的值全部都飽和對映到-127上,如右上圖的左邊的三個紅色的點。

1. 標定步驟:

一般來說,整個標定過程需要幾分鐘的時間

2. 標定資料集選擇:

深度學習模型pytorch訓練並轉onnx與tensorrt部署

darknet yolov4模型轉onnx轉tensorrt部署

yolov5 pytorch模型轉tensorrt

cente***ce模型轉tensorrt

retinaface mxnet模型轉onnx轉tensorrt

深度學習baseline模型 深度學習模型訓練流程

工作中訓練了很多的深度學習模型,目前到了上公升到方 的角度來看了。日常工作中有的人可能已經在遵循方 做事,可能自己沒有注意,有的人可能沒有遵循方 在做事,雖然可能最後的結果差不多,但花費的時間和精力應該會差別很大,當然這是我自己的感受。我們不必完全按照方 來做,但基本流程跟方 應該一致。下面的具體步...

模型量化 對稱量化和非對稱量化

本文的模型量化是優化深度學習模型推理過程的記憶體容量和記憶體頻寬問題的概念,通過將模型引數的浮點數型別轉換稱整型儲存的一種模型壓縮技術。以可以接受的精度損失換取更少的儲存開銷和頻寬需求,更快的計算速度,更低的能耗與占用面積。比如int8量化,就是讓原來32bit儲存的數字對映到8bit儲存。int8...

學習筆記 深度學習之通道剪枝

最近剛接觸深度學習專案,負責網路模型壓縮與加速。基於自己的理解,寫一下對通道剪枝的理解。博主主要通過敘述幫助你理解為什麼要進行通道剪枝,本文涉及的數學理論知識較少,希望閱讀本文後能幫助你建立乙個概念,我為什麼要幹這件事?以及這件事幹了有意義嗎?文中有出錯的地方,歡迎批評指正。通道剪枝,顧名思義,就是...