每日最新頭條.有趣資訊

一文看懂如何使用模型轉換工具X2Paddle

本文轉載自百度PaddlePaddle

深度學習的應用主要包括兩個部分,一是通過深度學習框架訓練出模型,二是利用訓練出來的模型進行預測。

開發者基於不同的深度學習框架能夠得到不同的訓練模型,如果想要基於一種框架進行預測,就必須要解決不同框架的模型之間的匹配問題。基於這種考慮,也為了幫助用戶快速從其他框架遷移,PaddlePaddle開源了模型轉換工具X2Paddle。

它可以將TensorFlow、Caffe 的模型轉換為PaddlePaddle的核心框架Paddle Fluid可加載的格式。同時X2Paddle還支持ONNX格式的模型轉換,這樣也相當於支持了眾多可以轉換為ONNX格式的框架,比如PyTorch、MXNet、CNTK等。

項目地址:

https://github.com/PaddlePaddle/X2Paddle

項目概覽

X2Paddle最新發布的V0.3版本,包括tensorflow2fluid,caffe2fluid和onnx2fluid。對於TesorFlow和Caffe,我們還提供了它們與Paddle Fluid的常用API對比文檔。通過這些文檔可以清楚查看這幾個框架在API設計上的異同,方便用戶快速熟悉PaddlePaddle的接口使用。

caff2fluid

1、支持VGG, ResNet, AlexNet等圖像分類模型的轉換

2、提供Caffe-PaddlePaddle常用API的對比文檔,地址:https://github.com/PaddlePaddle/X2Paddle/tree/master/caffe2fluid/doc

tensorflow2fluid

1、支持VGG, ResNet, NASNet, YOLO-V3, UNet等圖像分類,檢測和分割模型的轉換

2、提供TensorFlow-PaddlePaddle常用API的對比文檔,地址:

https://github.com/PaddlePaddle/X2Paddle/tree/master/tensorflow2fluid/doc

onnx2fluid

1、支持VGG,ResNet,Inception, YOLO-V2, UNet等圖像分類,檢測和分割模型的轉換;

2、部分框架,如PyTorch支持導出為ONNX模型,因此也可通過onnx2fluid支持相應框架下模型轉換至PaddlePaddle

接下來我們將以tensorflow2fluid轉換VGG_16模型為例,介紹其使用方法。

VGG_16是CV領域的一個經典模型,本文檔以tensorflow/models下的VGG_16為例,展示如何將TensorFlow訓練好的模型轉換為PaddlePaddle模型。

模型轉換實戰

1.環境準備

模型轉換和測試的環境依賴TensorFlow和PaddlePaddle,通過如下方式安裝相應依賴(CPU或GPU版本)

CPU版本

GPU版本

2.下載預訓練模型

3.保存模型為checkpoint格式

下載的模型vgg_16.ckpt僅保存了模型參數,需加載模型,並通過tf.train.Saver重新將模型保存成tensorflow2fluid支持的格式

4.將模型轉換為PaddlePaddle模型

模型轉換時,需要指定輸入tensor的name和shape, batch維以None表示, 同時還要指定輸出tensor的name。轉換過程中,會根據輸入和輸出的tensor對計算圖進行裁剪,僅轉換輸入與輸出之間的子圖。

注意:由於在轉換過程中,涉及到部分TensorFlow模型中的參數實時infer,因此通過use_cuda參數可設置infer時是否使用GPU

轉換後的模型目錄中的各文件含義如下表所示,

5.加載轉換後的PaddlePaddle模型,並進行預測

tensorflow2fluid在tf2fluid/model_loader.py中封裝了模型加載方法,可通過如下示例代碼加載模型,並進行預測。

可通過調用save_inference_model,將模型結構和模型參數均序列化保存,如下代碼所示

序列化後的模型加載方式可參考PaddlePaddle官網文檔說明:

http://www.paddlepaddle.org/documentation/docs/zh/1.4/api_guides/low_level/inference.html#id4

6.對比轉換前後模型之前的預測結果差異

在上文的代碼中,我們均通過固定隨機數據方式,在TensorFlow和PaddlePaddle模型中輸入了相同的樣例數據,並將結果保存至tf_result.npy和pd_result.npy中,通過對比兩個結果的差異,判斷模型的轉換是否符合需求。

如下代碼對比的僅為輸入一個樣例數據後的差異對比,實際應用場景中,建議用戶根據需求定義自己的測試數據進行更嚴謹的對比測試。

總結

X2Paddle以用戶的需求為導向,對於用戶而言不僅可以方便模型的遷移,同時提供的相應API對比文檔也可幫助用戶通過現有框架的使用經驗快速上手PaddlePaddle的使用。目前X2Paddle已經支持了眾多的CV領域的經典模型,有需求的小夥伴們趕緊試用起來吧!

小程序|get更多AI學習乾貨

加入社群

量子位AI社群開始招募啦,量子位社群分:AI討論群、AI+行業群、AI技術群;

歡迎對AI感興趣的同學,在量子位公眾號(QbitAI)對話界面回復關鍵字“微信群”,獲取入群方式。(技術群與AI+行業群需經過審核,審核較嚴,敬請諒解)

喜歡就點「在看」吧 !

獲得更多的PTT最新消息
按讚加入粉絲團