天天看點

基于MindStudio完成Rosetta_Resnet34_vd模型開發

作者:愛音樂大海1R

目錄

一、介紹 2

1.1 模型介紹 2

1.2 MindStudio介紹 2

1.3 MindStudio配置 3

二、MindStudio項目搭建 5

2.1 項目建立 5

2.2 項目配置 9

三、擷取模型代碼 13

3.1 擷取源碼 13

3.2 安裝依賴 14

四、擷取資料集 16

4.1 資料集下載下傳 16

4.2 資料集預處理 17

五、模型轉換 18

5.1 轉onnx模型 18

5.2 轉om模型 21

六、模型推理 25

6.1 擷取推理工具 25

6.2 進行推理 26

6.3 精度驗證 27

七、問題總結 29

八、參考資料 30

一、介紹

本文将介紹使用MindStudio進行Rosetta_Resnet34_vd模型離線推理開發,并在IIIT, SVT, IC03, IC13, IC15, SVTP, CUTE資料集上進行評估,推理精度能夠達到80.64%。

1.1 模型介紹

Rosetta是用于圖像中文本檢測和識别的大規模系統,文本識别是使用稱為 CTC 的全卷積模型完成的(因為它在訓練期間使用序列到序列的 CTC 損失),該模型輸出字元序列。最後一個卷積層在輸入詞的每個圖像位置預測最可能的字元。論文連結為:

https://arxiv.org/abs/1910.05085

Rosetta_Resnet34_vd是基于是PadlePaddle架構的實作,相關資訊可參考官網說明:

https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6/doc/doc_ch/algorithm_rec_rosetta.md

1.2 MindStudio介紹

MindStudio提供了AI開發所需的一站式開發環境,支援模型開發、算子開發以及應用開發三個主流程中的開發任務,依靠模型可視化、算力測試、IDE本地仿真調試等功能,MindStudio能夠在一個工具上就能高效便捷地完成AI應用開發。MindStudio采用了插件化擴充機制,開發者可以通過開發插件來擴充已有功能。

本文主要介紹使用MindStudio進行Rosetta_Resnet34_vd模型離線推理開發過程。

關于MindStudio的詳細特性,可以通過官網檢視:

https://www.hiascend.com/zh/software/mindstudio

可以通過MindStudio社群,獲得幫助以及進行經驗分享和交流,另外還可以參與MindStudio官方舉辦的各種活動:

https://bbs.huaweicloud.com/forum/forum-945-1.html

本文參考了《使用MindStudio進行Mindx模型st-gcn開發(1)》這篇社群文章來進行MindStudio的環境搭建,連結為:

https://bbs.huaweicloud.com/forum/thread-0220990297832880032-1-1.html

MindStudio的安裝過程可以參考官方指導手冊,連結為:

https://www.hiascend.com/document/detail/zh/mindstudio/50RC3/progressiveknowledge/index.html

1.3 MindStudio配置

基于MindStudio完成Rosetta_Resnet34_vd模型開發

初次打開MindStudio會提示是否導入配置,如上圖,可以選擇“Do not import settings”,點選“OK”。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

上圖為MindStudio的主界面,主要包括4個标簽:

Projects:用于項目的建立、打開等功能。

Customize:主要是使用者喜好設定等功能。

Plugins:主要用于插件的安裝、解除安裝等。

Learn MindStudio:提供擷取幫助的途徑。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

通過Customize标簽将主題設定為“IntelliJ Light”,如上圖所示。

二、MindStudio項目搭建

2.1 項目建立

基于MindStudio完成Rosetta_Resnet34_vd模型開發

在主界面Projects标簽中點選“New Project”,如上圖。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

選擇“Ascend App”标簽,設定項目名稱和項目路徑,點選CANN Version選項的“Change”。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

在CANN配置對話框中點選+号。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

在彈出的配置對話框中點選+号,填寫遠端伺服器資訊,點選“Test Connection”測試連接配接是否正常,彈出“Successfully connected”說明連接配接正常,如上圖,依次點選“OK”完成配置。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

點選檔案夾圖示,選擇遠端CANN包安裝目錄,點選“OK”。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

點選Finish開始同步遠端CANN環境。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

同步完成後點選“Next”進入下一步。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

選擇“ACL Project(Python)”,點選“Finish”。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

此時建立好了一個空的項目,這時會彈出提示對話框,可以點選“Next Tip”檢視提示資訊,點選“Close”關閉提示,如果選擇“Don`t show tips”則不再顯示提示資訊。

2.2 項目配置

基于MindStudio完成Rosetta_Resnet34_vd模型開發

如上圖所示,啟動遠端SSH終端。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

點選“Tools”、“Deployment”、Configuration,進行開發環境配置,如上圖所示。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

選擇“Mappings”,填入“Deployment Path”遠端映射路徑,點選“OK”。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

點選項目界面右上角設定圖示,選擇“Project Structure”,如上圖所示。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

點選“SDKs”、+号圖示,選擇“Add Python SDK”。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

選擇SSH Interprter,配置相應資訊,點選“OK”。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

選擇Project,配置SDK,如上圖。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

選擇Moduls,選擇Module SDK,如上圖,點選“OK”。

三、擷取模型代碼

3.1 擷取源碼

在本地終端中使用如下指令擷取源碼:

git clone -b release/2.5 https://github.com/PaddlePaddle/PaddleOCR.git

cd PaddleOCR

git reset --hard a40f64a70b8d290b74557a41d869c0f9ce4959d5

rm .\applications\

cd ..

基于MindStudio完成Rosetta_Resnet34_vd模型開發

修改配置檔案,将use_gpu設定成false,如上圖。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

同時将batch和num_workers設定為1,如上圖。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

修改完成後将模型代碼上傳到遠端伺服器,如上圖,依次點選Toos->Deployment->Upload to...。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

如上圖所示,在彈出的對話框中選擇上傳的伺服器。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

上傳成功,如上圖所示。

3.2 安裝依賴

基于MindStudio完成Rosetta_Resnet34_vd模型開發

建立依賴檔案requirments.txt,如上圖所示,并針依賴檔案上傳的遠端伺服器。

requirments.txt的内容為:

paddlepaddle==2.3.2

paddle2onnx==0.9.8

onnxruntime==1.9.0

pyyaml==6.0

onnx==1.12.0

lanms-nova==1.0.1

opencv-contrib-python==4.4.0.46

imgaug==0.4.0

shapely

scikit-image

pyclipper

lmdb

tqdm

numpy

visualdl

rapidfuzz

cython

lxml

premailer

openpyxl

attrdict

sympy

onnxsim

基于MindStudio完成Rosetta_Resnet34_vd模型開發

在遠端終端中通過以上pip指令安裝依賴,如上圖所示。

四、擷取資料集

4.1 資料集下載下傳

該模型在以LMDB格式(LMDBDataSet)存儲的IIIT, SVT, IC03, IC13, IC15, SVTP, CUTE資料集上進行評估,共計12067個評估資料,資料介紹參考DTRB:

https://github.com/clovaai/deep-text-recognition-benchmark#download-lmdb-dataset-for-traininig-and-evaluation-from-here

資料集下載下傳連結:

https://www.dropbox.com/sh/i39abvnefllx2si/AAAbAYRvxzRp3cIE5HzqUw3ra?dl=0

基于MindStudio完成Rosetta_Resnet34_vd模型開發

下載下傳後将其中的evaluation.zip壓縮包解壓到Rosetta_Resnet34_vd\train_data\data_lmdb_release\validation目錄下,并上傳到遠端伺服器,如上圖所示。

4.2 資料集預處理

基于MindStudio完成Rosetta_Resnet34_vd模型開發

建立資料預處理腳本,并上傳到遠端伺服器,如上圖。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

通過上圖方式,建立可執行指令。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

在彈出的對話框中填入指令名稱(Name)、可執行腳本(Excutable)、和參數(Command Arguments),如上圖,點選“OK”,具體參數為:

--config=PaddleOCR/configs/rec/rec_r34_vd_none_none_ctc.yml

--opt=bin_data=../rosetta_bindata

參數說明:

--config:模型配置檔案

--opt=bin_data:預處理資料

基于MindStudio完成Rosetta_Resnet34_vd模型開發

如上圖所示,點選執行按鈕,開始執行資料預處理指令。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

如上圖所示,資料預處理指令執行完成。

五、模型轉換

使用paddle2onnx将模型權重檔案轉換為.onnx檔案,再使用MindStudio的Model Converter工具将onnx檔案轉為離線推理模型檔案om檔案。

5.1 轉onnx模型

訓練權重連結為:.

https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_r34_vd_none_none_ctc_v2.0_train.tar

基于MindStudio完成Rosetta_Resnet34_vd模型開發

下載下傳後将rec_r34_vd_none_none_ctc_v2.0_train.tar解壓到Rosetta_Resnet34_vd目錄下,點選Tools->Deployment->Upload to...上傳到遠端伺服器,如上圖所示。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

建立export指令,如上圖所示,并執行,将訓練權重轉為推理模型,export具體參數如下:

-c ../../PaddleOCR/configs/rec/rec_r34_vd_none_none_ctc.yml

-o Global.pretrained_model=../../checkpoint/rec_r34_vd_none_none_ctc_v2.0_train/best_accuracy

Global.save_inference_dir=../../inference/rec_rosetta

參數說明:

-c:模型配置檔案

-o:使用者可選參數,包括Global.pretrained_model表示訓練模型,Global.save_inference_dir表示推理模型儲存路徑

基于MindStudio完成Rosetta_Resnet34_vd模型開發

在遠端終端使用paddle2onnx指令導出onnx模型,如上圖所示,并點選Tools->Deployment->Download from...将onnx模型同步到本地。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

在遠端終端使用onnxsim指令優化onnx模型,如上圖所示,同時可點選Tools->Deployment->Download from...将優化後的onnx模型同步到本地。

5.2 轉om模型

基于MindStudio完成Rosetta_Resnet34_vd模型開發

MindStudio的Model Converter工具按鈕如上圖所示。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

點選Model Converter工具按鈕,首先選擇onnx的Model File,如上圖所示,點選“OK”後會自動進行模型解析。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

模型解析如上圖。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

模型解析完成後,設定上圖中的模型轉換資訊,點選“Next”繼續。模型轉換資訊說明:

Model Name:儲存模型名稱

Target Soc Version:部署晶片型号,本文使用的是Ascend310P3

Output Path:om模型儲存路徑

Input Format:模型輸入資料格式,本文是對圖檔資料進行推理,是以資料格式為NCHW。

Input Nodes:輸入節點資訊,本文模型有1個輸入,Name為x,Shape為1,3,32,100,Type為FP32

Output Nodes:本文使用預設輸出節點,不需要進行配置

基于MindStudio完成Rosetta_Resnet34_vd模型開發

MindStudio會進行指令檢查,如上圖所示。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

檢查完成後點選“Next”。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

檢查ATC指令後,點選“Finish”開始進行模型轉換。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

模型轉換成功如上圖所示,生成Rosetta_Resnet34_vd_sim.om模型。

六、模型推理

6.1 擷取推理工具

Om模型的推理工具采用ais_infer,連結為:

https://gitee.com/ascend/tools/tree/master/ais-bench_workload/tool/ais_infer。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

本地下載下傳後将ais_infer檔案夾放到項目中,并上傳到遠端伺服器,如上圖所示。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

通過遠端終端編譯并安裝aclruntime。

6.2 進行推理

基于MindStudio完成Rosetta_Resnet34_vd模型開發

建立ais_infer推理指令,如上圖,參數說明:--model表示om模型,--input表示輸入資料路徑,--output表示輸出資料路徑。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

執行ais_infer指令,開始進行推理,推理成功如上圖所示,推理結果儲存在output path下,這裡需要記住推理結果的目錄2022_10_24-19_08_41,在下一步精度驗證時會用到。

6.3 精度驗證

基于MindStudio完成Rosetta_Resnet34_vd模型開發

建立後處理腳本,如上圖所示。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

建立後處理指令,如上圖所示,Command Arguments為:

--config=PaddleOCR/configs/rec/rec_r34_vd_none_none_ctc.yml --opt=results=../2022_10_24-19_08_41

參數說明:--config表示模型配置檔案,--opt=results表示推理結果路徑。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

運作後處理指令,進行精度驗證,指令執行完成後如上圖所示,模型的精度acc為0.8064,官網給定的模型精度acc為0.7911,模型精度正常。

到此使用MindStudio完成了Rosetta_Resnet34_vd模型的離線推理開發。

七、問題總結

基于MindStudio完成Rosetta_Resnet34_vd模型開發
基于MindStudio完成Rosetta_Resnet34_vd模型開發

在使用MindStudio的Model Converter工具轉om模型的時候,如果選擇paddle2onnx生成的onnx模型,則會解析失敗,報錯如上圖所示,經過嘗試使用onnxsim工具優化onnx後可以正常解析。

基于MindStudio完成Rosetta_Resnet34_vd模型開發

最後通過檢視使用者指導手冊,該報錯的原因如上圖所示,按照手冊指導說明進行配置後,可以正常解析paddle2onnx生成的onnx模型,如下圖所示。

基于MindStudio完成Rosetta_Resnet34_vd模型開發
基于MindStudio完成Rosetta_Resnet34_vd模型開發
基于MindStudio完成Rosetta_Resnet34_vd模型開發

八、參考資料

使用MindStudio進行Rosetta_Resnet34_vd模型離線推理開發過程中參考很資料和文檔,最後給大家推薦一些比較有用的資料,大家可以先通過官網了解MindStudio的一些功能,然後按照使用者手冊進行安裝、和基本使用方法,最後可以在開發者社群參考一些案例,或者遇到問題進行求助,可以幫助自己快速使用MindStudio進行項目開發。

1.MindStudio官網

https://www.hiascend.com/zh/software/mindstudio

2.MindStudio開發者社群

https://bbs.huaweicloud.com/forum/forum-945-1.html

3.MindStudio使用者手冊

https://www.hiascend.com/document/detail/zh/mindstudio/50RC2/progressiveknowledge/index.html

繼續閱讀