基於Caffe ResNet-50網絡實現圖片分類(僅推理)的實驗復現

華爲雲開發者聯盟 發佈 2022-10-03T04:43:02.770531+00:00

摘要:本實驗主要是以基於Caffe ResNet-50網絡實現圖片分類為例,學習如何在已經具備預訓練模型的情況下,將該模型部署到昇騰AI處理器上進行推理。

摘要:本實驗主要是以基於Caffe ResNet-50網絡實現圖片分類(僅推理)為例,學習如何在已經具備預訓練模型的情況下,將該模型部署到昇騰AI處理器上進行推理。

本文分享自華為雲社區《【CANN訓練營】【2022第二季】【新手班】基於Caffe ResNet-50網絡實現圖片分類(僅推理)的實驗復現-雲社區-華為雲》,作者: StarTrek 。

本實驗主要是以基於Caffe ResNet-50網絡實現圖片分類(僅推理)為例,學習如何在已經具備預訓練模型的情況下,將該模型部署到昇騰AI處理器上進行推理。該實驗的主要任務有:

1、將Caffe ResNet-50網絡的模型文件轉換為適配昇騰AI處理器的離線模型( * .om文件);

2、加載該om文件,對2張 * .jpg圖片進行同步推理,分別得到推理結果後,再對推理結果進行處理,輸出top5置信度的類別標識;

3、將測試的圖片替換為自己的圖片並重新編譯運行。

一、雲伺服器的使用

首先為了更好的讓我們能夠了解並學習昇騰的相關知識,華為CANN訓練營為每一位學員都給予了一定的雲伺服器資源,關於雲伺服器的使用簡單總結如下:

本次提供的共享鏡像是:Ubuntu 18.04(系統) + 5.1.RC2.alpha005(CANN環境版本)

登陸華為雲->進入控制台->申請ESC彈性雲伺服器->獲取彈性公網IP->運用SSH遠程訪問雲伺服器->正常按照ubuntu系統的終端命令來操作使用伺服器

資源連結:

遠程終端軟體推薦MobaXterm:https://mobaxterm.mobatek.net/

軟體使用方法:https://blog.csdn.net/xuanying_china/article/details/120080644

進入終端後為root用戶,需要進入HwHiAiUser用戶

指令:

     cd /home/
        su - HwHiAiUser

可以使用ls或者ll指令隨意瀏覽系統中已有的文件情況。

二、基於Caffe ResNet-50網絡實現圖片分類(僅推理)實驗

準備工作完成之後,下面就可以開始正式的實驗之旅啦!可以按照倉庫里的readme文件所述步驟一步步操作,此處也僅僅只是簡單的給出實驗的步驟和實驗圖。

倉庫資源連結:

https://gitee.com/ascend/samples/tree/master/cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification

1、下載樣例代碼

克隆sample倉里的代碼

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

進入到resnet50_imagenet_classification樣例的文件夾中

     cd samples/
        cd cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification

2、獲取ResNet-50預訓練模型

先創建一個用來存儲該模型的文件夾,並打開該文件夾

     mkdir caffe_model
        cd caffe_model

從網頁直接通過命令下載預訓練模型:權重文件(resnet50.caffemodel)和模型文件(resnet50.prototxt)

     wegt https://modelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/resnet50/resnet50.prototxt
        wegt https://modelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/resnet50/resnet50.caffemodel

3、模型轉換

上述下載的預訓練模型需要首先運用ATC模型轉換工具將該模型轉換成昇騰AI處理器支持的離線模型(.om)

官方文檔ATC工具學習資源:

https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/51RC2alpha005/infacldevg/atctool

流程:

首先先切換到樣例目錄下(接著上面的操作就是上一級目錄)

     cd ../

然後運行模型轉換工具

     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

打開model文件夾可以看到resnet50.om已經轉換完成了

4、下載測試圖片

進入data文件夾,並下載兩張ImageNet數據集中存在類別的圖片

     cd ../data/
        wget https://c7xcode.obs.cn-north-4.myhuaweicloud.com/models/aclsample/dog1_1024_683.jpg
        wget https://c7xcode.obs.cn-north-4.myhuaweicloud.com/models/aclsample/dog2_1024_683.jpg

測試的兩張圖

5、圖片格式轉換

下載的圖片是JPEG格式的,需要轉換成適合模型輸入要求格式的二進位文件(.bin)

在data目錄下,執行transferPic.py腳本,將*.jpg轉換為*.bin,同時將圖片從1024 * 683的解析度縮放為224 * 224。

     python3 ../script/transferPic.py

6、編譯運行

進入「cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification」樣例目錄

     cd ../

設置臨時的環境變量,配置程序編譯依賴的頭文件與庫文件路徑

     export DDK_PATH=$HOME/Ascend/ascend-toolkit/latest
        export NPU_HOST_LIB=$DDK_PATH/acllib/lib64/stub

建立build文件夾,準備編譯代碼文件

     mkdir -p build/intermediates/host

進入build文件夾,編譯.cpp文件

     cd build/intermediates/host
        cmake ../../../src -DCMAKE_CXX_COMPILER=g++ -DCMAKE_SKIP_RPATH=TRUE
        make

可以在樣例目錄(cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification)下的out文件夾中找到編譯好的可執行main文件,接下來我們直接運行main文件

     cd ../../../out/
        ./main

三、替換圖片數據進行測試

這裡在網上隨便找了兩張圖(一張金魚label-1,一張金毛犬label-207),可以隨意找幾張圖,只要是JPG格式的圖片即可,圖片中的事物類型最好是ImageNet數據集標籤中的類型。

1、添加圖片並轉換格式

可以直接下載到本地電腦中,然後直接將文件拖到MobaXterm軟體的雲伺服器文件列表中,為了方便直接先在列表中找到前面的data文件夾,然後直接拖拽到該文件夾下即可。

按照前面的操作(5、圖片格式轉換)重新進行圖片文件格式的轉換,在data目錄下運行

     python3 ../script/transferPic.py

2、修改sample_process.cpp源碼,添加新增的兩張圖片的路徑

在testFile列表中增加前面新添加的並轉換好的那兩張bin格式的文件路徑,路徑仿照前兩個寫即可,不過別忘記不同文件路徑間的逗號分隔哦

3、重新編譯源碼

按照前面的步驟進行即可(6、編譯運行),需要注意的是,如果重啟過伺服器,之前設置的編譯臨時環境會丟失,需要再次設置臨時的環境變量(配置程序編譯依賴的頭文件與庫文件路徑),然後可以在build/intermediates/host文件下直接運行make編譯即可,編譯器會自動編譯修改過的源文件並覆蓋。

4、推理

按照前面的步驟重新運行編譯好的main文件即可(6、編譯運行中的最後一步),注意文件的路徑,需要在out文件夾下運行,因為main文件是被保存在這裡的。

最後我們可以看到

標籤為1是金魚,第一張圖是金魚的概率為99.7070%

標籤為207是金毛犬,第二張圖是金毛犬的概率為99.5605%

點擊下方,第一時間了解華為雲新鮮技術~

華為雲博客_大數據博客_AI博客_雲計算博客_開發者中心-華為雲

關鍵字: