作者:許哲豪
將智慧應用服務從雲端移向邊緣端已漸漸成為主流趨勢,邊緣智慧(Edge AI)裝置無需上網就能獨立運作,且擁有高隱私、高速回應、低功耗、低成本等特性,但也常因場地、空間及算力限制,所以不容易找到合適的設備可以使用,尤其像是電腦視覺這類高算力需求應用。
常見的電腦視覺AI應用中有影像分類、物件偵測、人臉相關(如身份、特徵點、表情)、影像(語義、實例)分割、姿態估測(骨架、手勢偵測)、超解析度、深度估測、影像增強(低照、去噪)等應用。通常模型推論一次所需計算量從不到 1 TOPS(每秒一兆次運算)到數十 TOPS不等,若再加上滿足二次推論間隔 、影像前後處理及多攝影機(多串流影像)問題,則一般 CPU 絕對難以負擔,而使用獨立 GPU 則體積大散熱不易且又貴又耗電,那麼如何選用足夠算力的AI加速卡就變得非常重要。
此次很高興受到研華科技(Advantech)邀約,取得一款巴掌大超迷你無風扇的微型工業電腦【AIR-150】[1]進行評測。這款機器內搭 M.2 型式 【Hailo-8 高效 AI 加速模組】[2],具有 26 TOPS 推論能力,正好可以解決惡劣環境、空間窄小及AI應用推論算力不足的問題。
為了讓大家更了解這款機器在邊緣智慧整體效能如何,以下分別從硬體規格、開發環境建置、模型選用轉換及推論性能實測結果來幫大家介紹一下,希望能有助於大家未來專案建置及選用。
硬體規格簡介
1.1 研華科技 AIR-150 嵌入式電腦
【AIR-150】主要硬體規格如下所示,更完整的內容可參考[1]。
- CPU: Intel Core i5-1345UE (工作頻率1.6G ~ 4.6GHz,10核心,12執行緒,內含 iGPU Iris® Xe Graphics)
- 記憶體: DDR5 32GB
- AI加速: 搭配 Hailo-8 M.2 AI 加速模組
- 顯示輸出: 雙 4K HDMI 2.0 (最大解析度 4096×2160)
- 外置接頭: 3x COM / 1x DIO / 2x CANBus / 2x LAN /4x USB
- 擴充槽位: 3x M.2: M key 2280, E key 2230, B key 3042
- 外觀尺寸: 156 x 112 x 60mm
- 散熱方式: 機殼散熱鰭片,無風扇。
- 環境溫度: -20 ~ 60 °C
- 工作電壓: 12 ~ 24 VDC
1.2 Hailo Hailo-8 M.2 AI加速模組
【Hailo-8 M.2 AI加速模組】主要硬體規格如下所示,更完整的內容可參考[2]。
- 算力: 26 TOPS (Tera-Operations Per Second)
- 功耗: 2.5 W
- 模組介面:
- M.2 Key M, B+M, PCIe Gen-3.0 4 Lanes (Up to 32Gbs)
- M.2 Key A+E, PCIe Gen-3.0 2 lanes (Up to 16Gbs)
- 外觀尺寸:
- M.2 Key M, B+M, 22x42mm (含可折斷擴展板 22x60mm, 22x80mm)
- M.2 Key A+E, 22x30mm
- 可擴展性: 支持多串流影像、多模型及多模組同時運行
- 工作溫度:工業級 -40 ~ 85 °C, 車用級 -40 ~ 105°C
- 同級產品性價比最佳,TOPS/W & TOPS/$。
- 容易硬體整合,不需額外記憶體。
- 神經網路模型及應用支援
- AI 開發框架:TensorFlow, TensorFlow Lite, Keras, PyTorch, ONNX
- 適用硬體架構: X86, ARM
- 適用作業系統: Linux(模型建置、推論運行), Windows(僅推論運行)
- 開發軟體套件: Dataflow Compiler, HailoRT, Model Zoo, TAPPAS
- 支援快速自定義模型編譯轉換
開發環境建置
2.1 研華 EdgeAI SDK
一個AI專案開發,從選用平台、資料收集、模型訓練、推論應用開發、推論運行環境建置、推論概念證明(模型部署)到重新調整開發,要不斷迭代才能有最好的解決方案產生。
研華科技為了滿足開發者想要快速比較在不同硬體上運行不同應用的表現,同時解決大量系統環境及應用程式部署問題,因此推出了「EdgeAI SDK」[3]。這項工具目前僅能運行在 Linux 上,建議版本在 Ubuntu 22.04 (kernel: 5.15.0-1027-intel-iotg)。以下就簡單說明安裝程序及主要功能。
2.1.1EdgeAI SDK 安裝程序首先從[3]頁面最下方下載 EdgeAI SDK v2.0.1, 其中包含下列 AI 套件及工具。
- OpenVINO 2023.01 (含 runtime, benchmark_app)
- OpenCV 4.7.0
- AI Demos:
- Object Detection
- Person Detection
- Face Recognition
- Pose Estimation
安裝前請注意下列幾點。
- 不要安裝在Ubuntun 22.04 Kernel 大於 5.15.0-1027 以上版本。
- 不要使用 sudo su 或 sudo 權限進行安裝。
- 安裝時要保持網路連線正常,因為要下載及安裝其它項目。
- 不要在安裝前執行 apt upgrade
接著請依下列步驟執行解壓縮及安裝動作。
tar zxvf Edge_AI_SDK-installer-2.0.1.tar.gz
./Edge_AI_SDK-installer.run
如Fig. 3所示,安裝過程中須按兩次 Y,同意安裝 EdgeAI SDK 及版權內容。接著出現安裝畫面,按下 OK,再選擇 AI 加速裝置「3 Hailo-8」,輸入啟動時所需使用者資訊,按下 Next,勾選「I accept the argeement」按下「Activate」,接著從輸入的電子信箱收到的啟動碼(token),按下「Confirm」,即完成啟動工作。
若之後想要移除時,如下指令操作,進入指定路徑,反安裝即可。
cd /opt/Advantech/EdgeAISuite
./uninstall.sh
更多完整的安裝說明,可參考[4]。
2.1.2 EdgeAI SDK 主要功能
目前 EdgeAI SDK 提供了快速操作及系統監視兩大項目,如Fig. 4所示。在快速操作區中,首先選擇一種AI應用內容,包括物件偵測、人臉偵測、人員偵測及姿態估測,點擊後會出現應用說明。接著選擇欲輸入的資料來源,可以上傳一個影片檔(*.mp4),或直接以網路攝影機作為連續影像來源。最後選擇推論裝置,包括CPU(Core i5-1345UE), iGPU(Iris Xe)及VPU(Hailo-8)。
開始進行推論後,可切換至系統監視區,了解記憶體使用量、各裝置使用率(%)、工作溫度(℃)及不同裝置推論速度(FPS,每秒多少張影像)。透過這樣的工具馬上就能快速評估硬體及模型初步的運行效果。
更多完整的安裝說明,可參考[5]。
2.2 Hailo-8 AI Software Suite
2.2.1 下載最新開發套件
為了更完整測試,於是找了一台空的固態硬碟(SSD),重新安裝了 Ubuntu 22.04 (Kernel 版本 6.5.0-27),結果發現 Kernel 版本太新,研華提供的 EdgeAI SDK v2.0.1 無法順利安裝,使得 Hailo-8 AI 模組無法順利啟動。
為了讓 Hailo-8 AI 模組能在 Ubuntu 22.04 上順利工作,只好從研華官網[6]下載 Hailo AI_Software Suite_Ubuntu 22.04_2023-10 進行安裝。不幸地是,這個套件包搭配的是 Hailo AI SW Suite 2023-10 v4.15 的版本,同樣地,它也不相容於 Ubuntu 22.04 Kernel 6.5.0-27 的環境。
為了取得 Hailo 最新版本的套件包,只好到官網開發者區(Developer Zone)[7]申請一個帳號,下載最新版本的套件 Hailo AI Software Suite (以下簡稱 Hailo Suite)。這裡要注意,如果你使用的是 hotmail 或 gmail 等免費電子信箱是無法註冊的,要改用學校或公司的電子信箱才能成功申請到開發者帳號。
登入帳號後,點擊下方「軟體下載(Software Downloads)」,進入後預設會選擇「ACCELERATORS」、「Latest releases」,勾選「AI Software Suite」-「AI Software Suite」-「x86」-「Linux」-「3.8」。此時會看到 Hailo AI Software Suite – Self Extractable 最新版本為 2024-04,而 HailoRT – PCIe driver Ubuntu package(deb)最新版本為 v4.17.0,點擊連結下載相關套件,如有不清楚的地方亦可點擊安裝指引(Installation Guide),如 Fig. 5所示。
經安裝測試後,實驗此版本可順利運行,完整安裝及測試步驟可參考下一章節說明。另外,像這樣自行安裝更新版本,大家也可以透過研華的技術服務管道,能更快地排解環境相容性問題。
2.2.2 安裝最新開發套件
由於目前為新安裝的 Ubuntu 還沒有配置基本開發套件,這裡可以先執行下列命令來更新一下。如果已經有安裝過的再執行一次也無妨,系統會自行判斷是否需要更新。
# 可先查詢 Ubuntu 及 Kernel 版本 (此步驟可略過)
uname -a
# 經查詢得到下列結果
# Linux omnixri-Not-Specified 6.5.0-27-generic #28~22.04.1-ubuntu SMP PREEMPT_DYNAMIC Fri Mar 15 10:51:06 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
# 查詢 Python3 版本 (此步驟可略過)
python3 -V
# 得到 Python 3.10.12
# 更新系統並安裝基本開發套件
sudo apt-get update
sudo apt-get install -y build-essential crul make dpkg dkms git zip unzip tar
目前 Hailo Suite 主要提供四大套件,主要分為「模型建立環境(Model Build Environment)」及「執行時期環境(Runtime Environment)」,如Fig. 6所示。點擊下列可連結至對應 Github,括號中為 2024-04 對應版本編號。
- Hailo Model Zoo (v2.11.0):主要提供預訓練好之模型給使用者下載。
- Hailo Dataflow Compiler(SDK) (v3.27.0): Github未提供,內含於 Hailo Suite 中。主要提供模型訓後轉檔及編譯必要函式庫。
- TAPPAS (v3.28.0):主要提供 AI 應用之展示範例,有需要時必須獨立安裝,亦可不安裝。
- HailoRT (v4.17.0):為執行時必要套件,負責提供命令列界面(CLI)及 C/C++/Python 相關函式庫,方便使用者開發之程式與硬體層之溝通。
- PyHailoRT: Github未提供,內含於 Hailo Suite 中。主要提供 Python 相關函式庫,必須另外獨立安裝,且須依 工作中 Python 版本 v3.8/v3.9/v3.10 進行安裝。
註:四大套件雖可於 Hailo 開發者軟體下載區分別下載,亦有部份可從 Github 下載,但使用整包下載安裝會更方便些。
安裝前先建立一個路徑來存放下載到的套件包。假設工作路徑名稱為 ~/Hailo_4_17 ,則須包括下列內容。
- hailo_ai_sw_suite_2024-04.run
- hailort-pcie-devier_4.17.0_all.deb
接下來要先安裝 Hailo-8 加速卡的 PCIe 驅動程式並檢查。
# 切換到工作路徑,假設於使用者家目錄下,hailo_ai_sw_suite_2024-04.run 亦存在於該目錄下
cd ~/Hailo_4_17
# 安裝 Hailo-8 PCIe 驅動程式
sudo dpkg --install hailort-pcie-devier_4.17.0_all.deb
# 重新啟動電腦驅動程式才能生效
reboot
# 重啟後再次進入命令列模式,測試 PCIe 驅動是否正確安裝。
hailortcli scan
# 會得到下列結果,表示成功安裝
# Hailo Devices:
# [-] Device: 0000:02:00.0
# 若想取得更完整 Hailo-8 硬體資訊,可執行下列命令。(此步驟可略過)
hailortcli fw-control identify
當確認好硬體驅動程式後就可開始安裝 Hailo Suite,但安裝前仍需將必要套件包安裝妥當,否則會有很多地方報錯,請依下列步驟進行安裝。
# 切換到工作路徑
cd ~/Hailo_4_17
# 安裝 Python 人機界面套件
sudo apt-get install -y python3-tk graphviz libgraphviz-dev
# 使用 vcpkg 安裝 xtensor
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
./vcpkg install xtensor
# 安裝 TAPPAS 必要套件包
sudo apt-get install -y ffmpeg x11-utils libgstreamer-plugins-base1.0-dev python-gi-dev libgirepository1.0-dev libzmq3-dev gcc-9 g++-9
# 下載、解壓縮並安裝 OpenCV
cd ~/hailo_4_17
wget https://github.com/opencv/opencv/archive/4.5.2.zip
unzip 4.5.2.zip
# 切換到 OpenCV 目錄,建立 build路徑並進入
cd opencv4.5.2
mkdir build
cd build
# 建立 Make 檔案並安裝,此步驟依網路速度及電腦等級不同可能要10~30分鐘
cmake -DOPENCV_GENERATE_PKGCONFIG=ON \
-DBUILD_LIST=core,imgproc,imgcodecs,calib3d,features2d,flann \
-DCMAKE_BUILD_TYPE=RELEASE \
-DWITH_PROTOBUF=OFF \
-DWITH_QUIRC=OFF \
-DWITH_WEBP=OFF \
-DWITH_OPENJPEG=OFF \
-DWITH_GSTREAMER=OFF \
-DWITH_GTK=OFF \
-DOPENCV_DNN_OPENCL=OFF
-DBUILD_opencv_python2=OFF \
-DINSTALL_C_EXAMPLES=ON \
-DINSTALL_PYTHON_EXAMPLES=ON \
-DCMAKE_INSTALL_PREFIX=/usr/local ..
make j4
sudo make install
# 更新函式庫連結
sudo ldconfig
# 安裝 Gstreamer (註:原官方文件中有安裝 gstreamer1.0doc,此部份 Gstreamer 已不需要,故刪除)
sudo apt-get install -y libcairo2-dev libgirepository1.0-dev libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav \
gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl \
gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-vaapi gstreamer1.0-pulseaudio \
gcc-9 g++-9 python-gi-dev
# 檢查 gstreamer 版本 (此步驟可略過)
gst-inspect-1.0 --version
# 安裝 pygobject
sudo apt-get install python3-gi python3-gi-cairo gir1.2-gtk-3.0
# 變更安裝程式使用權限,令其具有執行能力
sudo chmod 770 hailo_ai_sw_suite_2024-04.run
# 安裝 Hailo AI Software Suite
./ hailo_ai_sw_suite_2024-04.run
安裝成功後會將四大工具都置放其中,預設 HailoRT 已安裝完成,若開發者熟悉 C/C++ 開發,則可直接撰寫相關應用程式,不用再安裝其它項目。另外 Hailo Model Zoo 也會一併新增至 ~/Hailo_4_17/hailo_ai_sw_suite/sources/model_zoo 下。
2.2.3 安裝 TAPPAS 套件
這裡為了方便展示各種AI應用範例,所以手動安裝 TAPPAS 這項工具,如下指令所示。安裝完成後,其檔案夾結構如 Fig. 7 所示。 主要的範例都集中在~/Hailo_4_17/hailo_ai_sw_suite/artifacts/tappas/apps/h8/gstreamer/ general 路徑下,共有12組範例。
# 切換到工作路徑
cd ~/Hailo_4_17/hailo_ai_sw_suite/artifacts/tappas
# 安裝 TAPPAS (在 x86 系統上請加上忽略安裝 hailort 命令)
./install.sh --skip-hailort
此時若結束命令列模式,再重新啟動時可能會報錯,主要原因是系統會自動設置相關環境變數,而這裡指定的檔案名稱有誤導致,可以下列方式進行修改。
# 找到導致報錯的位置,於 ~/.bashrc 的最後一列
# 其內容為 [[ -s /home/user_name/.hailo/tappas/tappas_env ]] && ./home/user_name/.hailo/tappas/tappas_env
# 以文字編輯器 gedit
gedit /home/user_name/.hailo/tappas/tappas_env
# 修改最後一列檔名,增加一底線變成 _python-argcomplete
. /home/user_name/Download/Hailo_4_17/hoilo_ai_sw_suite/artifacts/tappas/scripts/bash_completion.d/_python-argcomplete
# 存檔後結束命令列視窗,再重啟命令列視窗,即恢復正常工作。
推論實測結果
接下來就要以 TAPPAS 提供的四個範例來說明使用方式及測試推論效能,所有範例都在 /Hailo_4_17/artifacts/tappas/apps/h8/gstreamer/general 路徑下,整體評比效能如Fig. 8所示。接下來就分別說明之。
註: Fig. 8 指的功率(Power)是指運行前後的差值,而非整機當下功率。在只有運行 Ubuntu 環境沒有運行推論時總功率約為 17瓦。
註:目前並非每個範例都有支援 –print-device-status 參數來顯示工作耗能(Watt)及溫度。所以部份採外部功率錶來偵測,如Fig. 9所示。
3.1物件偵測
原則上每個 TAPPAS 的範例檔案夾結構都類似,大致分成下列項目。
- 範例執行程式 (*.sh)
- 範例說明文件 (*.rst) (可用一般文字編輯器開啟)
- 範例資源檔
- 測試影片 (*.mp4)
- 測試模型 (*.hef, Hailo 已轉檔之格式)
- 配置檔 (/config/*.json)
每個範例執行程式(*.sh)後方加上 –help 就能顯示所有可使用參數。以本範例來說,當不輸任何參數時,預設會使用 detection.mp4 和 yolov8m.hef 模型進行推論,當加上 –show-fps 和 –print-device-stats 就能在運行過程顯示推論速度(每秒幀數 FPS)、工作功率和溫度。不過有時推論太快完成,會來不及計算出功率,此時就只能以外部功率表來記錄。當加上 –input *.mp4 可指定測試檔案名稱,亦可加上 –input /dev/video0 指定本機端的網路攝影裝置(Webcam)。
另外本範例提供四種模型可供測試,只要在執行時加上 –network net_name 即可,這裡的 net_name 包括yolov5, mobilenet_ssd, nanodet, yolov8。從 Fig. 8可看到執行不同模型得到的推論速度及功耗。在ssd_mobile_v1 的表現超過 1000FPS ,由此可明顯看出 AI 加速卡的超強效能。
3.2影像分割
影像分割主要分為語義分割(Semantic Segmentation)和實例分割(Instance Segmentation),前者以像素級分類將物件精準獨立分割出來,但相鄰且相同類型物件無法區別正確物件個數,於是才有後者,由此可知後者的算力需求會更高。
本範例主要使用了 yolov5n_seg.hef 實例分割模型,其推論速度大概是目前 Model Zoo Instance Segmention 模型中效能最好的,如 Fig. 11 所示。從 Fig. 8 測試結果中可看出,推論速度可達 123.31 FPS, 僅需小於 17 瓦就能完成推論。
3.3 車牌辨識(多模型混合)
目前除了運行單個模型進行推論外,由於加速卡算力足夠,亦可快速輸流執行不同模型,再將結果組合在一起,得到完整的應用。以車牌辨識為例,如 Fig. 12 所示,首先使用 yolov5m_vehicles 模型找到汽車位置,再以tiny_yolov4_license_plates 模型從汽車位置找出車牌位置,最後將分離出的車牌使用 lprnet 模型進行文字辨識。
從 Fig. 8 測試結果中可得知,同時運行三個模型仍能保持 30 FPS ,相當於一般攝影機取像速度,可以充份滿足實際場域的應用。
3.4 多串流影像物件偵測
除了單卡運行多模型外,亦可多輸入單卡推論及多輸入多卡推論,由於目前只有一張 AI 加速卡,所以僅以前者為例說明,如 Fig. 13 所示。前面有介紹到物件偵測有速度較快的模型如 yolov5m,在單影像單卡推論時可達218.8 FPS。
在此範例中,使用16組輸入影像,同時運行物件偵測,從 Fig. 8中可看到推論速度仍有 13.75 FPS,此時 AI 加速卡幾乎全力在運行,從外部功率錶得知約增加了 24 瓦,算是非常省電,滿足在邊緣端高性能低功耗的目標。
這個範例除可使用本地端預錄影像測試外,亦可使用遠端 IP Cam,透過即時串流協定(RTSP)同時取得多組攝影機影像,對於智慧工廠或智慧家庭帶來許多好處,只需一台主機就能同時處理多台攝影機的 AI 應用。
小結
目前 Hailo AI 加速卡在 Windows 上的支援仍有待改進, Python 相關範例提供的也有點少,好在初步在 Ubuntu 22.04(Kernel 6.5.0) 搭配 Hailo AI Software Suite 2024-04 測試相關 AI 應用後,發現研華 AIR-150 加上Hailo-8 AI 加速卡確實大幅減輕 CPU 的工作,不僅在單一影像及單一模型中推論表現優異,同時還能支援多模型及多串流影像同時工作,其功耗最多才增加20多瓦。相較於一般桌機搭配獨立顯卡 GPU 動輒數百瓦才能達到的效果,從性價比上有明顯效益。相信未來使用這樣的解決方案在智慧家庭、智慧製造、智慧城市、智慧醫療及更多的智慧應用上會更有優勢,更能滿足節能減碳的效果,有興趣的朋友不妨試試。
參考文獻
[1] Advantech, Edge AI Inference Systems – AIR-150
[2] Hailo, Hailo-8 M.2 AI Acceleration Module
[3] Advantech, Edge AI SDK Wiki
[4] Advantech, Edge AI SDK/Installation
[5] Advantech, Edge AI SDK/User Guide
[6] Advantech, Software suite for Hailo-8 (for Ubuntu)
延伸閱讀
請於 /hailo_ai_sw_suite/docs找到下列說明文件並詳讀,可以協助解決更多本文未提到之問題。
Hailo AI SW Suite User Guide <hailo_ai_sw_suite_2024-04.pdf>
HailoRT User Guide <hoilort_4.17.0_user_guide.pdf>
Model Zoo User Guide <hailo_model_zoo_v2.11.0.pdf>
TAPPAS User Guide <tapps_3.28.0_user_guide.pdf>
Hailo Dataflow Compiler User Guide <hoilo_dataflow_compiler_v3.27.0_user_guide.pdf>
- 【Edge AI專欄 】 如何使用 Gradio 快速搭建人工智慧應用圖形化人機介面 - 2024/12/23
- 如何使用Intel AI PC及OpenVINO實現虛擬主播 - 2024/12/16
- 【Edge AI專欄】 邊緣端小語言模型崛起,開發板跟上了嗎? - 2024/11/26