昇騰的AI全軟件棧平臺、開源框架、CANN、MindSpore、MindX 等工具,可以讓開發(fā)者實(shí)現(xiàn)「統(tǒng)一端邊云,全端自動部署」,開啟了機(jī)器學(xué)習(xí)開發(fā)的新時(shí)代,一直被人們寄予厚望。但正因?yàn)橘Y源極其豐富,浩如星辰,想要快速尋找,到摸索清楚其中的原理,并最終結(jié)合自己手上的項(xiàng)目實(shí)現(xiàn)應(yīng)用部署,人力成本、時(shí)間成本將增加不少,不利于快速推進(jìn)項(xiàng)目。
現(xiàn)在~好消息來了! 經(jīng)過英碼科技工程師們的認(rèn)真梳理,本篇文章,我們以英碼科技EA500I邊緣計(jì)算盒子為例,為大家介紹在昇騰CANN架構(gòu)下,基于PyTorch框架的ResNet50模型,以及基于YOLOV7網(wǎng)絡(luò)模型如何快速實(shí)現(xiàn)模型推理應(yīng)用。
CANN架構(gòu)介紹
異構(gòu)計(jì)算架構(gòu)CANN(Compute Architecture for Neural Networks)是華為針對AI場景推出的異構(gòu)計(jì)算架構(gòu),向上支持多種AI框架,包括MindSpore、PyTorch、TensorFlow等,向下服務(wù)AI處理器與編程,發(fā)揮承上啟下的關(guān)鍵作用,是提升昇騰AI處理器計(jì)算效率的關(guān)鍵平臺。同時(shí)針對多樣化應(yīng)用場景,提供多層次編程接口,支持用戶快速構(gòu)建基于昇騰平臺的AI應(yīng)用和業(yè)務(wù)。
01
樣例1介紹(ResNet50模型)
▍基于PyTorch框架的ResNet50模型,對*.jpg圖片分類,輸出各圖片所屬分類的編號、名稱。
樣例的處理流程如下圖所示:
1 ? 樣例下載 ?
命令行方式下載(下載時(shí)間較長,需稍作等待)。
# 開發(fā)環(huán)境,非root用戶命令行中執(zhí)行以下命令下載源碼倉。
cd ${HOME}
git clone https://gitee.com/ascend/samples.git
?
注:如果需要切換到其它tag版本,以v0.9.0為例,可執(zhí)行以下命令。
git check outv0.9.0
樣例的代碼目錄說明如下:
2 準(zhǔn)備環(huán)境
(1)安裝CANN軟件
最新版本的CANN軟件安裝指南請戳→安裝指南
注:英碼科技EA500I智能工作站系統(tǒng)環(huán)境中已適配該軟件,無需另行下載安裝。
(2)設(shè)置環(huán)境變量
注:“$HOME/Ascend”請?zhí)鎿Q“Ascend-cann-toolkit”包的實(shí)際安裝路徑。
# 設(shè)置CANN依賴的基礎(chǔ)環(huán)境變量
. ${HOME}/Ascend/ascend-toolkit/set_env.sh
#如果用戶環(huán)境存在多個(gè)python3版本,則指定使用python3.7.5版本
exportPATH=/usr/local/python3.7.5/bin:$PATH
#設(shè)置python3.7.5庫文件路徑
exportLD_LIBRARY_PATH=/usr/local/python3.7.5/lib:$LD_LIBRARY_PATH
# 配置程序編譯依賴的頭文件與庫文件路徑
export DDK_PATH=$HOME/Ascend/ascend-toolkit/latest
export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub
(3)安裝OpenCV
執(zhí)行以下命令安裝opencv ,須確保是3.x版本;
sudo apt-get installlibopencv-dev
3 樣例運(yùn)行
(1)獲取PyTorch框架的ResNet50模型(*.onnx),并轉(zhuǎn)換為昇騰AI處理器能識別的模型(*.om)
注:此處以昇騰310 AI處理器為 例,針對其它昇騰AI處理器的模型轉(zhuǎn)換,需修改atc命令中的-- soc_version參數(shù)值。
# 為方便下載,這里直接給出原始模型下載及模型轉(zhuǎn)換命令,可以直接拷貝執(zhí)行。
cd $HOME/samples/inference/modelInference/sampleResnetQuickStart/
cpp/model wgethttps://obs-9be7.obs.cn-east- 2.myhuaweicloud.com/003_Atc_Models/resnet50/resnet50.onnx
atc --model=resnet50.onnx--framework=5 --output=resnet50 --
input_shape="actual_input_1:1,3,224,224" --soc_version=Ascend310
atc命令中各參數(shù)的解釋如下,詳細(xì)約束說明請參見《ATC模型轉(zhuǎn)換指南》。
--model :ResNet-50網(wǎng)絡(luò)的模型文件的路徑
--framework:原始框架類型。5表示ONNX。
--output:resnet50.om模型文件的路徑。請注意,記錄保存該om模型文件的路徑,后續(xù)開發(fā)應(yīng)用時(shí)需要使用。
--input_shape:模型輸入數(shù)據(jù)的shape。
--soc_version:昇騰AI處理器的版本。
說明:如果無法確定當(dāng)前設(shè)備的soc_version,則在安裝驅(qū)動包的服務(wù)器執(zhí)行npu-smi info 命令進(jìn)行查詢,在查詢到的“Name“前增加Ascend信息,例如“Name“對應(yīng)取值為_xxxyy_ , 實(shí)際配置的soc_version值為Ascend_xxxyy_。
(2)獲取測試圖片數(shù)據(jù)
請從以下鏈接獲取該樣例的測試圖片dog1_ 1024_683.jpg,放在data目錄下。
cd $HOME/samples/inference/modelInference/
sampleResnetQuickStart/cpp/data wget
https://obs-9be7.obs.cn-east- 2.myhuaweicloud.com/models/aclsample/dog1_1024_683.jpg
注:若需更換測試圖片,則需自行準(zhǔn)備測試圖片,并將測試圖片放到data目錄下。
(3)編譯樣例源碼
執(zhí)行以下命令編譯樣例源碼:
cd $HOME/samples/inference/modelInference/
sampleResnetQuickStart/
cpp/scripts bash sample_build.sh
(4)運(yùn)行樣例
執(zhí)行以下腳本運(yùn)行樣例:
bash sample_run.sh
執(zhí)行成功后,在屏幕上的關(guān)鍵提示信息示例如下,提示信息中的label表示類別標(biāo)識、conf表示該分類的最大置信度,class表示所屬類別。這些值可能會根據(jù)版本、環(huán)境有所不同,請以實(shí)際情況為準(zhǔn):
[INFO] The sample starts to run
out_dog1_1024_683.jpg
label:162 conf:0.902209 class:beagle
[INFO] Theprogram runs successfully
4 代碼邏輯詳解(C&C++語言)
樣例中的接口調(diào)用流程如下圖所示:
在此樣例基礎(chǔ)上:
若想要更換測試圖片,只需自行準(zhǔn)備好新的jpg圖片并存放到樣例的data目錄下,圖片數(shù)據(jù)預(yù)處理時(shí)會自 動從該目錄下讀取圖片數(shù)據(jù)、再縮放至模型所需的大小。
若想要更換模型,則需關(guān)注以下修改點(diǎn):
1.準(zhǔn)備模型:需自行準(zhǔn)備好原始模型并存放到樣例的model目錄下,再參考《ATC模型轉(zhuǎn)換指南》轉(zhuǎn)換模型;
2. 加載模型:在aclmdlLoadFromFile接口處加載轉(zhuǎn)換后的模型;
3. 準(zhǔn)備模型輸入/輸出數(shù)據(jù)結(jié)構(gòu):根據(jù)新模型的輸入、輸出個(gè)數(shù)準(zhǔn)備;
4. 獲取推理結(jié)果&后處理:根據(jù)新模型的輸出數(shù)據(jù)進(jìn)行后處理。
須知:一般來說,更換其它圖片分類模型(例如resnet50- >resnet101) ,由于同類模型的輸入、輸出類 似,在此樣例基礎(chǔ)上改動較小,但如果更換為其它類型的模型(例如目標(biāo)檢測模型),由于不同類型模型的輸入、輸出差別較大,在此樣例基礎(chǔ)上數(shù)據(jù)預(yù)處理、模型輸入&輸出準(zhǔn)備以及數(shù)據(jù)后處理等改動很大,建議在Ascend Sample倉先找到目標(biāo)檢測類的樣例,再基于目標(biāo)檢測樣例修改。
02
樣例2介紹(YOLOV7模型)
以YOLOV7網(wǎng)絡(luò)模型為例,使能Acllite對圖片進(jìn)行預(yù)處理,并通過模型轉(zhuǎn)換使能靜態(tài)AIPP功能,使能AIPP功能后,YUV420SP_U8格式圖片轉(zhuǎn)化為RGB,然后減均值和歸一化操作,并將該信息固化到轉(zhuǎn)換后的離線模型中,對YOLOV7網(wǎng)絡(luò)執(zhí)行推理,對圖片進(jìn)行物體檢測和分類,并給出標(biāo)定框和類別置信度。
樣例輸入:圖片。
樣例輸出:圖片物體檢測,并且在圖片上給出物體標(biāo)注框,類別以及置信度。 1 獲取源碼包
可以使用以下兩種方式下載,請選擇其中一種進(jìn)行源碼準(zhǔn)備。
命令行方式下載(下載時(shí)間較長,但步驟簡單):
# 開發(fā)環(huán)境,非root用戶命令行中執(zhí)行以下命令下載源碼倉。
cd ${HOME}
git clone https://gitee.com/ascend/samples.git
注:如果需要切換到其它tag版本,以v0.5.0為例,可執(zhí)行以下命令。
git checkoutv0.5.0 壓縮包方式下載(下載時(shí)間較短,但步驟稍微復(fù)雜)。
注:如果需要下載其它版本代碼,請先請根據(jù)前置條件說明進(jìn)行samples倉分支切換。 # 1. samples倉右上角選擇【克隆/下載】下拉框并選擇【下載ZIP】。
# 2. 將ZIP包上傳到開發(fā)環(huán)境中的普通用戶家目錄中, 【例如:${HOME}/ascend-samples- master.zip】。
# 3. 開發(fā)環(huán)境中,執(zhí)行以下命令,解壓zip包。
cd ${HOME}
unzip ascend-samples-master.zip
2 第三方依賴安裝 設(shè)置環(huán)境變量,配置程序編譯依賴的頭文件,庫文件路徑?!?HOME/Ascend”請?zhí)鎿Q“Ascend-cann-toolkit”包的實(shí)際安裝路徑。 export DDK_PATH=$HOME/Ascend/ascend-toolkit/latest
export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub
export THIRDPART_PATH=${DDK_PATH}/thirdpart
export LD_LIBRARY_PATH=${THIRDPART_PATH}/lib:$LD_LIBRARY_PATH
創(chuàng)建THIRDPART_PATH路徑:
mkdir-p${THIRDPART_PATH}
acllite
注:源碼安裝ffmpeg主要是為了acllite庫的安裝 執(zhí)行以下命令安裝x264 # 下載x264
cd ${HOME}
git clonehttps://code.videolan.org/videolan/x264.git
cdx264
# 安裝x264
./configure --enable-shared --disable-asm
make
sudomakeinstall
sudo cp /usr/local/lib/libx264.so.164 /lib 執(zhí)行以下命令安裝ffmpeg:
# 下載ffmpeg
cd ${HOME}
wge thttp://www.ffmpeg.org/releases/ffmpeg-4.1.3.tar.gz --no-check-certificatetar-zxvfffmpeg-4.1.3.tar.gz
cdffmpeg-4.1.3
# 安裝ffmpeg
./configure --enable-shared --enable-pic --enable-static--disable-x86asm--enable-libx264 --enable-gpl--prefix=${THIRDPART_PATH}
make-j8
make install
執(zhí)行以下命令安裝acllite: cd ${HOME}/samples/inference/acllite/cplusplus
make
make install
安裝opencv
執(zhí)行以下命令安裝opencv(注:須確保是3.x版本)
sudo apt-get installlibopencv-dev
3 樣例運(yùn)行
(1)數(shù)據(jù)準(zhǔn)備
請從以下鏈接獲取該樣例的輸入圖片,放在data目錄下。
cd $HOME/samples/inference/modelInference/sampleYOLOV7/data
wgethttps://obs-9be7.obs.cn-east-
2.myhuaweicloud.com/models/aclsample/dog1_1024_683.jpg (2)ATC模型轉(zhuǎn)換 將YOLOV7原始模型轉(zhuǎn)換為適配昇騰310處理器的離線模型(*.om文件),放在model路徑下。 #為了方便下載,在這里直接給出原始模型下載及模型轉(zhuǎn)換命令,可以直接拷貝執(zhí)行。 cd $HOME/samples/inference/modelInference/ sampleYOLOV7/model
wgethttps://obs-9be7.obs.cn-east-
2.myhuaweicloud.com/003_Atc_Models/yolov7/yolov7x.onnx
wgethttps://obs-9be7.obs.cn-east-
2.myhuaweicloud.com/003_Atc_Models/yolov7/aipp.cfg
atc--model=yolov7x.onnx--framework=5 --output=yolov7x --
input_shape="images:1,3,640,640" --soc_version=Ascend310 --
insert_op_conf=aipp.cfg 樣例編譯
執(zhí)行以下命令,執(zhí)行編譯腳本,開始樣例編譯。 cd $HOME/samples/inference/modelInference/ sampleYOLOV7/scripts
bash sample_build.sh 樣例運(yùn)行
執(zhí)行運(yùn)行腳本,開始樣例運(yùn)行。 bash sample_run.s
(3)樣例結(jié)果展示
運(yùn)行完成后,會在樣例工程的out目錄下生成推理后的圖片,顯示對比結(jié)果如下所示。
結(jié)語
以上內(nèi)容詳細(xì)介紹了在昇騰CANN架構(gòu)下,基于PyTorch框架的ResNet50模型,以及基于YOLOV7網(wǎng)絡(luò)模型如何快速實(shí)現(xiàn)模型推理應(yīng)用的主要流程,尤其方便已購買英碼科技EA500I邊緣計(jì)算盒子的開發(fā)者朋友們快速實(shí)現(xiàn)推理應(yīng)用。
下期將會繼續(xù)更新關(guān)于昇騰開發(fā)工具的其他詳細(xì)使用教程,歡迎關(guān)注!
# end
? ?
關(guān)于英碼科技
廣州英碼信息科技有限公司成立于2006年,是一家致力提供“云-邊-端”協(xié)同的AIoT產(chǎn)品與細(xì)分場景解決方案的人工智能企業(yè)。
英碼旗下的“深元”AI產(chǎn)品體系,打造了一個(gè)以高、中、低多層次算力硬件為基礎(chǔ),算法自訓(xùn)練和生態(tài)整合為驅(qū)動,AI賦能平臺為支撐,工具鏈為輔助的全棧式AI應(yīng)用服務(wù)架構(gòu),打通場景需求-算法-硬件集成-業(yè)務(wù)平臺對接-項(xiàng)目交付的全鏈條,為客戶提供算法、算力雙重自定義的產(chǎn)品和服務(wù),推動AI和邊緣計(jì)算在細(xì)分場景的廣泛應(yīng)用。
英碼的AIoT產(chǎn)品以及定制服務(wù)面向智慧城市、智慧交通、智慧金融、智慧校園、智慧應(yīng)急、智慧園區(qū)等不同行業(yè)和細(xì)分場景,為客戶提供全方位的軟硬件支撐和產(chǎn)品自定義能力。
英碼科技的以“感知萬物,智算賦能”為核心理念,軟硬結(jié)合全面賦能千行百業(yè)智能化轉(zhuǎn)型,構(gòu)建無所不及的智能世界。
審核編輯 黃宇
-
華為
+關(guān)注
關(guān)注
215文章
34203瀏覽量
250684 -
AI
+關(guān)注
關(guān)注
87文章
29435瀏覽量
267747 -
架構(gòu)
+關(guān)注
關(guān)注
1文章
505瀏覽量
25427 -
pytorch
+關(guān)注
關(guān)注
2文章
795瀏覽量
13086
發(fā)布評論請先 登錄
相關(guān)推薦
評論