【2023 · CANN訓(xùn)練營第一季】——根據(jù)ReadMe運(yùn)行第一個Sample例程
前言:
????????昇騰提供了以CANN AscendCL接口開發(fā)的樣例倉,方便開發(fā)者學(xué)習(xí)。樣例倉提供了C&C++、Python兩種語言的樣例。
????????每個樣例都有Readme,里面詳細(xì)描述了功能、準(zhǔn)備模型,準(zhǔn)備數(shù)據(jù),編譯、運(yùn)行的步驟。本筆記將根據(jù)Readme,完成resnet50_imagenet_classification工程的C++和Python兩個版本的推理應(yīng)用。
一、昇騰sample倉
?1、昇騰sample倉概述
????????CANN AscendCL(Ascend Computing Language)提供Device管理、Context管理、Stream管理、內(nèi)存管理、模型加載與執(zhí)行、算子加載與執(zhí)行、媒體數(shù)據(jù)處理等C語言API庫供用戶開發(fā)深度神經(jīng)網(wǎng)絡(luò)應(yīng)用,用于實(shí)現(xiàn)目標(biāo)識別、圖像分類等功能。用戶可以通過第三方框架調(diào)用AscendCL接口,以便使用昇騰AI處理器的計(jì)算能力;用戶還可以使用AscendCL封裝實(shí)現(xiàn)第三方lib庫,以便提供昇騰AI處理器的運(yùn)行管理、資源管理能力。
????????昇騰樣例倉就是以CANN AscendCL接口進(jìn)行開發(fā),制作的一系列給開發(fā)者進(jìn)行參考學(xué)習(xí)的樣例。這些樣例主要分成“單一功能接口樣例level1_single_api”和“推理教學(xué)樣例level2_simple_inference”,推理教學(xué)樣例又包含了:數(shù)據(jù)處理樣例、分類樣例、檢測樣例、自然語言處理樣例等,基本上囊括了AI的主要方向的推理應(yīng)用。這些例程提供了C++和Python兩種實(shí)現(xiàn),目錄如下:

2、sample倉的學(xué)習(xí)方法
????????了解了sample倉的目錄結(jié)構(gòu)后,我們就可以逐級找到自己感興趣的例程進(jìn)行學(xué)習(xí),上手跑一下例程。
????????進(jìn)入一個具體的工程,首先要看的是Readme,這里面介紹了:工程的功能、工程的目錄結(jié)構(gòu)、獲取模型和待推理的圖片、編譯和運(yùn)行的步驟、關(guān)鍵的功能介紹。我們按照Readme的步驟,一步一步做下去就可以了。
????????以resnet50_imagenet_classification的C++版為例,目錄結(jié)構(gòu)如下:

?????? ?RESNET50是一個?“圖片分類應(yīng)用”的模型,用來標(biāo)識圖片所屬的分類,流程如下:

二、運(yùn)行Resnet50圖片分類樣例——C++版
工程路徑:samples/cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification。
????????用Visual Studio code打開工程的Readme文件,如下圖所示,按Readme里的說明一步一步即可完成第一個用例。用Mobaxtem連接到ECS上,由于sample倉已經(jīng)下載,我們直接從第三步“準(zhǔn)備模型”開始。

1、準(zhǔn)備模型
????(1)步驟一:在工程路徑下創(chuàng)建?caffe_model目錄,并進(jìn)入caffe_model目錄。caffe_model是用來存放resnet50的原始caffe模型的。mkdir?caffe_model && cd?caffe_model
? ?(2)?步驟二:下載原始網(wǎng)絡(luò)的模型文件(*.prototxt)、權(quán)重文件(*.caffemodel),根據(jù)Readme中的文件路徑,使用wget獲取對應(yīng)文件。
wget?https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/resnet50/resnet50.prototxt
?wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/resnet50/resnet50.caffemodel
? ? (3)步驟三:在工程目錄下,創(chuàng)建model目錄,用來存放轉(zhuǎn)換后om格式的離線模型。先執(zhí)行cd ..,退回到工程目錄,再mkdir model創(chuàng)建model目錄(因?yàn)榇a指定om模型路徑是工程目錄下的model目錄??截恟eadme中模型轉(zhuǎn)換命令到mobaXterm中執(zhí)行。
atc --model=caffe_model/resnet50.prototxt --weight=caffe_model/resnet50.caffemodel --framework=0 --output=model/resnet50 --soc_version=Ascend310 --input_format=NCHW --input_fp16_nodes=data --output_type=FP32 --out_nodes=prob:0
操作截圖:

2、準(zhǔn)備測試圖片
????(1)下載圖片
????????進(jìn)入data目錄,用wget命令下載待推理圖片2張。

? ? (2)轉(zhuǎn)換圖片
????????切換到“樣例目錄/data“目錄下,執(zhí)行transferPic.py腳本,將*.jpg轉(zhuǎn)換為*.bin,同時將圖片從1024*683的分辨率縮放為224*224。在“樣例目錄/data“目錄下生成2個*.bin文件。
????????python3 ../script/transferPic.py
????????執(zhí)行腳本報錯“ModuleNotFoundError: No module named 'PIL'”,則表示缺少Pillow庫,使用**pip3 install Pillow --user**命令安裝Pillow庫。

3、編譯
????????根據(jù)Readme,大致過程是:配置環(huán)境變量,用cmake工具生成Makefile,編譯程序。

4、運(yùn)行
????(1)運(yùn)行過程

????(2)運(yùn)行結(jié)果:


三、運(yùn)行Resnet50圖片分類樣例——python版
? ? ? ? 工程路徑:
/samples/python/level2_simple_inference/1_classification/resnet50_imagenet_classification
????????準(zhǔn)備模型和圖片的過程與C++版本一致,不再重復(fù)。推理結(jié)果與C++版本一致。
