|

【 Edge AI專欄】使用Intel OpenVINO搭配YOLOv11輕鬆駕馭姿態偵測

   

作者:Jack OmniXRI

相信有在玩AI影像「物件偵測」的朋友對於YOLO(Yolo Only Look Once)一定不會陌生。從2015年第一版(v1)問世至今,在各路大神的努力之下,現在已發展到第十一版(v11),而其中 v4, v7, v9 正是中研院資訊所廖弘源所長及高徒王建堯博士所貢獻的。

目前最新的 YOLOv11 [1] [2] 就是由 Ultralytic 這家公司所提出的,它是基於該公司先前提出的 v8 版本進行改良而得的,並發表於今(2024)年9月底 YOLO Vision 2024 [3] 活動中。此次這個版本延續之前 v8 版本,一樣提供了「影像分類」、「物件偵測」(含正矩形和斜矩形外框)、影像分割、物件追蹤及姿態估測(人體骨架偵測)等模型,並支援多種推論框架,包括 Google TensorFlow, PyTorch, ONNX, Apple CoreML 及 Intel OpenVINO。

Intel OpenVINO 為了讓大家更快上手,馬上就在開源範例庫 Notebooks [4] 上給出 YOLOv11 物件偵測、姿態估測及影像分割等三個案例,還可支援 Google Colab ,讓大家不用在桌機、筆電上安裝 OpenVINO 也可體驗一把。

接下來我們就跟著源碼說明[5]來了解一下如何運行 【姿態估測】 範例「Convert and Optimize YOLOv11 keypoint detection model with OpenVINO™」及動作原理。完整源碼請參考[6],點擊連結即可進到 Google Colab 環境執行。

執行前建議可先點擊選單「檔案」─「在雲端硬碟中儲存複本」,複製一份到自己的雲端硬體,方便如果想修改測試時更為方便。接著點擊選單「編輯」─「清除所有輸出內容」,方便稍後觀察運行過程中產出的內容。最後點擊選單「執行階段」─「全部執行」即可看到所有運行結果。

原則上這個範例程式可分成五大段來看,如下所示。

  1. 原始 YOLOv11 推論結果
  2. 轉換到 OpenVINO IR推論結果
  3. 經過 NNCF 壓縮優化推論結果
  4. 使用基準測試工具進行比較
  5. 連續影片推論展示

這裡為方便大家學習,這裡已把完整源碼[6]步驟簡化為上述五大步驟,並將註解簡化成易懂的中文說明,新版完整範例及說明請參考下方連結。

完整Colab範例程式(點擊後可直接執行)

1. 原始 YOLOv11 推論結果

1.1 安裝 Intel OpenVINO 、 Ultralytics(YOLOv11) 及必要套件包

下載及安裝 OpenVINO, NNCF, PyTorch, Ultralytic(YOLOv11), OpenCV 等相關套件包。但由於 OpenVINO 在 Colab 環境下只能在 Intel Xeon CPU 下運行,所以這裡安裝的 PyTorch 是 CPU 版本。

1.2 下載必要函式庫並引入

下載 notebook_utils.py 到暫存區,並引入 download_file, VideoPlayer, device_widge 函式庫。

1.3 下載測試用影像

下載網路上影像檔 intel_rnb.jpg,可自行替換 url 後影像來源路徑。

1.4 指定推論用模型名稱並下載

建立模型名稱清單,可使用下拉盒式選取,預設名稱為為第[0]個,yolo11n-pose。
這裡可支援 yolov8 及 yolov11 模型名稱,n, s, m, l, x 分別代表模型的大小,從最小到最大,越小推論速度越快但精度略差,反之越大則越慢但精度會提高一些,可依實際需求調整。

1.5 實例化 YOLO 並測試推論

依上一步驟取得之模型名稱下載模型並實例化成 pose_model
接著直接使用該模型對先前指定好的影像進行推論,並取得姿態(關節點)結果 res (包含物件外框、類別及置信度)繪製在影像上。
另外會輸出總時間及各步驟工作所耗費時間,包含前處理(影像轉換等)、推論(姿態估測)及後處理(輸出數值及繪製結果)。

註:理論上如果只是想取得姿態估測結果,到這一步就可結束了。但這裡可先記下工作耗時及置信度,方便後面和經過 OpenVINO 處理過的內容作比較。

輸出結果:
image 1/1 /content/data/intel_rnb.jpg: 480×640 1 person, 529.1ms
Speed: 23.2ms preprocess, 529.1ms inference, 33.4ms postprocess per image at shape (1, 3, 480, 640)

2. 轉換到 OpenVINO IR推論結果

2.1 將模型轉換成 OpenVINO IR 格式

Ultralytics 本來就有支援將模型輸出成 Intel OpenVINO IR(xml + bin) 格式,只要執行下列程式即可。
轉換好的模型會存放在 /yolo11n-pose_openvino_model/ 路徑下。這裡仍保持原有 FP32 資料格式。

註:這裡要保留動態形狀(Dynamic Shape)設定為 True,方便後續工作。

2.2 選擇推論裝置

在 Google Colab 上只能選 CPU ,在本機端則還可選用Intel GPU(內顯)來提升推論速度。 不過一般為了方便,可直接設為 AUTO 讓系統自行選用即可。

2.3 測試單張影像

這裡的測試影像沿用步驟1.3,接著測試轉成 Intel OpenVINO IR 格式的模型是否能正確推論。
結果正確,且推論時間可減少一半以上,推論精度仍接近原來水準。

輸出結果:
image 1/1 /content/data/intel_rnb.jpg: 640×640 1 person, 187.4ms
Speed: 3.4ms preprocess, 187.4ms inference, 1.4ms postprocess per image at shape (1, 3, 640, 640)

3. 經過 NNCF 壓縮優化推論結果

NNCF 是 OpenVINO 作為模型優化的重要工具, 它提供了多種模型壓縮及優化方式,這裡僅使用到參數量化(Quantization),即將 FP32 轉換到 INT8。

3.1 指定是否量化

預設 to_quantize value 為 True,即要啟用量化。

3.2 不啟用量化處理方式

若不啟用量化則需使用 skip_kernel_extension 模組來協助略過部份工作。

3.3 產生 NNCF 所需資料集

下載校正用資料,並設定轉換函式,產生 NNCF 所需資料集。
此步驟需較長時間,請耐心等候。

3.4 使用 NNCF 進行模型量化

開始進行量化,產生新 INT8 模型。
此步驟需較長時間,請耐心等候。

3.5 測試單張影像

這裡的測試影像沿用步驟1.3,接著測試經 NNCF 量化後的模型是否能正確推論。
結果正確,推論精度仍接近原來水準。

輸出結果:
image 1/1 /content/data/intel_rnb.jpg: 640×640 1 person, 285.1ms
Speed: 4.3ms preprocess, 285.1ms inference, 2.2ms postprocess per image at shape (1, 3, 640, 640)

4. 使用基準測試工具進行比較

4.1 使用基準測試工具測試

Benchmark Tool 是 OpenVINO 提供的一組工具程式,方便連續測試用,可指定不同推論裝置、連續工作時間(預設60秒,可加 -t 指定秒數),再去計算每秒可執行次數及每次推論所需最小、最大及平均時間,方便進行性能比較。這和單張略微不同,可省去許多共同時間,如模型載入、編譯等。

若在本機端執行時可將裝置設為 GPU 進行比較。

4.2 使用 FP32 模型推論

部份輸出結果:

[ INFO ] First inference took 179.61 ms
[Step 11/11] Dumping statistics report
[ INFO ] Execution Devices:[‘CPU’]
[ INFO ] Count: 106 iterations
[ INFO ] Duration: 15499.93 ms
[ INFO ] Latency:
[ INFO ] Median: 257.80 ms
[ INFO ] Average: 292.03 ms
[ INFO ] Min: 231.82 ms
[ INFO ] Max: 484.45 ms
[ INFO ] Throughput: 6.84 FPS

4.3 使用 INT8 模型推論

部份輸出結果:

[ INFO ] First inference took 125.02 ms
[Step 11/11] Dumping statistics report
[ INFO ] Execution Devices:[‘CPU’]
[ INFO ] Count: 150 iterations
[ INFO ] Duration: 15198.45 ms
[ INFO ] Latency:
[ INFO ] Median: 170.15 ms
[ INFO ] Average: 202.29 ms
[ INFO ] Min: 145.57 ms
[ INFO ] Max: 588.30 ms
[ INFO ] Throughput: 9.87 FPS

從上述量化前後二個結果來比較,明顯可看出量化後模型明顯推論速度快上許多,但可能受網路影響所以推論最大時間和最小時間異頗大,若移到本地端相信應該不會飄得這麼多,可以更穩定推論。

5. 連續影片推論展示

5.1 建立推論函式

run_keypoint_detection 這個函式包括模型載入、影像載入、推論及繪製結果。

 

 

5.2 取得影片進行姿態估測

呼叫 run_keypoint_detection 進行推論,可依需要改變影片來源、推論裝置及模型。

若在本地端運行時,將 Source 改成 0 ,就可直接支援本機(桌機或筆電)上的第1部網路攝影機。若有多部則修改為 1 到 N 。
若在 Colab 上遇到畫面閃爍問題時,可將 use_popup 設為 True 來改善。
若想多次測試不同影片、裝置(CPU / GPU / AUTO)或模型(pose_ov_model / quantized_pose_model),可直接修改參數,單獨運行本格程式即可,不用全部程式重新運行。

輸出結果:

小結

相信大家看到這麼長的程式可能會想打退堂鼓,但仔細看完本文介紹後,會發覺其實只有選擇模型(原始或量化)、決定推論裝置、給定待測影像或影片就結束了,程式幾乎都不太需要改就能用,算是很容易上手。原始 YOLOv11 姿態估測模型經 OpenVINO 或 NNCF處理過後其推論速度都比原始模型快上許多,有助於邊緣裝置應用。從輸出結果(物件外框、骨架關節等)來看,並沒有因為模型變小就變得不可靠,即使人物很小也能正確判定,所以還是很值得拿來應用。另外使用 OpenVINO 還有一個好處,就是未來硬體升級也不用大改程式,只需要重新指定推論裝置即可,意思就是未來有更好的 CPU 、 GPU 或 NPU 時,程式效能自然提升,也不用擔心程式要重新開發,有興趣的朋友還不趕快動手來試試。

參考文獻

[1] Ultralytics, YOLOv11:https://docs.ultralytics.com/models/yolo11/

[2] Github Ultralytics / Ultralytics (YOLOv11):https://github.com/ultralytics/ultralytics

[3] Ultralytics, YOLO Vision 2024:https://www.ultralytics.com/zh/events/yolovision

[4] Intel, OpenVINO™ Notebooks at GitHub Pages:https://openvinotoolkit.github.io/openvino_notebooks/

[5] Intel, OpenVINO Document – Learn OpenVINO – Interactive Tutorials(Python) – Convert and Optimize YOLOv11 keypoint detection model with OpenVINO:https://docs.openvino.ai/2024/notebooks/yolov11-keypoint-detection-with-output.html

[6] Intel, Github OpenVINO Notebooks – yolov11-keypoint-detection:
https://colab.research.google.com/github/openvinotoolkit/openvino_notebooks/blob/latest/notebooks/yolov11-optimization/yolov11-keypoint-detection.ipynb

延伸閱讀

[A] Intel OpenVINO Document – Convert and Optimize YOLOv11 real-time object detection with OpenVINO™:
https://docs.openvino.ai/2024/notebooks/yolov11-object-detection-with-output.html

[B] Intel OpenVINO Document – Convert and Optimize YOLOv11 instance segmentation model with OpenVINO™:
https://docs.openvino.ai/2024/notebooks/yolov11-instance-segmentation-with-output.html

(本篇文章經同意轉載自vMaker原文連結;責任編輯:謝嘉洵。)

許 哲豪
許 哲豪

Author: 許 哲豪

工作經驗超過二十年,主要專長機電整合、電腦視覺、人機互動、人工智慧、專利分析及新創輔導。曾任機電整合工程師、機器視覺研發副理、技轉中心商業發展經理。目前擔任多家公司兼任技術顧問並積極推廣實境互動相關技術。 主持歐尼克斯實境互動工作室(OmniXRI):http://omnixri.blogspot.com Edge AI Taiwan邊緣智能交流區:https://www.facebook.com/groups/edgeaitw/

Share This Post On

Submit a Comment

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