【YOLOv5】

Focus模塊:早期再yolov5版本提出,后期被常規卷積替換,作用是圖像進入主干網絡之前,進行隔行隔列采樣,把空間維度堆疊到通道上,減少計算量。

SPPF:SPP的改進版本,把SPP的不同池化核改變為K = 5 的池化核,然后不同的其他池化核都是用 k = 5 進行替換,并行結構改為并行 + 串行。

新的激活函數:silu,swish,如果swish的β參數為1,就轉化為silu

自動錨框計算:yolov5根據大量的數據集學習到比較好的一組尺寸的錨框,那么最開始的時候就是直接使用這些錨框,錨框自動計算,手動開啟(默認開啟)計算錨框的尺寸的時候,就會從新的基于數據集進行錨框計算。

1、模型訓練

訓練結果:

best.pt: 就是我們使用模型的文件,即整個訓練過程中最好的一次

last.pt: 整個訓練過程中最后一次,假設訓練模型500次,但是在中間訓練中斷了,就用last.pt恢復訓練,如果500次訓練完了,但是覺得可以繼續訓練,可以考慮best.pt當初始化權重文件來使用

使用訓練模型推理

yolov5s.yaml

網絡結構配置文件,重點掌握depth_multiple和width_multiple的使用,還需要掌握如果更改主干網絡或者檢測頭中的網絡層次,比如加入CBAM之后,如何對網絡的層次信息進行更新,因為新加入一個內容之后,在這一層之后的所有網絡層數都要+1


depth_multiple: 0.33 # model depth multiple
#這個參數就是控制輸出通道數量的倍率,最小為8
width_multiple: 0.50 # layer channel multiple

common.py

這個文件的內容就是定義模塊的。比如Conv 、C3等模塊,提供給后續文件使用構建網絡。

1、改進點

  • 主干網絡是修改后的 CSPDarknet53,后面跟了 SPPF 模塊

  • 網絡最開始增加 Focus 結構

  • 頸部網絡采用 PANet、FPN

  • 激活函數換成了 SiLU、Swish

  • 采用 CloU 損失

2、Focus 模塊

  • YOLOv5 剛推出時,為了提升模型效率,采用了 Focus 模塊 作為網絡的初始特征提取層,傳統卷積下采樣會丟失部分空間信息,Focus 模塊旨在在不丟失信息的前提下進行高效下采樣

  • 核心目標:將高分辨率圖像的空間信息通過切片操作轉換為通道信息,從而實現高效、無信息損失的下采樣

  • Focus 模塊是一種用于特征提取的卷積神經網絡層,用于將輸入特征圖中的信息進行壓縮和組合,從而提取出更高層次的特征表示,它被用作網絡中的第一個卷積層,用于對輸入特征圖進行下采樣,以減少計算量和參數量

  • Focus 層在 YOLOv5 中是圖片進入主干網絡前,對圖片進行切片操作,原理與 Yolov2 的 passthrough 層類似,采用切片操作把高分辨率的圖片(特征圖)拆分成多個低分辨率的圖片(特征圖),即隔列采樣+拼接

  • 具體操作是在一張圖片中每隔一個像素拿到一個值,類似于鄰近下采樣,這樣就拿到了 4 張圖片,4 張圖片互補,但是沒有信息丟失,這樣一來,將空間信息就集中到了通道空間,輸入通道擴充了 4 倍,即拼接起來的圖片相對于原先的 RGB 3 通道模式變成了 12 個通道,最后將得到的新圖片再經過卷積操作,最終得到了沒有信息丟失情況下的二倍下采樣特征圖

  • 案例:假設輸入一張圖像大小為 640x640x3

    • 第一步:640 x 640 x 3的圖像輸入Focus結構,采用切片操作

    • 第二步:然后進行一個連接(concat),變成 320 x 320 x 12 的特征圖

    • 第三步:經過一次 32 個卷積核的卷積操作,最終輸出 320 x 320 x 32 的特征圖

  • 在 YOLOv5 剛提出來的時候,有 Focus 結構,從 YOLOv5 第六版開始, 就舍棄了這個結構,改用 k=6×6,stride=2 的常規卷積

3、網絡結構

3.1 CSP1_X 與 CSP2_X

  • CSP1_X:

    • 定義:帶 shortcut(殘差連接)的 CSP 模塊

    • 結構特點:內部包含帶有 shortcut 的 Bottleneck 結構

    • 應用場景:主要用于 backbone 部分,如 CSPDarknet53,增強特征提取能力

    • X 的含義:表示 bottleneck 的數量

  • CSP2_X:

    • 定義:不帶 shortcut 的 CSP 模塊

    • 結構特點:內部沒有 shortcut 連接,僅通過卷積操作進行特征提取

    • 應用場景:主要用于 neck 部分,如 PANet(Path Aggregation Network),進行特征聚合

    • X 的含義:表示 bottleneck 或其他卷積模塊的數量

3.2 自適應Anchor的計算

  • 在 YOLOv3、YOLOv4 中,訓練不同的數據集時,計算初始 Anchor 的值是通過單獨的程序運行的。但 YOLOv5 中將此功能嵌入到代碼中,每次訓練時會自適應的計算不同訓練集中的最佳 Anchor 值

  • 實現方式:

    • 在訓練開始前,YOLOv5 會自動加載訓練集中的標注框

    • 使用 K-Means 聚類算法計算 Anchor

    • 將結果作為初始 Anchor 值用于模型初始化

  • 源碼位置:utils/autoanchor.py/check_anchors()

3.3 激活函數

  • 激活函數:使用了 SiLU 激活函數、Swish 激活函數兩種激活函數

3.3.1 SiLU
  • YOLOv5 的 Backbone 和 Neck 模塊和 YOLOv4 中大致一樣,都采用 CSPDarkNet 和 FPN+PAN 的結構,但是網絡中其他部分進行了調整,其中 YOLOv5 使用的激活函數是 SiLU

  • SiLU(x) = x·\sigma(x),具備無上界有下屆、平滑、非單調的特性

3.3.2 Swish
  • Swish 激活函數是一個近似于 SiLU 函數的非線性激活函數,具有以下形式:

    • \beta是一個可調節的參數,通常設定為 1

3.4 Bottleneck

  • Bottleneck 是用于減少參數和計算量的結構,其設計靈感來自于ResNet,結構如下:

    • 1x1卷積:用于減少特征圖的通道數

    • 3x3卷積:用于提取特征,后接一個 Batch Normalization 層和 ReLU 激活函數

    • 1x1卷積:用于恢復特征圖的通道數,后接一個BN層

    • 跳躍連接(Shortcut):將輸入直接加到輸出上,以形成殘差連接

3.5 C3

  • YOLOv5 中的 C3 模塊在 CSP上進行了優化,非常相似但略有不同:

  • YOLOv5 一共使用過兩種 CSP 模塊

    • v4.0 版本之前的 BottleneckCSP,用的 LeakyReLU 作為激活函數

    • v4.0 版本之后的 C3,用的 SiLU 作為激活函數

3.5.1 BottleneckCSP
  • 結構特點:

    • 包含多個帶 shortcut 的 Bottleneck

    • 輸入通道被劃分,一部分直接傳遞,一部分經過 Bottleneck 塊

  • 激活函數:LeakyReLU

  • 用途:主要用于早期 YOLOv5 的 backbone

3.5.2 C3
  • 結構特點:

    • 不再使用 shortcut(即 Bottleneck 不帶殘差連接)

    • 更加簡潔,更適合部署

  • 激活函數:SiLU

  • 用途:廣泛用于 backbone 和 neck(如 PANet)

3.6 SPPF

  • 將卷積核大小變成相同,然后將并行變成了串行+并行,2個K5池化=1個K9池化,3個K5池化=1個K13池化,也就是結果相同的基礎上,速度更快,計算量更小

  • 對于連續堆疊 n 層,每層使用大小為 k 的核的操作(例如卷積或池化),其等效感受野大小可以通過以下公式計算:K_{等效}=1+n(k?1)

層數 n卷積核大小 k等效感受野
151+1×(5?1)=5
251+2×(5?1)=9
351+3×(5?1)=13

3.6.1 SPP 和 SPPF 區別

4、 輸出頭

  • 靈活度較高,支持多種尺寸:

    • 輸入圖像尺寸:通常為 640x640(或者其它尺寸,如 416x416 等)

    • 輸出特征圖:YOLOv5 使用大、中、小三個尺寸

    • 輸出尺寸:

      • 大目標: 通常是輸入圖像尺寸的 1/32

      • 中目標: 通常是輸入圖像尺寸的 1/16

      • 小目標: 通常是輸入圖像尺寸的 1/8

  • 假設輸入圖像尺寸為640x640,具體的特征圖尺寸如下:

5、開源項目

ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite

項目鏈接

不同v5版本的差異表

Modelsize (pixels)mAPval 50-95mAPval 50Speed CPU b1 (ms)Speed V100 b1 (ms)Speed V100 b32 (ms)params (M)FLOPs @640 (B)
YOLOv5n64028.045.7456.30.61.94.5
YOLOv5s64037.456.8986.40.97.216.5
YOLOv5m64045.464.12248.21.721.249.0
YOLOv5l64049.067.343010.12.746.5109.1
YOLOv5x64050.768.976612.14.886.7205.7
YOLOv5n6128036.054.41538.12.13.24.6
YOLOv5s6128044.863.73858.23.612.616.8
YOLOv5m6128051.369.388711.16.835.750.0
YOLOv5l6128053.771.3178415.810.576.8111.4
YOLOv5x6 + TTA1280 153655.0 55.872.7 72.73136 -26.2 -19.4 -140.7 -209.8 -
  • YOLOv5的一些主要模型變體:

    1. YOLOv5n:

      • 這是最小的變體,適用于嵌入式設備或資源受限的環境

      • 犧牲了一定的準確性以換取更快的速度

    2. YOLOv5s:選擇

      • 較小的模型,適合在邊緣設備上使用

      • 相比于更大的模型,它提供了更好的速度,但在精度上有所降低

    3. YOLOv5m:

      • 中等大小的模型,平衡了速度和精度

      • 適用于大多數常規硬件

    4. YOLOv5l:

      • 較大的模型,提供了更高的檢測精度

      • 在高端硬件上可以運行良好,但速度較慢

    5. YOLOv5x:

      • 最大的模型,具有最高的精度

      • 需要高性能的硬件來保證實時處理速度

  • 各個模型測試速度參數:

  • 第四步:把下載好模型,復制一份到項目中,如下:

第五步:執行命令python detect.py --weights <weights_path> --source <source>,完成推理,結果默認保存到 runs/detect

命令參數詳細說明:

detect.py :是YOLOv5提供的用于目標檢測的腳本

--weights <weights_path>:指定模型權重文件的路徑。例如 yolov5s.pt 表示使用YOLOv5s模型的預訓練權重

--source <source>: 指定輸入源。可以是以下類型之一:

0: 表示使用默認攝像頭(通常是內置攝像頭)

img.jpg: 指定圖像文件作為輸入

vid.mp4: 指定視頻文件作為輸入

screen: 使用屏幕截圖作為輸入源,需要注意是否所有的YOLOv5版本都支持此選項

path/: 指定一個目錄,該目錄下的所有支持的媒體文件都將作為輸入

list.txt: 一個文本文件,其中每一行是一個輸入源(可以是圖像路徑或視頻路徑)

list.streams: 類似于 list.txt,但每一行是一個流媒體鏈接

'path/*.jpg': 使用glob模式匹配文件,此處表示所有.jpg格式的圖像文件

'https://youtu.be/LNwODJXcvt4': 從YouTube URL讀取視頻流

'rtsp://example.com/media.mp4': 從RTSP、RTMP或HTTP流讀取視頻

?在這里查看detect的結果

訓練

  • 執行以下命令訓練模型,結果默認保存到 runs/train

python train.py --data .\data\coco.yaml --img 640 --epochs 25 --weights .\yolov5s.pt --cfg .\models\yolov5s.yaml --batch-size 2 --device 0
  • 命令參數詳細說明:

    • train.py:這是一個 Python 腳本,它負責加載數據、構建模型、設置優化器、定義損失函數,并執行訓練循環

    • --data coco.yaml:用來指定數據集配置文件的路徑,在這個例子中,coco.yaml 文件包含了訓練數據集的詳細信息,如訓練集、驗證集的路徑,類別數量等,我們需要把這個coco.yaml替換成我們的數據集對應的.yaml文件路徑

    • --img 640:指定樣本尺寸

    • --epochs 25:用來指定訓練的周期數,這里的值 25 表示整個訓練過程將在數據集上重復 25 次

    • --weights .\yolov5s.pt:用于指定初始權重文件的路徑。值yolov5s表示在 yolov5 提供的模型基礎上繼續訓練,當路徑為空字符串 '' 時,意味著訓練從零開始,沒有預訓練的權重

    • --cfg yolov5s.yaml:用于指定模型配置文件的路徑。配置文件定義了模型的架構細節,如卷積層的數量、尺寸等,在這個例子中,yolov5s.yaml 指定了YOLOv5 小型版本模型配置文件

    • --batch-size 2:用于設置每次梯度更新時使用的樣本數量。批量大小越大,每次迭代所用的時間越長,但同時可能會得到更穩定的梯度,注意虛擬內存問題

    • --device 0于指定訓練過程中使用的設備,通常是 GPU 或 CPU。這個參數可以幫助你控制模型訓練是在 CPU 上還是在 GPU 上進行,在這個例子中 0 表示第 0 號 GPU,如果計算機沒有 GPU,參數設置為 CPU 即可,如果想讓計算機自動選擇可用的 GPU,把值設置為 -1 即可

  • 執行過程:

  • 訓練過程,介紹如下:

    • Epoch:一個 epoch 指的是模型在整個訓練數據集上完成一次正向傳播和反向傳播的過程,用于衡量訓練的進度

    • Gpu_mem:表示當前GPU的內存使用情況,監控GPU內存使用情況,確保沒有超過顯存限制,避免出現內存溢出錯誤

    • box_loss:表示邊界框回歸損失,用于衡量預測框與真實框之間的偏差,用于優化預測框的位置,使其更加接近真實框的位置

    • obj_loss:表示對象存在性損失,用于衡量預測框是否包含對象,用于判斷預測框是否真正包含了目標對象,提高模型識別目標的能力

    • cls_loss:表示分類損失,用于衡量預測框內對象的分類準確性,用于優化模型對目標對象的分類準確性,使其能夠正確識別不同類別的對象

    • Instances:訓練批次中檢測到的目標實例數量

    • Size:表示輸入到模型中的圖像大小

  • 訓練結果,這個文件夾中包含了很多文件,重要內容如下:

    • weights 文件夾下,有兩個后綴名為.pt的文件

      • best.pt:表示在整個訓練過程中性能最佳的模型權重,用于推理

      • last.pt:表示訓練結束時的最后一個模型權重,用于設置下次訓練基于這個基礎上繼續訓練,但是需要修改很多參數

5.9 恢復訓練

  • 如果訓練過程中意外停止,在訓練指令后面加上 --resume 參數可以恢復訓練,并且不需要同時指定 --weights 參數。--resume 會自動加載最近一次保存的檢查點(包括模型權重、優化器狀態等)

python train.py --weights runs/train/exp/weights/last.pt --resume   

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

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

相關文章

Pytest項目_day05(requests加入headers)

headers 由于每個請求都需要加入一些固定的參數&#xff0c;例如&#xff1a;cookies、user-agent&#xff0c;那么將這些固定參數放入URL或params中會顯得很臃腫&#xff0c;因此一般將這些參數放在request headers中headers的反爬作用 在豆瓣網站中&#xff0c;如果我們不加入…

安全引導功能及ATF的啟動過程(四)

安全引導功能及ATF的啟動過程&#xff08;四&#xff09; ATF中bl31的啟動 在bl2中觸發安全監控模式調用后會跳轉到bl31中執行&#xff0c;bl31最主要的作用是建立EL3運行態的軟件配置&#xff0c;在該階段會完成各種類型的安全監控模式調用ID的注冊和對應的ARM核狀態的切換&am…

從手工到智能決策,ERP讓制造外貿企業告別“數據孤島“降本增效

在全球化競爭加劇的當下&#xff0c;制造型外貿企業正面臨訂單碎片化、供應鏈復雜化、合規風險上升等多重挑戰。數字化轉型已成為企業突破增長瓶頸、構建核心競爭力的必選項。然而&#xff0c;許多企業在推進過程中因選型不當陷入“系統孤島”“數據失真”“流程低效”等困境。…

DMETL簡單介紹、安裝部署和入門嘗試

一、DMETL的介紹1.1 概述我們先來簡單了解一下DMETL。DMETL是什么&#xff1f;說的簡單一點&#xff0c;DMETL一款數據處理與集成平臺&#xff1b;從功能來說&#xff0c;那DMETL就是對數據同步、數據處理以及數據交換共享提供一站式支持的平臺&#xff1b;從它的意義來說&…

NLP 人工智能 Seq2Seq、K-means應用實踐

基于Java和人工智能的Web應用 以下是基于Java和人工智能的Web應用實例,涵蓋自然語言處理、計算機視覺、數據分析等領域。這些案例結合了沈七星AI或其他開源框架(如TensorFlow、Deeplearning4j)的實現思路,供開發參考: 自然語言處理(NLP) 1. 智能客服系統 使用Java的Op…

Docker 從入門到實戰(一):全面解析容器化革命 | 2025 終極指南

2025 年,全球容器市場規模突破 200 億美元,超過 80% 的企業生產環境運行在容器之上。掌握 Docker 已成為開發、運維乃至架構師的核心競爭力。本文帶你徹底搞懂 Docker 的底層邏輯與核心價值! 一、Docker 是什么?為什么它能改變世界? 想象一下:你開發時運行完美的 Pytho…

Lazada東南亞矩陣營銷破局:指紋手機如何以“批量智控+數據中樞”重構運營生態

在Lazada以“超級APP”戰略滲透東南亞6國市場的進程中&#xff0c;商家正陷入一個結構性矛盾&#xff1a;如何用有限人力高效管理10個國家賬號&#xff0c;卻不被數據孤島拖垮營銷效率&#xff0c;更不因賬號關聯風險引發平臺封禁&#xff1f;傳統多賬號運營依賴“人手一臺設備…

操作系統: 線程(Thread)

目錄 什么是線程&#xff08;Thread&#xff09;&#xff1f; 線程與進程之間的關系 線程調度與并發執行 并發&#xff08;Concurrency&#xff09;與并行&#xff08;Parallelism&#xff09; 多線程編程的四大核心優勢&#xff08;benefits of multithreaded programmin…

Uber的MySQL實踐(一)——學習筆記

MySQL 是Uber數據基礎設施的核心支柱&#xff0c;支撐著平臺上大量關鍵操作。Uber 擁有一套龐大的 MySQL 集群&#xff0c;如何構建一個控制平面來管理如此大規模的 MySQL 集群&#xff0c;并同時確保零宕機、零數據丟失是一個十分有挑戰性的問題。下面重點介紹 Uber 的 MySQL …

騰訊云EdgeOne產品深度分析報告

一、產品概述騰訊云EdgeOne是騰訊云推出的新一代邊緣安全加速平臺&#xff0c;集成內容分發網絡&#xff08;CDN&#xff09;、Web應用防火墻&#xff08;WAF&#xff09;、DDoS防護、Bot管理、API安全及邊緣計算能力&#xff0c;致力于為企業提供一站式安全加速解決方案。該平…

Spring Boot 優雅配置InfluxDB3客戶端指南:@Configuration + @Bean + yml實戰

前言 想用Java玩轉InfluxDB 3?要是還靠寫main函數硬編碼配置,那就像穿著睡衣開正式會議,實在有點不靠譜。現代Spring開發套路講究配置和代碼分離,講究優雅和靈活。用@Configuration配合@Bean注解,再加上yml配置文件集中管理連接信息,簡直是為代碼打扮一身西裝,既整潔又…

記錄:rk3568適配開源GPU驅動(panfrost)

rk3568采用的GPU是Mali-G52&#xff0c;該型號的GPU已在5.10內核的panfrost驅動中被支持。下面記錄下移植過程。 1.內核dts修改&#xff1a; kernel 5.10: arch/arm64/boot/dts/rockchip/rk3568.dtsigpu: gpufde60000 {compatible "rockchip,rk3568-mali", "ar…

SMBIOS詳解:系統管理BIOS的工作原理與實現

1. SMBIOS概述 SMBIOS&#xff08;System Management BIOS&#xff09;是由DMTF&#xff08;分布式管理任務組&#xff09;制定的行業標準&#xff0c;旨在為計算機系統提供統一的硬件信息描述框架。它定義了計算機硬件組件&#xff08;如處理器、內存、主板等&#xff09;的標…

8.5 CSS3多列布局

多列布局 CSS3之多列布局columns CSS3中新出現的多列布局(multi-column)是傳統HTML網頁中塊狀布局模式的有力擴充。這種新語法能夠讓WEB開發人員輕松的讓文本呈現多列顯示。 設置列寬 column-width&#xff1a; | auto 設置對象的寬度&#xff1b;使用像素表示。 auto&#…

Chrome插件快速上手

目錄 前言 一、瀏覽器插件的主要功能 二、插件的工作原理 插件結構 manifest.json icons background.js content-scripts 三、插件例子 popup popup.html popup.js styles.css background.js content-script.js manifest.json 四、其它 前言 本文不做特殊說明…

moment和dayjs

一&#xff1a;moment和dayjs 區別moment 大且可變、維護模式&#xff1b;dayjs 小且不可變、插件化、tree?shaking 友好。antd v4 用 moment&#xff1b;antd v5 用 dayjs。請在同一項目中統一其一&#xff0c;避免混用導致組件報錯。二&#xff1a; antd 4.24.16&#xff08…

Flutter Packge - 組件應用

一、組件創建1. 在工程根目錄創建 packages 目錄。mkdir packages #創建文件夾 cd packages 2. 創建純 Dart Package&#xff08;適合工具類/UI組件&#xff09;。flutter create --templatepackage common_network二、組件配置1. 在 common_network 的 pubspec.yaml 中添加…

基于雙塊輕量級神經網絡的無人機拍攝的風力渦輪機圖像去霧方法

基于雙塊輕量級神經網絡的無人機拍攝的風力渦輪機圖像去霧方法 UAV-Taken Wind Turbine Image Dehazing With a Double-Patch Lightweight Neural Network 我是菜雞&#xff01;我是菜雞&#xff01;我是菜雞&#xff01; 如果老師及學姐學長對該文有任何意見&#xff0c;請…

Spring AI Alibaba 項目接入阿里云百煉平臺大模型

1 依賴jdk 21 springboot 3.4.5 spring-ai-alibaba-starter-dashscope 1.0.0.2<properties><java.version>21</java.version><spring-ai.version>1.0.0</spring-ai.version><spring-ai-alibaba.version>1.0.0.2</spring-ai-alibaba.v…

電腦和手機訪問網站,自動檢測跳轉不同網站

自動檢測跳轉不同網站 自動檢測設備手機或電腦來跳轉不同網頁 開箱即用&#xff0c;不過需要自己修改一下跳轉鏈接 源碼截圖&#xff1a; 下載地址&#xff1a;電腦和手機訪問網站&#xff0c;自動檢測跳轉不同網站.zip - 藍奏云