隨著深度學習技術滲透入越來越多領域,人工智慧在邊緣側的大規模應用被提上日程。尤其這兩年人工智慧-計算機視覺方向在安全生產、工業質檢、智慧型硬體等應用場景中在廣泛應用,這些應用場景往往對效能及資料安全有苛刻的要求,故而在邊緣計算、移動終端、嵌入式終端的產品落地也隨之進入白熱化階段。
終端落地很重要的兩個指標依舊是推理時間和儲存開銷。網路模型壓縮的需求越來越大,模型量化應運而生。本篇我們將**模型量化的概念原理、優缺點及easydl-easyedge模型量化的實現方法。
所謂量化,就是把模型引數從浮點數轉換成整數的一種模型壓縮技術。工業界量化一般指int8,8表示儲存乙個權重元素所需的位數。把fp32的值經過線性變換轉換成int8,網路中耗時的卷積層計算就成了整數的計算,運算量將大大降低,int8 使用的位元數只有 fp32的25%,模型推理所佔的記憶體也隨之降低。
用我們最日常的邊緣裝置——手機來舉個例子。
easydl-easyedge量化從演算法上可以分為訓練後量化和量化訓練,根據目標端模型的不同又可以分為paddleslim、openvino、nnie和tensorrt的量化
量化是從r(fp32)到q(int8)的線性對映。
r和q的關係如下:
量化引數:
• 縮放因子(scale):s
• 偏移量(offset):z
如何確定縮放因子和偏移量的值?目前easydl-easyedge採用的方法有:
• abs_max: ±abs_max 對映為±127,偏移量z恒為0(paddleslim量化)
• min_max: min對映為-127, max對映為127,偏移量需要計算(openvino量化)
abs_max對映說明示意圖
min_max對映說明示意圖
easydl-easyedge量化採用了訓練後量化和量化訓練兩種演算法。
•訓練後量化:固定權重值,將權重提前量化, 權重進行的是逐通道量化——以通道為單位,每個channel單獨使用一組s和z;使用少量校準資料,在校準過程中觀察模型的行為來計算啟用張量的比例因子和偏差。整個量化過程最快只需2分鐘。
量化訓練:權重需要訓練學習(fine-tune),採用量化訓練得到的int8模型在效果上通常會比訓練後量化的模型更好,但量化過程需要的時間也會稍微長一些。
目前在easydl-easyedge的多種部署方式裡均可以獲取量化加速模型的服務。比如在本地部署裡,選擇通用小型裝置獲取arm加速版本或選擇伺服器獲取cpu加速版等等。
在裝置上使用量化後的模型,會發現裝置功耗更低、推理更快。比如使用easydl經典版高精度分類模型,在通用 x86 cpu 上單張推理時間從 128ms 縮短至 30ms,高效能分類模型單張推理時間從 99ms 縮短至 15ms,效能大幅提公升。
x86 cpu版sdk量化前後效能資料對比表
而整個生成量化模型的過程你都無需費神,只要交給easydl-easyedge!快來一起體驗量化帶來的變化吧!
easydl零門檻ai開發平台與全功能ai開發平台bml也均整合了easyedge的全部服務,端到端實現從模型開發到模型量化,輸出離線sdk的一站式開發流程,可便捷獲取高精度高效能的離線服務。
keras模型量化
模型量化的本質就是將模型中的引數按照一定的規則 把32位或者64位浮點數 轉化位16位浮點數或者8位定點數。這裡我用keras和numpy實現了16位和8位的量化,未考慮量化的科學合理性,僅僅是搞清楚量化本質的一次實驗。量化 coding utf 8 project tf2learning file...
模型輕量化
1.輕量化網路 參考 mobilenet v1核心是把卷積拆分為depthwise pointwise兩部分。圖5為了解釋mobilenet,假設有 的輸入,同時有 個的卷積。如果設定 且,那麼普通卷積輸出為 如圖6。圖6 普通3x3卷積,k 2 depthwise是指將 的輸入分為 組,然後每一組...
模型壓縮技術,卷積核解讀
1.compressing and regularizing deep neural networks 1 權重值的大小反映了連線的重要性 刪除不夠重要的連線 called pruning 2 權重值輕微的變動對模型的 能力影響甚微 權重共享 值接近的權重共享同乙個權重值,通過索引表查詢 帶來的好處...