模型压缩高达75%,推理速度提升超20%,百度Paddle Lite v2.3正式发布
如今,諸如計算機視覺、智能語音交互等基于深度學習的AI技術,在滿足日常應用層面上已經非常成熟。比如,人臉識別閘機在機場、地鐵、辦公樓、學校等地方隨處可見。什么都不用帶,只要刷個臉就行,方便快捷又省事!
當有人經過閘機時,可以在0.1-0.3秒內完成人臉實時跟蹤,并在0.2秒內完成高安全性的靜默活體檢測及人臉比對,如此高效的響應速度,你知道是怎么做到的嗎?
目前深度學習在各個領域輕松碾壓傳統算法,不過真正用到實際項目中卻面臨兩大問題:計算量巨大;模型占用很高的內存(深度學習模型可能會高達幾百M)。
為了更好地應對這些實際業務需求,解決終端系統資源有限等問題,百度深度學習平臺飛槳(PaddlePaddle)對端側推理引擎Paddle Lite進行了新一輪升級,v2.3版本正式全新上線!
Paddle Lite v2.3新功能包括:
支持“無校準數據的訓練后量化”方法,模型壓縮高達75%;
優化網絡結構和OP,ARM CPU推理速度最高提升超20%;
簡化模型優化工具操作流程,支持一鍵操作,用戶上手更容易。
此次升級帶來了以下幾個方面的變化:
?支持“無校準數據的訓練后量化”方法?
?模型壓縮高達75%?
在手機等終端設備上部署深度學習模型,通常要兼顧推理速度和存儲空間。一方面要求推理速度越快越好,另一方面要求模型更加的輕量化。為了解決這一問題,模型量化技術尤其關鍵。
模型量化是指使用較少比特數表示神經網絡的權重和激活,能夠大大降低模型的體積,解決終端設備存儲空間有限的問題,同時加快了模型推理速度。將模型中特定OP權重從FP32類型量化成INT8/16類型,可以大幅減小模型體積。經驗證,將權重量化為INT16類型,量化模型的體積降低50%;將權重量化為INT8類型,量化模型的體積降低75%。?
Paddle Lite結合飛槳量化壓縮工具PaddleSlim,為開發者提供了三種產出量化模型的方法:量化訓練、有校準數據的訓練后量化和無校準數據的訓練后量化。
其中“無校準數據的訓練后量化”是本次Paddle Lite新版本重要新增內容之一。
圖1三種產出量化模型方法的處理示意圖
“無校準數據的訓練后量化”方法,在維持精度幾乎不變的情況下,不需要樣本數據,對于開發者來說使用更簡便,應用范圍也更廣泛。
當然,如果希望同時減小模型體積和加快模型推理速度,開發者可以嘗試采用PaddleSlim“有校準數據的訓練后量化”方法和“量化訓練”方法。
PaddleSlim除了量化功能以外,還集成了模型壓縮中常用的剪裁、蒸餾、模型結構搜索、模型硬件搜索等方法。更多詳細的介紹,請參見Github:
https://github.com/PaddlePaddle/PaddleSlim
下面以MoblieNetV1、MoblieNetv2和ResNet50模型為例,介紹本方法所獲得的效果。
圖2 “無校準數據的訓練后量化”方法產出的量化模型體積對比圖
由圖2可知,INT16格式的量化模型,相比FP32,模型體積降低50%;INT8 格式的量化模型,相比FP32,模型體積降低75%。
圖3 “無校準數據的訓練后量化”方法產出的量化模型準確率對比圖
由圖3可知,INT16格式的量化模型,相比FP32,準確率不變;INT8格式的量化模型,相比FP32,準確率僅微弱降低。
?ARM CPU推理速度最高提升超20%?
Paddle Lite v2.3在ARM CPU性能優化方面的主要更新包括:
針對Kernel Size為3*3的Conv,實現Winograd方法,包括F(6,3)和F(2, 3)。因Winograd相比普通算法從計算量上有大幅減少,該實現可以明顯提升有相關OP的模型性能,比如ResNet50和SqueezeNet;
針對Conv后激活為Relu6 或是LeakyRelu的模型,添加Conv+Relu6/LeakyRelu 融合,從而可以減少單獨的激活函數需要的訪存耗時;
針對PaddlePaddle1.6 OP升級,如支持任意Padding的Conv和Pooling,Paddle Lite增加相關支持。該工作使得Tensorflow模型轉換時,一個Tensorflow Conv 對應一個Paddle Conv, 而非Padding+Conv 兩個OP,從而可以提升Tensorflow模型的推理性能。
圖4給出了Caffe框架的MobileNetV1、MobileNetV2 和ResNet50三個模型在Paddle Lite,NCNN和MNN框架上的推理時延對比圖。
圖4 Caffe框架模型的推理時延對比
由圖4可知,Paddle Lite性能整體優于其他框架。如ResNet50模型,在高通驍龍845上,Paddle Lite相比其他框架,比MNN快10.259%,比NCNN快17.094%。
對于ONNX 公開模型如ShuffleNet、SqueezeNet和ResNet50, 在Paddle Lite、MNN和NCNN框架進行推理時延對比,其結果如圖5所示。
圖5 ONNX框架模型的推理時延對比
由圖5可知,Paddle Lite性能整體優于其他框架。如ShuffleNet模型,在高通驍龍845上,Paddle Lite相比其他框架,比MNN快21.185%,比NCNN快26.36%。?
Tensorflow公開模型,比如MnasNet、 MobileNetV1和ResNet101,Paddle Lite與MNN推理框架在推理時延性能指標上進行對比,結果如圖6所示。
圖6 Tensorflow框架模型的推理時延對比
由圖6可知,Paddle Lite性能整體優于MNN框架。如MnasNet模型,在高通驍龍855上,Paddle Lite比MNN快12.06%;在高通驍龍845上,Paddle Lite比MNN快18.91%;在高通驍龍835上,Paddle Lite比MNN快18.61%。
新版本更詳細的性能數據,請參見GitHub的Benchmark。
?簡化模型優化工具操作流程?
?支持一鍵操作,用戶上手更容易?
對于第三方來源(Tensorflow、Caffe、ONNX)模型,一般需要經過兩次轉化才能獲得Paddle Lite的優化模型。先使用x2paddle工具將第三方模型轉化為PaddlePaddle格式,再使用模型優化工具轉換為Padde Lite支持的模型。同時,轉換后的Paddle Lite模型,通常包括模型結構和參數兩個文件。操作繁瑣,用戶體驗不太好。
針對上述問題,Paddle Lite v2.3對原模型優化工具model_optimize_tool 進行了升級,推出版模型優化工具——opt。opt包括以下三個亮點:
提供一鍵式腳本(auto_transformer.sh),支持一鍵完成從各類框架模型到Paddle Lite模型(含OP算子融合、內存復用等優化操作)的所有優化處理操作;
優化后的模型最終只生成一個.nb文件,此文件包含模型網絡結構和參數信息。同時提供加載模型.nb文件的API接口:set_model_from_file(nb_path),接口的具體內容請見【Model Load API】。原有的模型加載方式仍然支持;
提供豐富的日志信息,比如支持查看某個模型用到哪些算子;還支持查看Paddle Lite支持哪些硬件,以及這些硬件分別支持哪些算子(如圖7所示),進而了解Paddle Lite對模型的支持情況。
圖7 日志信息
關于opt的更詳細介紹,請參見GitHub的opt工具介紹與使用。
?其他升級?
1.文檔官網升級
為了提高文檔可讀性、改善文檔的視覺效果、方便用戶快速查找文檔并輕松上手使用Paddle Lite,對Paddle Lite文檔進行了全面升級。文檔目錄清晰可見,搜索功能更強大、為用戶提供了更好的閱讀體驗。
圖8 新文檔界面示意圖
同時,Paddle Lite v2.3完善了部分文檔內容,并新增一些使用文檔,如“有校準數據的訓練后量化方法”、“無校準數據的訓練后量化方法”使用文檔等。
2.Paddle Lite Demo倉庫的案例升級
對現有Paddle Lite Demo倉庫的案例進行了內容升級,并新增了Demo。例如在Android Demo中,新增人臉檢測(face-detection)Demo、YOLOv3目標檢測Demo和人像分割(Human-Segment)Demo。用戶可以方便地根據Demo進行實驗并參考實現新應用的開發。另外,在Paddle Lite倉庫下的CXX Demo庫,新增了口罩識別案例,為此次疫情做些力所能及的貢獻。感興趣的小伙伴們可以在Paddle Lite倉庫下載口罩識別Demo,進行實驗。
圖9 人臉檢測-Android Demo
圖10 人像分割- Android Demo
圖11 口罩識別展示
同時,為了提高API接口易用性,升級了C++ API接口和Java API接口。在Java API接口,新增設置和返回數據類型,以支持不同類型的輸入。如果您想了解更多關于Paddle Lite的相關內容,請參閱以下文檔。
Paddle Lite的Github鏈接:
https://github.com/PaddlePaddle/Paddle-Lite
Paddle Lite的文檔鏈接:
https://paddle-lite.readthedocs.io/zh/latest/index.html
Paddle Lite Demo的鏈接:
https://github.com/PaddlePaddle/Paddle-Lite-Demo
Paddle Lite口罩識別Demo:
https://github.com/PaddlePaddle/Paddle-Lite/tree/develop/lite/demo/cxx
Benchmark:
https://paddle-lite.readthedocs.io/zh/latest/benchmark/benchmark.html
auto_transformer.sh:
https://github.com/PaddlePaddle/Paddle-Lite/blob/release/v2.3/lite/tools/auto_transform.sh
Model Load API:
https://paddle-lite.readthedocs.io/zh/latest/api_reference/cxx_api_doc.html#set-model-from-file-model-dir
opt工具介紹與使用:
https://paddle-lite.readthedocs.io/zh/latest/user_guides/model_optimize_tool.html
PaddlePaddle的Github鏈接:
https://github.com/paddlepaddle
如果使用過程中遇到任何問題,大家可通過Paddle Lite官方QQ群與開發人員進行技術交流及問題反饋。
飛槳Paddle Lite官方QQ群(群號696965088):
????
現在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱我們的專欄吧
關于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的模型压缩高达75%,推理速度提升超20%,百度Paddle Lite v2.3正式发布的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国第三大核电投资运营商,国家电投核电资
- 下一篇: 二值神经网络(Binary Neural