Maker 玩 AI 系列(十):用 Roboflow + Ultralytics HUB 訓練與管理 YOLO 模型

YOLO 物件偵測模型

說到物件偵測的 AI 模型,應該直接就會聯想到 YOLO (You Only Look Once) 這個知名的物件偵測模型,其最令人誇讚的就是推論的速度相當快,且仍保有相當程度的辨識度!若將其放到邊緣裝置 Jetson Nano 上運行,還可以有 25FPS 左右的效能!但說到要訓練一個客製化 YOLO 模型,可能就要讓不少人皺起眉頭了!本篇則要介紹 RoboflowUltralytics HUB 這兩個工具,在不需要安裝任何軟體、寫任何程式的條件下,完成一個客製化物件偵測 YOLO 模型!

YOLOv8 整合了物件偵測、分類、分割等多種模型。(圖片來源:ultralytics)

YOLOv8 整合了物件偵測、分類、分割等多種模型。(圖片來源:ultralytics)

怎麼玩?

Roboflow 是線上資料集管理工具,具備標註影像資料、設定資料增強、產生資料集等功能,雖然 Roboflow 也有提供線上 AutoML 專有模型,但因為限制是必須使用網路呼叫,不便利佈署在邊緣裝置而較少人使用。Ultralytics HUB 則是 YOLO 模型的管理工具,可以匯入資料集、訓練模型、測試模型與匯出模型等。 首先分別前往 Ultralyrics HUBRoboflow 註冊免費帳號,筆者將會使用 Roboflow 標註資料與產生資料集,接著將資料及匯出到 Ultralytics HUB 進行 YOLO 模型訓練與管理。

Roboflow 提供資料集管理與 AutoML 等服務

Roboflow 提供資料集管理與 AutoML 等服務

登入 Roboflow 網站後,系統會引導建立工作空間(workspace),每個工作空間可以存放多個專案(projects)。接著建立一個專案,專案類型為 ”物件偵測” Object Detection,專案名稱與說明可以自行填寫。需要特別注意的是免費帳號所建立的專案皆為公開專案(Public Project),所有人皆可以在檢索或是瀏覽到專案內的影像資料並且打包帶走,所以如果影像中含有機密資料或敏感個資千萬不要使用公開專案!

Roboflow 可以建立物件偵測、實例分割、影像分類等不同專案。
Roboflow 可以建立物件偵測、實例分割、影像分類等不同專案。

接著就可以上傳資料集的照片或影片,甚至還可以從 YouTube 匯入影片。影片的部分在上傳後可以設定圖片的取樣率,從一秒30張到60秒一張都可以彈性設定。完成之後會統計出所有影像數量,並且還可以邀請其他帳號,進行影像資料標註的數量分配,對於資料量龐大的資料集來說,這個功能可說是相當人性化。

匯入影像資料

匯入影像資料

接下來就是最痛苦的影像標註地獄了!必須逐一在照片中框選出要偵測的物件並給予其標籤,整體過程會相當的費時,但為了模型的正確性也不能馬虎。以筆著的範例來說,拿了 MKR Zero、Pi Pico、LinkIt7697、TTGO 等不同的開發板進行標註。好處則是 Roboflow 線上標註工具還算直覺與人性化,藉由快捷鍵的操作可以省下一點點時間。

痛苦的影像標記階段

痛苦的影像標記階段

比較偷懶的話可以跟筆者一樣,先上傳小部分的影像資料,將模型訓練完成之後評估,再逐步增加資料量達到比較好的效果。標記完成會轉跳到產生資料集的階段,這邊會自動拆分訓練(Training)、驗證(Validation)、測試(Testing)等不同比例數量的資料,也可以手動調整。影像前處理(Preprocessing)可以選擇是否自動轉向以及重新調整尺寸大小為何。

資料拆分與前處理設定

接著設定資料增強(Augmentation)的部分,這也是筆者覺得 Roboflow 最好用的功能之一。可以設定將資料隨機翻轉、裁切、旋轉、增加躁點、模糊化、亮度調整等等,藉此來增加資料集的多樣性並提高訓練出來模型的適應性。

資料增強設定
資料增強設定

完成之後可以看到資料集的版本列表中多了一個項目,後續若有持續增加新的資料或是使用不同的前處理與資料增強等參數,皆可以產生不同版本的資料集,並且在此頁面中管理與查找。

資料集管理介面
資料集管理介面

點選右上角的 “Export” 可選擇把資料及匯出成不同格式的標記資料,如COCO、Pascal VOC、YOLO等。選擇最下方的 “Ultralytics HUB” 進行匯出,將自動轉跳到 Ultralytics HUB 網站,登入後便可以在 Ultralytics HUB 管理與訓練模型了!

資料集匯出支援的格式非常多種

資料集匯出支援的格式非常多種

Ultralytics HUB

串接到 Ultralyrics HUB 後選擇匯入(Import) 資料集,就能進入到模型的設定了。若暫時沒有想要建立的資料集,也可以從 Roboflow Universe 上找尋社群提供的資料集,有些也提供了蠻有趣的概念,如撲克牌辨識、麻將辨識等等。訓練階段這邊可提供訓練 YOLOv5 與 YOLOv8 不同大小的模型架構,並且選擇是否要使用預訓練模型。

模型架構設定

模型架構設定

接下來就進入到了模型訓練環節,提示說明在開啟 Colab 後將這三行程式碼貼到 ipynb 的程式段落執行即可。下方還有一些超參數(hyperparameters)可以做微調。

透過 Ultralyrics HUB 連線到 Colab 訓練 YOLO 模型。

透過 Ultralyrics HUB 連線到 Colab 訓練 YOLO 模型。

開啟 Colab 範例可以看到幾乎沒有什麼程式碼,將剛剛複製的程式碼貼過來並選擇全部執行。程式會安裝一些必要套件,接著就會跟 Ultralyrics HUB 進行連線,把 Colab 訓練的結果傳回 Ultralyrics HUB

Ultralyrics 提供的 Colab 程式碼。

Ultralyrics 提供的 Colab 程式碼。

回到 Ultralyrics HUB 就能即時監控在 Colab 訓練模型的狀態。以筆者的狀態為例,在資料不多的情況下,大約十分鐘就可以完成訓練了!

訓練數值可視化

訓練數值可視化

訓練完成之後可以做線上的預覽(Preview),驗證一下模型訓練的成果。若沒有太大的問題則可以選擇到佈署(Deploy)的頁籤,選擇合適的模型檔案格式,下載到邊緣裝置進行推論囉!

提供眾多模型檔格式可以匯出

提供眾多模型檔格式可以匯出

實測 NVIDIA Jetson Orin NX 推論

筆者最後將訓練完的 YOLOv8 模型下載到 NVIDIA Jetson Orin NX 核心的 reComputer J4011 上進行推論,先不論模型的辨識度好與壞(畢竟筆者提供的資料量非常少),實際推論的速度以 YOLOv8s 來說可以達到41ms。使用 TesnorRT 優化後的速度更可以縮短到 33.8 ms,等同於做到 30FPS 即時物件偵測是沒有問題的!並且與 YOLOv8s pre-trained model 效能是一模一樣的!

Orin NX 8GB 使用 TensorRT 優化過的 YOLOv8s 模型(pre-trained model)

Orin NX 8GB 使用 TensorRT 優化過的 YOLOv8s 模型(pre-trained model)

小結-YOLO 版本的 Teachable Machine

Ultralytics 這間公司推出的 YOLOv5 與 YOLOv8,雖然都因為進步性不足且沒有論文技術原理支撐,並沒有被學術界與 YOLO 官方所承認,但不可否認此二版本都因為整合性的提升而更加便利於社群開發者使用。早期可能會覺得訓練影像分類模型很困難,但 google 推出 Teachable Machine 之後,看似一切都變簡單了!如果覺得訓練YOLO物件偵測模型很困難,不妨試一下 Roboflow + Ultralyrics HUB ,說不定各位也能輕鬆駕馭囉!😄