11月1日,騰訊AI Lab在南京舉辦的騰訊全球合做夥伴論壇上宣佈正式開源「PocketFlow」項目, 該項目是一個自動化深度學習模型壓縮與加速框架,整合多種模型壓縮與加速算法並利用強化學習自動搜索合適壓縮參數,解決傳統深度學習模型因爲模型體積太大,計算資源消耗高而難以在移動設備上部署的痛點,同時極大程度的下降了模型壓縮的技術門檻,賦能移動端AI應用開發。git
這是一款適用於各個專業能力層面開發者的模型壓縮框架,基於Tensorflow開發,集成了當前主流與AI Lab自研的多個模型壓縮與訓練算法,並採用超參數優化組件實現了全程自動化託管式的模型壓縮。開發者無需瞭解具體模型壓縮算法細節,便可快速地將AI技術部署到移動端產品上,實現用戶數據的本地高效處理。github
目前該框架在騰訊內部已對多個移動端AI應用模型進行壓縮和加速,並取得了使人滿意的效果, 對應用總體的上線效果起到了很是重要的做用。算法
項目訪問地址:
https://github.com/Tencent/Po...小程序
自2016年騰訊首次在GitHub上發佈開源項目(https://github.com/Tencent),目前已累積開源覆蓋人工智能、移動開發、小程序等領域近60個項目。數組
隨着移動互聯網的普及和AI算法的越發成熟,移動端AI的需求和應用場景也越發豐富,如智能美顏,瘦身,手勢識別,場景識別,遊戲AI,視頻檢測,車載語音交互,智能家居,實時翻譯等。將模型部署在移動端代替服務器端能夠實現實時交互,在無網絡環境的狀況下也可正常運行,而且保護了數據的隱私和安全性,下降運維成本。而在移動端AI模型部署方面,小而快變成了模型推理最渴望的要求之一,由於小的模型可使得整個應用的存儲空間減少;而提升模型的推理速度則可使得整個模型應用場景的反應速度加快,同時也能夠在低配設備上取得很好的效果。所以,模型的推理速度逐漸已經成爲了各大AI應用市場競爭力上最重要的評測指標之一。然而每每訓練出來的模型推理速度或者尺寸大小不能知足需求,大部分開發者對極致的模型壓縮和加速方法又感到困惑。安全
PocketFlow的出現就是爲了解決這個令衆多AI應用開發者頭痛的問題。服務器
框架開源內容:
PocketFlow框架本次開源內容主要由兩部分組件構成,分別是模型壓縮/加速算法部分和超參數優化部分,具體結構以下圖所示:網絡
模型壓縮/加速算法部分包括多種深度學習模型壓縮和加速算法:框架
通道剪枝(channel pruning): 在CNN網絡中,經過對特徵圖中的通道維度進行剪枝,能夠同時下降模型大小和計算複雜度,而且壓縮後的模型能夠直接基於現有的深度學習框架進行部署。PocketFlow還支持通道剪枝的分組finetune/retrain功能,經過實驗咱們發現此方法可使本來壓縮後的模型精度有明顯的提高。運維
權重稀疏化(weight sparsification):經過對網絡權重引入稀疏性約束,能夠大幅度下降網絡權重中的非零元素個數;壓縮後模型的網絡權重能夠以稀疏矩陣的形式進行存儲和傳輸,從而實現模型壓縮。
權重量化(weight quantization):經過對網絡權重引入量化約束,能夠下降用於表示每一個網絡權重所需的比特數;咱們同時提供了對於均勻和非均勻兩大類量化算法的支持,能夠充分利用ARM和FPGA等設備的硬件優化,以提高移動端的計算效率,併爲將來的神經網絡芯片設計提供軟件支持。
網絡蒸餾(network distillation):對於上述各類模型壓縮組件,經過將未壓縮的原始模型的輸出做爲額外的監督信息,指導壓縮後模型的訓練,在壓縮/加速倍數不變的前提下都可以得到0.5%-2.0%不等的精度提高。
多GPU訓練(multi-GPU training):深度學習模型訓練過程對計算資源要求較高,單個GPU難以在短期內完成模型訓練,所以咱們提供了對於多機多卡分佈式訓練的全面支持,以加快使用者的開發流程。不管是基於ImageNet數據的Resnet-50圖像分類模型仍是基於WMT14數據的Transformer機器翻譯模型,都可以在一個小時內訓練完畢。
超參數優化(hyper-parameter optimization)部分能夠經過強化學習或者AutoML,在總體壓縮率必定的狀況下,搜索出每一層最合適的壓縮比例使得總體的精度最高。多數開發者對模型壓縮算法每每瞭解較少,調節壓縮算法參數須要長期的學習和實驗纔能有所經驗, 但超參數取值對最終結果每每有着巨大的影。PocketFlow的超參數優化部分正是幫助開發者解決了這一大痛點,而且經過實驗咱們發現,其優化結果也要好於專業的模型壓縮工程師手工調參的結果。其結構以下圖:
PocketFlow性能
經過引入超參數優化組件,不只避免了高門檻、繁瑣的人工調參工做,同時也使得PocketFlow在各個壓縮算法上全面超過了人工調參的效果。以圖像分類任務爲例,在CIFAR-10和ImageNet等數據集上,PocketFlow對ResNet和MobileNet等多種CNN網絡結構進行有效的模型壓縮與加速。
在CIFAR-10數據集上,PocketFlow以ResNet-56做爲基準模型進行通道剪枝,並加入了超參數優化和網絡蒸餾等訓練策略,實現了2.5倍加速下分類精度損失0.4%,3.3倍加速下精度損失0.7%,且顯著優於未壓縮的ResNet-44模型; 在ImageNet數據集上,PocketFlow能夠對本來已經十分精簡的MobileNet模型繼續進行權重稀疏化,以更小的模型尺寸取得類似的分類精度;與Inception-V一、ResNet-18等模型相比,模型大小僅爲後者的約20~40%,但分類精度基本一致(甚至更高)。
相比於費時費力的人工調參,PocketFlow框架中的AutoML自動超參數優化組件僅需10餘次迭代就能達到與人工調參相似的性能,在通過100次迭代後搜索獲得的超參數組合能夠下降約0.6%的精度損失;經過使用超參數優化組件自動地肯定網絡中各層權重的量化比特數,PocketFlow在對用於ImageNet圖像分類任務的MobileNet-v1模型進行壓縮時,取得了一致性的性能提高;用PocketFlow平均量化比特數爲8時,準確率不降反升,從量化前的70.89%提高到量化後的71.29%。
PocketFlow落地助力內部移動應用AI落地
在騰訊公司內部,PocketFlow框架正在爲多項移動端業務提供模型壓縮與加速的技術支持。例如,在手機拍照APP中,人臉關鍵點定位模型是一個經常使用的預處理模塊,經過對臉部的百餘個特徵點(如眼角、鼻尖等)進行識別與定位,能夠爲後續的人臉識別、智能美顏等多個應用提供必要的特徵數據。咱們基於PocketFlow框架,對人臉關鍵點定位模型進行壓縮,在保持定位精度不變的同時,大幅度地下降了計算開銷,在自己已經十分精簡的網絡上取得了1.3 ~ 2倍不等的加速效果,壓縮後的模型已經在實際產品中獲得部署。
在人體體態識別項目中,PocketFlow更是在知足上線精度的要求下,使得模型推理速度有3倍以上的加速, 爲項目的移動端落地起到了決定性的做用。