譯者| 朱先忠
審校 | 孫淑娟
YOLOv8是什么?
YOLOv8是Ultralytics公司推出的基于對象檢測模型的YOLO最新系列,它能夠提供截至目前最先進(jìn)的對象檢測性能。
借助于以前的YOLO模型版本支持技術(shù),YOLOv8模型運(yùn)行得更快、更準(zhǔn)確,同時(shí)為執(zhí)行任務(wù)的訓(xùn)練模型提供了統(tǒng)一的框架,這包括:
- 目標(biāo)檢測
- 實(shí)例分割
- 圖像分類
在撰寫本文時(shí),Ultralytics的YOLOv8存儲(chǔ)庫中其實(shí)還有很多功能有待添加,這包括訓(xùn)練模型的整套導(dǎo)出功能等。此外,Ultralytics將計(jì)劃在Arxiv上發(fā)布一篇相關(guān)的論文,將對YOLOv8與其他最先進(jìn)的視覺模型進(jìn)行比較。
YOLOv8的新功能
Ultralytics為YOLO模型發(fā)布了一個(gè)全新的存儲(chǔ)庫(https://github.com/ultralytics/ultralytics)。該存儲(chǔ)庫被構(gòu)建為用于訓(xùn)練對象檢測、實(shí)例分割和圖像分類模型的統(tǒng)一框架。
以下列舉的是這個(gè)新版本的一些關(guān)鍵功能:
- 用戶友好的API(命令行+Python)。
- 更快、更準(zhǔn)確。
- 支持:
- 目標(biāo)檢測,
- 實(shí)例分割和
- 圖像分類。
- 可擴(kuò)展到所有以前的版本。
- 新的骨干網(wǎng)絡(luò)。
- 新的Anchor-Free head對象檢測算法。
- 新的損失函數(shù)。
此外,YOLOv8也非常高效和靈活,它可以支持多種導(dǎo)出格式,而且該模型可以在CPU和GPU上運(yùn)行。
YOLOv8中提供的子模型
YOLOv8模型的每個(gè)類別中共有五個(gè)模型,以便共同完成檢測、分割和分類任務(wù)。其中,YOLOv8 Nano是最快和最小的模型,而YOLOv8Extra Large(YOLOv8x)是其中最準(zhǔn)確但最慢的模型。
YOLOv8這次發(fā)行中共附帶了以下預(yù)訓(xùn)練模型:
- 在圖像分辨率為640的COCO檢測數(shù)據(jù)集上訓(xùn)練的對象檢測檢查點(diǎn)。
- 在圖像分辨率為640的COCO分割數(shù)據(jù)集上訓(xùn)練的實(shí)例分割檢查點(diǎn)。
- 在圖像分辨率為224的ImageNet數(shù)據(jù)集上預(yù)處理的圖像分類模型。
下面,讓我們來看看使用YOLOv8x進(jìn)行檢測和實(shí)例分割模型的輸出效果,請參考下面的gif動(dòng)畫。
如何使用YOLOv8?
為了充分發(fā)揮出YOLOv8的潛力,需要從存儲(chǔ)庫以及ultralytics包中安裝相應(yīng)的需求。
要安裝這些需求,我們首先需要克隆一下該模型的存儲(chǔ)庫,命令如下:
git clone https://github.com/ultralytics/ultralytics.git
接下來,安裝需求配置文件:
pip install -r requirements.txt
在最新版本中,Ultralytics YOLOv8同時(shí)提供了完整的命令行界面(CLI)API和Python SDK,用于執(zhí)行訓(xùn)練、驗(yàn)證和推理任務(wù)。
為了使用yolo命令行界面(CLI),我們需要安裝ultralytics包,命令如下:
pip install ultralytics
如何通過命令行界面(CLI)使用YOLOv8?
安裝必要的軟件包后,我們可以使用yolo命令訪問YOLOv8 CLI。以下給出的是使用yolo CLI運(yùn)行對象檢測推斷的命令行代碼示例:
yolo task=detect \
mode=predict \
model=yolov8n.pt \
source="image.jpg"
其中,task參數(shù)可以接受三個(gè)參數(shù)值:detect、classify和segment,分別對應(yīng)于檢測、分類和分段三種任務(wù)。類似地,mode參數(shù)可以有三個(gè)取值,分別是train、val或predict。此外,在導(dǎo)出訓(xùn)練模型時(shí),我們也可以將mode參數(shù)指定為export。
有關(guān)所有可能的yolo CLI標(biāo)志和參數(shù),有興趣的讀者可參考鏈接https://docs.ultralytics.com/config/。
如何通過Python API使用YOLOv8?
除了通過上面CLI方式使用YOLOv8外,我們還可以創(chuàng)建一個(gè)簡單的Python文件,導(dǎo)入YOLO模塊并執(zhí)行我們選擇的任務(wù)。
from ultralytics import YOLO
model = YOLO("yolov8n.pt") # 加載一個(gè)預(yù)訓(xùn)練的YOLOv8n模型
model.train(data="coco128.yaml") #訓(xùn)練模型
model.val() # 評估驗(yàn)證集上的模型性能
model.predict(source="https://ultralytics.com/images/bus.jpg") #對圖像進(jìn)行預(yù)測
model.export(format="onnx") # 將模型導(dǎo)出為ONNX格式
例如,在上述代碼中首先在COCO128數(shù)據(jù)集上訓(xùn)練YOLOv8 Nano模型,然后在驗(yàn)證集上對其進(jìn)行評估,最終對樣本圖像進(jìn)行預(yù)測。
接下來,讓我們通過yolo CLI方式來使用對象檢測、實(shí)例分割和圖像分類模型進(jìn)行推斷。
目標(biāo)檢測的推斷結(jié)果
以下命令實(shí)現(xiàn)使用YOLOv8 Nano模型對視頻進(jìn)行檢測。
yolo task=detect mode=predict model=yolov8n.pt source='input/video_3.mp4' show=True
該推斷的運(yùn)行硬件環(huán)境是在筆記本電腦GTX 1060 GPU上以幾乎105 FPS的速度運(yùn)行的,最終我們得到以下輸出結(jié)果:
使用YOLOv8 Nano模型進(jìn)行檢測推斷
需要說明的是,YOLOv8 Nano模型在幾幀內(nèi)把貓和狗進(jìn)行了混合。讓我們使用YOLOv8 Extra Large模型對同一視頻進(jìn)行檢測并檢查輸出。
yolo task=detect mode=predict model=yolov8x.pt source='input/video_3.mp4' show=True
注意:上面的YOLOv8 Extra Large模型在GTX 1060 GPU上以平均17 FPS的速度運(yùn)行。
使用YOLOv8超大模型進(jìn)行檢測推斷
盡管這一次的誤分類略有減少,但模型仍然在一些幀中進(jìn)行了錯(cuò)誤的檢測。
實(shí)例分割的推理結(jié)果
使用YOLOv8實(shí)例分割模型運(yùn)行推理同樣是很簡單的。我們只需要在上面的命令中更改一下任務(wù)和模型名稱即可,結(jié)果如下:
yolo task=segment mode=predict model=yolov8x-seg.pt source='input/video_3.mp4' show=True
因?yàn)閷?shí)例分割與對象檢測是結(jié)合在一起的,所以這一次運(yùn)行時(shí)的平均FPS約為13。
使用YOLOv8超大模型進(jìn)行分割推斷
分割圖在輸出中看起來很干凈。即使當(dāng)貓?jiān)谧詈髱讕[藏在塊下時(shí),模型也能夠檢測并分割它。
圖像分類的推理結(jié)果
最后,由于YOLOv8已經(jīng)提供了預(yù)訓(xùn)練的分類模型,讓我們使用yolov8x-cls模型對同一視頻進(jìn)行分類推斷。這是截止目前存儲(chǔ)庫提供的最大分類模型。
yolo task=classify mode=predict model=yolov8x-cls.pt source='input/video_3.mp4' show=True
使用YOLOv8超大模型進(jìn)行分類推斷
默認(rèn)情況下,視頻用模型預(yù)測的前5個(gè)類進(jìn)行標(biāo)注。在沒有任何后期處理的情況下,標(biāo)注部分直接使用了ImageNet類名。
YOLOv8 vs YOLOv7 vs YOLOv6 vs YOLOv5
可以看出,YOLOv8模型似乎比之前的YOLO模型表現(xiàn)更好;這不僅是相比于YOLOv5模型來說的,YOLOv8也優(yōu)越于YOLOv7和YOLOv6模型。
YOLOv8與其他YOLO模型性能相比。
由上圖可以看出,與以640圖像分辨率訓(xùn)練的其他YOLO模型相比,所有YOLOv8模型在參數(shù)數(shù)量相似的情況下具有更好的吞吐量。
接下來,讓我們更為詳細(xì)了解一下最新的YOLOv8模型與Ultralytics公司的YOLOv5模型的性能差異。下面幾個(gè)表格顯示了YOLOv8和YOLOv5之間的綜合比較情況。
總體比較
YOLOv8和YOLOv5之間的性能比較
YOLOv8模型與YOLOv5模型性能比較表
對象檢測比較
YOLOv8模型與YOLOv5模型對象檢測性能比較情況見下表:
YOLOv8模型與YOLOv5模型對象檢測性能比較
實(shí)例分段比較
YOLOv8模型與YOLOv5模型實(shí)例分段性能比較情況見下表:
YOLOv8與YOLOv5實(shí)例分割模型性能比較
圖像分類比較
YOLOv8與YOLOv5圖像分類模型情況
整體來看,其實(shí)也很明顯,最新的YOLOv8模型比YOLOv5要好得多,除了一種分類模型外。
YOLOv8目標(biāo)檢測模型的發(fā)展
下面給出的這張圖像顯示了YOLO目標(biāo)檢測模型的時(shí)間線以及YOLOv8的演變情況。
YOLOv8目標(biāo)檢測模型的演變情況
YOLOv1模型
YOLO對象檢測的第一個(gè)版本,即YOLOv1,由Joseph Redmon等人于2015年發(fā)布。這是第一個(gè)產(chǎn)生SSD和所有后續(xù)YOLO模型的單級對象檢測(SSD)模型。
YOLO 9000(第2版)
YOLOv2,又稱YOLO 9000,由YOLOv1的原作者約瑟夫·雷蒙提出。它改進(jìn)了原來的YOLOv1模型——引入了錨盒(Anchor Box)的概念和更好的主干(即Darknet-19)。
YOLOv3
2018年,約瑟夫·雷蒙和阿里·法哈迪公布了YOLOv3模型。其實(shí),這不是一個(gè)架構(gòu)上的飛躍,算是一份技術(shù)報(bào)告,但YOLO家族還是有了很大的進(jìn)步。YOLOv3模型使用Darknet-53主干、殘差連接,并使用更好的預(yù)訓(xùn)練和圖像增強(qiáng)技術(shù)來實(shí)現(xiàn)改進(jìn)。
Ultralytics YOLO目標(biāo)檢測模型
YOLOv3之前的所有YOLO對象檢測模型都使用C編程語言編寫,并使用Darknet框架。但是,新手們發(fā)現(xiàn)很難遍歷代碼庫并對模型進(jìn)行微調(diào)。
于是,大約與YOLOv3模型發(fā)布的同時(shí),Ultralytics發(fā)布了第一個(gè)使用PyTorch框架實(shí)現(xiàn)的YOLO(YOLOv3)。這個(gè)模型更為容易訪問,也更容易用于轉(zhuǎn)移學(xué)習(xí)領(lǐng)域。
發(fā)布YOLOv3模型后不久,約瑟夫·雷蒙離開了計(jì)算機(jī)視覺(Computer Vision)研究界。YOLOv4(Alexey等人)是最后一個(gè)用Darknet編寫的YOLO模型。之后,又相繼出現(xiàn)了其他許多的YOLO物體檢測模型,例如縮放版YOLOv4、YOLOX、PP-YOLO、YOLOv6和YOLOv7代表了其中較為突出的一些模型。
在YOLOv3之后,Ultralytics還發(fā)布了YOLOv5,它比所有其他YOLO模型更好、更快、更易于使用。
截至目前(2023年1月),Ultralytics在Ultralytics存儲(chǔ)庫下發(fā)布了YOLOv8,這可能是迄今為止最好的YOLO模型。
結(jié)論
在本文中,我們探討了YOLO模型的最新版本,即YOLOv8。其中,我們具體介紹了這款新模型的性能,以及軟件包附帶的命令行界面用法。除此之外,我們還對少數(shù)幾個(gè)視頻數(shù)據(jù)進(jìn)行了推斷展示。
在以后的文章中,我們還將在自定義數(shù)據(jù)集上對YOLOv8模型進(jìn)行微調(diào)。
最后,如果您自己也在進(jìn)行任何有關(guān)YOLOv8模型的實(shí)驗(yàn),請?jiān)谠u論部分告訴我
譯者介紹
朱先忠,51CTO社區(qū)編輯,51CTO專家博客、講師,濰坊一所高校計(jì)算機(jī)教師,自由編程界老兵一枚。
原文標(biāo)題:Ultralytics YOLOv8: State-of-the-Art YOLO Models,作者:Sovit Rath