(7)機器學習小白入門 YOLOv:機器學習模型訓練詳解

— (1)機器學習小白入門YOLOv :從概念到實踐
(2)機器學習小白入門 YOLOv:從模塊優化到工程部署
(3)機器學習小白入門 YOLOv: 解鎖圖片分類新技能
(4)機器學習小白入門YOLOv :圖片標注實操手冊
(5)機器學習小白入門 YOLOv:數據需求與圖像不足應對策略
(6)機器學習小白入門 YOLOv:圖片的數據預處理
(7)機器學習小白入門 YOLOv:模型訓練詳解

一、訓練模型的基本概念和原理簡介

原理簡介

模型通過一個稱為反向傳播的過程反復進行預測、計算誤差和更新參數。在此過程中,模型會調整其內部參數 (weights and biases) 以減少誤差。通過多次重復這一循環,模型逐漸提高了準確性。隨著時間的推移,它就能學會識別形狀、顏色和紋理等復雜模式。
在這里插入圖片描述

模型作用:

YOLOv8 是一個用于 目標檢測 的深度學習模型。它的任務是在一張圖片中識別出圖像中存在的對象,并標記它們的位置(通常用邊界框表示)以及每個對象的類別標簽。

目標函數(Loss):

在訓練過程中,我們需要最小化損失函數。YOLOv8 模型的損失主要包括以下幾個部分:

  • 分類損失:判斷模型輸出的物體類別是否正確。
  • 定位損失:衡量邊界框位置與真實目標之間的差距。
  • 置信度損失:判斷一個預測框是否包含一個目標對象。

優化器的作用:

使用優化器來更新神經網絡中的權重參數,以最小化損失函數。常見優化器有 SGDAdamRMSPropAdamW 等。


二、訓練模型的步驟詳解

以下是基于 Python 和 YOLOv8 訓練目標檢測模型的整體流程:

步驟 1:導入必要的庫

import torch
from ultralytics import YOLO

注意:

  • ultralytics 是官方提供的對YOLOv8的封裝。
  • 使用前需通過 pip 安裝 ultralytics 包:
    pip install ultralytics
    

步驟 2:加載預訓練模型

model = YOLO("yolov8n.pt")  # 加載YOLOv8小型目標檢測預訓練權重,也可以使用 'yolov8s.pt'、'yolov8m.pt' 等不同大小的模型
  • yolov8n.pt: 小型網絡。
  • yolov8m.pt: 中型網絡(默認)。
  • yolov8l.pt/yolov8x.pt: 大型網絡,檢測精度高但推理速度較慢。

步驟 3:定義訓練配置

# 定義模型的訓練配置參數
config = {"epochs": 100,         # 總共訓練多少輪"imgsz": 640,          # 圖像縮放大小"batch_size": 16,      # 每次送入網絡的數據量(影響訓練速度和內存占用)"workers": 8,          # 數據加載線程數,加速數據讀取"device": 'cuda',      # 使用GPU進行訓練,'cpu'也可以使用CPU進行訓練但會更慢"project": "yolov8_training",     # 訓練結果保存的根目錄名稱(可自定義)"name": "train_exp"        # 當前實驗的名字,在 project 文件夾中形成子文件夾
}

步驟 4:開始訓練模型

results = model.train(data='coco.yaml',           # 數據集配置文件路徑,需要按照格式提供數據集信息epochs=config["epochs"],imgsz=config["imgsz"],batch_size=config["batch_size"],workers=config["workers"],device=config["device"],project=config["project"],name=config["name"]
)

data='coco.yaml' 是 Ultralytics 提供的 COCO 數據集配置文件路徑,如果你有自定義的數據集,可以自己按照格式創建一個 .yaml 文件。


步驟 5:驗證訓練結果

# 在訓練完成后對模型進行驗證
metrics = model.val()
print(metrics)

val() 方法返回的是在驗證數據上的檢測指標(如 mAP、Recall 等)。


三、優化器的選擇和使用(以 AdamW 為例)

YOLOv8 默認使用的是 AdamW 優化器,它是一個改進的 Adam 優化算法,支持 L2 正則化。

示例:

# 如果你需要手動控制訓練過程,也可以直接使用 torch.optim.AdamWfrom torch import optim, nn# 假設你已經有了一個網絡模型 model
model = Model()  # 自己定義的神經網絡結構optimizer = optim.AdamW(model.parameters(), lr=1e-3, weight_decay=0.01)
criterion = nn.BCELoss()for epoch in range(config["epochs"]):for batch_data, batch_labels in train_loader:outputs = model(batch_data)loss = criterion(outputs, batch_labels)optimizer.zero_grad()loss.backward()optimizer.step()

四、提前停止策略(Early Stopping)的實現

在模型訓練過程中,如果驗證集上的損失連續多輪沒有下降,則可以考慮提前結束訓練。

在這里插入圖片描述

from sklearn.model_selection import train_test_split
import torch
from ultralytics import YOLO, EarlyStoppingmodel = YOLO("yolov8n.pt")early_stopper = EarlyStopping(patience=10)  # 設置為10輪沒有改進則提前停止for epoch in range(100):model.train()train_loss = model.train()  # 訓練val_loss = model.val()      # 驗證if early_stopper(val_loss):print("Early stopping triggered.")break

五、如何確定訓練紀元數(Epochs)

  • 如果是目標檢測任務,建議設置為 100 ~ 500
  • 初始可設為 30,然后觀察驗證損失是否在下降,再適當增加。
  • 每次增加 20 或 50 輪左右即可。

注意:如果模型過擬合,可以通過早停、數據增強(如 CutMix)等方法緩解。


六、訓練過程的監控與記錄

輸出日志:

YOLOv8 的訓練會實時輸出以下內容:

  • 每個 epoch 中損失的變化。
  • mAP(mean Average Precision),衡量檢測準確率的一個指標。
  • 訓練用時和每個 epoch 速度。

可視化工具:

使用 TensorBoard 來查看模型的訓練過程,可以通過以下方式啟用它:

from torch.utils.tensorboard import SummaryWriterwriter = SummaryWriter('runs/train')for i, data in enumerate(train_loader):outputs = model(data)writer.add_scalar("Loss", loss.item(), i)  # 記錄損失值

然后使用命令啟動 TensorBoard:

tensorboard --logdir runs/train

📌 小結

模塊內容
模型選擇使用 YOLOv8 的預訓練模型 yolov8n.pt
優化器AdamW 是目前最常用的選擇,支持權重衰減(防止過擬合)
提前停止若驗證損失連續10輪無改進,則終止訓練以節省資源
訓練紀元數初始設置為50~100,再根據結果增加即可
數據處理需要自定義 data.yaml 文件來描述訓練和測試集的路徑、類別等信息

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

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

相關文章

初識MySQL(三)之主從配置與讀寫分離實戰

主重復制 主重復制原理master開啟二進制日志記錄slave開啟IO進程,從master中讀取二進制日志并寫入slave的中繼日志slave開啟SQL進程,從中繼日志中讀取二進制日志并進行重放最終,達到slave與master中數據一致的狀態,我們稱作為主從…

RabbitMQ面試精講 Day 2:RabbitMQ工作模型與消息流轉

【RabbitMQ面試精講 Day 2】RabbitMQ工作模型與消息流轉 開篇 歡迎來到"RabbitMQ面試精講"系列的第2天,今天我們將深入探討RabbitMQ的工作模型與消息流轉機制。這是面試中最常被問到的核心知識點之一,90%的RabbitMQ面試都會涉及消息流轉流程…

基于SpringBoot3集成Kafka集群

1. build.gradle依賴引入 implementation org.springframework.kafka:spring-kafka:3.2.02. 新增kafka-log.yml文件 在resource/config下面新增kafka-log.yml,配置主題與消費者組 # Kafka消費者群組 kafka:consumer:group:log-data: log-data-grouptopic:log-data: …

wpf Canvas 導出圖片

在WPF中將Canvas導出為圖片主要涉及以下關鍵步驟和注意事項: ?核心實現方法?使用RenderTargetBitmap將Canvas渲染為位圖,再通過PngBitmapEncoder保存為PNG文件。需注意臨時移除Canvas的布局變換(LayoutTransform)以避免渲染異常?1。示例代碼片段:CanvasExporter.cs pu…

lvs負載均衡實操模擬

目錄 一、配置準備 二、NET模式 修改LVS端 開啟路由 修改對內網卡 ens160 修改對外網卡 ens224 加載網卡配置文件 修改web1端 修改網卡信息 重啟網絡 檢測 配置web2 檢測 驗證配置是否正常 啟動nginx服務 驗證以上配置 添加lvs規則 驗證 三、DR模式 修改…

Spring Boot 是如何簡化 IoC 的配置的?

首先Spring Boot 并沒有發明新的 IoC 理論,它做的也不是替換掉 Spring IoC 容器。相反,Spring Boot 是 Spring IoC 思想的實踐者和簡化者。它通過**“約定優于配置”(Convention over Configuration)**的理念,將原本繁…

Go語言中的組合式接口設計模式

文章目錄Go語言中的組合式接口設計模式背景和需求組合式接口設計Go語言中的組合式接口設計模式 背景和需求 在微服務架構和復雜業務系統中,我們經常需要調用多個外部服務或內部模塊。傳統的做法是將所有方法都放在一個大接口中,但這種設計會導致接口臃…

React - createPortal

什么是createPortal&#xff1f;注意這是一個API&#xff0c;不是組件&#xff0c;他的作用是&#xff1a;將一個組件渲染到DOM的任意位置&#xff0c;跟Vue的Teleport組件類似。用法 import { createPortal } from react-dom;const App () > {return createPortal(<div…

Cursor的使用

Cursor的使用 Ctrl L 打開歷史對話記錄 Tab智能助手 1.單行/多行補全 已有代碼片段&#xff1a; //需求&#xff1a;寫一個工具類計算數組平均值 public class ArrayUtils {//按tab會完成補全 }按tab鍵- Cursor 自動生成代碼: //需求&#xff1a;寫一個工具類計算數組平均值 p…

17.使用DenseNet網絡進行Fashion-Mnist分類

17.1 DenseNet網絡結構設計import torch from torch import nn from torchsummary import summary #卷積層 def conv_block(input_channels,num_channels):netnn.Sequential(nn.BatchNorm2d(input_channels),nn.ReLU(),nn.Conv2d(input_channels,num_channels,kernel_size3,pad…

網安系列【16】之Weblogic和jboss漏洞

文章目錄一 Weblogic1.1 Weblogic相關漏洞1.2 Weblogic漏洞發現1.3 Weblogic漏洞利用二 Jboss2.1 Jboss漏洞2.2 Jboss識別與漏洞利用一 Weblogic WebLogic 是由 Oracle公司 開發的一款基于Java EE&#xff08;現稱Jakarta EE&#xff09;的企業級應用服務器&#xff0c;主要用…

Unity URP + XR 自定義 Skybox 在真機變黑問題全解析與解決方案(支持 Pico、Quest 等一體機)

在使用 Unity 的 URP 渲染管線開發 XR 應用&#xff08;如 Pico Neo、Pico 4、Quest 2/3 等一體機&#xff09;時&#xff0c;很多開發者遇到一個奇怪的問題&#xff1a;打包后&#xff0c;Skybox&#xff08;天空盒&#xff09;在某些角度下突然變黑&#xff0c;只在轉動頭部后…

Cursor、飛算JavaAI、GitHub Copilot、Gemini CLI 等熱門 AI 開發工具合集

Cursor&#xff1a;代碼編寫的智能伙伴?Cursor 是 Anysphere 公司推出的一款 AI 編程工具&#xff0c;它基于微軟開源代碼編輯器 VS Code 開發&#xff0c;將 AI 技術深度整合到開發人員的工作流程中。Cursor 的功能十分強大&#xff0c;不僅能夠自動用純英文編寫代碼&#xf…

如何安裝歷史版本或指定版本的 git

背景 有的時候&#xff0c;我們需要安裝指定版本的git&#xff0c;或者希望舊一點的&#xff0c;畢竟我就遇到最新的2.50.1在win10安裝后打開就一閃而過&#xff0c;而安裝2.49.1就不會 下載 官網可能比較難找&#xff0c;但是這個github倉庫&#xff1a;https://github.com/gi…

LaCo: Large Language Model Pruning via Layer Collapse

發表&#xff1a;EMNLP_FINDING_2024 機構&#xff1a;Shanghai Jiao Tong University 連接&#xff1a;LaCo: Large Language Model Pruning via Layer Collapse - ACL Anthology 代碼&#xff1a;https://github.com/yangyifei729/LaCo Abstract 基于 Transformer 的大語…

服務器內核級故障排查

目錄 **檢查內核級故障(Oops/Panic)的具體操作步驟****1. 查看完整 `dmesg` 日志(含時間戳)****2. 過濾關鍵錯誤信息****3. 檢查系統日志中的內核消息****4. 分析最近一次啟動的日志****5. 檢查是否有 `vmcore` 轉儲文件****常見內核錯誤示例及含義**補充說明:檢查內核級故…

Flink學習筆記:整體架構

開一個新坑&#xff0c;系統性的學習下 Flink&#xff0c;計劃從整體架構到核心概念再到調優方法&#xff0c;最后是相關源碼的閱讀。 今天就來學習 Flink 整體架構&#xff0c;我們先看官網的架構圖圖中包含三部分&#xff0c;分別是 Client、JobManager 和 TaskManager。其中…

【LeetCode 熱題 100】105. 從前序與中序遍歷序列構造二叉樹——(解法二)O(n)

Problem: 105. 從前序與中序遍歷序列構造二叉樹 給定兩個整數數組 preorder 和 inorder &#xff0c;其中 preorder 是二叉樹的先序遍歷&#xff0c; inorder 是同一棵樹的中序遍歷&#xff0c;請構造二叉樹并返回其根節點。 【LeetCode 熱題 100】105. 從前序與中序遍歷序列構…

完美卸載 Ubuntu 雙系統:從規劃到實施的完整指南

&#x1f4d6; 前言 最近成功完成了一次 Ubuntu 雙系統的完整卸載&#xff0c;從最初的分區刪除到最終解決 GRUB 引導問題&#xff0c;整個過程雖然有些曲折&#xff0c;但最終完美解決。本文將詳細分享整個卸載過程&#xff0c;希望能幫助到有類似需求的朋友。 &#x1f3af…

深入理解oracle ADG和RAC

1. 引言 本節詳細介紹oracle ADG和RAC。當然這里講得的詳細是相對理論的深入&#xff0c;不涉及到實驗&#xff0c;比如ADG和RAC的搭建及調優等。 RAC (Real Application Clusters) 和 ADG (Active Data Guard)是Oracle 的兩大核心高可用和災備技術。它們是 Oracle 數據庫高可用…