作者:陳紀翰
由於工業科技快速發展,環境議題一直備受討論與重視;近幾年,由於邊緣運算、AI、硬體加速與無人機等技術趨於成熟,公民營機構--尤以公部門為首--開始思考是否能借助科技的力量來進行環境工程,本文即以AI物件分割技術作為技術基礎,配合台中市環保局河川揚塵防治計畫進行河床地貌影像分割。
所謂河川揚塵,是指河床上的沙塵、泥土或微小顆粒物在風力作用下被揚起並懸浮在空氣中,好發期甚至可能造成PM 2.5大幅上升,因此政府相關局處會計畫每年以無人機進行河道巡檢,配合人力挑選出大面積砂源分布位置,進行防砂網或配置水線等防治措施,本專案即將此改由 AI 辨識並標定出大面積砂源位置。
要執行此技術,在執行模型佈署及推論時會面對二個主要問題:1. 在無人機飛行途中執行識別必須至少能達到即時執行的推論速度;2. 在河川附近不會有電源配置,需自行攜帶電瓶,因此電力消耗也是一項重要議題。
本文以Yolo v5 x [1]模型為例,進行物件分割(segmentation),以 STCN[2]模型進行影像彙整,並於搭載 Intel Arc Pro A40 GPU 的iEi TANK-XM811工業電腦上進行現地佈署,測試結果每幀(640 x 640)推論時間平均64 ms (官方公布CPU執行數據為 1579 ms) ,達到可即時執行的規格,而Intel Arc Pro A40 GPU的峰值功率為 50w,優於目前一般市面上的 GPU 卡。
官方公布的 YOLOv5-seg 執行數據,其中 5x 以 onnx 在 CPU 執行的速度為每幀 1579 ms,我們經過 OpenVINO優化加上 GPU 加速後實測數據到達每幀 64 ms。
硬體介紹與搭建環境
iEi TANK-XM811工業電腦
TANK-XM811 是威強電工業電腦IEI專為嚴苛環境以及AI邊緣運算所打造的工業電腦[3],主打三個特色:
- 搭載Intel Core 第12或13代處理器(最高至 4.8 GHz, 16-core, 35W TDP)。
- 彈性擴充 PCIe,支援擴充GPU、NVMe SSD,並且可使用IEI的eChassis模組拓展所需要的運算卡。
- 高強度外殼設計、無風扇冷卻系統、12V~28V 輸入電壓、-20℃ ~ +60℃ 操作溫度。
Intel® Arc™ Pro A40 顯示晶片
Intel ArcPro A40是Intel推出專為專業使用者所推出的GPU[4],內建光線追蹤硬體、顯示晶片加速和機器學習功能,具有6 GB GDDR6的VRAM,4 個 mini-DP 2.0,可支援2個8K60Hz或是4個4K60Hz的螢幕。具有小巧的體積以及50w TDP,可讓其輕鬆裝進小體積的工業電腦。
安裝系統、驅動、設定環境以及安裝OpenVINO環境
推薦安裝Ubuntu 23.04 Desktop
筆者起初安裝Ubuntu 22.04 LTS後,頻繁發生Kernel凍結的問題,官方推薦改用Ubuntu 23.04[5],系統內已經內建Intel Arc Pro A40等驅動,且執行狀況穩定,因此推薦直接安裝Ubuntu 23.04,可以省去許多麻煩。
安裝Intel Edge Insights for Vision (EIV)
EIV[6]是 Intel 官方特別為GPU提供的執行環境,其將執行GPU、iGPU所需的環境都包在Docker中,並提供OpenVINO Jupyter notebook,在此環境中可以直接使用 GPU、iGPU甚至協作進行模型推論,搭配OpenVINO Jupyter notebook中編號 109- throughput-tricks.ipynb中模型優化的教學,使用者可輕鬆在此環境中將模型推論速度大幅提升,使用此資源庫做為開發基底,可讓開發者省去很多摸索時間,並且大幅提升模型推論速度。
安裝方式如下:
#建立工作目錄
mkdir workspace
cd workspace
#建立虛擬環境
conda activate intel-eiv
#安裝git和下載所需檔案
git clone https://github.com/intel/edge-insights-vision.git">https://github.com/intel/edge-insights-vision.git
# 安裝依賴
pip install -r requirements.txt
# 安裝EIV
#直到出現Success代表安裝成功
#檢查驅動是否安裝
#安裝notebook的依賴
pip install -r requirements.txt
#開啟notebook
chmod +x launch_notebooks.sh
./launch_notebooks.sh
執行OpenVINO範例模型
當我們在 edge-insights-vision 資料夾底下執行 lauch_notebooks.sh 後,便會開啟Jupyter Notebook 核心,複製並貼上以下網址在瀏覽器即可打開Notebook。
想要快速試一下硬體的執行速度,我們可以直接運行Notebook中的108-gpu-device.ipynb,其範例模型選用 ssdlite_mobilenet_v2,這是一個輕量化且適合邊緣裝置執行的模型,而這個專案除了可以馬上測試執行速度以外,也演示了使用 OpenVINO 需使用到的最重要基本技能,包含轉 IR 格式、匯入模型、編譯模型、選擇量化(FP32、FP16或INT8)以及 Latency / Through put 的優化都有帶到,即便是初學者,詳讀此篇案例之後應該都能對OpenVINO有相當的熟悉程度。

此段程式碼說明了用GPU 執行,並且針對 troughput 進行優化
而我們這套硬體執行後如下圖顯示,使用 GPU執行速度來到 551 FPS。

可以看到使用Intel Arc Pro A40的FPS與CPU有顯著差異
河川地貌分析模型推論實測結果
接下來測試本專案河川地貌分析模型的推論過程,幸運的是,目前 yolo v5 [1]已經支援直接引入 IR 格式的模型進行推論,因此我們只要準備好 IR 格式模型即可直接執行。

segment/predict.py 內的說明文件,說明了只需將 IR 格式的檔案存放在資料夾中(資料夾命名需以 _openvino_model 做結尾),並在執行時指定此資料夾即可進行推論。
首先,準備好已經訓練好的 h5 或 pt 檔,若想要直接測試硬體效能的使用者也可以直接下載官方提供的權重檔,並且利用官方提供的 export.py 檔轉換為 onnx 格式。

在 Readme 文件中有說明如何利用 export.py 將 pt 檔轉換為 onnx 檔。
接下來就可以回到 EIV 專案中提供的編號 102 pytorch_onnx_to_openvino.ipynb,將此 onnx 檔轉為IR格式。

此部分程式碼說明如何轉出 IR 格式的檔案,其中 onnx_path 要指定上一步驟轉出的 onnx 檔, compress_to_fp16若設定為True,則會以單精度 fp16 進行量化,未設定則為雙精度 fp32。
接下來就需要稍微注意一下了,得到 IR 檔之後,由於 segmentation 需要在模型推論後執行後處理,因此,我們不在 ipynb 裡面進行,而是回到 YOLO v5 專案中,然而,請留意,由於GPU 環境整個包在 docker 中,因此,建議直接在 EIV 啟動介面中點擊 Terminal,將路徑指到 YOLO v5 專案,使用其中的 segment/predict.py 執行推論。

請在 EIV 專案的啟動介面中點選 Ternimal,再將路徑 cd 至 yolo v5 專案內執行 segmen/predict.py 。
然後就可以看到推論結果,我們這邊輸入 640×640 每幀平均花費 64 ms ,若跟官方公布的數據比較,官方每幀 1579 ms,超過 1 秒,這樣的速度無法用在無人機飛行的應用上,而我們使用 GPU 加速後,即便是 segmentation 中最大的模型,也可以有至少15 fps 的速度,此應用於懸翼式無人機的應用上已經綽綽有餘。
另外,如果讀者想要設定使用 CPU、GPU或IGPU,此部分程式碼寫在 YOLO v5 專案中 model/segment/commom.py 中 399 行的位置,device_name 可以用來指定執行設備,另外也可以參考108-gpu-device.ipynb文件,補入{“PERFORMANCE_HINT”: “THROUGHPUT”} ,模型便會以 throughput 進行優化,最後我們來看看一下推論成果(拍攝地點為台中市大安溪近出海口處):

YOLO v5 seg x 的推論結果,黃色是植被覆蓋,紅色是礫石,褐色是河川。
由於 YOLO 是以單幀為基礎進行推論,因此我們進一步利用 STCN 進行時序關聯上的優化,推論精準度提升相當多,影片中綠色是植披覆蓋,紅色是河川,黃色是礫石,藍色是砂源,紫色是含水砂源。
結論
無人機配合 AI 視覺的技術在環境工程的應用十分廣泛,然而,執行速度、功耗與模型精準度之間的取捨一直是個難題,但由於半導體技術以及材料加工的進步,讓現在的工業電腦只需35~65w就可得到強悍的處理性能,本次搭載的Intel Arc Pro A40,只有50w TDP的功率以及小巧的體積。
本專案中多虧了加速設備,使得模型推論速度可以達到即時推論並且在戶外使用,加上官方支援也趨於成熟,從模型開發完畢後到完成佈署幾乎只需幾個步驟就可以完成,此對於急需 AI 邊緣運算的應用開發者而言無非一大福音。
參考文獻與資源網址:
- https://github.com/ultralytics/yolov5/tree/master
- Cheng, Ho Kei, Yu-Wing Tai, and Chi-Keung Tang. “Rethinking space-time networks with improved memory coverage for efficient video object segmentation.” Advances in Neural Information Processing Systems 34 (2021): 11781-11794.
- https://www.ieiworld.com/tw/product/model.php?II=886
- Exclusive review: Intel Arc Pro A40 / A50 : https://aecmag.com/workstations/exclusive-review-intel-arc-pro-a40-a50-gpus-graphics-cad-bim/
- Ubuntu 23.04 : https://releases.ubuntu.com/lunar/
- Edge Insights for Vision (EIV): https://github.com/intel/edge-insights-vision
- 【開箱評測】探索未來:結合迷你PC與生成式AI的個人多媒體助理 - 2024/09/24
- 以AI進行無人機巡檢河川地貌分析 - 2023/09/15
- 【OpenVINO瑕疵檢測功能】Anomalib 介紹與實作教學 - 2022/12/05
訂閱MakerPRO知識充電報
與40000位開發者一同掌握科技創新的技術資訊!