【打怪升級 - 03】YOLO11/YOLO12/YOLOv10/YOLOv8 完全指南:從理論到代碼實戰,新手入門必看教程

引言:為什么選擇 YOLO?

在目標檢測領域,YOLO(You Only Look Once)系列模型一直以其高效性和準確性備受關注。作為新版本,YOLO系列的新版本總能在前輩的基礎上進行了多項改進,包括更高的檢測精度、更快的推理速度以及更強的小目標檢測能力。

在這里插入圖片描述

無論是無論是計算機視覺領域的初學者,還是希望快速部署目標檢測系統的開發者,YOLO系列 都是一個理想的選擇。本指南將帶你從理論基礎開始,逐步掌握 YOLO系列的核心原理與實戰技能。

一、YOLO 核心理論解析

1.1 YOLO 算法的基本思想

YOLO 系列的核心思想是將目標檢測任務轉化為一個回歸問題。與傳統的兩階段檢測算法(先產生候選區域再進行分類)不同,YOLO 采用單階段檢測策略,直接在一張圖片上同時預測目標的位置和類別。

在這里插入圖片描述

這種設計使得 YOLO 的檢測速度遠超傳統方法,能夠滿足實時檢測的需求。

1.2 YOLO11/12 的核心改進(簡單介紹~ 本文側重實戰)

YOLO11 在之前版本的基礎上進行了多項關鍵改進:

  • 新的骨干網絡:采用更高效的特征提取網絡,在減少計算量的同時提升特征表達能力

  • 改進的頸部結構:優化了特征融合機制,增強了多尺度特征處理能力

  • 優化的損失函數:提高了模型對小目標和遮擋目標的檢測能力

  • 動態錨框機制:根據不同數據集自動調整錨框參數,提升檢測精度

YOLO12 則引入了一種以注意力為中心的架構,它不同于以往YOLO 模型中使用的基于 CNN 的傳統方法,但仍保持了許多應用所必需的實時推理速度。該模型通過對注意力機制和整體網絡架構進行新穎的方法創新,實現了最先進的物體檢測精度,同時保持了實時性能。

1.3 目標檢測的基本概念

在深入 YOLO系列 之前,我們需要了解幾個關鍵概念:

  • 邊界框(Bounding Box):用于定位目標位置的矩形框,通常由 (x, y, w, h) 表示

  • 置信度(Confidence):模型對預測框中存在目標的信任程度

  • 交并比(IoU):衡量預測框與真實框重疊程度的指標

  • 非極大值抑制(NMS):用于去除重復檢測框的后處理方法

二、環境搭建:從零開始配置YOLO11/YOLO12/YOLOv10/YOLOv8

2.1 硬件要求

YOLO系列 雖然對硬件要求不算極端,但為了獲得良好的訓練和推理體驗,建議配置:

  • CPU:至少 4 核處理器
  • GPU:NVIDIA 顯卡(推薦 RTX 3060 及以上,支持 CUDA)
  • 內存:至少 8GB(推薦 16GB 及以上)
  • 硬盤:至少 10GB 空閑空間

2.2 軟件安裝步驟

參考我們之前的文章(含視頻講解)
【打怪升級 - 01】保姆級機器視覺入門指南:硬件選型 + CUDA/cuDNN/Miniconda/PyTorch/Pycharm 安裝全流程(附版本匹配秘籍)

2.2.1 安裝 ultralytics

Ultralytics 庫已經集成了YOLO11/YOLO12/YOLOv10/YOLOv8,安裝命令如下:

pip3 install ultralytics
2.2.4 驗證安裝
from ultralytics import YOLO# 加載預訓練模型
model = YOLO('yolo11n.pt')# 打印模型信息
print(model.info())

如果運行無錯誤并顯示模型信息,則安裝成功。

三、YOLO11/YOLO12/YOLOv10/YOLOv8 實戰:圖像與視頻檢測

3.1 使用預訓練模型進行圖像檢測

YOLO11/YOLO12/YOLOv10/YOLOv8提供了多個預訓練模型,從小型模型(n)到大型模型(x),可以根據需求選擇:

from ultralytics import YOLO
import cv2# 加載預訓練模型
model = YOLO('yolo11n.pt')  # 小型模型,速度快
# model = YOLO('yolo11s.pt')  # 中型模型,平衡速度和精度
# model = YOLO('yolo11m.pt')  # 大型模型,精度更高
# model = YOLO('yolo11l.pt')  # 更大的模型
# model = YOLO('yolo11x.pt')  # 最大模型,精度最高# Load a COCO-pretrained YOLO12n model
#model = YOLO("yolo12n.pt")# Load a COCO-pretrained YOLOv10n model
#model = YOLO("yolov10n.pt")# Load a COCO-pretrained YOLOv8n model
#model = YOLO("yolov8n.pt")# 檢測單張圖片
results = model('test.jpg')  # 替換為你的圖片路徑# 處理檢測結果
for result in results:# 繪制檢測框annotated_img = result.plot()# 顯示結果cv2.imshow('YOLO11 Detection', annotated_img)cv2.waitKey(0)cv2.destroyAllWindows()# 保存結果result.save('result.jpg')

3.2 視頻目標檢測

YOLO11/YOLO12/YOLOv10/YOLOv8 同樣支持視頻文件和攝像頭實時檢測:

from ultralytics import YOLO
import cv2# 加載模型
model = YOLO('yolo11n.pt')# Load a COCO-pretrained YOLO12n model
#model = YOLO("yolo12n.pt")# Load a COCO-pretrained YOLOv10n model
#model = YOLO("yolov10n.pt")# Load a COCO-pretrained YOLOv8n model
#model = YOLO("yolov8n.pt")# 視頻文件檢測
video_path = "input.mp4"
cap = cv2.VideoCapture(video_path)# 獲取視頻屬性
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv2.CAP_PROP_FPS)# 設置輸出視頻
output_path = "output.mp4"
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(output_path, fourcc, fps, (width, height))while cap.isOpened():ret, frame = cap.read()if not ret:break# 檢測幀results = model(frame)# 繪制檢測結果annotated_frame = results[0].plot()# 顯示幀cv2.imshow('YOLO Video Detection', annotated_frame)# 寫入輸出視頻out.write(annotated_frame)# 按q退出if cv2.waitKey(1) & 0xFF == ord('q'):break# 釋放資源
cap.release()
out.release()
cv2.destroyAllWindows()

3.3 攝像頭實時檢測

只需將視頻路徑替換為攝像頭索引即可實現實時檢測:

# 攝像頭實時檢測
cap = cv2.VideoCapture(0)  # 0表示默認攝像頭

四、模型訓練:自定義數據集訓練 YOLO11/YOLO12/YOLOv10/YOLOv8

4.1 數據集準備

YOLO系列需要特定格式的數據集,基本結構如下:

dataset/
├── images/
│   ├── train/
│   │   ├── img1.jpg
│   │   ├── img2.jpg
│   │   └── ...
│   └── val/
│       ├── img1.jpg
│       ├── img2.jpg
│       └── ...
└── labels/├── train/│   ├── img1.txt│   ├── img2.txt│   └── ...└── val/├── img1.txt├── img2.txt└── ...

每個圖像對應一個標簽文件,標簽格式為:

class_id x_center y_center width height

其中所有坐標都是歸一化的(0-1 范圍)。

4.2 創建配置文件

創建一個 YAML 配置文件(例如 coco8.yaml):

# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license# COCO8 dataset (first 8 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/detect/coco8/
# Example usage: yolo train data=coco8.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco8 ← downloads here (1 MB)# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: coco8 # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)# Classes
names:0: person1: bicycle2: car3: motorcycle4: airplane5: bus6: train7: truck8: boat9: traffic light10: fire hydrant11: stop sign12: parking meter13: bench14: bird15: cat16: dog17: horse18: sheep19: cow20: elephant21: bear22: zebra23: giraffe24: backpack25: umbrella26: handbag27: tie28: suitcase29: frisbee30: skis31: snowboard32: sports ball33: kite34: baseball bat35: baseball glove36: skateboard37: surfboard38: tennis racket39: bottle40: wine glass41: cup42: fork43: knife44: spoon45: bowl46: banana47: apple48: sandwich49: orange50: broccoli51: carrot52: hot dog53: pizza54: donut55: cake56: chair57: couch58: potted plant59: bed60: dining table61: toilet62: tv63: laptop64: mouse65: remote66: keyboard67: cell phone68: microwave69: oven70: toaster71: sink72: refrigerator73: book74: clock75: vase76: scissors77: teddy bear78: hair drier79: toothbrush# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8.zip

4.3 開始訓練

from ultralytics import YOLO# 加載基礎模型
model = YOLO('yolo11n.pt')# Load a COCO-pretrained YOLO12n model
#model = YOLO("yolo12n.pt")# Load a COCO-pretrained YOLOv10n model
#model = YOLO("yolov10n.pt")# Load a COCO-pretrained YOLOv8n model
#model = YOLO("yolov8n.pt")# 訓練模型
results = model.train(data='custom_data.yaml',  # 配置文件路徑epochs=50,                # 訓練輪數imgsz=640,                # 輸入圖像大小batch=16,                 # 批次大小device=0,                 # GPU編號,-1表示使用CPUworkers=4,                # 數據加載線程數project='my_yolo11_project',  # 項目名稱name='custom_training'    # 訓練名稱
)

4.4 訓練過程監控

訓練過程中,可以通過以下方式監控:

  • 控制臺輸出:包含每輪的損失值、精度等指標
  • TensorBoard:運行tensorboard --logdir=my_yolo_project/custom_training查看詳細曲線
  • 訓練生成的圖表:保存在my_yolo11_project/custom_training/results.png

五、模型評估與優化

5.1 評估模型性能

訓練完成后,可以評估模型在驗證集上的表現:

# 評估模型
metrics = model.val()# 打印評估指標
print(f"mAP@0.5: {metrics.box.map50:.3f}")
print(f"mAP@0.5:0.95: {metrics.box.map:.3f}")

關鍵評估指標:

  • mAP@0.5:IoU 閾值為 0.5 時的平均精度
  • mAP@0.5:0.95:IoU 閾值從 0.5 到 0.95 的平均精度

5.2 模型優化策略

如果模型性能不理想,可以嘗試以下優化策略:

  1. 增加訓練數據:收集更多多樣化的樣本(用的最多的方法~)

  2. 數據增強

    :在訓練時使用更多數據增強方法

     model.train(data='custom_data.yaml', epochs=50, augment=True)
    
  3. 調整學習率:根據訓練曲線調整學習率

  4. 使用更大的模型:如從 yolo11n 換成 yolo11s 或更大的模型

  5. 延長訓練時間:增加訓練輪數

  6. 調整圖像大小:嘗試更大的輸入尺寸(如 800 或 1024)

六、模型部署

6.1 導出為其他格式

YOLO11/YOLO12/YOLOv10/YOLOv8 支持導出為多種部署格式:

# 導出為ONNX格式
model.export(format='onnx')# 導出為TensorRT格式(需要安裝TensorRT)
model.export(format='engine')# 導出為CoreML格式(適用于iOS設備)
model.export(format='coreml')

6.2 構建簡單的 Web 應用

使用 Flask 構建一個簡單的 YOLO目標檢測 Web 服務:

from flask import Flask, request, jsonify
from ultralytics import YOLO
import cv2
import base64
import numpy as npapp = Flask(__name__)
model = YOLO('yolo11n.pt')
# yolo12n
#model = YOLO("yolo12n.pt")
# yolov10n
#model = YOLO("yolov10n.pt")
# yolov8n
#model = YOLO("yolov8n.pt")@app.route('/detect', methods=['POST'])
def detect():# 獲取圖像數據data = request.jsonimg_data = base64.b64decode(data['image'])nparr = np.frombuffer(img_data, np.uint8)img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)# 檢測results = model(img)# 處理結果detections = []for result in results:for box in result.boxes:x1, y1, x2, y2 = box.xyxy[0].tolist()conf = box.conf[0].item()cls = box.cls[0].item()detections.append({'class': model.names[int(cls)],'confidence': conf,'bbox': [x1, y1, x2, y2]})return jsonify({'detections': detections})if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)

七、常見問題與解決方案

  1. 訓練時顯存不足
    • 減小批次大小(batch size)
    • 減小輸入圖像尺寸(imgsz)
    • 使用更小的模型
  2. 檢測精度低
    • 檢查數據集標注是否準確
    • 增加訓練輪數
    • 嘗試更大的模型
    • 調整學習率策略
  3. 推理速度慢
    • 使用更小的模型
    • 減小輸入圖像尺寸
    • 確保使用 GPU 進行推理
    • 導出為 TensorRT 等優化格式

結語

通過本指南,你已經掌握了 YOLO系列 的基本理論和實戰技能,包括環境搭建、模型使用、自定義訓練和部署應用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/90489.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/90489.shtml
英文地址,請注明出處:http://en.pswp.cn/web/90489.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JMeter每次壓測前清除全部以確保異常率準確(以黑馬點評為例、詳細圖解)

目錄 一、前言 二、未清除全部會出現的情況(以樂觀鎖解決超賣問題為例) 三、清除全部就能得到準確的結果 一、前言 在學習黑馬點評之前我并沒有接觸過JMeter這個壓測軟件,然后在黑馬點評視頻中老師也是直接拿起JMeter就開始使用,所以我一直在不斷搜索…

關于新學C++編程Visual Studio 2022開始,使用Cmake工具構建Opencv和SDK在VS里編譯項目開發簡介筆記

1. C 項目build文件夾 2. VS解決方案管理器Solution——.sln文件 3. CMake 自動化構建工具 4. SDK軟件開發工具包作為初學者,從工程項目開始接觸完整一套流程工具和編譯,有助于快速上手。 一、C 項目build文件夾在 VS2022 中打開 C 項目后,在…

測試ppyoloe的小樣本few-shot能力,10張圖片精度達到69.8%

近期公司有個項目,需要解決長尾樣本的問題,所以測試了一下paddlepaddle小樣本的能力。 環境::T4 、ubuntu 、cuda-11.6 、py3.9、 paddlepaddle-gpu2.6.0、pip install opencv-python4.5.5.64 -i https://pypi.tuna.tsinghua.…

結構化布線系統詳解

1. 結構化布線系統概述 結構化布線系統(Structured Cabling System, SCS)是一種標準化、模塊化的建筑物或建筑群內信息傳輸基礎設施,它為語音、數據、圖像等多媒體業務提供了統一的物理傳輸介質。與傳統的點對點布線方式不同,結構化布線采用層次化、標準…

【Java學習】匿名內部類的向外訪問機制

目錄 一、方法局部變量的訪問 1.生命周期 1.1方法生命周期 1.2匿名實例生命周期 1.3生命超時性 2.變量捕獲 2.1按值捕獲 2.1.1值捕獲優勢 2.1.1.1生命及時訪問 2.1.1.2線程安全 2.1.2常量值捕獲優勢 2.2按引用捕獲 引用捕獲風險 (1)生命超時訪問 (2)線程不安全 …

LinkedList的模擬實現+LinkedList和ArrayList的區別

目錄 LinkedList的模擬實現 什么是雙向鏈表 增加數據 頭插法: 尾插法: 指定的下標插入: 刪除數據 刪除雙向鏈表中出現的第一個key 置空所有數據 LinkedList和ArrayList的區別 順序表對應的集合類是ArrayList;鏈表對應的集…

Vue + WebSocket 實時數據可視化實戰:多源融合與模擬數據雙模式設計

在現代交通大屏項目中,實時數據的采集和可視化尤為重要。本文結合 Vue3 和 ECharts,分享一個支持多 WebSocket 數據源實時合并、模擬數據調試、自動重連的完整設計方案,幫助你快速搭建健壯的數據可視化組件。一、項目背景與核心需求實時接收多…

C#索引器、接口、泛型

以下是對提供的 C# 代碼中涉及的核心知識點的梳理和總結,涵蓋索引器、接口、泛型三大核心內容,以及相關實踐要點:一、索引器(Indexer)索引器是一種允許類或結構體像數組一樣通過[]語法訪問成員的特殊成員,本…

界面組件DevExpress WPF中文教程:Grid - 如何過濾節點?

DevExpress WPF擁有120個控件和庫,將幫助您交付滿足甚至超出企業需求的高性能業務應用程序。通過DevExpress WPF能創建有著強大互動功能的XAML基礎應用程序,這些應用程序專注于當代客戶的需求和構建未來新一代支持觸摸的解決方案。 無論是Office辦公軟件…

Excel——INDEX和MATCH傻傻分不清?

核心邏輯?先用 MATCH 找到目標姓名在表格中的 ?行號,再用 INDEX 根據行號 ?提取對應信息。就像查字典:先用拼音找到字的頁碼(MATCH 找行號)再翻到該頁看具體解釋(INDEX 取數據)?分步拆解(以…

制造業低代碼平臺實戰評測:簡道云、釘釘宜搭、華為云Astro、金蝶云·蒼穹、斑斑低代碼,誰更值得選?

上回聊了斑斑和簡道云,不少同行私信問我其他幾個低代碼平臺怎么樣,今天就給大家來個"五大門派"終極對決! 一、先說痛點 制造業搞數字化最怕三件事: 1.錢花了沒效果(大平臺用不起,小工具不夠用&…

Jenkins中HTML文件顯示樣式問題解決方案

Jenkins中HTML文件顯示樣式問題解決方案 問題描述 在Jenkins中歸檔的HTML文件顯示格式失效,樣式無法正常顯示,但在本地瀏覽器中打開卻能正常顯示。 問題原因 Jenkins為了安全考慮,默認設置了嚴格的內容安全策略(Content Security Policy, CSP…

四、配置文件

文章目錄1. 文件類型1.1 properties1.2 yaml1.2.1 簡介1.2.2 基本語法1.2.3 數據類型1.2.4 示例2. 配置提示1. 文件類型 1.1 properties 同以前的properties的用法 1.2 yaml 1.2.1 簡介 YAML 是 “YAML Ain’t Markup Language”(YAML 不是一種標記語言&#x…

Python常用醫療AI庫以及案例解析(場景化進階版)

?? 框架應用拓撲圖用例 #mermaid-svg-lZ1J5KCaVWBV2kAu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-lZ1J5KCaVWBV2kAu .error-icon{fill:#552222;}#mermaid-svg-lZ1J5KCaVWBV2kAu .error-text{fill:#552222;st…

Python高效操作Kafka實戰指南

Python操作Kafka的高效 以下是使用Python操作Kafka的高效消息發送實例,涵蓋基礎發送、批量處理、異步回調等場景。示例基于confluent-kafka庫(推薦)和kafka-python庫,代碼均經過實測。 流程圖 基礎消息發送(同步) from confluent_kafka import Producerproducer = Pro…

離線快速處理PDF格式轉化的方案

日常辦公中,PDF 幾乎成了我們離不開的文件格式。然而像 WPS 這樣的工具,不少實用功能都需要額外付費才能解鎖。它的打開方式很簡單,雙擊桌面圖標即可運行。它不會彈出主界面,而是默默駐留在系統托盤區,需要時雙擊圖標就…

SpringMVC注解與SpringCloudOpenFeign注解對比

1. 背景知識 梳理SpringMVC和SpringCloudOpenFeign常用注解后: Spring MVC中常用注解_筆記-CSDN博客Spring Cloud OpenFeign 常用注解_筆記-CSDN博客 這里對兩類注解做個對比。理解兩者定位(服務端 vs 客戶端)是掌握注解使用的關鍵&#x…

Linux 時間同步的流程

一、問題時間RTC時間、系統時間(UTC)和本地時間的關系如下:?RTC時間?(硬件時鐘):顯示為UTC時間格式:02:50:35/02:51:28由主板電池供電,獨立于系統運行?12通常存儲UTC時間(Linux默認配置&…

VSCode——python選擇解釋器消失的解決辦法

VSCode軟件的左下角 設置——檢查更新:

笛卡爾積規避:JOIN條件完整性檢查要點

笛卡爾積是數據庫查詢中的高風險操作,多表JOIN時缺失有效關聯條件會導致結果集指數級膨脹,引發?性能塌方?甚至系統崩潰?。以下是核心檢查策略及防御方案:一、笛卡爾積的致命影響??性能塌方?百萬級訂單表與千萬級用戶表缺失ON條件時&…