基于華為云ECS的目標檢測與識別的昇騰AI開發體驗
【摘要】 基于華為云彈性云服務器ECS,搭配共享鏡像,快速搭建環境,進行目標檢測與識別的昇騰AI開發體驗,開箱即用,打破時間和空間限制,隨時隨地進行開發,適合個人開發和團隊協作,體驗流暢絲滑。
前言
強大的社會粘性不斷催溫數字化發展,目標檢測與識別作為計算機視覺領域的一項關鍵技術,應用場景廣泛,前景十分廣闊,從城市治理、樓宇園區、互聯網等領域,延伸至智能家居、金融、醫療影像等更多創新領域。隨著這些技術潛移默化地滲透入人們的生活中,各行各業競相通過引入目標檢測和識別等人工智能新技術打開市場空間,關于目標檢測和識別等各類人工智能需求奔涌而來。
但人工智能應用開發門檻高,周期長,各類AI軟件棧理解成本高、各類AI算法模型與業務結合難度高、AI領域開發人員技能要求高,這是AI開發者們的切膚之痛,也是AI基礎服務提供商們必須醫好的癥結。
對此,華為給出了自己的解決方案——昇騰AI。
昇騰AI是以昇騰AI基礎軟硬件平臺為基礎構建的人工智能計算產業,昇騰AI基礎軟硬件平臺包括Atlas系列硬件及伙伴硬件、異構計算架構CANN(Compute Architecture for Neural Networks)、全場景AI框架昇思MindSpore、昇騰應用使能MindX等。作為昇騰AI的核心,異構計算架構CANN兼容多種底層硬件設備形態提供強大的異構計算能力,并且通過多層次編程接口,支持用戶快速構建AI應用和業務,對上承接多種AI框架,對下服務AI芯片與編程,是提升昇騰處理器效率的關鍵。同時,還開源了各種AI應用源碼供個人和企業開發者們免費使用。
通用目標檢測與識別樣例介紹
在計算機視覺領域,CANN最新開源的通用目標檢測與識別樣例,通過其強大的可定制、可擴展性,為AI開發者們提供了良好編程選擇。大量模塊化編程邏輯、可擴展配置,讓開發者們像樂高搭積木一樣,僅需進行簡單的替換和定制,就能實現符合業務場景需求的高性能、企業級AI應用。
該樣例使用了YOLOv3圖片檢測模型與CNN顏色分類模型,基于CANN AI應用編程接口,對數據預處理、模型推理、模型后處理等AI核心計算邏輯進行模塊化組裝,實現了車輛檢測和車身顏色識別基礎功能:
同時,該樣例開放出多個編程定制點,并公開了系統的定制文檔,詳細介紹了樣例代碼結構、編譯運行方法,以及如何基于現有樣例代碼進行功能定制和擴展,讓不同程度的AI開發者們輕松上手。
1. 支持多格式輸入和輸出
CANN通用目標檢測和識別樣例支持圖片、離線視頻、RTSP視頻流等多輸入格式,開發者可基于此樣例實現對圖片和視頻等不同格式的目標進行識別。另外在結果展示方面,該樣例支持圖片、離線視頻、Web前端等多形式展現,可根據業務場景靈活呈現識別結果。
2. 支持輕松替換和串接模型
樣例目前選用的是YOLOv3圖片檢測模型與CNN顏色分類模型的串接,可實現基本的車輛檢測和車輛顏色識別,開發者可輕松修改程序代碼,自行替換/增加/刪除AI模型,實現更多AI功能。
3. 支持高效數據預處理
圖片、視頻等各類數據是進行目標檢測和識別的原料,在把數據投入AI算法或模型前,我們需要對數據進行預加工,才能達到更加高效和準確的計算。該樣例采用獨立數據預處理模塊,支持開發者按需定制,高效實現解碼、摳圖、縮放、色域轉換等各種常見數據處理功能。
4. 支持圖片數、分辨率可變場景定制
在目標檢測和識別領域,開發者們除了需要應對輸入數據格式等方面差異,還會經常遇到圖片數量、分辨率不確定的場景,這也是格外頭疼的問題之一。比如,在目標檢測和識別過程中,由于檢測出的目標個數不固定,導致程序要等到圖片攢到固定數量再進行AI計算,浪費了大量寶貴的AI計算資源。該樣例開放了便捷的定制入口,支持設置多種數據量Batch檔位、多種分辨率檔位,在推理時根據實際輸入情況靈活匹配,不僅擴寬了業務場景,更有效節省計算資源,大大提升AI計算效率。
5. 支持多路多線程高性能編程
同時,為了進一步提高編程的靈活性,滿足開發者實現高性能AI應用,該樣例支持通過極為友好和便捷的方式調整線程數和設備路數,極大降低學習成本,提升設備資源利用率。
6. 高效后處理計算
除此之外,本樣例還將原本需要在CPU上進行處理的功能推送到昇騰AI處理器上執行,利用昇騰AI處理器強大的算力實現后處理的加速,進一步提升整個AI應用的計算效率。
CANN為AI開發者用戶提供了越來越靈活的編程技術支持,讓越來越多的開發者們尋求到了更加友好且高效的編程體驗。讓大學生創新人才更輕松地上手AI開發、開展創意實踐,讓企業開發者們更高效落地商業應用。
通用目標檢測與識別樣例實戰
基礎知識
1. 昇騰形態介紹
以昇騰 AI 處理器的PCIe的工作模式進行區分:
(1)如果PCIe工作在主模式,可以擴展外設,則稱為RC模式;
(2)如果PCIe工作在從模式,則稱為EP模式。EP模式通常由Host側作為主端,Device側作為從端??蛻舻腁I業務程序運行在Host系統中,產品作為Device系統以PCIe從設備接入Host系統,Host系統通過PCIe通道與Device系統交互,將AI任務加載到Device側的昇騰 AI 處理器中運行。
兩種模式的產品及架構如下圖所示:
關于Host和Device的概念說明如下:
Host:是指與昇騰AI處理器所在硬件設備相連接的X86服務器、ARM服務器,利用昇騰AI處理器提供的NN(Neural-Network)計算能力完成業務。
Device:是指安裝了昇騰AI處理器的硬件設備,利用PCIe接口與服務器連接,為服務器提供NN計算能力。
以下是對于目前的昇騰處理器和產品的工作模式總結:
昇騰 AI 處理器的工作模式如下:
? 昇騰310 AI處理器有EP和RC兩種模式。
? 昇騰310P AI處理器(昇騰 710 AI處理器)只有EP模式。
? 昇騰910 AI處理器只有EP模式。支持RC模式的產品有:Atlas 200 AI加速模塊、Atlas 200 DK 開發者套件。
產品的CPU直接運行用戶指定的AI業務軟件,接入網絡攝像頭、I2C傳感器、SPI顯示器等其他外掛設備作為從設備接入產品。支持EP模式的產品
昇騰310 AI處理器:Atlas 200 AI加速模塊、Atlas 300I 推理卡、Atlas 500 智能小站、Atlas 500 Pro 智能邊緣服務器、Atlas 800 推理服務器。
昇騰310P AI處理器:Atlas 300I Pro 推理卡、Atlas 300V Pro 視頻解析卡。
昇騰910 AI處理器:Atlas 800 訓練服務器、Atlas 300T 訓練卡。
2. CANN介紹
(1)昇騰計算語言接口:昇騰計算語言(Ascend Computing Language,AscendCL)接口是昇騰計算開放編程框架,是對低層昇騰計算服務接口的封裝。它提供Device(設備)管理、Context(上下文)管理、Stream(流)管理、內存管理、模型加載與執行、算子加載與執行、媒體數據處理、Graph(圖)管理等API庫,供用戶開發人工智能應用調用。
(2)昇騰計算服務層:本層主要提供昇騰計算庫,例如神經網絡(Neural Network,NN)庫、線性代數計算庫(Basic Linear Algebra Subprograms,BLAS)等;昇騰計算調優引擎庫,例如算子調優、子圖調優、梯度調優、模型壓縮以及AI框架適配器。
(3)昇騰計算編譯引擎:本層主要提供圖編譯器(Graph Compiler)和TBE算子開發支持。前者將用戶輸入中間表達(Intermediate Representation,IR)的計算圖編譯成NPU運行的模型。后者提供用戶開發自定義算子所需的工具。
(4)昇騰計算執行引擎:本層負責模型和算子的執行,提供如運行時(Runtime)庫(執行內存分配、模型管理、數據收發等)、圖執行器(Graph Executor)、數字視覺預處理(Digital Vision Pre-Processing,DVPP)、人工智能預處理(Artificial Intelligence Pre-Processing,AIPP)、華為集合通信庫(Huawei Collective Communication Library,HCCL)等功能單元。
(5)昇騰計算基礎層:本層主要為其上各層提供基礎服務,如共享虛擬內存(Shared Virtual Memory,SVM)、設備虛擬化(Virtual Machine,VM)、主機-設備通信(Host Device Communication,HDC)等。
環境要求
按照官方的文檔說明,如下條件的硬件環境中進行測試,若環境不符合如下要求,樣例可能運行失敗:
產品型號 | 支持的操作系統 |
---|---|
Atlas 200 DK 開發者套件(型號 3000) | Ubuntu 18.04 |
Atlas 300I Pro 推理卡 | Ubuntu 18.04 / CentOS 7.6 |
但遺憾的是,目前我暫無上述兩種設備,不過幸好我手頭有一些代金券,又恰好有上次CANN訓練營的鏡像,那我就在華為云ECS購買一臺云服務器來試試吧。
如圖是我選擇的鏡像:
根據此鏡像,我創建了一臺云服務器,規格為: AI加速型 | ai1s.large.4 | 2vCPUs | 8GiB,系統版本為Ubuntu 18.04 server 64bit,是x86
+ Ascend 310
的硬件組合。不得不說華為云這個彈性云服務器ECS還真是不錯,很方便,當然也感謝上次的CANN訓練營,是的我可以根據鏡像快速創建服務器,不用一個個安裝各種驅動和固件了,贊!
這里記錄一下我這臺云服務器的一些信息:
注意,CANN版本為:5.0.4.alpha001及以上版本,同時解析以下概念:
開發環境指編譯開發代碼的環境。
運行環境指運行推理程序的環境,運行環境必須帶昇騰AI處理器。
開發環境與運行環境合設場景指帶昇騰AI處理器的機器既作為開發環境又作為運行環境,此種場景下,代碼開發與代碼運行在同一臺機器上。
開發環境與運行環境分設場景指開發者使用其他獨立機器進行代碼開發與編譯,而不使用帶有昇騰AI處理器的機器。
而通過上圖,可以看到我這里的CANN版本為:5.0.5.alpha001,對了,咱這是開發環境與運行環境合設場景,安裝用戶是HwHiAiUser。
應用流程介紹
本樣例基于CANN,實現了在昇騰AI處理器上對輸入圖片或者視頻進行目標識別,通用業務流程如下所示:
AscendCL初始化 調用aclInit接口實現初始化AscendCL。
運行管理資源申請 依次申請運行管理資源Device、Context與Stream,確??梢允褂眠@些資源執行運算、管理任務。在申請管理資源時,樣例進行了當前昇騰AI處理器運行模式的判斷,做到不同形態的昇騰AI處理器的代碼實現歸一。
加載模型文件 加載模型文件,并構建模型的輸入與輸出。
數據預處理。針對不同類型的輸入,分別進行不同的處理,使其滿足模型對輸入數據的要求。
模型推理 執行模型推理,并獲取輸出結果。
推理結果后處理 根據用戶選擇的后處理方式,對輸出結果進行不同的處理,例如對推理結果進行標注,輸出為離線視頻文件,或通過網頁在線展示等。
目錄結構
├── model //模型文件夾,存放樣例運行需要的模型文件│ └── xxxx.pb
├── data //數據文件夾│ └── xxxx //測試數據,輸入圖片/視頻 ├── inc //頭文件文件夾│ └── CarParams.h //聲明樣例使用的數據結構的頭文件 ├── out //編譯輸出文件夾,存放編譯生成的可執行文件│ ├── xxxx //可執行文件 │ └── output //結果輸出文件夾(如果不存在需要自行創建)│ └── xxxx //樣例運行的輸出結果├── display //網頁展示功能實現代碼文件夾│ ├── presenterserver //presenterserver文件夾│ └── run_presenter_server.sh//presenterserver啟動腳本├── scripts //配置文件+腳本文件夾│ ├── params.conf //樣例運行配置文件 │ ├── present_start.conf //presentserver啟動配置文件 │ ├── sample_build.sh //快速編譯腳本│ └── sample_run.sh //快速運行腳本├── src
│ ├── acl.json //系統初始化的配置文件 │ ├── CMakeLists.txt //Cmake編譯文件│ ├── classifyPostprocess //分類模型后處理線程文件夾,存放該業務線程的頭文件及源碼│ ├── classifyPreprocess //分類模型預處理線程文件夾,存放該業務線程的頭文件及源碼│ ├── detectPostprocess //檢測模型后處理線程文件夾,存放該業務線程的頭文件及源碼│ ├── detectPreprocess //檢測模型預處理線程文件夾,存放該業務線程的頭文件及源碼│ ├── inference //預處理線程文件夾,存放該業務線程的頭文件及源碼│ ├── presentagentDisplay //網頁展示線程文件夾,存放該業務線程的頭文件及源碼│ └── main.cpp //主函數,圖片分類功能的實現文件 └── CMakeLists.txt //編譯腳本入口,調用src目錄下的CMakeLists文件
環境配置
因為咱這次用的是開發環境與運行環境合設場景,下面操作皆針對此場景設置,如果是分設環境,請參考README。
1. 配置環境變量
以安裝用戶在任意目錄下執行以下命令,打開.bashrc文件。
注意,咱這里安裝用戶就是HwHiAiUser
,但ECS默認登錄是root
用戶,因此需要切換用戶,執行如下命令:
su - HwHiAiUser
運行截圖:
接下來就執行:
vi ~/.bashrc
在文件最后一行后面添加如下內容。
提示:按“i”可以進入編輯狀態。
export CPU_ARCH=`arch` # 使用arch命令自動獲取當前操作系統架構export THIRDPART_PATH=${HOME}/Ascend/thirdpart/${CPU_ARCH} # 存儲第三方庫文件的路徑,例如依賴安裝中的OpenCV、FFmpeg等export LD_LIBRARY_PATH=${HOME}/Ascend/thirdpart/${CPU_ARCH}/lib:$LD_LIBRARY_PATH # 運行時鏈接庫文件export INSTALL_DIR=${HOME}/Ascend/ascend-toolkit/latest # CANN軟件安裝后文件存儲路徑,若是root用戶安裝,$HOME請替換為/usr/local
運行截圖:
執行命令保存文件并退出。
提示:按“Ecs”是退出編輯狀態。
:wq!
執行命令使其立即生效。
source ~/.bashrc
2. 創建第三方依賴文件夾。
注意,因為已經使用鏡像創建的環境已經創建過了,所以這里就跳過,如果之前未創建過,這里要執行:
mkdir -p ${THIRDPART_PATH}
3. 下載samples倉源碼。
先來介紹一些命令,注意先別執行哈:
cd ${HOME} # 此處以將samples源碼倉下載到用戶家目錄為例,開發者可自定義下載路徑
sudo apt-get install git # 可選,如果沒安裝git,則需要執行本命令,本環境可省略,因為已經安裝了。
git clone https://gitee.com/ascend/samples.git
那這里,我執行的是如下命令:
mkdir downloads
cd downloads
git clone https://gitee.com/ascend/samples.git
運行截圖:
4. 將samples源碼倉中的公共庫拷貝到前面創建的第三方依賴文件夾中。
cp -r samples/common ${THIRDPART_PATH}
運行截圖:
依賴安裝
注意,因為咱使用的鏡像很棒,所以以下依賴基本都安裝過了或者根據業務需求,并不需要安裝,所以這里的依賴可省略,但如果確有需求,可參考以下方式安裝。
1. OpenCV
樣例使用OpenCV接口的作用是進行輸入視頻文件的讀取,以及所有類型輸出數據的后處理,數據后處理包括目標標注、不同類型數據的輸出,為此必選依賴。但咱這里預裝過了,所以可以省略。
咱們這是開發環境與運行環境合設場景,所以在環境上執行如下命令安裝OpenCV:
sudo apt-get install libopencv-dev
運行截圖:
提示:這里可能要讓你輸入HwHiAiUser
密碼,如果你之前沒有設置過的話,可以按照如下步驟進行設置:
su - root
passwd HwHiAiUser
這個過程,按照提示操作即可,運行截圖:
2. FFmpeg
樣例中,FFmpeg的作用是在輸入數據類型為RTSP視頻流或者離線視頻的情況下,進行數據切幀的操作,如果業務不包含輸入時RTSP視頻流或者離線視頻的場景,該第三方庫實際上并不會被調用,可以不安裝此依賴。
但還是介紹下,在咱這開發環境與運行環境合設場景的安裝方法,在環境上參考如下命令使用源碼編譯的方式安裝FFmpeg:
# 下載并解壓縮FFmpeg安裝包,此處以將FFmpeg安裝包存儲在用戶家目錄下為例,開發者也可以自定義FFmpeg安裝包存儲路徑。
cd ${HOME}wget http://www.ffmpeg.org/releases/ffmpeg-4.1.3.tar.gz --no-check-certificate
tar -zxvf ffmpeg-4.1.3.tar.gz
cd ffmpeg-4.1.3# 安裝ffmpeg./configure --enable-shared --enable-pic --enable-static --disable-x86asm --prefix=${THIRDPART_PATH}
運行截圖:
下面開始make
了:
make -j2 # 因為我買的ECS是雙核,所以這里寫2,具體數值可根據自己的處理器設置
make install
運行截圖:
3. PresentAgent
PresentAgent是為了將帶有推理結果的圖片數據發送到網頁進行顯示,如果業務場景不存在需要在網頁觀察推理結果的情況,可以不安裝PresentAgent。由于PresentAgent依賴Protobuf,所以若需要使用PresentAgent,也要要同步安裝Protobuf。
在咱們的開發環境與運行環境合設場景,參考如下命令使用源碼方式安裝Protobuf以及PresentAgent:
# 安裝Protobuf相關依賴,可省略,咱們的鏡像環境已經裝過了
sudo apt-get install autoconf automake libtool
運行截圖:
# 下載Protobuf源碼,此處以將Protobuf存儲在用戶家目錄下為例,開發者也可以自定義Protobuf源碼的存儲路徑。
cd ${HOME}
git clone -b 3.13.x https://gitee.com/mirrors/protobufsource.git protobuf
# 編譯安裝Protobuf
cd protobuf ./autogen.sh ./configure --prefix=${THIRDPART_PATH}
make clean
make -j2 # 因為我買的ECS是雙核,所以這里寫2,具體數值可根據自己的處理器設置
sudo make install
# 進入PresentAgent源碼目錄并編譯,PresentAgent源碼存儲在samples倉的“cplusplus/common/presenteragent”目錄下,此處以samples源碼存儲在用戶家目錄的downloads文件夾下為例
cd ${HOME}/downloads/samples/cplusplus/common/presenteragent/proto
${THIRDPART_PATH}/bin/protoc presenter_message.proto --cpp_out=./
# 編譯安裝Presentagnet
cd ..
make -j2
make install
運行截圖:
4. AclLite
AclLite庫是對AscendCL DVPP圖像和視頻處理相關接口,AscendCL設備管理、資源管理、模型推理等接口進行了封裝,旨在為用戶提供一組更簡易的公共接口。本樣例是基于AclLite接口進行的開發,所以需要下載并編譯安裝AclLite庫。但咱這里預裝過了,所以可以省略。
如需安裝,請參考文檔。
模型及數據準備
樣例運行前,請參見本章節準備樣例依賴的模型文件及測試數據文件。
1. 準備模型
模型名稱 | 模型說明 | 模型下載路徑 |
---|---|---|
yolov3 | 圖片檢測推理模型。是基于onnx的Yolov5模型。 | 請參考https://gitee.com/ascend/ModelZoo-PyTorch/tree/master/ACL_PyTorch/built-in/cv/Yolov5_for_Pytorch中的“原始模型”章節下載原始模型網絡文件、權重文件以及配置文件。 |
color | 車輛顏色分類推理模型。是基于tensorflow的CNN模型。 | 請參考https://gitee.com/ascend/ModelZoo-TensorFlow/tree/master/TensorFlow/contrib/cv/ATC_CarColor_tensorflow_AE中的“原始模型”章節下載原始模型網絡文件。 |
2. 模型轉換
需要將下載的原始模型轉換為適配昇騰AI處理器的離線om模型,并放置到樣例代碼中的“model”目錄下。
為方便操作,此處直接給出了原始模型的下載命令以及模型轉換命令,可直接拷貝執行。當然,您也可以參見模型列表中的下載地址中對應的README進行手工操作,并了解更多細節。
# 進入目標識別樣例工程根目錄,根據實際情況,比如我這里就是根據實際路徑
cd $HOME/samples/cplusplus/level3_application/1_cv/detect_and_classify
# 創建并進入model目錄
mkdir model
cd model
# 下載yolov3的原始模型文件及AIPP配置文件
wget https://modelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/YOLOV3_carColor_sample/data/yolov3_t.onnx
wget https://modelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/YOLOV3_carColor_sample/data/aipp_onnx.cfg
運行截圖如下,可以看到網絡速度是真的快啊,OBS和ECS的搭配真是不錯。
下面開始轉換模型了:
# 執行模型轉換命令,生成yolov3的適配昇騰AI處理器的離線模型文件
atc --model=./yolov3_t.onnx --framework=5 --output=yolov3 --input_shape="images:1,3,416,416;img_info:1,4" --soc_version=Ascend310 --input_fp16_nodes="img_info" --insert_op_conf=aipp_onnx.cfg
運行截圖:
接著按照上面的方法,再來一次轉換模型:
# 下載color模型的原始模型文件及AIPP配置文件
wget https://modelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/YOLOV3_carColor_sample/data/color.pb
wget https://modelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/YOLOV3_carColor_sample/data/aipp.cfg
# 執行模型轉換命令,生成color的適配昇騰AI處理器的離線模型文件
atc --input_shape="input_1:10,224,224,3" --output=./color_dvpp_10batch --soc_version=Ascend310 --framework=3 --model=./color.pb --insert_op_conf=./aipp.cfg
運行截圖:
感覺轉個模型轉換,對CPU要求較高,咱這雙核有點慢。
3. 準備數據
樣例編譯時會自動下載測試數據,無需手工下載。
若您想自行下載測試數據,可參見如下命令:
wget https://modelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/YOLOV3_carColor_sample/data/car1.mp4 --no-check-certificate
wget https://modelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/YOLOV3_carColor_sample/data/car2.mp4 --no-check-certificate
wget https://modelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/YOLOV3_carColor_sample/data/car1.jpg --no-check-certificate
樣例數據下載完后請存儲在樣例工程的data目錄下。
樣例編譯運行
請確認之前的環境及模型、數據準備完成。
1. 在通用目標識別樣例工程的根目錄下執行以下命令,進行樣例編譯。
cd scripts
bash sample_build.sh
很遺憾,報錯了,報錯信息如下圖所示:
看這報錯,應該是沒有找到相應的函數或屬性,應該是我們的AclLite
沒安裝編譯,因為當時鏡像已經預裝了,便直接用了,看來不行啊,那么下面安裝一下吧。
以下操作均在安裝用戶HwHiAiUser
下進行,在咱們的開發環境與運行環境合設場景下,先進入acllite目錄,這里要根據實際目錄操作哦:
cd ${HOME}/downloads/samples/cplusplus/common/acllite
make
make install
運行完成截圖:
好了,這次返回通用目標識別樣例工程的根目錄下,再來試試:
bash sample_build.sh
果然,編譯成功了!如下圖所示:
編譯完成后,會在out文件夾下生成可執行文件main。
2. 修改scripts目錄下的params.conf文件,配置樣例的輸入數據類型及結果展示類型。
[base_options]device_num=1 // Device數量 [device_0_options] //Device0的配置參數inputType_0=pic // Device0的輸入數據類型outputType_0=pic // Device0的輸出數據類型inputDataPath_0=../data/pic // Device0的輸入數據路徑#outputFrameWidth_0=1280 //outputType_0為video時,需要配置此參數,代表輸出視頻的寬#outputFrameHeight_0=720 //outputType_0為video時,需要配置此參數,代表輸出視頻的高#[device_1_options] //Device1的配置參數#inputType_1=video
#outputType_1=presentagent
#inputDataPath_1=../data/car2.mp4
#outputFrameWidth_1=2368#outputFrameHeight_1=1080.......
參數說明:
device_num,表示運行此樣例的Device數量,device_X_options表示每一個Device上的配置,其中X為Device ID。需要注意,device_num的優先級高于device_X_options的個數,例如,若device_num配置為1,但配置了兩個Device的詳細信息,即device_0_options與device_1_options,那么實際生效的只有device_0_options,若device_num配置為2,則device_0_options與device_1_options都會生效。
inputType_X,表示DeviceX的輸入數據類型,其中X為Device ID,此參數當前支持的配置項有:
pic:表示輸入數據為圖片,當前此樣例支持的圖片格式為JPEG壓縮圖片
video:表示輸入數據為MP4視頻文件
rtsp:表示輸入數據為rtsp流
outputType_X,表示DeviceX的輸出數據類型,其中X為Device ID,此參數當前支持的配置項有:
pic:表示輸出結果為圖片
video:表示輸出結果為MP4視頻文件
presentagent:表示用PresentAgent展示推理結果
inputDataPath_X:表示DeviceX的輸入數據路徑,其中X為Device ID,此參數的配置規則如下:
若輸入數據類型是圖片,則填寫圖片所在文件夾的相對路徑,只支持填入一個路徑
若輸入數據類型是mp4視頻文件,則填寫視頻文件的相對路徑,只支持填入一個路徑
若輸入數據類型是rtsp流,則填寫rtsp流地址,只支持填入一個地址
咱們這里就暫時不做任何修改了。
3. 注意事項
若輸出類型配置的為“presentagent”,運行可執行文件前您需要參考此步驟啟動PresentServer,若配置的其他輸出類型,則此步驟可跳過。
配置PresentServer配置文件“present_start.conf”,配置文件參數如下:
在通用目標識別樣例根目錄下執行如下命令打開配置文件:
cd scripts
vim present_start.conf配置文件如下所示:
[present_serer_options]# A socket server address to communicate with presenter agent
presenter_server_ip=192.168.1.2# The port of presenter agent and server communicate withpresenter_server_port=7006#the ip in presenter server view web url
presenter_view_ip=192.168.1.2#view entry label in presenter server view web
channel_name=multi_videos
#the data type that send to presenter server from agent, 0:image, 1:video
content_type=1[display]display_channel=0對于Atlas 200 DK開發者板,請填寫Atlas 200 DK的與windows主機通信的IP地址即可,例如“192.168.1.2”
對于Atlas 300加速卡(例如,ai1s云端推理環境),請填寫ai1s的內網IP地址。
其中presenter_server_ip為數據發送IP,presenter_view_ip為網頁展示IP,兩者的IP需要保持一致,配置參考如下:
presenter_server_port:PresenterServer的訪問端口,請配置為PresentAgent的默認端口號7006即可。
啟動PresentServer服務。
在通用目標識別樣例根目錄下執行如下命令啟動PresentServer:
cd display
bash run_presenter_server.sh ../scripts/present_start.conf其中run_presenter_server.sh為PresentServer的啟動腳本,present_start.conf為上一步驟中修改的PresentServer的配置文件。
其中PresentServer后,界面會提示PresentServer服務所使用的IP地址及端口號。訪問PresentServer展示界面。
修改文件:
display/presenterserver/display/ui/templates/view.html
核心代碼:
對于Atlas 200 DK開發者板,請使用啟動PresenterServer服務時提示的URL訪問即可。
對于Atlas 300加速卡(例如,ai1s云端推理環境):
以內網的IP地址為“192.168.0.194”,公網的IP地址為“124.70.8.192”進行舉例說明。
啟動PresentServer服務時提示“Please visit http://192.168.0.194:7009 for display server”,用戶需要將提示URL中的內網IP地址“192.168.0.194”替換為公網IP地址“124.70.8.192”進行訪問,即需要訪問的URL為“http://124.70.8.192:7009”。在windows系統中通過瀏覽器訪問PresentServer網頁界面。
等待PresentAgent傳輸數據給服務端,單擊“Refresh“刷新,當有數據時相應Channel的Status會變成綠色。
然后單擊右側對應的View Name鏈接,查看結果。
說明 :PresentServer當前僅支持顯示前四路,如果業務有修改展示路數的需要,除代碼開發適配外,還需要對網頁UI代碼進行修改:
4. 運行樣例。
cd ../out./main
運行報錯了,如圖所示:
看看這個報錯:
[ERROR] The ../data/car1.mp4 is inaccessible
應該是輸入的視頻../data/car1.mp4
沒找到,我去看了一下,還真沒有,甚至都沒有data
文件夾,看來代碼并沒有自己下載啊,那咱們還是先回到前面,修改下scripts/params.conf
吧,先來看看該文件的內容:
哦,應該就是沒有自動下載,那就先建個data
文件夾,下載幾張圖片,在通用目標識別樣例工程的根目錄下執行:
mkdir data
cd data
wget https://modelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/YOLOV3_carColor_sample/data/car1.mp4 --no-check-certificate
wget https://modelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/YOLOV3_carColor_sample/data/car2.mp4 --no-check-certificate
wget https://modelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/YOLOV3_carColor_sample/data/car1.jpg --no-check-certificate
運行完成截圖:
咱們順便看看下載的這三個文件吧!不過很抱歉的是,視頻展示有點Bug,請大家海涵。
car1.mp4
下面我們來試試PresentServer展示,這時候要配置一下,請參考之前的 3 注意事項部分:
咱們這利用的是ECS,需要在配置里填寫ai1s的內網IP地址??稍贓CS的服務臺找到,如圖所示:
之后要啟動PresentServer服務:
cd display
bash run_presenter_server.sh ../scripts/present_start.conf
啟動后,界面會提示PresentServer服務所使用的IP地址及端口號。
接下來就訪問看看,不過咱們用的是ECS,假設內網的IP地址為“192.168.0.194”,公網的IP地址為“124.70.8.192”。若啟動PresentServer服務時提示“Please visit http://192.168.0.194:7009 for display server”。
則需要將提示URL中的內網IP地址“192.168.0.194”替換為公網IP地址進行訪問,即需要訪問的URL為“http://124.70.8.192:7009”。
如果你遇到無法訪問的情況,請修改下安全組入方向的安全規則,我全部放行了(不建議這樣做,這樣對服務器來說不安全),就能顯示了,當然,也可能是網絡的延遲,等一會可能就行。
下面還是照例修改scripts目錄下的params.conf文件,這里先測試下圖片哈:
[base_options]device_num=1[device0_options]inputType_0=pic #pic ; video ; rtsp
outputType_0=presentagent #pic ; video ; presentagent
inputDataPath_0=../data/car1.jpg
outputFrameWidth_0=1280outputFrameHeight_0=720#[device1_options]#inputType_1 = video
#outputType_1 = presentagent
#inputDataPath_1=../data/car2.mp4
#outputFrameWidth_1=2368#outputFrameHeight_1=1080
之后運行:
cd ../out./main
可以看到運行成功,但是還是沒有顯示,可能是一張圖片不行?下面試試視頻。
換成視頻,照例修改scripts目錄下的params.conf文件,這里先測試下圖片哈:
[base_options]device_num=1[device0_options]inputType_0=video #pic ; video ; rtsp
outputType_0=presentagent #pic ; video ; presentagent
inputDataPath_0=../data/car1.mp4
outputFrameWidth_0=1280outputFrameHeight_0=720#[device1_options]#inputType_1 = video
#outputType_1 = presentagent
#inputDataPath_1=../data/car2.mp4
#outputFrameWidth_1=2368#outputFrameHeight_1=1080
之后再運行:
cd ../out./main
好消息,這次沒問題了,而且速度很快,FPS在30左右,這時候我們輸入的是car1.mp4(1920 * 1080, 30FPS),設置的輸出應該是(1280 * 720),這個性能很強?。?/p>
對了,如果最開始沒有,別擔心,刷新一下,當下圖中綠圈“√”出現時候,點擊右側的multi_videos
就會跳轉了,就能看了:
下面試試car1.mp4(2368 * 1080, 30FPS),輸出大小不變,此時scripts目錄下的params.conf文件配置如下:
[base_options]device_num=1[device0_options]inputType_0=video #pic ; video ; rtsp
outputType_0=presentagent #pic ; video ; presentagent
inputDataPath_0=../data/car2.mp4
outputFrameWidth_0=1280outputFrameHeight_0=720#[device1_options]#inputType_1 = video
#outputType_1 = presentagent
#inputDataPath_1=../data/car2.mp4
#outputFrameWidth_1=2368#outputFrameHeight_1=1080
運行結果:
不得不說,真是太強了,速度幾乎沒變化,FPS仍在30左右,說明輸入階段的視頻解碼和處理很強,應該是DVPP
+ AIPP
(應該是用于色與轉換)的功勞,牛??!
最后奉上 Ascend 310的硬件情況,AI Core的利用率很高,穩定在68%左右,此時功耗大概12.8W,不過這個功耗很穩定,這個運行期間沒什么變化,大約占了1GB的Memory吧,硬件資源占用不大,且利用率高,昇騰果然很強。
結語
整體體驗還是很流暢的,華為云彈性云服務器ECS還真挺好用的,大大減輕了我本地的硬件資源要求,讓我可以輕松方便體驗到昇騰的強大算力,隨時隨地都能開發,只要有網絡即可,搭配鏡像使用就更完美了,這次基于共享鏡像創建環境非常快,不用重復配置,直接進入開發,可以想象,如果是團隊協作開發,效率一定很高,不過最后無法展示有點遺憾,期待更新代碼,完善功能。
如果需要開發新的應用,可以很輕松的在此基礎上進行改進和優化,官方給了非常詳盡的保姆級的教程,手把手教你進行模型替換和開發自己的應用,特別詳細,可以想象官方工程師做了很多努力和工作,詳細的文檔讓人賞心悅目,真是把簡單留給開發者,把困難留給自己了。
道阻且長,未來可期,期待昇騰AI以向上之力,持續推動人工智能產業生態的建設和發展,構建萬物AI的美好世界。
轉載請在文章開頭和結尾顯眼處標注:作者、出處和鏈接。不按規范轉載侵權必究。
未經授權嚴禁轉載,授權事宜請聯系作者本人,侵權必究。
本文禁止轉載,侵權必究。
授權事宜請至數英微信公眾號(ID: digitaling) 后臺授權,侵權必究。
評論
評論
推薦評論
暫無評論哦,快來評論一下吧!
全部評論(0條)