加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專(zhuān)業(yè)用戶(hù)
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • CANN架構(gòu)介紹
    • 結(jié)語(yǔ)
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

【技術(shù)干貨】教你如何基于華為昇騰CANN架構(gòu)快速實(shí)現(xiàn)模型推理應(yīng)用

03/08 10:20
5953
閱讀需 20 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

昇騰的AI軟件棧平臺(tái)、開(kāi)源框架、CANN、MindSpore、MindX 等工具,可以讓開(kāi)發(fā)者實(shí)現(xiàn)「統(tǒng)一端邊云,全端自動(dòng)部署」,開(kāi)啟了機(jī)器學(xué)習(xí)開(kāi)發(fā)的新時(shí)代,一直被人們寄予厚望。但正因?yàn)橘Y源極其豐富,浩如星辰,想要快速尋找,到摸索清楚其中的原理,并最終結(jié)合自己手上的項(xiàng)目實(shí)現(xiàn)應(yīng)用部署,人力成本、時(shí)間成本將增加不少,不利于快速推進(jìn)項(xiàng)目。

現(xiàn)在~好消息來(lái)了!經(jīng)過(guò)英碼科技工程師們的認(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)是華為針對(duì)AI場(chǎng)景推出的異構(gòu)計(jì)算架構(gòu),向上支持多種AI框架,包括MindSpore、PyTorch、TensorFlow等,向下服務(wù)AI處理器與編程,發(fā)揮承上啟下的關(guān)鍵作用,是提升昇騰AI處理器計(jì)算效率的關(guān)鍵平臺(tái)。同時(shí)針對(duì)多樣化應(yīng)用場(chǎng)景,提供多層次編程接口,支持用戶(hù)快速構(gòu)建基于昇騰平臺(tái)的AI應(yīng)用和業(yè)務(wù)。

01、樣例1介紹(ResNet50模型)

▍基于PyTorch框架的ResNet50模型,對(duì)*.jpg圖片分類(lèi),輸出各圖片所屬分類(lèi)的編號(hào)、名稱(chēng)。

樣例的理流程如下圖所示:

1、樣例下載

命令行方式下載(下載時(shí)間較長(zhǎng),需稍作等待)。

# 開(kāi)發(fā)環(huán)境,非root用戶(hù)命令行中執(zhí)行以下命令下載源碼倉(cāng)。

cd ${HOME}

git clone https://gitee.com/ascend/samples.git

?注:?如果需要切換到其它tag版本,以v0.9.0為例,可執(zhí)行以下命令。

git check out?v0.9.0

樣例的代碼目錄說(shuō)明如下:

2、準(zhǔn)備環(huán)境

(1)安裝CANN軟件

最新版本的CANN軟件安裝指南請(qǐng)戳→安裝指南

注:英碼科技EA500I智能工作站系統(tǒng)環(huán)境中已適配該軟件,無(wú)需另行下載安裝。

(2)設(shè)置環(huán)境變量

注:“$HOME/Ascend”請(qǐng)?zhí)鎿Q“Ascend-cann-toolkit”包的實(shí)際安裝路徑。

# 設(shè)置CANN依賴(lài)的基礎(chǔ)環(huán)境變量

. ${HOME}/Ascend/ascend-toolkit/set_env.sh

#如果用戶(hù)環(huán)境存在多個(gè)python3版本,則指定使用python3.7.5版本

export?PATH=/usr/local/python3.7.5/bin:$PATH

#設(shè)置python3.7.5庫(kù)文件路徑

export?LD_LIBRARY_PATH=/usr/local/python3.7.5/lib:$LD_LIBRARY_PATH

# 配置程序編譯依賴(lài)的頭文件與庫(kù)文件路徑

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 install?libopencv-dev

3、樣例運(yùn)行

(1)獲取PyTorch框架的ResNet50模型(*.onnx),并轉(zhuǎn)換為昇騰AI處理器能識(shí)別的模型(*.om)

注:此處以昇騰310 AI處理器為 例,針對(duì)其它昇騰AI處理器的模型轉(zhuǎn)換,需修改atc命令中的-- soc_version參數(shù)值。

# 為方便下載,這里直接給出原始模型下載及模型轉(zhuǎn)換命令,可以直接拷貝執(zhí)行。

cd $HOME/samples/inference/modelInference/sampleResnetQuickStart/

cpp/model wget?https://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ì)約束說(shuō)明請(qǐng)參見(jiàn)《ATC模型轉(zhuǎn)換指南》。

--model :ResNet-50網(wǎng)絡(luò)的模型文件的路徑

--framework:原始框架類(lèi)型。5表示ONNX。

--output:resnet50.om模型文件的路徑。請(qǐng)注意,記錄保存該om模型文件的路徑,后續(xù)開(kāi)發(fā)應(yīng)用時(shí)需要使用。

--input_shape:模型輸入數(shù)據(jù)的shape。

--soc_version:昇騰AI處理器的版本。

說(shuō)明:如果無(wú)法確定當(dāng)前設(shè)備的soc_version,則在安裝驅(qū)動(dòng)包的服務(wù)器執(zhí)行npu-smi info 命令進(jìn)行查詢(xún),在查詢(xún)到的“Name“前增加Ascend信息,例如“Name“對(duì)應(yīng)取值為_(kāi)xxxyy_ , 實(shí)際配置的soc_version值為Ascend_xxxyy_。

(2)獲取測(cè)試圖片數(shù)據(jù)

請(qǐng)從以下鏈接獲取該樣例的測(cè)試圖片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

注:若需更換測(cè)試圖片,則需自行準(zhǔn)備測(cè)試圖片,并將測(cè)試圖片放到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表示類(lèi)別標(biāo)識(shí)、conf表示該分類(lèi)的?最大置信度,class表示所屬類(lèi)別。這些值可能會(huì)根據(jù)版本、環(huán)境有所不同,請(qǐng)以實(shí)際情況為準(zhǔn):

[INFO] The sample starts to run

out_dog1_1024_683.jpg

label:162 conf:0.902209 ?class:beagle

[INFO] The?program runs successfully

4、代碼邏輯詳解(C&C++語(yǔ)言)

樣例中的接口調(diào)用流程如下圖所示:

在此樣例基礎(chǔ)上:

若想要更換測(cè)試圖片,只需自行準(zhǔn)備好新的jpg圖片并存放到樣例的data目錄下,圖片數(shù)據(jù)預(yù)處理時(shí)會(huì)自 動(dòng)從該目錄下讀取圖片數(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)行后處理。

須知:?一般來(lái)說(shuō),更換其它圖片分類(lèi)模型(例如resnet50- >resnet101) ?,由于同類(lèi)模型的輸入、輸出類(lèi) 似,在此樣例基礎(chǔ)上改動(dòng)較小,但如果更換為其它類(lèi)型的模型(例如目標(biāo)檢測(cè)模型),由于不同類(lèi)型模?型的輸入、輸出差別較大,在此樣例基礎(chǔ)上數(shù)據(jù)預(yù)處理、模型輸入&輸出準(zhǔn)備以及數(shù)據(jù)后處理等改動(dòng)很大,建議在Ascend Sample倉(cāng)先找到目標(biāo)檢測(cè)類(lèi)的樣例,再基于目標(biāo)檢測(cè)樣例修改。

02、樣例2介紹(YOLOV7模型)

以YOLOV7網(wǎng)絡(luò)模型為例,使能Acllite對(duì)圖片進(jìn)行預(yù)處理,并通過(guò)模型轉(zhuǎn)換使能靜態(tài)AIPP功能,使能AIPP功能后,YUV420SP_U8格式圖片轉(zhuǎn)化為RGB,然后減均值和歸一化操作,并將該信息固化到轉(zhuǎn)換后的離線(xiàn)模型中,對(duì)YOLOV7網(wǎng)絡(luò)執(zhí)行推理,對(duì)圖片進(jìn)行物體檢測(cè)和分類(lèi),并給出標(biāo)定框和類(lèi)別置信度。

樣例輸入:圖片。樣例輸出:圖片物體檢測(cè),并且在圖片上給出物體標(biāo)注框,類(lèi)別以及置信度。1

獲取源碼包

可以使用以下兩種方式下載,請(qǐng)選擇其中一種進(jìn)行源碼準(zhǔn)備。

命令行方式下載(下載時(shí)間較長(zhǎng),但步驟簡(jiǎn)單):

# 開(kāi)發(fā)環(huán)境,非root用戶(hù)命令行中執(zhí)行以下命令下載源碼倉(cāng)。
cd ${HOME}git clone https://gitee.com/ascend/samples.git

注:如果需要切換到其它tag版本,以v0.5.0為例,可執(zhí)行以下命令。

git checkout?v0.5.0壓縮包方式下載(下載時(shí)間較短,但步驟稍微復(fù)雜)。注:如果需要下載其它版本代碼,請(qǐng)先請(qǐng)根據(jù)前置條件說(shuō)明進(jìn)行samples倉(cāng)分支切換。# 1. samples倉(cāng)右上角選擇【克隆/下載】下拉框并選擇【下載ZIP】。
# 2. 將ZIP包上傳到開(kāi)發(fā)環(huán)境中的普通用戶(hù)家目錄中,【例如:${HOME}/ascend-samples- master.zip】。
# 3. 開(kāi)發(fā)環(huán)境中,執(zhí)行以下命令,解壓zip包。cd ${HOME}unzip ascend-samples-master.zip

2、第三方依賴(lài)安裝

設(shè)置環(huán)境變量,配置程序編譯依賴(lài)的頭文件,庫(kù)文件路徑?!?HOME/Ascend”請(qǐng)?zhí)鎿Q“Ascend-cann-toolkit”包的?實(shí)際安裝路徑。export DDK_PATH=$HOME/Ascend/ascend-toolkit/latestexport NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stubexport THIRDPART_PATH=${DDK_PATH}/thirdpartexport LD_LIBRARY_PATH=${THIRDPART_PATH}/lib:$LD_LIBRARY_PATH

創(chuàng)建THIRDPART_PATH路徑:

mkdir?-p?${THIRDPART_PATH}

acllite

注:源碼安裝ffmpeg主要是為了acllite庫(kù)的安裝 執(zhí)行以下命令安裝x264# 下載x264cd ${HOME}git clone?https://code.videolan.org/videolan/x264.gitcd?x264# 安裝x264./configure --enable-shared --disable-asmmakesudo?make?installsudo 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?-zxvf?ffmpeg-4.1.3.tar.gz

cd?ffmpeg-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/cplusplusmakemake install

安裝opencv

執(zhí)行以下命令安裝opencv(注:須確保是3.x版本)

sudo apt-get install?libopencv-dev

3、樣例運(yùn)行

(1)數(shù)據(jù)準(zhǔn)備

請(qǐng)從以下鏈接獲取該樣例的輸入圖片,放在data目錄下。

cd $HOME/samples/inference/modelInference/sampleYOLOV7/datawget?https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog1_1024_683.jpg

(2)ATC模型轉(zhuǎn)換

將YOLOV7原始模型轉(zhuǎn)換為適配昇騰310處理器的離線(xiàn)模型(*.om文件),放在model路徑下。#為了方便下載,在這里直接給出原始模型下載及模型轉(zhuǎn)換命令,可以直接拷貝執(zhí)行。?cd $HOME/samples/inference/modelInference/sampleYOLOV7/modelwget?https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/yolov7/yolov7x.onnxwget?https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/yolov7/aipp.cfgatc?--model=yolov7x.onnx?--framework=5 --output=yolov7x --input_shape="images:1,3,640,640" ?--soc_version=Ascend310 ?--insert_op_conf=aipp.cfg樣例編譯執(zhí)行以下命令,執(zhí)行編譯腳本,開(kāi)始樣例編譯。cd $HOME/samples/inference/modelInference/sampleYOLOV7/scriptsbash sample_build.sh樣例運(yùn)行執(zhí)行運(yùn)行腳本,開(kāi)始樣例運(yùn)行。bash sample_run.s

(3)樣例結(jié)果展示

運(yùn)行完成后,會(huì)在樣例工程的out目錄下生成推理后的圖片,顯示對(duì)比結(jié)果如下所示。

結(jié)語(yǔ)

以上內(nèi)容詳細(xì)介紹了在昇騰CANN架構(gòu)下,基于PyTorch框架的ResNet50模型,以及基于YOLOV7網(wǎng)絡(luò)模型如何快速實(shí)現(xiàn)模型推理應(yīng)用的主要流程,尤其方便已購(gòu)買(mǎi)英碼科技EA500I邊緣計(jì)算盒子的開(kāi)發(fā)者朋友們快速實(shí)現(xiàn)推理應(yīng)用。

下期將會(huì)繼續(xù)更新關(guān)于昇騰開(kāi)發(fā)工具的其他詳細(xì)使用教程,歡迎關(guān)注!

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
KSZ8081MLXIA 1 Microchip Technology Inc DATACOM, ETHERNET TRANSCEIVER, PQFP48

ECAD模型

下載ECAD模型
$1.86 查看
KSZ8995MA 1 Microchip Technology Inc DATACOM, LAN SWITCHING CIRCUIT, PQFP128

ECAD模型

下載ECAD模型
$7.2 查看
BCM5241A1IMLG 1 Broadcom Limited Ethernet Transceiver, PACKAGE
$3.42 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜