尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️
11月1日,騰訊AI Lab在南京舉辦的騰訊全球合作夥伴論壇上宣布正式開源「PocketFlow」項目, 該項目是一個自動化深度學習模型壓縮與加速框架,整合多種模型壓縮與加速算法並利用強化學習自動搜尋合適壓縮參數,解決傳統深度學習模型由於模型體積太大,計算資源消耗高而難以在移動設備上部署的痛點,同時極大程度的降低了模型壓縮的技術門檻,賦能移動端AI應用開發。
這是一款適用於各個專業能力層面開發者的模型壓縮框架,基於Tensorflow開發,集成了當前主流與AI Lab自研的多個模型壓縮與訓練算法,並採用超參數優化組件做到了全程自動化托管式的模型壓縮。開發者無需了解具體模型壓縮算法細節,即可快速地將AI技術部署到移動端產品上,做到用戶數據的本地高效處理。
目前該框架在騰訊內部已對多個移動端AI應用模型進行壓縮和加速,並取得了令人滿意的效果, 對應用整體的上線效果起到了非常重要的作用。
項目訪問地址:
https://github.com/Tencent/PocketFlow
隨著移動互聯網的普及和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-V1、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倍以上的加速, 為項目的移動端落地起到了決定性的作用。