計算機視覺---YOLOv4

YOLOv4(You Only Look Once v4)于2020年由Alexey Bochkovskiy等人提出,是YOLO系列的重要里程碑。它在YOLOv3的基礎上整合了當時最先進的計算機視覺技術,實現了檢測速度與精度的顯著提升。以下從主干網絡、頸部網絡、頭部檢測、訓練策略、損失函數、正則化方法

一、主干網絡(Backbone):從Darknet53到CSPDarknet53

YOLOv3的瓶頸
  • Darknet53:采用全卷積結構,包含53個卷積層,結合殘差連接(Residual Connection),在精度與速度間取得平衡,但計算量較大,且特征復用效率有待提升。
YOLOv4的改進
  1. CSP結構引入(Cross Stage Partial Network)

    • 核心思想:將主干網絡的每個階段(Stage)的特征圖分為兩部分,一部分直接傳遞(Partial Connection),另一部分進行常規卷積,最后拼接融合。
    • 優勢
      • 減少計算量:通過跨階段特征融合,避免重復計算,提升計算效率。
      • 增強梯度傳播:分離的梯度路徑使網絡更易訓練,緩解梯度消失。
      • 輕量化設計:在YOLOv4中,CSPDarknet53相比Darknet53減少約15%的參數量,同時保持精度。
        在這里插入圖片描述
  2. 激活函數替換:Mish替代LeakyReLU

    • Mish公式 Mish = x ? tanh ? ( ln ? ( 1 + e x ) ) \text{Mish} = x \cdot \tanh(\ln(1 + e^x)) Mish=x?tanh(ln(1+ex))
    • 優勢
      • 光滑連續的非單調特性,保留負值信息,增強特征表達能力。
      • 相比LeakyReLU,在深層網絡中精度更高,但計算量略有增加。
    • 例外:YOLOv4-tiny仍使用LeakyReLU以降低計算成本。
      在這里插入圖片描述
  3. SPP模塊集成(Spatial Pyramid Pooling)

    • 位置:在CSPDarknet53的末端加入SPP模塊(YOLOv3無此結構)。
    • 作用通過多尺度池化(如1×1, 5×5, 9×9, 13×13最大池化)擴大感受野,融合不同尺度特征,提升目標多尺度檢測能力
    • 效果:實驗表明,SPP模塊使YOLOv4的mAP提升2.7%~3.2%。

在這里插入圖片描述

二、頸部網絡(Neck):從FPN到PAN+SPP

YOLOv3的瓶頸
  • 單一FPN結構:僅通過自上而下路徑融合高層語義特征,底層細節特征(如小目標位置信息)傳遞不足。
YOLOv4的改進
  1. FPN+PAN結構(Path Aggregation Network)
    • 雙向特征融合
      • 自上而下路徑(FPN):傳遞高層語義特征(如“汽車”“人”的類別信息)。
      • 自下而上路徑(PAN):增強底層細節特征(如邊緣、紋理)的傳遞,尤其提升小目標檢測性能。
    • 對比YOLOv3:YOLOv3僅使用FPN,而YOLOv4通過PAN補充底層特征流動,形成更強大的特征金字塔。
      在這里插入圖片描述

YOLOv4中的PAN不是加法,是拼接
在這里插入圖片描述

  1. SPP模塊的延續作用
    • 在頸部網絡中,SPP模塊進一步擴大感受野,且計算成本低(僅在主干末端和頸部各用一次)。

三、頭部檢測(Head):多尺度檢測與激活函數優化

YOLOv3的設計
  • 三尺度檢測:輸出13×13、26×26、52×52三種尺度特征圖,分別檢測大、中、小目標。
  • 激活函數:分類頭使用Softmax(單標簽分類),回歸頭使用Sigmoid預測坐標偏移。
YOLOv4的改進
  1. 分類頭:Logistic激活替代Softmax

    • 支持多標簽分類:YOLOv3的Softmax強制單標簽,而YOLOv4通過Logistic激活(獨立二分類)支持目標的多標簽預測(如“人”同時屬于“運動員”和“行人”)。
  2. 錨框優化

    • 使用K-means聚類重新生成錨框,適配COCO數據集的目標尺寸分布,提升先驗框與真實框的匹配度。
  3. 檢測頭結構輕量化

    • 通過減少卷積層數量或使用深度可分離卷積(如YOLOv4-tiny),降低計算量,適配移動端。

四、訓練策略:數據增強與自對抗訓練

YOLOv3的數據增強
  • 基礎增強:隨機翻轉、裁剪、縮放、顏色抖動等。
YOLOv4的改進
  1. Mosaic數據增強

    • 原理:將4張圖像隨機縮放、裁剪、拼接成1張新圖像,背景豐富且包含更多小目標。
    • 優勢
      • 提升小目標檢測性能(小目標在拼接后可能成為中/大目標)。
      • 減少對Batch Normalization的依賴(單張圖像包含4張圖的統計特征),可使用更小的Batch Size訓練。
        在這里插入圖片描述
  2. MixUp增強

    • 混合兩張圖像及其標簽,通過線性插值生成新樣本,提升模型泛化能力,抑制過擬合。
  3. Random Erase:用隨機值或訓練集的平均像素值替換圖像中的區域

  4. Hide and Seek:根據概率設置隨機隱藏一些補丁
    在這里插入圖片描述

  5. 自對抗訓練(Self-Adversarial Training, SAT)

    • 兩階段流程
      • 階段1:模型反向更新輸入圖像(而非網絡參數),生成對抗樣本(使模型誤檢)。
      • 階段2:用對抗樣本正常訓練模型,提升魯棒性。
    • 對比傳統對抗訓練:無需外部攻擊算法,僅通過模型自身生成擾動,計算成本更低。
      在這里插入圖片描述

6.DropBlock
在這里插入圖片描述

五、損失函數:從Smooth L1到CIoU Loss

YOLOv3的損失函數
  • 坐標損失:Smooth L1損失,僅計算預測框與真實框的坐標偏移,未考慮框的重疊面積和形狀。
  • 分類損失:交叉熵損失。
  • 置信度損失:二元交叉熵損失,衡量預測框與真實框的重疊程度(IoU)。
存在的問題:沒有相交則IOU=0無法進行梯度計算,相同的IOU卻反應不出實際情況是怎么樣

在這里插入圖片描述

YOLOv4的改進

GIOU引入面積
在這里插入圖片描述
DIOU引入中心點距離
在這里插入圖片描述

  1. CIoU Loss替代Smooth L1

    • 公式

      CIoU = 1 ? IoU + ρ 2 ( b , b g t ) c 2 + α v \text{CIoU} = 1 - \text{IoU} + \frac{\rho^2(b, b^{gt})}{c^2} + \alpha v CIoU=1?IoU+c2ρ2(b,bgt)?+αv
      其中:

      • ρ 2 \rho^2 ρ2:預測框與真實框中心點的歐氏距離。
      • c c c:包含兩框的最小外接矩形對角線長度。
      • α \alpha α:權重參數,(v):衡量預測框與真實框的寬高比一致性。
    • 優勢

      • 同時優化重疊面積(IoU)、中心點距離、寬高比,收斂更快,定位更精準
      • 解決傳統IoU/L1損失在無重疊時梯度消失的問題。
  2. 置信度損失結合CIoU

    • 置信度不僅反映IoU,還融入CIoU的懲罰項,使模型更關注框的形狀和位置匹配。

六、正則化與優化技術

1. 跨卡批量歸一化(CmBN, Cross mini-Batch Normalization)
  • 背景:YOLOv3使用普通BN,多卡訓練時各卡獨立計算統計量,可能導致模型不穩定。
  • CmBN改進:在每個Batch內跨GPU收集統計量(而非全量數據),平衡訓練穩定性與計算效率,尤其適合小Batch Size場景。
2. 優化器與學習率策略
  • 優化器:YOLOv4默認使用SGD(YOLOv3也常用SGD,但YOLOv4調參更精細)。
  • 學習率調度
    • 余弦退火(Cosine Annealing):周期性衰減學習率,避免過早收斂到局部最優。
    • Warmup策略:訓練初期緩慢提升學習率,防止模型在隨機初始化階段崩潰。
3. 標簽平滑(Label Smoothing)
  • 對真實標簽添加微小噪聲(如將one-hot標簽從[0,1,0]改為[0.05,0.9,0.05]),抑制模型對標簽的過度自信,提升泛化能力
    在這里插入圖片描述
    在這里插入圖片描述
非極大值抑制NMS改進

DIOU-NMS
在這里插入圖片描述
在這里插入圖片描述

七、SAM注意力機制模塊

Convolutional Block Attention Module(CBAM)是一種輕量級卷積神經網絡注意力模塊。它通過通道注意力空間注意力雙重機制優化特征表達:先對特征圖進行全局平均池化與最大池化,經全連接層生成通道注意力權重,聚焦重要特征通道;再對通道維度做平均與最大池化,通過卷積生成空間注意力權重,定位關鍵空間區域。兩者順序堆疊,為特征圖分配動態權重,增強有效信息、抑制冗余,可無縫嵌入各類CNN架構,在幾乎不增加計算量的前提下提升模型表征能力。CBAM注意力機制在NLP,CV等領域廣泛應用。
在這里插入圖片描述

YOLOv4引入了SAM(Spatial Attention Module)
SAM(空間注意力模塊)是神經網絡中聚焦空間維度的注意力機制模塊。其輸入特征圖后,先在通道維度分別進行平均池化與最大池化,生成兩張空間特征圖;再將二者拼接,通過卷積操作輸出空間注意力權重圖,該權重圖與原特征圖相乘,可增強關鍵空間區域的特征響應,抑制無關位置信息。SAM能讓模型更關注“何處”是重要特征,常與通道注意力結合(如CBAM),輕量級且計算高效,適用于各類CNN架構以提升空間特征表征能力。
在這里插入圖片描述
在這里插入圖片描述

八、其他改進與性能對比

1. 測試階段優化
  • 多尺度測試(Multi-Scale Testing, MST):輸入圖像縮放至不同尺寸進行推理,提升小目標檢測精度(犧牲速度)。
  • 自適應錨框機制:根據輸入圖像尺寸動態調整錨框比例,適配不同分辨率。
2. 輕量化變體:YOLOv4-tiny
  • 主干網絡:使用CSPDarknet53的輕量化版本,減少卷積層和通道數(如僅保留前13層)。
  • 頸部網絡:移除SPP和PAN,僅用簡單FPN。
  • 檢測頭:僅保留兩個尺度(13×13和26×26),適合移動端或嵌入式設備。
3. 性能對比(COCO數據集)
模型BackbonemAP@0.5FPS (Tesla V100)
YOLOv3Darknet5357.940
YOLOv4CSPDarknet5365.765
YOLOv4-tinyCSPDarknet53-tiny40.2448
  • 結論:YOLOv4相比YOLOv3,mAP提升約7.8%,FPS提升62.5%,實現“精度與速度雙突破”。

八、總結:YOLOv4的技術突破點

模塊YOLOv3YOLOv4改進收益
主干網絡Darknet53CSPDarknet53 + SPP輕量化、更強特征表達
頸部網絡FPNFPN + PAN底層細節與高層語義雙向融合
數據增強基礎增強Mosaic + MixUp + SAT小目標檢測與魯棒性提升
損失函數Smooth L1 + BCECIoU Loss定位更精準,收斂更快
正則化普通BN + DropoutCmBN + 標簽平滑訓練穩定性與泛化能力提升
激活函數LeakyReLUMish(主干)非線性表達增強
檢測頭Softmax(單標簽)Logistic(多標簽)支持多標簽分類

九、常見誤區與注意事項

  1. YOLOv4與YOLOv5的關系

    • YOLOv4是官方版本,由原團隊開發;YOLOv5由Ultralytics公司基于PyTorch重構,非官方但更易部署,兩者技術路線不同(如YOLOv5使用Focus結構和不同的CSP變體)。
  2. Mish的適用場景

    • 算力充足時使用Mish可提升精度;嵌入式設備建議用LeakyReLU或Swish優化版。
  3. 錨框的必要性

    • YOLOv4仍依賴手工設計的錨框,而后續YOLOv5s/YOLOX嘗試無錨框(Anchor-Free)設計,需注意技術演進趨勢。

朝飲花上露,夜臥松下風。
云英化為水,光采與我同。 —王昌齡

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

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

相關文章

OpenCV 第7課 圖像處理之平滑(一)

1. 圖像噪聲 在采集、處理和傳輸過程中,數字圖像可能會受到不同噪聲的干擾,從而導致圖像質量降低、圖像變得模糊、圖像特征被淹沒,而圖像平滑處理就是通過除去噪聲來達到圖像增強的目的。常見的圖像噪聲有椒鹽噪聲、高斯噪聲等。 1.1 椒鹽噪聲 椒鹽噪聲(Salt-and-pepper N…

Spring AI 系列3: Promt提示詞

一、Promt提示詞 Promt提示是引導 AI 模型生成特定輸出的輸入, 提示的設計和措辭會顯著影響模型的響應。 在 Spring AI 中與 AI 模型交互的最低層級,處理提示有點類似于在 Spring MVC 中管理”視圖”。 這涉及創建帶有動態內容占位符的大段文本。 這些占…

隨叫隨到的電力補給:移動充電服務如何重塑用戶體驗?

在快節奏的現代生活中,電力已成為維系日常運轉的隱形血脈。智能手機、電動汽車、便攜設備的普及,讓“電量焦慮”逐漸演變為一種時代癥候。而移動充電服務的興起,正悄然改變這一局面。它像一位隱形的能源管家,隨時響應需求&#xf…

LeetCode 75. 顏色分類 - 雙指針法高效解決(Java實現)

文章目錄 問題描述算法思路:三指針分區法核心思想指針定義 Java實現算法執行流程關鍵問題解析:為什么交換0后不需要重新檢查?交換0時的兩種情況分析詳細解釋: 復雜度分析示例演示(輸入:[2,0,2,1,1,0]&#…

【MySQL】C語言連接

要使用C語言連接mysql,需要使用mysql官網提供的庫,大家可以去官網下載 我們使用C接口庫來進行連接 要正確使用,我們需要做一些準備工作: 保證mysql服務有效在官網上下載合適自己平臺的mysql connect庫,以備后用 下載開發庫 s…

NFS 掛載配置與優化最佳實踐指南

文章目錄 NFS 掛載配置與優化最佳實踐指南1. 服務器端配置1.1 安裝 NFS 服務1.2 配置共享目錄常用配置選項說明 1.3 啟動與檢查服務 2. 客戶端掛載2.1 安裝 NFS 客戶端2.2 掛載 NFS 共享2.3 自動掛載 3. 客戶端掛載選項4. 性能優化與故障排查4.1 性能優化建議4.2 常見問題排查 …

3D PDF如何制作?SOLIDWORKS MBD模板定制技巧

SOLIDWORKS制作3D PDF模版 SOLIDWORKS MBD能夠幫助工程師以清晰直觀的方式描述產品尺寸信息。在3D PDF文件中,用戶可以自由旋轉和移動視圖,方便查看模型的各個尺寸細節。 本文將帶您一步步學習如何使用SOLIDWORKS MBD制作專業的3D PDF模板,…

Unity-QFramework框架學習-MVC、Command、Event、Utility、System、BindableProperty

QFramework QFramework簡介 QFramework是一套漸進式、快速開發框架,適用于任何類型的游戲及應用項目,它包含一套開發架構和大量的工具集 QFramework的特性 簡潔性:QFramework 強調代碼的簡潔性和易用性,讓開發者能夠快速上手&a…

R3GAN訓練自己的數據集

簡介 簡介:這篇論文挑戰了"GANs難以訓練"的廣泛觀點,通過提出一個更穩定的損失函數和現代化的網絡架構,構建了一個簡潔而高效的GAN基線模型R3GAN。作者證明了通過合適的理論基礎和架構設計,GANs可以穩定訓練并達到優異…

【PhysUnits】15.1 引入P1后的加一特質(add1.rs)

一、源碼 代碼實現了類型系統中的"加一"操作(Add1 trait),用于在編譯期進行數字的增量計算。 //! 加一操作特質實現 / Increment operation trait implementation //! //! 說明: //! 1. Z0、P1,、N1 1&#xff0…

記錄算法筆記(2025.5.29)最小棧

設計一個支持 push ,pop ,top 操作,并能在常數時間內檢索到最小元素的棧。 實現 MinStack 類: MinStack() 初始化堆棧對象。void push(int val) 將元素val推入堆棧。void pop() 刪除堆棧頂部的元素。int top() 獲取堆棧頂部的元素。int get…

Android高級開發第一篇 - JNI(初級入門篇)

文章目錄 Android高級開發JNI開發第一篇(初級入門篇)🧠 一、什么是 JNI?? 為什么要用 JNI? ?? 二、開發環境準備開發工具 🚀 三、創建一個支持 JNI 的 Android 項目第一步:創建新項目項目結構…

PyTorch Image Models (timm) 技術指南

timm PyTorch Image Models (timm) 技術指南功能概述 一、引言二、timm 庫概述三、安裝 timm 庫四、模型加載與推理示例4.1 通用推理流程4.2 具體模型示例4.2.1 ResNeXt50-32x4d4.2.2 EfficientNet-V2 Small 模型4.2.3 DeiT-3 large 模型4.2.4 RepViT-M2 模型4.2.5 ResNet-RS-1…

openEuler安裝MySql8(tar包模式)

操作系統版本: openEuler release 22.03 (LTS-SP4) MySql版本: 下載地址: https://dev.mysql.com/downloads/mysql/ 準備安裝: 關閉防火墻: 停止防火墻 #systemctl stop firewalld.service 關閉防火墻 #systemc…

從零開始的數據結構教程(六) 貪心算法

🍬 標題一:貪心核心思想——發糖果時的最優分配策略 貪心算法 (Greedy Algorithm) 是一種簡單直觀的算法策略。它在每一步選擇中都采取在當前狀態下最好或最優(即最有利)的選擇,從而希望得到一個全局最優解。這就像你…

CPP中CAS std::chrono 信號量與Any類的手動實現

前言 CAS(Compare and Swap) 是一種用于多線程同步的原子指令。它通過比較和交換操作來確保數據的一致性和線程安全性。CAS操作涉及三個操作數:內存位置V、預期值E和新值U。當且僅當內存位置V的值與預期值E相等時,CAS才會將內存位…

Axure設計案例——科技感對比柱狀圖

想讓數據對比展示擺脫平淡無奇,瞬間抓住觀眾的眼球嗎?那就來看看這個Axure設計的科技感對比柱狀圖案例!科技感設計風格運用獨特元素打破傳統對比柱狀圖的常規,營造出一種極具沖擊力的視覺氛圍。每一組柱狀體都仿佛是科技戰場上的士…

怒更一波免費聲音克隆和AI配音功能

寶子們! 最近咱軟件TransDuck的免費聲音克隆和AI配音功能被大家用爆啦!感謝各位自來水瘋狂安利!! DD這里也是收到好多用戶提的寶貴建議!所以,連夜肝了波更新! 這次重點更新使用克隆音色進行A…

UDP協議原理與Java編程實戰:無連接通信的奧秘

1.UDP協議核心原理 1. 無連接特性:快速通信的基石 UDP(User Datagram Protocol,用戶數據報協議)是TCP/IP協議族中無連接的輕量級傳輸層協議。與TCP的“三次握手”建立連接不同,UDP通信無需提前建立鏈路,發送…

vue-seamless-scroll 結束從頭開始,加延時后滾動

今天遇到一個大屏需求: 1??初始進入頁面停留5秒,然后開始滾動 2??最后一條數據出現在最后一行時候暫停5秒,然后返回1?? 依次循環,發現vue-seamless-scroll的方法 ScrollEnd是監測最后一條數據消失在第一行才回調&#xff…