安裝完了 YOLOv5 執行環境,今天就來測試與體驗 YOLO 的推論效果吧!
YOLO 物件偵測推論
首先打開新的終端機,在 yolov5 的資料夾內除了安裝文件 requirements.txt 之外,還有官方已經寫好的程式可以供使用者使用,現在讓我們透過指令進到「yolov5」資料夾內。
cd yolov5
資料夾內有一個「detect.py」程式,可以讓使用者依照自己使用的模型,與要辨識的來源做設定,並呈現推論的結果。將準備好的網路攝影機插上 Jetson Nano 的 USB 插槽,接著輸入以下指令:
python3 detect.py --weights yolov5n6.pt --nosave --source 0
意思是使用 python3 執行 detect.py
這個 python 檔案,後方的 --weights yolov5n6.pt
則是指設定使用的模型為 yolov5n6,--nosave
則是不將推論結果錄製下來(若想保存可不輸入這個選項),最後的 --source 0
則是指定影像資料取自連接到 /dev/video0
的網路攝影機。
因為我們的 Jetson Nano 內,目前並沒有 yolov5n6.pt
這個模型,所以程式會幫我們下載預設的官方模型來使用,如下圖所示:
執行過程中會需要一段時間,除了下載模型之外,還需要將模型部屬到 GPU 上。完成後會如下圖所示,顯示目前攝影機拍攝的畫面,並附加推論結果到螢幕上,終端機也會同步出現目前辨識的資訊和推論速度。可以看到每個 frame 推論的時間大約在 65~70 ms 之間,可以達到即時的效果。但因為筆者的 gif 動圖設定只有 5 FPS 所以看起來卡卡 XD。
要關閉程式的話相當簡單,點選拍攝畫面的視窗,並瘋狂按下鍵盤上的「Q鍵」,待視窗關閉,程式也會跟著結束。或是點選終端機視窗,按下鍵盤上的「Ctrl + C鍵」,一次不行就按第二次,成功的話程式也會關閉。
關於 --weight
參數可以選用多種育訓練模型,其列表如下:
Model | size(pixels) | mAP val | SpeedV100 b1(ms) | params(M) | FLOPs@640 (B) |
---|---|---|---|---|---|
YOLOv5n | 640 | 28.0 | 6.3 | 1.9 | 4.5 |
YOLOv5s | 640 | 37.4 | 6.4 | 7.2 | 16.5 |
YOLOv5m | 640 | 45.4 | 8.2 | 21.2 | 49.0 |
YOLOv5l | 640 | 49.0 | 10.1 | 46.5 | 109.1 |
YOLOv5x | 640 | 50.7 | 12.1 | 86.7 | 205.7 |
YOLOv5n6 | 1280 | 36.0 | 8.1 | 3.2 | 4.6 |
YOLOv5s6 | 1280 | 44.8 | 8.2 | 12.6 | 16.8 |
YOLOv5m6 | 1280 | 51.3 | 11.1 | 35.7 | 50.0 |
YOLOv5l6 | 1280 | 53.7 | 15.8 | 76.8 | 111.4 |
可以看到依據模型參數量(params)的多寡,會影響準確度 (mAP) 以及推論速度,考量到要在邊緣裝置上運行勢必參數量不能太多,然而其箇中之差異,各位可以任意替換做體驗。 例如想換成 YOLOv5l 模型,只要將參數改為 --weight yolov5l.pt
即可喔!
此外,參數 --source
也可以指定為圖片檔、影片檔、資料夾、甚至是 RTSP 串流與HTTP串流,都是可以接受的!接下來就進行一段影片推論的測試。
下載測試推論用的影片(影片來源為 Pexels)
wget https://raw.githubusercontent.com/FelixLinSY/DevCloud_Hands_On/main/test_video/street.mp4
修改參數進行影片的推論,完成後會把輸出結果放在 yolov5/runs/
路徑下
python3 detect.py --source street.mp4 --weights yolov5l6.pt
擷取一段推論後的片段,精確度相當不錯,即便是微小的紅綠燈或是行人也可以被判讀出來,此外當然也會有些誤判的部分,可以設定門檻值來提高鑑別度。
今天主要是驗證是否有把環境成功安裝,並使用網路攝影機體驗 YOLOv5 模型推論的威力!現在執行的模型,是官方經由著名「COCO dataset」所訓練的模型,共可辨識 80 種不同的目標。接下來,將帶大家從蒐集資料開始,接著使用方便的線上工具,標記您所要關注的目標,與建立資料集,最後透過 Google colab 強大的資源訓練自己的 YOLOv5 模型,See You!
謝謝詳細的文章!
請問如果要訓練自己的dataset(類別跟COCO的80種類別不一樣),在訓練時和推論時要改那些地方?