檢測路在何方?YOLOv8終極指南
本文經(jīng)自動駕駛之心公眾號授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請聯(lián)系出處。
YOLOv8是計算機視覺領(lǐng)域的最新發(fā)展,它是一種用于目標檢測、實例分割和分類的最新先進模型。除了對模型架構(gòu)本身的改進之外,YOLOv8通過一個用于使用YOLO模型的PIP包為開發(fā)者提供了一個新的友好界面。
在這篇文章中,我們將深入探討YOLOv8在計算機視覺領(lǐng)域的重要性,將其與其他類似模型在準確性方面進行比較,并討論YOLOv8 GitHub倉庫的最新變化。
本文來源:https://blog.roboflow.com/whats-new-in-yolov8/
為適合中文閱讀習(xí)慣,閱讀更有代入感,原文翻譯后有刪改。您也可以查看原文。
1. YOLOv8是什么?
YOLOv8
是最新的YOLO模型,可用于目標檢測
、圖像分類
和實例分割
任務(wù)。YOLOv8由Ultralytics
開發(fā),該公司還創(chuàng)建了具有影響力和產(chǎn)業(yè)定義性的YOLOv5模型。與YOLOv5相比,YOLOv8包含許多架構(gòu)和開發(fā)者體驗的改變和改進。
截至本文寫作時,YOLOv8仍在積極開發(fā)中,Ultralytics正在開發(fā)新功能并響應(yīng)社區(qū)的反饋。確實,當Ultralytics發(fā)布一個模型時,它會得到長期的支持:該組織與社區(qū)合作,使模型達到最佳狀態(tài)。
2. YOLO是如何發(fā)展成為YOLOv8的?
YOLO(You Only Look Once)系列模型在計算機視覺領(lǐng)域變得非常有名。YOLO之所以著名,是因為它在保持小型模型尺寸的同時具有相當高的準確性。YOLO模型可以在單個GPU上進行訓(xùn)練,這使其適用于廣泛的開發(fā)者。機器學(xué)習(xí)從業(yè)者可以在邊緣硬件
或云
中以低成本部署它。
自2015年Joseph Redmond
首次發(fā)布以來,YOLO一直受到計算機視覺社區(qū)的關(guān)注。在早期版本(版本1-4)中,YOLO是在Redmond編寫的稱為Darknet的自定義深度學(xué)習(xí)框架中以C代碼維護的。
YOLOv8作者Glenn Jocher在Ultralytics工作,他在PyTorch(來自Facebook的深度學(xué)習(xí)框架)中追隨了YOLOv3倉庫。隨著影子倉庫中訓(xùn)練的改進,Ultralytics最終推出了自己的模型:YOLOv5
。
由于其靈活的Pythonic結(jié)構(gòu),YOLOv5迅速成為世界上最先進的倉庫。這種結(jié)構(gòu)允許社區(qū)發(fā)明新的建模改進,并迅速通過具有類似PyTorch方法的存儲庫分享它們。
除了強大的模型基礎(chǔ)之外,YOLOv5的維護人員一直致力于支持模型周圍的健康軟件生態(tài)系統(tǒng)。隨著社區(qū)的需求,他們積極修復(fù)問題并推動存儲庫的能力。
在過去的兩年里,各種模型從YOLOv5 PyTorch存儲庫分支出來,包括Scaled-YOLOv4、YOLOR和YOLOv7。其他模型也在世界各地以其基于PyTorch的實現(xiàn)而涌現(xiàn),如YOLOX和YOLOv6。在這過程中,每個YOLO模型都帶來了新的SOTA技術(shù),不斷推動模型的準確性和效率。
在過去的六個月中,Ultralytics一直在研究YOLO的最新SOTA版本,即YOLOv8。YOLOv8于2023年1月10日發(fā)布。
3. 我為什么要使用YOLOv8?
以下是考慮在下一個計算機視覺項目中使用YOLOv8的幾個主要原因:
- YOLOv8在Microsoft COCO和Roboflow 100上測得的準確性很高。
- YOLOv8帶有許多開發(fā)者便利功能,從易于使用的CLI到良好結(jié)構(gòu)化的Python包。
- YOLO周圍有一個龐大的社區(qū),YOLOv8模型周圍的社區(qū)也在不斷增長,這意味著計算機視覺領(lǐng)域的許多人可能在你需要指導(dǎo)時提供幫助。
YOLOv8在COCO上取得了強大的準確性。例如,YOLOv8m模型(中型模型)在COCO上測得50.2%的mAP。在Roboflow 100上進行評估時,這是一個專門評估模型在各種特定任務(wù)領(lǐng)域的性能的數(shù)據(jù)集,YOLOv8比YOLOv5得分要好得多。本文后面提供了更多關(guān)于此的性能分析信息。
此外,YOLOv8中的開發(fā)者便利功能也很顯著。與其他模型不同,其中任務(wù)分散在許多不同的Python文件中,您可以執(zhí)行這些文件,YOLOv8提供了一個CLI,使模型訓(xùn)練更加直觀。除此之外,它還提供了一個Python包,提供比先前模型更無縫的編碼體驗。
在考慮使用模型時,YOLO周圍的社區(qū)是引人注目的。許多計算機視覺專家了解YOLO及其工作原理,有很多關(guān)于實際使用YOLO的在線指導(dǎo)。盡管YOLOv8在本文撰寫時是新的,但已有許多在線指南可供參考。
以下是我們自己的學(xué)習(xí)資源,可幫助您深入了解YOLO:
- 如何使用YOLOv8檢測對象
- 如何在視頻上運行YOLOv8檢測
- YOLOv8模型概述(在Roboflow Models上)
- 如何在自定義數(shù)據(jù)集上訓(xùn)練YOLOv8模型
- 如何將YOLOv8模型部署到Raspberry Pi
- 用于訓(xùn)練YOLOv8目標檢測模型的Google Colab筆記本
- 用于訓(xùn)練YOLOv8分類模型的Google Colab筆記本
- 用于訓(xùn)練YOLOv8分割模型的Google Colab筆記本
- 使用YOLOv8和ByteTRACK跟蹤和計數(shù)車輛
讓我們深入探討YOLOv8的架構(gòu),以及它與先前YOLO模型的不同之處。
4. YOLOv8架構(gòu):深入解析
目前尚無YOLOv8的發(fā)表論文,因此我們?nèi)狈ζ鋭?chuàng)建過程中的研究方法和削減研究的直接了解。盡管如此,我們分析了存儲庫和有關(guān)該模型的信息,開始記錄YOLOv8中的新特性。
如果你希望自行查看代碼,請查看YOLOv8存儲庫,并查看此代碼差異以了解一些研究是如何進行的。
這里我們提供了對影響深遠的建模更新的快速摘要,然后我們將看一下模型的評估,這些評估已經(jīng)說明了問題。
由GitHub用戶RangeKing制作的以下圖片顯示了網(wǎng)絡(luò)架構(gòu)的詳細可視化。
YOLOv8 架構(gòu),GitHub 用戶 RangeKing 制作的可視化作品
4.1 無錨檢測
YOLOv8是一種無錨模型。這意味著它直接預(yù)測對象的中心,而不是相對于已知錨框
的偏移量。
在YOLO中錨框的可視化
錨框
曾經(jīng)是早期YOLO模型中棘手的一部分,因為它們可能代表目標基準框的分布,但不代表自定義數(shù)據(jù)集的分布。
YOLOv5的檢測頭
無錨檢測減少了框預(yù)測的數(shù)量,從而加速了非最大抑制(NMS, Non-Maximum Suppression)
,這是一種復(fù)雜的后處理步驟,用于在推理后篩選候選檢測。
YOLOv8的檢測頭
4.1 新的卷積
干部的第一個6x6卷積
被3x3卷積
替代,主要的構(gòu)建塊發(fā)生了變化,C2f替代了C3。該模塊在下圖中進行了總結(jié),其中“f”是特征數(shù),“e”是擴展率,CBS是由Conv、BatchNorm和SiLU組成的塊。
在C2f中,來自Bottleneck(這是兩個帶有殘差連接的3x3卷積的花哨名稱)的所有輸出都被串聯(lián)在一起。而在C3中,僅使用了最后一個Bottleneck的輸出。
新的YOLOv8 C2f模塊
Bottleneck與YOLOv5中的相同,但第一個卷積的核大小從1x1更改為3x3。從這些信息中,我們可以看到Y(jié)OLOv8開始恢復(fù)到2015年定義的ResNet塊。
在neck中,特征直接串聯(lián)而不強制要求相同的通道維度。這減少了參數(shù)數(shù)量和張量的總體大小。
4.2 結(jié)束鑲嵌增強
深度學(xué)習(xí)研究往往側(cè)重于模型架構(gòu),但YOLOv5和YOLOv8的訓(xùn)練過程是它們成功的重要組成部分。
YOLOv8在在線訓(xùn)練期間對圖像進行增強。在每個時代,模型看到了提供的圖像的稍微不同的變化。
其中一種增強稱為鑲嵌增強。這涉及將四個圖像拼接在一起,迫使模型學(xué)習(xí)在新位置、部分遮擋和不同周圍像素的對象。
棋盤照片的馬賽克增強然而,經(jīng)驗表明,如果在整個訓(xùn)練過程中執(zhí)行此增強,性能會下降。因此,在最后十個訓(xùn)練時代中關(guān)閉它是有益的。
這種變化是YOLO建模在YOLOv5存儲庫和YOLOv8研究中隨著時間的推移所受到的慎重關(guān)注的典范。
5. YOLOv8準確性改進
YOLOv8的研究主要受到對COCO基準的經(jīng)驗性評估的推動。隨著網(wǎng)絡(luò)和訓(xùn)練例程的每個部分的微調(diào),運行新實驗以驗證這些變化對COCO建模的影響。
5.1 YOLOv8 COCO準確性
COCO(上下文中的常見對象)是評估目標檢測模型的行業(yè)標準基準。在COCO上比較模型時,我們看的是mAP值和推理速度的FPS測量。模型應(yīng)在相似的推理速度下進行比較。
下圖顯示了使用Ultralytics團隊收集并在YOLOv8 README中發(fā)布的數(shù)據(jù),YOLOv8在COCO上的準確性:
YOLOv8 COCO評測
截至本文寫作時,YOLOv8在COCO上的準確性在相似的推理延遲條件下是最先進的。
5.2 RF100準確性
在Roboflow,我們從Roboflow Universe中抽取了100個樣本數(shù)據(jù)集,這是一個擁有超過100,000個數(shù)據(jù)集的存儲庫,用于評估模型對新領(lǐng)域的泛化能力。我們的基準由Intel的支持下開發(fā),是為計算機視覺從業(yè)者設(shè)計的基準,旨在更好地回答問題:“這個模型在我的自定義數(shù)據(jù)集上表現(xiàn)如何?”
我們在我們的RF100
基準上評估了YOLOv8,與YOLOv5和YOLOv7一起,下圖顯示了每個模型的mAP@.50
的箱線圖。
我們對每個模型的小版本進行了100個時代的運行,我們使用單個種子運行了一次,因此由于梯度抽簽,請以謹慎的態(tài)度對待這個結(jié)果。
下圖的箱線圖告訴我們YOLOv8的異常值較少,而在Roboflow 100基準上的mAP總體上更好。
YOLO 相對于 RF100 的 mAP@.50
下面的條形圖顯示了每個RF100類別的平均mAP@.50。同樣,YOLOv8勝過所有先前的模型。
YOLO 相對于 RF100 類別的平均 mAP@.50
與YOLOv5評估相比,YOLOv8模型在每個數(shù)據(jù)集上產(chǎn)生了類似的結(jié)果,或者顯著改善了結(jié)果。
6. YOLOv8存儲庫和PIP包
YOLOv8代碼存儲庫旨在成為社區(qū)使用和迭代模型的地方。由于我們知道該模型將持續(xù)改進,我們可以將初始YOLOv8模型結(jié)果作為基線,并期待隨著發(fā)布新的迷你版本而進行的未來改進。
我們希望的最好結(jié)果是研究人員開始在Ultralytics存儲庫的基礎(chǔ)上開發(fā)他們的網(wǎng)絡(luò)。在YOLOv5的分支中一直在進行研究,但如果在一個地方制作模型并最終合并到主線中,將會更好。
6.1 YOLOv8存儲庫布局
YOLOv8模型使用與YOLOv5類似的代碼,其中分類、實例分割和目標檢測任務(wù)類型的支持采用相同的代碼例程。
模型仍然使用相同的YOLOv5 YAML格式初始化,并且數(shù)據(jù)集格式也保持不變。
6.2 YOLOv8 CLI
Ultralytics軟件包配備了一個CLI。這對許多YOLOv5用戶來說是熟悉的,因為核心訓(xùn)練、檢測和導(dǎo)出交互也是通過CLI完成的。
yolo task=detect mode=val model={HOME}/runs/detect/train/weights/best.pt data={dataset.location}/data.yaml
你可以在task
中傳遞 [detect, classify, segment],在mode
中傳遞 [train, predict, val, export],模型可以是未初始化的.yaml
文件,也可以是先前訓(xùn)練過的.pt
文件。
6.3 YOLOv8 Python包
除了可用的CLI工具外,YOLOv8現(xiàn)在還作為一個PIP包進行分發(fā)。這使得本地開發(fā)稍顯困難,但解鎖了將YOLOv8融入你的Python代碼的所有可能性。
from ultralytics import YOLO
# 加載模型
model = YOLO("yolov8n.yaml") # 從頭開始構(gòu)建一個新模型
model = YOLO("yolov8n.pt") # 加載預(yù)訓(xùn)練模型(推薦用于訓(xùn)練)
# 使用模型
results = model.train(data="coco128.yaml", epochs=3) # 訓(xùn)練模型
results = model.val() # 評估模型在驗證集上的性能
results = model("https://ultralytics.com/images/bus.jpg") # 對圖像進行預(yù)測
success = YOLO("yolov8n.pt").export(format="onnx") # 將模型導(dǎo)出為ONNX格式
7. YOLOv8注釋格式
YOLOv8使用YOLOv5 PyTorch TXT
注釋格式,這是Darknet注釋格式的修改版本。
查看Roboflow Convert工具,了解如何轉(zhuǎn)換數(shù)據(jù)以在新的YOLOv8模型中使用。
https://roboflow.com/formats/yolov8-pytorch-txt?ref=blog.roboflow.com
8. YOLOv8標注工具
YOLOv8的創(chuàng)建者和維護者Ultralytics已經(jīng)與Roboflow合作,成為YOLOv8項目中建議的標注和導(dǎo)出工具。使用Roboflow,我們可以為YOLOv8支持的所有任務(wù)(目標檢測、分類和分割)標注數(shù)據(jù),并導(dǎo)出數(shù)據(jù)以便在YOLOv8 CLI或Python包中使用。
9. 開始使用YOLOv8
要開始將YOLOv8應(yīng)用于我們自己的用例,請查看我們關(guān)于如何在自定義數(shù)據(jù)集上訓(xùn)練YOLOv8的指南。
要了解其他人如何使用YOLOv8,請在Roboflow Universe上瀏覽其他YOLOv8模型、數(shù)據(jù)集和靈感。
對于將模型投入生產(chǎn)并使用主動學(xué)習(xí)策略不斷更新模型的從業(yè)者,我們添加了一個路徑,可以部署YOLOv8模型,將其用于我們的推理引擎,并用于數(shù)據(jù)集的標簽輔助?;蛘撸梢允褂肦oboflow Inference在設(shè)備上部署YOLOv8,這是一個開源推理服務(wù)器。