Paddle2ONNX最新升級:飛槳模型全面支持ONNX格式啦!

2021-02-13 百度AI

16年前的電影《功夫》可以說是家喻戶曉,並將武俠片推向了一個新的高潮。在電影中,街頭小混混阿星偶然間被打通了任督二脈,因善開悟,再有「如來神掌」的加持,讓他的武功變得登峰造極,最後從天而降,一掌擊敗了大反派火雲邪神。相信不少小夥伴們都因此萌生了武俠夢、功夫夢,夢想自己有一天也能「開掛」,變得天下無敵!

如果當時做個問卷調查,問獲得絕世武功的第一步需要什麼?即使很多人說不清楚任脈和督脈的位置,他們仍然會回答——打通任督二脈!

「只有打通任督二脈,才能加速真氣運行效率,從而獲得神功」已成為多數少俠們的共同認識。其實,這個道理同樣能應用於現實之中。比如,在人工智慧領域,開源開放非常普遍,只有打通壁壘,實現互通有無,才能促進發展的效率。

近期,飛槳進入了2.0時代,不僅 API 體系得到了全面升級,動態圖模式變得更加完備,為廣大開發者帶來「動靜統一的開發體驗」,還集成了最新版的 Paddle2ONNX 工具,進一步提升了框架的開放性。除了原先的 Paddle Inference 和 Paddle Lite 等高性能部署方案外,用戶還可以通過使用 paddle.onnx.export 接口,將模型保存為 ONNX 協議格式後進行部署,極大豐富了飛槳的軟硬體部署生態!

Paddle2ONNX 項目地址:

https://github.com/PaddlePaddle/Paddle2ONNX

ONNX(Open Neural Network Exchange)是一種針對機器學習所設計的開放式的文件格式,用於存儲訓練好的模型。它使得不同的人工智慧框架,可以採用相同格式存儲模型數據並交互。

簡而言之,ONNX 相當於是一套統一的深度學習模型格式。基於這一套統一的格式,很多廠商的硬體和軟體天然支持運行 ONNX 格式的模型。

關注飛槳的用戶此前就應該了解到,Paddle Lite 不僅可以支持飛槳原生模型部署,同時也支持 PyTorch 模型的部署,其技術路徑就是通過 PyTorch 導出 ONNX 格式模型,再通過 X2Paddle 轉換為飛槳模型格式進行部署。

不了解的童鞋快戳連結,了解 X2Paddle 項目:

https://github.com/PaddlePaddle/X2Paddle

飛槳作為國內最早開源的開源框架,在過去一年中技術生態迅猛發展,為開源社區貢獻多個模型套件。其中,目標檢測模型套件推出產業實踐最優模型 PP-YOLO,性能和精度都超過原生的 YOLO-V4;在文字識別方向,PP-OCR 在2020年一經開源,便吸引了大量開發者使用,多次登陸 GitHub 技術趨勢榜;另外,在多個國際權威語義評測中獲得冠軍的預訓練模型 ERNIE,也升級至2.0。飛槳進步,永不止步。為了幫助開發同學解決部署環境難題,飛槳也在不斷探索。

現在,飛槳與 ONNX 開源組織進行了合作,開源了 Paddle2ONNX 項目,並基於 Paddle2ONNX 與英特爾合作,打通了飛槳模型在 OpenVINO 上的部署推理。

本月,我們將發布 Paddle2ONNX 最新版本 V0.5,帶來更多重磅功能,覆蓋更多飛槳官方模型,期望通過 ONNX 這個橋梁,進一步推動飛槳、開發者和軟硬體廠商的合作!

‍‍‍‍‍‍‍‍‍‍‍ Paddle2ONNX 項目升級解讀 
基於飛槳框架2.0,新版本的 Paddle2ONNX 主要新增實現了以下重要功能。

在飛槳框架升級2.0後,框架已經內置 paddle.onnx.export 接口,用戶在代碼中可以調用接口以 ONNX 協議格式保存模型。此外,用戶已經保存的飛槳模型,也可以通過 Paddle2ONNX 加載後進行轉換。本文的使用教程部分,會附有針對動態圖和靜態圖模型的轉換方法,以供大家參考體驗。

新版本的 Paddle2ONNX 支持多達88個 Paddle OP 算子。在轉換過程中,支持用戶指定轉換為 ONNX 1到12任意版本的模型,提升模型的適配能力。

覆蓋 CV 和 NLP 領域主流模型,不僅支持 PP-YOLO 這樣模型新星的轉換,還開始支持 ERNIE 這樣 NLP 領域的王牌!它們均已支持轉為 ONNX 進行部署,有需求的同學快去試試吧!

此前就有部分用戶諮詢飛槳小哥哥:飛槳 PP-YOLO、ERNIE 等明星模型,能不能用 ONNX 方式來部署?現在小哥哥現身回答你!

本教程將向大家展示如何將飛槳官方內置的 MobileNetV2 動態圖模型,導出為 ONNX 格式的模型,並使用 ONNXRunTime 工具驗證模型的正確性。

使用飛槳框架2.0構建的動態圖模型,可以通過調用 paddle.onnx.export 接口,實現 ONNX 模型的快速導出。

import os
import time
import paddle
# 從模型代碼中導入模型
from paddle.vision.models import mobilenet_v2
# 實例化模型
model = mobilenet_v2()
# 將模型設置為推理狀態
model.eval()
# 定義輸入數據
input_spec = paddle.static.InputSpec(shape=[None, 3, 320, 320], dtype='float32', name='image')
# ONNX模型導出
# enable_onnx_checker設置為True,表示使用官方ONNX工具包來check模型的正確性,需要安裝ONNX(pip install onnx)
paddle.onnx.export(model, 'mobilenet_v2', input_spec=[input_spec], opset_version=12, enable_onnx_checker=True)

執行結果:
2021-01-26 10:52:13 [INFO]    ONNX model genarated is valid.
2021-01-26 10:52:13 [INFO]    ONNX model saved in mobilenet_v2.onnx

我們可以看到模型成功轉換保存為 ONNX 格式文件——mobilenet_v2.onnx。

 將靜態圖模型導出為 ONNX 模型 

通過命令行調用 paddle2onnx 命令可完成靜態圖模型的轉換。

# Paddle動態圖保存為靜態圖
paddle.jit.save(model, 'inference/model', input_spec=[input_spec])
# 調用paddle2onnx命令
!paddle2onnx \
--model_dir inference \
--model_filename model.pdmodel\
--params_filename model.pdiparams \
--save_file mobilenet_v2.onnx \
--opset_version 12

執行結果:
2021-01-26 10:53:29 [INFO]    ONNX model saved in mobilenet_v2.onnxnx

與動態圖相似,模型同樣會被保存為 ONNX 格式的文件。這裡使用 ONNXRunTime 來進行 ONNX 模型驗證測試,並評估轉換後推理結果的誤差。

# 動態圖導出的ONNX模型測試
import time
import numpy as np
from onnxruntime import InferenceSession
# 加載ONNX模型
sess = InferenceSession('mobilenet_v2.onnx')
# 準備輸入
x = np.random.random((1, 3, 320, 320)).astype('float32')
# 模型預測
start = time.time()
ort_outs = sess.run(output_names=None, input_feed={'image': x})
end = time.time()
print("Exported model has been predicted by ONNXRuntime!")
print('ONNXRuntime predict time: %.04f s' % (end - start))
# 對比ONNX Runtime 和 飛槳的結果
paddle_outs = model(paddle.to_tensor(x))
diff = ort_outs[0] - paddle_outs.numpy()
max_abs_diff = np.fabs(diff).max()
if max_abs_diff < 1e-05:
    print("The difference of results between ONNXRuntime and Paddle looks good!")
else:
    relative_diff = max_abs_diff / np.fabs(paddle_outs.numpy()).max()
    if relative_diff < 1e-05:
        print("The difference of results between ONNXRuntime and Paddle looks good!")
    else:
        print("The difference of results between ONNXRuntime and Paddle looks bad!")
print('relative_diff: ', relative_diff)
print('max_abs_diff: ', max_abs_diff)

執行結果:
Exported model has been predicted by ONNXRuntime!
ONNXRuntime predict time: 0.0260 s
The difference of results between ONNXRuntime and Paddle looks good!
max_abs_diff:  4.2632564e-13

這裡,我們可以看到推理時間需要0.0260秒,推理結果與轉換前的飛槳模型相比幾乎一致。詳細示例信息可以參考 AI Studio 項目「Paddle2.0 導出 ONNX 模型和推理」,地址:

https://aistudio.baidu.com/aistudio/projectdetail/1461212

除了上面的例子外,還有更多使用和了解 Paddle2ONNX 的方式:

Paddle2ONNX 項目地址:

https://github.com/PaddlePaddle/Paddle2ONNX

歡迎給項目 Star,支持項目工程師的工作!

未來,Paddle2ONNX 還將支持更多的模型,如果您有相關的需求,歡迎加入官方群與我們交流。

https://www.paddlepaddle.org.cn/GitHub: https://github.com/PaddlePaddle/Paddle Gitee: https://gitee.com/paddlepaddle/Paddle

相關焦點

  • 百度最新GitHub開源項目來啦
    近期,‍‍‍‍‍‍飛槳進入了2.0時代,不僅API體系得到了全面升級,動態圖模式變得更加完備,為廣大開發者帶來「動靜統一的開發體驗」,還集成了最新版的Paddle2ONNX工具,進一步提升了框架的開放性‍‍‍‍‍‍。
  • PaddlePaddle 2.0.0 Beta 發布,API 體系升級,命令式編程完善
    PaddlePaddle 2.0.0 Beta 已經發布,這是飛槳框架v2.0的測試版,最重要的變化為API體系的全面升級以及命令式編程
  • 我用飛槳Parakeet僅六步實現了一個語音合成模型
    Parakeet是飛槳近期上新的語音合成套件,用於實現端到端的語音合成。如果您使用過各類讀書app或者某些瀏覽器、插件的朗讀功能,這些都是典型的TTS(Text To Speech)場景。本項目將使用WaveFlow語音合成模型完成相關任務,並結合Transformer TTS驗證語音合成效果,比如輸入「Hello World」,文字轉語音效果如下。
  • 百度飛槳秀出最新成績單,產業應用、人才培養、開源生態全面繁榮
    200+,飛槳企業版EasyDL智能數據服務升級,飛槳硬體生態路線圖以及攜手全球開發者開啟「大航海」計劃。新框架下,飛槳動態功能走向成熟、API進行了全面升級,同時動靜統一的編程體驗將為深度概率編程、量子機器學習等前沿學術研究提供更好的支持。此外,馬豔軍還公布了飛槳開源平臺在分布式訓練和開源算法庫方面的升級,以及飛槳硬體生態路線圖。
  • 一文速覽百度飛槳八大全新發布與升級 | WAVE SUMMIT+2020
    據此前報導,在今年5月的WAVE SUMMIT+峰會上,百度飛槳發布35項全面升級以及飛槳全景圖,當時平臺開發者數量、模型數量、服務企業數量分別為190萬、23萬和8.4萬,對比目前來看,飛槳的技術與生態發展顯然正在提速。接下來,我們來逐一揭秘飛槳的最新升級成果。
  • 134個預訓練模型,百度視覺算法最強基石PaddleClas全新升級
    同時也優化出更多業界 SOTA 模型,並支持圖像檢測、分割以及 OCR 等高階視覺任務全面提升模型效果;更豐富的模型種類:本次升級新增 4 個系列模型(InceptionV3、GhostNet、ResNeSt 和 RegNet),至此 PaddleClas 總共包含 29 個系列的分類網絡以及 134
  • Techo開發者大會,騰訊優圖分享最新研究成果和產業實踐
    其中人工智慧專場以「人工智慧算法與最佳實踐」為主題,為開發者、業界及生態夥伴呈現了雲計算時代下人工智慧領域的最新前沿技術與最佳行業實踐。騰訊優圖實驗室的研究員梁晨、王亞彪、姚達、楊博分別圍繞AI視覺傳感器、視覺算法在圖像編輯生成中的研究與應用、TNN跨平臺推理優化、模量化訓練部署及實踐等發表了主題演講,向業界展示了優圖最新研究成果與產業實踐。
  • 讓飛槳來告訴你
    其實,顏值打分也可以視為一個圖像分類問題,今天就向大家介紹如何利用飛槳搭建一個 VGG 網絡,實現一個簡單的顏值打分 demo。介紹完 VGG 網絡結構以及相關基礎之後,接下來我們將在 AI Studio 平臺上用 Paddle Fluid API 搭建一個 VGG 網絡模型,實現對顏值打分的功能。本實踐代碼運行的環境配置如下:Python 版本為3.7,飛槳版本為1.6.0,電腦配置 MacOS 10.15。
  • 百度ERNIE語義理解開源套件重磅升級 零基礎也能秒變NLP達人
    兩種方式各有優勢,動態圖「所見即所得」的特性可以快速實現最新的idea;而靜態化的運算流程可以在脫離Python的生產環境中部署上線。為了兼顧兩種優勢,ERNIE開源套件進行了全新升級,推出了動靜合一的ERNIE語義理解開發套件。
  • 硬核AI開發者大會來襲:飛槳發布2.0 RC版,李宏毅老師課程上線
    讓我們可以更快追蹤到最新的技術發展。因為飛槳的開源開放,參與到其中的開發者也越來越壯大,百度透露,飛槳平臺迄今為止凝聚了265萬開發者,服務了10萬+企業,創造了34萬+個模型。另外,飛槳還格外重視體系化的設計與簡潔性。這次飛槳把API分成19個大類,新增了200多個API。2.0RC版加入了高層API,與基礎API一體化設計,稱為「高低融合」,可以交叉使用。使用高層API以後,很多模型甚至只用10行代碼就可以寫訓練程序,可以做到低代碼開發。
  • 重磅發布開源框架、生物計算平臺螺旋槳,百度飛槳交了年終成績單
    本屆峰會,百度飛槳帶來八大全新發布與升級,有支持前沿技術探索和應用的生物計算平臺 PaddleHelix 螺旋槳,開發更加便捷的飛槳開源框架 2.0 RC 版,端雲協同的 AI 集成開發環境 BML CodeLab,支持更強大分布式訓練的業界首個通用異構參數伺服器架構,開源算法庫增至 200+,飛槳企業版 EasyDL 智能數據服務升級,飛槳硬體生態路線圖以及攜手全球開發者開啟
  • 從技術突圍到生態繁榮 飛槳「硬核」構建AI時代話語權
    今年11月進行的IDC中國智能開發者調研中,有超7成受訪者使用開源的深度學習框架,自己訓練算法模型;在用戶認知度方面,TensorFlow、Caffe2/Pytorch、飛槳(PaddlePadlle)穩居前三,飛槳在去年的基礎上,繼續延續著明顯的增長趨勢。在機器學習平臺方面,百度EasyDL佔比強勁增長,再度登上市場份額首位。
  • 百度開源2020:二十個技術領域持續開源 飛槳、阿波羅成行業領先者...
    目前,飛槳累計開發者265萬,服務企業超過10萬家,基於飛槳開源深度學習平臺產生了34萬+個模型。飛槳助力開發者快速實現AI想法,快速上線AI業務。幫助越來越多的行業完成AI賦能,實現產業智能化升級。  飛槳生態社區建設:GitHub的所有倉庫(repo)累計 star數量 55000+(2020年新增30000+),累計 commits超過16萬次,開源貢獻者超過 5000+,飛槳開發者技術專家(PPDE)97位,飛槳特別興趣小組(PPSIG) 7個。
  • 百度飛槳(PaddlePaddle)開發能力究竟如何
    縱觀國內深度學習技術領域,飛槳牢牢佔據著領軍位置。究竟有多少我們知道或不知道的深度學習案例是來自飛槳平臺的傑作呢?助天才少年黑客奪冠飛槳實力超群在去年的LA Hacks2018洛杉磯黑客馬拉松比賽中,就有一位來自加州理工學院的美籍華裔大二學生EricZhao,基於百度飛槳平臺,通過為犬類圖像嵌入允許相似識別和其他語義操作的模型,成功將寵物面部識別這一想法變成了現實,並獲得冠軍。在百度代表為EricZhao頒獎時,他表示從第一次了解使用飛槳,到完成項目僅用16小時。
  • 深度學習開發者的情人節520,飛槳將帶來哪些大消息
    這也是繼2019年春秋兩場WAVE SUMMIT深度學習開發者峰會後,飛槳引領深度學習技術發展,分享產業實踐落地、人才生態建設最新成果的開發者盛會。峰會定檔5.20的消息一經發布,便引起廣大開發者的極大關注。據官網信息,峰會主論壇於上午十點開始。百度首席技術官、深度學習技術及應用國家工程實驗室主任王海峰將做開場致辭。
  • GTC大會飛槳專家演講內容實錄:飛槳推理引擎性能優化
    飛槳推理引擎是飛槳模型推理部署的重要基礎,已在百度內部各核心業務線和眾多 ToB 交付的AI服務中經過充分驗證。商智洲介紹,飛槳在不同的推理場景下,都有相應的推理部署方案:1、飛槳框架的原生推理引擎Paddle Inference,側重低延遲、高吞吐,主要目標是X86和英偉達的GPU上的模型推理;2、模型服務化部署工具Paddle Serving,側重線上模型管理,彈性服務,A/B測試;3、面向Mobile&IoT的壓縮工具PaddleSlim
  • 一文速覽百度飛漿八大全新發布與升級 | WAVE SUMMIT2020
    據此前報導,在今年5月的WAVE SUMMIT峰會上,百度飛漿發布35項全面升級以及飛漿全景圖,當時平臺開發者數量、模型數量、服務企業數量分別為190萬、23萬和8.4萬,對比目前來看,飛槳的技術與生態發展顯然正在提速。接下來,我們來逐一揭秘飛漿的最新升級成果。