YOLOv11來(lái)了 | 自定義目標(biāo)檢測(cè)
概述
YOLO11 在 2024 年 9 月 27 日的 YOLO Vision 2024 活動(dòng)中宣布:https://www.youtube.com/watch?v=rfI5vOo3-_A。
YOLO11 是 Ultralytics YOLO 系列的最新版本,結(jié)合了尖端的準(zhǔn)確性、速度和效率,用于目標(biāo)檢測(cè)、分割、分類(lèi)、定向邊界框和姿態(tài)估計(jì)。與 YOLOv8 相比,它具有更少的參數(shù)和更好的結(jié)果,不難預(yù)見(jiàn),YOLO11 在邊緣設(shè)備上更高效、更快,將頻繁出現(xiàn)在計(jì)算機(jī)視覺(jué)領(lǐng)域的最先進(jìn)技術(shù)(SOTA)中。
主要特點(diǎn):
- 增強(qiáng)的特征提?。篩OLO11 使用改進(jìn)的主干和頸部架構(gòu)來(lái)增強(qiáng)特征提取,以實(shí)現(xiàn)更精確的目標(biāo)檢測(cè)和復(fù)雜任務(wù)的性能。
- 針對(duì)效率和速度優(yōu)化:精細(xì)的架構(gòu)設(shè)計(jì)和優(yōu)化的訓(xùn)練流程在保持準(zhǔn)確性和性能之間最佳平衡的同時(shí),提供更快的處理速度。
- 更少的參數(shù),更高的準(zhǔn)確度:YOLO11m 在 COCO 數(shù)據(jù)集上實(shí)現(xiàn)了比 YOLOv8m 更高的 mAP,參數(shù)減少了 22%,提高了計(jì)算效率,同時(shí)不犧牲準(zhǔn)確度。
- 跨環(huán)境的適應(yīng)性:YOLO11 可以無(wú)縫部署在邊緣設(shè)備、云平臺(tái)和配備 NVIDIA GPU 的系統(tǒng)上,確保最大的靈活性。
- 支持廣泛的任務(wù)范圍:YOLO11 支持各種計(jì)算機(jī)視覺(jué)任務(wù),如目標(biāo)檢測(cè)、實(shí)例分割、圖像分類(lèi)、姿態(tài)估計(jì)和定向目標(biāo)檢測(cè)(OBB)。
圖片==
本教程涵蓋的步驟:
- 環(huán)境設(shè)置
- 準(zhǔn)備數(shù)據(jù)集
- 訓(xùn)練模型
- 驗(yàn)證模型
- 在測(cè)試圖像上運(yùn)行推理
- 結(jié)論
環(huán)境設(shè)置
你需要一個(gè)谷歌賬戶(hù)才能使用 Google Colab。我們使用 Colab 進(jìn)行需要密集計(jì)算的任務(wù),比如深度學(xué)習(xí)。由于我電腦的 GPU 不足,我需要激活 Colab 的 GPU 支持。
這樣做之后,我們檢查 gpu 活動(dòng)。
它支持高達(dá) 16GB 的內(nèi)存和 2560 CUDA 核心,以加速?gòu)V泛的現(xiàn)代應(yīng)用程序。然后執(zhí)行此代碼以動(dòng)態(tài)確定工作目錄并靈活管理文件路徑。
import os
HOME = os.getcwd()
接下來(lái),你需要下載 Ultralytics 包來(lái)加載和處理模型,以及用于數(shù)據(jù)集的 Roboflow 包。
!pip install ultralytics supervision roboflow
from ultralytics import YOLO
from roboflow import Roboflow
準(zhǔn)備數(shù)據(jù)集
在這個(gè)項(xiàng)目中,我使用了 RF100 中包含的寄生蟲(chóng)數(shù)據(jù)集。我將在這個(gè)數(shù)據(jù)集中訓(xùn)練一個(gè)有 8 種不同寄生蟲(chóng)類(lèi)別的目標(biāo)檢測(cè)模型。我將通過(guò) Roboflow 處理標(biāo)記、分類(lèi)的圖像。我經(jīng)常在我的個(gè)人項(xiàng)目中使用這個(gè)開(kāi)源平臺(tái)。在處理現(xiàn)成的數(shù)據(jù)集時(shí),你可以在數(shù)據(jù)集的健康分析部分快速獲取大量關(guān)于數(shù)據(jù)的信息。例如,下面顯示的類(lèi)別平衡部分,我們可以看到 Hymenolepis 類(lèi)別是代表不足的。
數(shù)據(jù)集相關(guān)鏈接:
- https://universe.roboflow.com/roboflow-100/parasites-1s07h
- https://universe.roboflow.com/roboflow-100
- https://universe.roboflow.com/roboflow-100/parasites-1s07h/health
為了提高這個(gè)類(lèi)別的準(zhǔn)確性,你需要應(yīng)用增強(qiáng)、過(guò)采樣或調(diào)整類(lèi)別權(quán)重。我們不會(huì)在本文中討論這些主題,不用擔(dān)心,但如果你對(duì)這些任務(wù)感興趣,請(qǐng)隨時(shí)聯(lián)系我。如果有足夠需求,我也可以分享我關(guān)于這些主題的詳細(xì)工作。你可以下載并使用 Roboflow 環(huán)境中的任何開(kāi)源項(xiàng)目,按照格式使用。在準(zhǔn)備或選擇數(shù)據(jù)集后,我們將在 Colab 環(huán)境中工作我們切換到 Colab 的原因是它提供免費(fèi)的 16GB NVIDIA T4 GPU 使用。我在下面提到了這個(gè)問(wèn)題。我們需要使用 Roboflow API 以 YOLOv8 格式導(dǎo)入我們的數(shù)據(jù)。讓我們獲取現(xiàn)成的代碼片段和數(shù)據(jù)格式。
rf = Roboflow(api_key="your-api-key")
project = rf.workspace("roboflow-100").project("parasites-1s07h")
version = project.version(2)
dataset = version.download("yolov8")
!sed -i '$d' {dataset.location}/data.yaml # Delete the last line
!sed -i '$d' {dataset.location}/data.yaml # Delete the second-to-last line
!sed -i '$d' {dataset.location}/data.yaml # Delete the third-to-last line
!echo 'test: ../test/images' >> {dataset.location}/data.yaml
!echo 'train: ../train/images' >> {dataset.location}/data.yaml
!echo 'val: ../valid/images' >> {dataset.location}/data.yaml
我們需要更新 data.yaml 格式,如下所示,以便以 YOLO11 格式進(jìn)行訓(xùn)練。
!sed -i '$d' {dataset.location}/data.yaml # Delete the last line
!sed -i '$d' {dataset.location}/data.yaml # Delete the second-to-last line
!sed -i '$d' {dataset.location}/data.yaml # Delete the third-to-last line
!echo 'test: ../test/images' >> {dataset.location}/data.yaml
!echo 'train: ../train/images' >> {dataset.location}/data.yaml
!echo 'val: ../valid/images' >> {dataset.location}/data.yaml
訓(xùn)練模型
讓我們?cè)谖覀兊臄?shù)據(jù)集上訓(xùn)練模型 40 個(gè)周期。作為這個(gè)項(xiàng)目的一部分,我通過(guò) CLI 命令展示了訓(xùn)練。在如下所示的簡(jiǎn)單命令下定義后,訓(xùn)練開(kāi)始。
!yolo task=detect mode=train model=yolo11s.pt data={dataset.location}/data.yaml epochs=40 imgsz=640 plots=True
你也可以使用 Python 創(chuàng)建它,以實(shí)現(xiàn)更靈活的場(chǎng)景。下面展示了示例 Python 訓(xùn)練代碼:
from ultralytics import YOLO
# Load a COCO-pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Train the model on the COCO8 example dataset for 40 epochs
results = model.train(data="coco8.yaml", epochs=40, imgsz=640)
訓(xùn)練好的模型保存在 /runs/detect/train/weights 文件下的 best.pt。
一旦你的模型完成訓(xùn)練,你可以使用 YOLO11 生成的圖表評(píng)估訓(xùn)練結(jié)果。
性能指標(biāo)
混淆矩陣
注意:在訓(xùn)練模型時(shí),回顧 Ultralytics 文檔中“訓(xùn)練設(shè)置”部分的參數(shù)是有益的。這部分對(duì)您的訓(xùn)練過(guò)程至關(guān)重要。
驗(yàn)證模型
以下是使用 YOLO11 的 Val 模式的優(yōu)勢(shì):
- 精度:獲取準(zhǔn)確的指標(biāo),如 mAP50、mAP75 和 mAP50–95,全面評(píng)估你的模型。
- 便利性:利用內(nèi)置功能記住訓(xùn)練設(shè)置,簡(jiǎn)化驗(yàn)證過(guò)程。
- 靈活性:使用相同或不同的數(shù)據(jù)集和圖像大小驗(yàn)證你的模型。
- 超參數(shù)調(diào)整:使用驗(yàn)證指標(biāo)微調(diào)你的模型以獲得更好的性能。
!yolo task=detect mode=val model={HOME}/runs/detect/train/weights/best.pt data={dataset.location}/data.yaml
Val 結(jié)果
一般評(píng)估:
- 精確度、召回率和 mAP 指標(biāo)相當(dāng)高。
- 盡管不同類(lèi)別之間存在性能差異,但整體模型性能令人滿(mǎn)意。
- 在速度方面,這是一個(gè)有效的模型,推理時(shí)間很低。
在測(cè)試數(shù)據(jù)集上運(yùn)行推理
讓我們?cè)u(píng)估模型的泛化能力,看看它在之前未見(jiàn)過(guò)的測(cè)試數(shù)據(jù)集上的預(yù)測(cè)。
# predict mode for test data
!yolo task=detect mode=predict model={HOME}/runs/detect/train/weights/best.pt conf=0.25 source={dataset.location}/test/images save=True
# for visualization
latest_folder = max(glob.glob('/content/runs/detect/predict*/'), key=os.path.getmtime)
for img in glob.glob(f'{latest_folder}/*.jpg')[:1]:
display(IPyImage(filename=img, width=600))
print("\n")
結(jié)果