iT邦幫忙

4

YOLO v8 實測

  • 分享至 

  • xImage
  •  

前言

YOLO v7 才release沒多久(2022/7/12),沒想到 v8 又在2023/1/10 推出,事隔不到半年,令人應接不暇,v8 是由 v5 的原創公司 Ultralytics 改良的,顯然是與中研院團隊卯上了,v4、v7是中研院王建堯博士提出的,兩者良性競爭,大眾受惠。

改良特點

依據YOLO v8 官網文件說明,主要改良特點如下:

  1. 提供一個框架,可執行之前所有版本的模型。
  2. 全新的骨幹網路模型(Backbone network)。
  3. 不使用事先設定的偵測框(anchor-free detection head)。
  4. 使用新的損失函數(Loss function)。
  5. CPU/GPU兼容。
  6. 訓練時間縮短為60%。
  7. 預測更準確(mAP),如下圖。

https://ithelp.ithome.com.tw/upload/images/20230209/20001976yiHHsNQfcW.png
圖一. YOLO v8 vs. v7 參數量與 mAP 比較,圖片來源:YOLO v8 GitHub

安裝

安裝需求為 v3.10>=Python>=v3.7,PyTorch v1.7或以上版本,安裝指令如下:

pip install ultralytics

但是,在Windows作業系統下測試出現錯誤訊息如下:
'cv2' has no attribute 'gapi_wip_gst_GStreamerPipeline'

Google搜尋解法是要安裝舊版的OpenCV-python,指令如下:

pip install opencv-python-headless==4.5.5.64

測試

打開終端機或cmd,輸入以下指令,進行物件偵測:

yolo predict model=yolov8n.pt source="https://ultralytics.com/images/bus.jpg"

偵測的照片 bus.jpg 如下:
https://ithelp.ithome.com.tw/upload/images/20230209/20001976p7uq4vDIWh.jpg

執行結果:偵測到以下物件。

  1. 4 個人(persons)
  2. 1 台巴士(bus)
  3. 1 個交通號誌(stop sign)

太強了,人只出現一隻手或腳都認得出來,交通號誌也只出現一半。

再拿 YOLO v4 的測試照片試一下:
https://ithelp.ithome.com.tw/upload/images/20230209/200019761upd9X9ECw.jpg

偵測到以下物件:1 bicycle, 1 car, 1 truck, 1 dog,出現錯誤,一輛車子被辨識成car跟truck,重複了,另外,車子旁邊的垃圾桶沒有偵測到,v4、v7 都有偵測到,v5、v8都沒有偵測到,中研院團隊勝。再以較大的模型偵測,車子沒有重複偵測,但垃圾桶還是沒有偵測到。

v4 可參考『YOLO v4 建置心得 -- Windows 環境』『YOLO v4 模型訓練實作』,v7 可參考『YOLO v7 實測』

手機App

v8 支援手機,可安裝App,筆者初步測試,播放還算順暢,但物件偵測不是很快,可在Google Play搜尋 【Ultralytics】,即可找到該App,安裝需求不高,筆者使用免費手機也是OK的啦。

程式撰寫

以上是直接使用指令,有時候會想要撰寫程式,顯示更多訊息,例如顯示照片中的物件位置,官網範例如下:

from ultralytics import YOLO

# Load a model
model = YOLO("./yolov8n.yaml")  # build a new model from scratch
model = YOLO("./yolov8n.pt")  # load a pretrained model (recommended for training)

# 預測
results = model("./bus.jpg")

# 顯示物件類別
print(results[0].boxes.cls)
print()

# 顯示物件座標
print(results[0].boxes.xyxy)

結果如下:

物件類別代碼:[ 5.,  0.,  0.,  0., 11.,  0.]

物件座標:
tensor([[ 17., 231., 802., 768.],
        [ 49., 399., 245., 903.],
        [670., 380., 810., 876.],
        [221., 406., 345., 857.],
        [  0., 255.,  32., 325.],
        [  0., 551.,  67., 874.]], device='cuda:0')

要顯示照片中的物件位置,可以下列程式存檔。

from ultralytics import YOLO
from PIL import Image
import cv2

model = YOLO("./yolov8n.pt")
# webcam
# results = model.predict(source="0")
# 整個目錄
# results = model.predict(source="folder", show=True)

# from PIL
im1 = Image.open("bus.jpg")
# save=True:存檔
results = model.predict(source=im1, save=True)

存檔位置預設在 runs\detect\predict 資料夾下。
https://ithelp.ithome.com.tw/upload/images/20230209/20001976oHvwyrZp1X.jpg

結語

v8 除了物件偵測外,還可以進行影像分割(Image segmentation),筆者還沒研究,另外,預設模型是以COCO資料集作訓練,只能辨識80種物件,如何訓練自訂資料集,都是筆者之後會研究的課題。

v7 除了物件偵測、語義分割(mask)外,還可以進行姿態(Pose)偵測,筆者以影片測試,姿態偵測結果非常平順,初步感覺 v8 的優勢好像不太明顯。

夜深了,下次再分享嘍。

以下為工商廣告:)。
深度學習PyTorch入門到實戰應用影音課程:
https://ithelp.ithome.com.tw/upload/images/20230323/20001976OkmtrFnLWL.jpg

PyTorch:
開發者傳授 PyTorch 秘笈
https://ithelp.ithome.com.tw/upload/images/20220531/20001976MhL9K2rsgO.png

TensorFlow:
深度學習 -- 最佳入門邁向 AI 專題實戰
https://ithelp.ithome.com.tw/upload/images/20220531/20001976ZOxC7BHyN3.jpg


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言