yolov5學習及手勢識別實戰

目錄

一、YOLOv5核心原理

1. 單階段檢測范式

2. 關鍵技術特性

二、YOLOv5網絡架構組成

1.?Backbone:CSPDarknet53

2.?Neck:PANet(Path Aggregation Network)

3.?Head:檢測頭

三、YOLOv5網絡架構細節

1. 整體架構圖

2. 關鍵模塊參數

四、YOLOv5的創新優化

1. 自適應訓練機制

2. 損失函數設計

3. 輕量化改進(YOLOv5s與YOLOv5x對比)

五、YOLOv5應用場景

總結

手勢識別實戰


一、YOLOv5核心原理

1. 單階段檢測范式
  • 回歸式檢測:將目標檢測轉化為單次前向傳播回歸問題,直接預測邊界框坐標和類別概率

  • 網格劃分策略:輸入圖像被劃分為S×S網格,每個網格單元負責預測中心點落在該區域的目標。

  • 多尺度預測:通過不同層級的特征圖預測不同尺寸的目標(大目標用深層特征,小目標用淺層特征)。

2. 關鍵技術特性
技術要點作用描述
自適應錨框根據訓練數據自動計算最佳錨框尺寸(K-means++改進算法)
動態損失平衡通過調整分類、置信度、坐標回歸的損失權重(如CIoU Loss優化)
數據增強策略Mosaic增強、MixUp、HSV隨機調整等提升模型泛化能力
自適應分辨率支持動態調整輸入圖像尺寸(如640×640或自定義尺寸)

二、YOLOv5網絡架構組成

YOLOv5網絡由Backbone(主干網絡)Neck(特征融合層)和Head(檢測頭)三部分組成:

1.?Backbone:CSPDarknet53
  • CSP結構(Cross Stage Partial Network)

  • 優勢:通過分割-處理-合并策略,減少計算量約20%并增強梯度多樣性。

# CSP結構示例(YOLOv5中的BottleneckCSP模塊)
class BottleneckCSP(nn.Module):def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5):super().__init__()c_ = int(c2 * e)  # 中間通道數self.cv1 = Conv(c1, c_, 1, 1)  # 1x1卷積降維self.cv2 = nn.Conv2d(c1, c_, 1, 1, bias=False)self.cv3 = nn.Conv2d(c_, c_, 1, 1, bias=False)self.cv4 = Conv(2 * c_, c2, 1, 1)self.bn = nn.BatchNorm2d(2 * c_)self.act = nn.SiLU()self.m = nn.Sequential(*[Bottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)])def forward(self, x):y1 = self.cv3(self.m(self.cv1(x)))  # 分支1:卷積→Bottleneck堆疊y2 = self.cv2(x)                    # 分支2:直連return self.cv4(self.act(self.bn(torch.cat((y1, y2), dim=1))))
  • Focus模塊(輸入切片處理)
  • 作用:將輸入圖像相鄰像素切片重組,替代傳統卷積下采樣,保留更多細節信息。
class Focus(nn.Module):def __init__(self, c1, c2, k=1, s=1, p=None, g=1, act=True):super().__init__()self.conv = Conv(c1 * 4, c2, k, s, p, g, act)  # 通道數擴展4倍def forward(self, x):# 切片操作:將空間維度信息轉為通道維度return self.conv(torch.cat([x[..., ::2, ::2], x[..., 1::2, ::2], x[..., ::2, 1::2], x[..., 1::2, 1::2]], 1))
2.?Neck:PANet(Path Aggregation Network)
  • 特征金字塔結構

    • FPN(自頂向下):深層特征上采樣并與淺層特征融合,增強語義信息。

    • PAN(自底向上):淺層特征下采樣并與深層特征融合,補充定位細節。

# YOLOv5中的PANet實現(包含Concat和C3模塊)
class PANet(nn.Module):def __init__(self, c1, c2):super().__init__()self.up = nn.Upsample(scale_factor=2, mode='nearest')self.c3_1 = C3(c1*2, c2, n=3, shortcut=False)self.c3_2 = C3(c2*2, c2, n=3, shortcut=False)def forward(self, x1, x2, x3):# 自頂向下(FPN)p3 = x3p3_up = self.up(p3)p2 = torch.cat([p3_up, x2], 1)p2 = self.c3_1(p2)# 自底向上(PAN)p2_up = self.up(p2)p1 = torch.cat([p2_up, x1], 1)p1 = self.c3_2(p1)return p1, p2, p3
3.?Head:檢測頭
  • 多尺度預測:輸出三個尺度的特征圖(如80×80、40×40、20×20),分別對應小、中、大目標。

  • 預測張量結構

# 輸出shape:[batch_size, anchors_per_scale, grid_h, grid_w, 5 + num_classes]
# 5 = tx, ty, tw, th, confidence
  • 解碼過程
def decode_box(pred, anchors, strides):# pred: [..., 4] 對應tx, ty, tw, thgrid_x = torch.arange(pred.shape[2]).repeat(pred.shape[3], 1).view(1, 1, pred.shape[2], pred.shape[3])grid_y = grid_x.permute(0, 1, 3, 2)pred[..., 0] = (torch.sigmoid(pred[..., 0]) * 2 - 0.5 + grid_x) * strides  # cxpred[..., 1] = (torch.sigmoid(pred[..., 1]) * 2 - 0.5 + grid_y) * strides  # cypred[..., 2:4] = (torch.sigmoid(pred[..., 2:4]) * 2) ** 2 * anchors  # w, hreturn pred

三、YOLOv5網絡架構細節

1. 整體架構圖
Input (640x640x3)
│
├── Focus [3→32]       # 切片下采樣
├── Conv [32→64]
├── C3 [64→64]
├── Conv [64→128]
├── C3 [128→128] ×3
├── Conv [128→256]
├── C3 [256→256] ×3
├── Conv [256→512]
├── SPP [512→512]      # 空間金字塔池化
├── C3 [512→512] ×3
│
├── PANet開始
│   ├── UpSample → Concat → C3 [512→256]
│   ├── UpSample → Concat → C3 [256→128]
│   ├── DownSample → Concat → C3 [128→256]
│   └── DownSample → Concat → C3 [256→512]
│
└── Detect Head [3個尺度輸出]
2. 關鍵模塊參數
模塊類型參數配置示例作用說明
Convkernel=6x6, stride=2, pad=2下采樣(替代池化)
C3包含3個Bottleneck跨階段特征融合
SPP池化核[5,9,13]多尺度感受野融合
Upsamplescale_factor=2特征圖放大(最近鄰插值)

四、YOLOv5的創新優化

1. 自適應訓練機制
  • 自適應錨框計算:訓練初期自動計算最優錨框尺寸(--autoanchor參數)。

  • 自適應圖像縮放:保持原始圖像寬高比進行填充,減少無效計算(letterbox)。

2. 損失函數設計
  • CIoU Loss:綜合中心點距離、寬高比、重疊率的損失計算:

3. 輕量化改進(YOLOv5s與YOLOv5x對比)
模型版本參數量(M)GFLOPs適用場景
YOLOv5s7.216.5移動端/嵌入式設備
YOLOv5m21.249.0平衡速度與精度
YOLOv5l46.5109.1服務器端高性能檢測
YOLOv5x86.7205.7極致精度需求場景

五、YOLOv5應用場景

  1. 工業質檢:快速檢測產品缺陷(PCB板、零部件)。

  2. 自動駕駛:實時車輛、行人、交通標志識別。

  3. 安防監控:人體姿態、異常行為檢測。

  4. 遙感圖像:大尺度場景下的目標識別(建筑物、農田)。


總結

YOLOv5通過CSPDarknet主干網絡PANet特征融合多尺度檢測頭,在保持實時性的同時提升了檢測精度。其核心創新在于:

  • 工程優化:自適應錨框、動態損失平衡、高效數據增強。

  • 架構改進:Focus模塊減少計算量,C3結構增強特征復用。

  • 靈活性:提供多種模型尺寸(s/m/l/x)適應不同硬件需求。

手勢識別實戰

  1. 用git把yolov5從GitHub上下載到本地
  2. 把數據集劃分為train1598:test457:val228=7:2:1,并放在dataset文件夾里
  3. 劃分參考
  4. val沒有參與狹義的模型訓練過程(權重更新),但是它參與了模型評測,以此來選擇(不同超參數、不同epoch)最好的模型,就相當于參與了廣義的模型訓練了。
  5. 數據集結構為
  6. datasettrainimageslabelstestval
  7. 把data/coco.yaml復制并改為gesture.yaml
  8. 把內容改為
  9. # 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, ..]# dataset root dir
    train: ../dataset_split/train/images  # train images (relative to 'path') 128 images
    val: ../dataset_split/val/images  # val images (relative to 'path') 128 images
    test: ../dataset_split/test/images # test images (optional)# Classes
    names:0: 000-one1: 001-five2: 002-fist3: 003-ok4: 004-heartSingle5: 005-yearh6: 006-three7: 007-four8: 008-six9: 009-Iloveyou10: 010-gun11: 011-thumbUp12: 012-nine13: 013-pink
    
  10. 把models/yolov5s.yaml里面的80換成14:nc: 14 # number of classes
  11. 把train.py里面找到下圖代碼并改為下圖,其他的先不用動
  12. 把整個文件壓縮
  13. 登錄autodl賬號,開個小小的GPU,點進去后再建立一個文件夾yolov5
  14. 上傳你的zip
  15. 解壓縮,打開終端,
  16. cd autodl-temp
  17. cd yolov5
  18. unzip yasuobao(不用加后綴.zip)
  19. 配環境pip install -r requirments.txt
  20. 終端輸入python train.py就可以了

訓練完后報錯AttributeError: module 'PIL.Image' has no attribute 'ANTIALIAS'

解決方法

訓練了100輪

在目標檢測任務中,損失函數是評估模型預測準確性的關鍵指標。Box LossCls Loss?和?DFL Loss?是三種常用的損失函數,它們分別針對不同的預測誤差進行優化。

Box Loss(邊界框損失)主要用于計算預測邊界框與真實邊界框之間的差異。常見的計算方法包括?Mean Squared Error(均方誤差)和?Smooth L1 Loss(平滑L1損失)。這種損失函數通過最小化預測框與真實框之間的差異,幫助模型更準確地定位目標。

Cls Loss(分類損失)?用于計算預測類別與真實類別之間的差異。這通常通過?交叉熵損失(Cross-Entropy Loss)來實現。分類損失的優化有助于提高模型對目標類別的識別準確性。

DFL Loss(自由形變損失)或稱為?Distribution Focal Loss,是一種用于處理類別不平衡問題的損失函數。它類似于?Focal Loss,但引入了類別分布信息,從而更有效地處理不同類別樣本數量差異較大的情況。

當這三個損失函數的值上升而不下降時,可能表明模型出現了過擬合。

obj_loss(目標置信度損失)是衡量模型預測邊界框覆蓋對象程度的一個重要指標。衡量目標檢測對圖像中是否存在目標進行判斷的準確程度。當obj_loss較低時,表示模型能夠正確識別出圖像中的目標。

val.py就是用來測試的,原來在train.py里面默認是輸入val,所以得出來的也是val_loss

但是現在要測試,所以要把里面參數部分默認的val改為test,然后再運行

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

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

相關文章

【視頻】H.264的碼率和圖像質量

1、簡述 分辨率、幀率、I幀設置不變的情況下,碼率過低時,IP攝像機如果沒有足夠的帶寬來傳輸高質量的圖像,便會抹掉一些細節,導致出現馬賽克,尤其是動態性強的畫面(比如:運動的云臺、非固定的攝像頭)。 2、計算碼率 1)碼率的基礎理論公式為: 碼率 (bps) = 分辨率像…

VMware-workstation-17.6.3安裝教程

1.下載VMware-workstation-17.6.3軟件包 2.安裝并輸入許可碼 3.開始使用

[Linux][經驗總結]Ubuntu6.11.0 docker更換鏡像源(實操可用的正確方法)

一、前言 關于Ubuntu更換docker鏡像源,網上有很多的教程,但在實操中發現,更換的源無法生效——原因是我的docker是在系統安裝時,選擇附加安裝的package的方式安裝的。 現將處理過程記錄如下。 二、獲取鏡像源 在網上隨便找個幾…

Element Plus開發實戰指南:快速上手Vue 3企業級組件庫

Element Plus全棧開發指南:從入門到企業級實戰 一、環境搭建與工程配置1.1 項目初始化(Windows/Mac通用)1.2 配置文件關鍵代碼 二、主題定制與樣式管理2.1 SCSS變量覆蓋方案2.2 暗黑模式切換 三、核心組件深度實踐3.1 智能表格開發&#xff0…

Elasticsearch基礎教程:從入門到上手

🎯 一、Elasticsearch簡介 Elasticsearch(簡稱ES)是一個分布式、RESTful風格的搜索引擎,支持全文檢索、結構化查詢、分析和近實時搜索。常用于日志分析、商品搜索、數據分析等場景。 1. 什么是 Elasticsearch? Elas…

VIVO手機如何實現證件照換底色?證件照換底色技巧分享

在日常生活中,我們常常需要使用不同底色的證件照,無論是辦理證件、提交資料還是其他用途,一張符合要求的證件照都顯得尤為重要。 而VIVO手機憑借其強大的拍照功能和便捷的圖片編輯工具,為我們提供了一種簡單高效的證件照換底色解…

A SURVEY ON POST-TRAINING OF LARGE LANGUAGE MODELS——大型語言模型的訓練后優化綜述——第一部分

arXiv 2025 摘要 大型語言模型(LLMs)的出現從根本上改變了自然語言處理,使其在從對話系統到科學研究的各個領域中變得不可或缺。然而,它們的預訓練架構在特定情境下經常顯示出局限性,包括有限的推理能力、倫理不確定…

深入理解Python閉包與遞歸:原理、應用與實踐

目錄 閉包 什么是閉包: 閉包的基本結構: 實現閉包的條件: 1.嵌套函數 2.內函數引用外部函數的變量 3.外部函數返回內部函數 4.外部函數已經執行完畢 遞歸函數 什么是遞歸函數: 遞歸函數條件 1.必須有個明確的結束條…

【自學筆記】智能合約基礎知識點總覽-持續更新

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 智能合約基礎知識點總覽目錄1. 智能合約簡介2. 以太坊與Solidity示例代碼:Hello World智能合約 3. Solidity基礎語法示例代碼:簡單的計數器合…

ABAP PDF預覽

畫個屏幕 PDF JPG TXT都可以參考預覽,把二進制流傳遞給標準函數就行 *&---------------------------------------------------------------------* *& Report YDEMO2 *&---------------------------------------------------------------------* *&am…

【視頻】文本挖掘專題:Python、R用LSTM情感語義分析實例合集|上市銀行年報、微博評論、紅樓夢、汽車口碑數據采集詞云可視化

原文鏈接:https://tecdat.cn/?p41149 分析師:Zhenzhen Liu,Shuai Fung 作為數據科學家,我們始終關注如何從非結構化數據中提取高價值信息。本專題合集聚焦企業年報的文本分析技術,通過Python與R語言實戰案例&#xff…

高效團隊開發的工具與方法 引言

引言 在現代軟件開發領域,團隊協作的效率和質量直接決定了項目的成敗。隨著項目規模的擴大和技術復雜度的增加,如何實現高效團隊開發成為每個開發團隊必須面對的挑戰。高效團隊開發不僅僅是個人技術能力的簡單疊加,更需要借助合適的工具和方…

python中mysql操作整理

安裝 Windows : pip install pymysql -i https://pypi.douban.com/simple mac :python3 -m pip install pymysql -i https://pypi.douban.com/simple mysql示例 import pymysql connect pymysql.Connect(host82.156.74.26,port3306,userroot,passwor…

Python----計算機視覺處理(Opencv:圖像顏色替換)

一、開運算 開運算就是對圖像先進行腐蝕操作, 然后進行膨脹操作。開運算可以去除二值化圖中的小的噪點,并分離相連的物體。 其主要目的就是消除那些小白點 在開運算組件中,有一個叫做kernel的參數,指的是核的大小,通常…

基于SpringBoot的“ERP-物資管理”的設計與實現(源碼+數據庫+文檔+PPT)

基于SpringBoot的“ERP-物資管理”的設計與實現(源碼數據庫文檔PPT) 開發語言:Java 數據庫:MySQL 技術:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系統展示 系統總體結構圖 E-R實體關系圖 管理員登錄界面 管…

鏈表操作:分區與回文判斷

目錄 鏈表分區(Partition) 功能概述 代碼實現 要點與難點 注意事項 鏈表回文判斷(PalindromeList) 功能概述 代碼實現 要點與難點 注意事項 總結 在鏈表相關的算法問題中,理解鏈表的基本結構和操作至關重要…

如何在 Node.js 中使用 .env 文件管理環境變量 ?

Node.js 應用程序通常依賴于環境變量來管理敏感信息或配置設置。.env 文件已經成為一種流行的本地管理這些變量的方法,而無需在代碼存儲庫中公開它們。本文將探討 .env 文件為什么重要,以及如何在 Node.js 應用程序中有效的使用它。 為什么使用 .env 文…

【Git學習筆記】Git結構原理及其分支管理模型分析

【Git學習筆記】Git結構原理及其分支管理模型分析 🔥個人主頁:大白的編程日記 🔥專欄:Git學習筆記 文章目錄 【Git學習筆記】Git結構原理及其分支管理模型分析前言一.認識工作區、暫存區、版本庫1.1 版本回退1.2 撤銷修改1.3 刪…

Scheme語言的壓力測試

Scheme語言的壓力測試 引言 Scheme是一種廣泛使用的函數式編程語言,它是Lisp語言家族的一員,以其簡潔性和強大的表達能力而聞名。在現代軟件開發中,施行壓力測試是一項關鍵技術,旨在評估系統在高負載或極端情況下的表現。在這篇…

[特殊字符]Windows 11 安裝 Git 圖文教程(含詳細配置說明)

Windows 11 安裝 Git 圖文教程(含詳細配置說明) 本教程適用于 Git 新手,手把手教你如何在 Windows 11 上完整安裝 Git 并正確配置,配圖清晰,步驟明確,建議收藏! ? 第一步:下載 Git 安裝包 訪問官網:https://git-scm.com自動識別系統后點擊下載或者直接前往:Git for …