如何客製化企業 RAG 知識庫?— 從資料庫到知識整合的實戰技術
|

以AI進行無人機巡檢河川地貌分析

   

作者:陳紀翰

由於工業科技快速發展,環境議題一直備受討論與重視;近幾年,由於邊緣運算、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],主打三個特色:

  1. 搭載Intel Core 第12或13代處理器(最高至 4.8 GHz, 16-core, 35W TDP)。
  2. 彈性擴充 PCIe,支援擴充GPU、NVMe SSD,並且可使用IEI的eChassis模組拓展所需要的運算卡。
  3. 高強度外殼設計、無風扇冷卻系統、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中模型優化的教學,使用者可輕鬆在此環境中將模型推論速度大幅提升,使用此資源庫做為開發基底,可讓開發者省去很多摸索時間,並且大幅提升模型推論速度。

安裝方式如下:

#建立工作目錄

cd ~
mkdir workspace
cd workspace

#建立虛擬環境

conda create -n intel-eiv python=3.10
conda activate intel-eiv

#安裝git和下載所需檔案

sudo apt -y install git
git clone https://github.com/intel/edge-insights-vision.git">https://github.com/intel/edge-insights-vision.git

# 安裝依賴

cd edge-insights-vision
pip install -r requirements.txt

# 安裝EIV

python3 eiv_install.py

#直到出現Success代表安裝成功

#檢查驅動是否安裝

clinfo | grep 'Driver Version'

#安裝notebook的依賴

cd ~/openvino_notebooks
pip install -r requirements.txt

#開啟notebook

cd ~/workspace/edge-insights-vision
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 執行,並且針對 troughput 進行優化

而我們這套硬體執行後如下圖顯示,使用 GPU執行速度來到 551 FPS。

可以看到使用Intel Arc Pro A40的FPS與CPU有顯著差異

可以看到使用Intel Arc Pro A40的FPS與CPU有顯著差異

河川地貌分析模型推論實測結果

接下來測試本專案河川地貌分析模型的推論過程,幸運的是,目前 yolo v5 [1]已經支援直接引入 IR 格式的模型進行推論,因此我們只要準備好 IR 格式模型即可直接執行。

segment/predict.py 內的說明文件,說明了只需將 IR 格式的檔案存放在資料夾中(資料夾命名需以 _openvino_model 做結尾),並在執行時指定此資料夾即可進行推論。

segment/predict.py 內的說明文件,說明了只需將 IR 格式的檔案存放在資料夾中(資料夾命名需以 _openvino_model 做結尾),並在執行時指定此資料夾即可進行推論。

首先,準備好已經訓練好的 h5 或 pt 檔,若想要直接測試硬體效能的使用者也可以直接下載官方提供的權重檔,並且利用官方提供的 export.py 檔轉換為 onnx 格式。

在 Readme 文件中有說明如何利用 export.py 將 pt 檔轉換為 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 格式的檔案,其中 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 。

請在 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 v5 seg x 的推論結果,黃色是植被覆蓋,紅色是礫石,褐色是河川。

由於 YOLO 是以單幀為基礎進行推論,因此我們進一步利用 STCN 進行時序關聯上的優化,推論精準度提升相當多,影片中綠色是植披覆蓋,紅色是河川,黃色是礫石,藍色是砂源,紫色是含水砂源。

結論

無人機配合 AI 視覺的技術在環境工程的應用十分廣泛,然而,執行速度、功耗與模型精準度之間的取捨一直是個難題,但由於半導體技術以及材料加工的進步,讓現在的工業電腦只需35~65w就可得到強悍的處理性能,本次搭載的Intel Arc Pro A40,只有50w TDP的功率以及小巧的體積。

本專案中多虧了加速設備,使得模型推論速度可以達到即時推論並且在戶外使用,加上官方支援也趨於成熟,從模型開發完畢後到完成佈署幾乎只需幾個步驟就可以完成,此對於急需 AI 邊緣運算的應用開發者而言無非一大福音。

參考文獻與資源網址:

  1. https://github.com/ultralytics/yolov5/tree/master
  2. 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.
  3. https://www.ieiworld.com/tw/product/model.php?II=886
  4. Exclusive review: Intel Arc Pro A40 / A50 : https://aecmag.com/workstations/exclusive-review-intel-arc-pro-a40-a50-gpus-graphics-cad-bim/
  5. Ubuntu 23.04 : https://releases.ubuntu.com/lunar/
  6. Edge Insights for Vision (EIV): https://github.com/intel/edge-insights-vision
Ludwig Chen

訂閱MakerPRO知識充電報

與40000位開發者一同掌握科技創新的技術資訊!

Author: Ludwig Chen

畢業於國立陽明交通大學資訊工程研究所,目前於僑光科技大學資訊科技系擔任助理教授,研究專長包括類神經網路、嵌入式系統、FPGA 及 AI 導入企業解方,執行專案經驗包含工研院、中科院、數發部、經濟部以及台中市環保局,曾獲112年度 AI 應用鬥智賽金獎(Prophet AI)、111 年度 AIGO 特優獎(8926 AIoT)及 109年度 AIGO 優等獎,目前擔任多所中小企業及新創企業執行顧問,專注於企業數位轉型與智慧轉型之導入議題。 本身是個熱愛藝術的資訊工程研究員,熱衷於探索在『研究、應用與啟發教學』之間平衡而產生的美感。

Share This Post On
468 ad

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *