YOLOv8目標檢測網絡結構理論

目錄

YOLOv8的網絡結構圖:

Backbone

卷積塊(Conv Block)

Conv2d層

BatchNorm2d層

SiLU激活函數

瓶頸塊(Bottleneck Block)

C2f 模塊結構

Neck

SPPF(空間金字塔池化快速)

PAN?- FPN

Head

結構1.卷積層和激活函數:

2.預測層(Prediction Layers):

3.非極大值抑制

其他優化

YOLOv5 與 YOLOv8 的主要區別:

?

YOLOv8的網絡結構圖:

YOLOv8的網絡結構主要由以下三大部分組成 :

Backbone

Backbone部分負責特征提取,采用了一系列卷積和反卷積層,同時使用了殘差連接和瓶頸結構來減小網絡的大小并提高性能。該部分采用了C2f模塊作為基本構成單元,與YOLOv5的C3模塊相比,C2f模塊具有更少的參數量和更優秀的特征提取能力。具體來說,C2f模塊通過更有效的結構設計,減少了冗余參數,提高了計算效率。此外,Backbone部分還包括一些常見的改進技術,如深度可分離卷積(Depthwise Separable Convolution)和膨脹卷積(Dilated Convolution),以進一步增強特征提取的能力。

卷積塊(Conv Block)

Conv2d層


卷積是一種數學運算,涉及將一個小矩陣(稱為核或濾波器)滑動到輸入數據上,執行元素級的乘法,并將結果求和以生成特征圖。“2D”在Conv2d中表示卷積應用于兩個空間維度,通常是高度和寬度。

  • k(kernel數量):濾波器或核的數量,代表輸出體積的深度,每個濾波器負責檢測輸入中的不同特征,
  • s(stride步幅):步幅,指濾波器/核在輸入上滑動的步長。較大的步幅會減少輸出體積的空間維度。
  • p(padding填充):填充,指在輸入的每一側添加的額外零邊框,有助于保持空間信息,并可用于控制輸出體積的空間維度。
  • c(channels輸入通道數):輸入的通道數。例如,對于RGB圖像,c為3(每個顏色:紅色、綠色和藍色各一個通道)。
BatchNorm2d層

批歸一化(BatchNorm2d)是一種在深度神經網絡中使用的技術,用于提高訓練穩定性和收斂速度。在卷積神經網絡(CNN)中BatchNorm2d層特定地對2D輸入進行批歸一化,通常是卷積層的輸出。它通過在每個小批次的數據中標準化特征,使每個特征在小批次中的均值接近0、方差接近1,確保通過網絡的數據不會太大或太小,這有助于防止訓練過程中出現的問題。

SiLU激活函數

SiLU(Sigmoid Linear Unit)激活函數,也稱為Swish激活函數,是神經網絡中使用的激活函數。SiLU激活函數定義如下:

SILU(x)=x\cdot \sigma (x)
其中,σ(x)是Sigmoid函數,定義為:\sigma (x)=\frac{1}{1+e^{^{-x}}}
SiLU的關鍵特性是它允許平滑的梯度,這在神經網絡訓練過程中是有益的。平滑的梯度可以幫助避免如梯度消失等問題,這些問題會阻礙深度神經網絡的學習過程.

瓶頸塊(Bottleneck Block)

YOLOv8瓶頸塊結構說明

  1. 卷積層1(Conv 1):首先輸入通過一個卷積層,通常卷積核大小為(1 x 1),用于減少特征圖的通道數。
  2. 卷積層2(Conv 2):緊接著輸入通過一個卷積層,通常卷積核大小為(3 x 3),用于提取特征并增加感受野。
  3. 跳躍連接 (Skip Connection):在卷積層之間加入跳躍連接,將輸入直接連接到輸出。這種連接方式可以緩解梯度消失問題,幫助網絡更好地學習。
  4. 拼接(Concatenate):最后,將跳躍連接后的輸出與卷積層的輸出進行拼接,形成最終輸出。

功能和優勢

  • 減少參數和計算量:通過(1 x 1)卷積層減少特征圖的通道數,降低計算復雜度。
  • 增加網絡深度和非線性能力:通過增加(3 x3)卷積層,提取更多特征,提高模型表達能力。
  • 跳躍連接:緩解梯度消失問題,幫助訓練更深的網絡。

C2f 模塊結構

  • C2f塊: 首先由一個卷積塊(Conv)組成,該卷積塊接收輸入特征圖并生成中間特征圖。
  • 特征圖拆分: 生成的中間特征圖被拆分成兩部分,一部分直接傳遞到最終的Concat塊,另一部分傳遞到多個Bottieneck塊進行進一步處理。
  • Bottleneck塊: 輸入到這些Botleneck塊的特征圖通過一系列的卷積、歸一化和激活操作進行處理,最后生成的特征圖會與直接傳遞的那部分特征圖在Concat塊進行拼接(Concat)。通過多個Bottleneck塊進一步提煉和增強特征,這些Bottle neck塊可以捕捉更復雜的模式和細節
  • 模型深度控制: 在C2f模塊中,Botleneck模塊的數量由模型的depth_muliple參數定義,這意味著可以根據需求靈活調整模塊的深度和計算復雜度,
  • 最終卷積塊:拼接后的特征圖會輸入到一個最終的卷積塊進行進一步處理,生成最終的輸出特征圖.通過Concat塊將直接傳遞的特征圖和處理后的特征圖進行融合,使得模型可以綜合利用多尺度、多層次的信息輸出生成最終特征圖.

Neck

Neck部分負責多尺度特征融合,通過將來自Backbone不同階段的特征圖進行融合,增強特征表示能力。具體來說,YOLOv8的Neck部分包括以下組件:


SPPF(空間金字塔池化快速)

SPPF模塊(Spatial Pyramid Pooling Fast):用于不同尺度的池化操作,將不同尺度的特征圖拼接在一起,提高對不同尺寸目標的檢測能力。

SPPF偽代碼:

import torch
import torch.nn as nn

class SPPFBlock(nn.Module):
? ? def __init__(self, in_channels, out_channels, pool_size=5):
? ? ? ? super(SPPFBlock, self).__init__()
? ? ? ? self.initial_conv = nn.Sequential(
? ? ? ? ? ? nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=1, padding=0),
? ? ? ? ? ? nn.BatchNorm2d(out_channels),
? ? ? ? ? ? nn.SiLU()
? ? ? ? )
? ? ? ??
? ? ? ? self.pool1 = nn.MaxPool2d(kernel_size=pool_size, stride=1, padding=pool_size // 2)
? ? ? ? self.pool2 = nn.MaxPool2d(kernel_size=pool_size, stride=1, padding=pool_size // 2)
? ? ? ? self.pool3 = nn.MaxPool2d(kernel_size=pool_size, stride=1, padding=pool_size // 2)
? ? ? ??
? ? ? ? self.final_conv = nn.Sequential(
? ? ? ? ? ? nn.Conv2d(out_channels * 4, out_channels, kernel_size=1, stride=1, padding=0),
? ? ? ? ? ? nn.BatchNorm2d(out_channels),
? ? ? ? ? ? nn.SiLU()
? ? ? ? )
? ??
? ? def forward(self, x):
? ? ? ? x_initial = self.initial_conv(x)
? ? ? ??
? ? ? ? x1 = self.pool1(x_initial)
? ? ? ? x2 = self.pool2(x1)
? ? ? ? x3 = self.pool3(x2)
? ? ? ??
? ? ? ? x_concat = torch.cat((x_initial, x1, x2, x3), dim=1)
? ? ? ??
? ? ? ? x_final = self.final_conv(x_concat)
? ? ? ??
? ? ? ? return x_final

# 使用示例
sppf_block = SPPFBlock(in_channels=64, out_channels=128)
output = sppf_block(input_tensor)


PAA模塊(Probabilistic Anchor Assignment):用于智能地分配錨框,以優化正負樣本的選擇,提高模型的訓練效果。

PAN模塊(Path Aggregation Network):包括兩個PAN模塊,用于不同層次特征的路徑聚合,通過自底向上和自頂向下的路徑增強特征圖的表達能力。

PAN?- FPN

在 YOLOv8 中,PAN(特征金字塔) -FPN(路徑聚合網絡)的實現結合了 FPN 和 PAN 的優點,具體如下:
1.多尺度特征提取:
YOLOv8 的主干網絡首先提取出不同尺度的特征圖。通過 FPN 構建自頂向下的特征金字塔,實現多尺度特征的初步融合。

2.雙向特征融合:
?在 FPN 的基礎上,引入 PAN 的自底向上路徑,將低層特征逐層傳遞到高層,進一步豐富多尺度特征。通過橫向連接,將不同尺度的特征進行融合,確保每一層的特征都包含豐富的上下文信息。

3.增強的特征表示:
?PAN-FPN 通過雙向路徑的融合,使得特征圖包含更豐富的上下文信息和語義信息,增強了模型對不同尺度目標的檢測能力。

Head部分負責最終的目標檢測和分類任務,包括一個檢測頭和一個分類頭:

結構1.卷積層和激活函數:

Head部分通常包括若干卷積層和激活函數。這些卷積層用于進一步處理Neck部分輸出的特征圖,以提取更多的高級特征。常見的激活函數包括ReLU或Leaky ReLU,能夠引入非線性,從而提升特征表達能力。

2.預測層(Prediction Layers):


在YOLOv8中,預測層是關鍵組件,負責生成最終的檢測結果。預測層包括三個主要輸出:

  • 1.邊界框回歸(Bounding Box Regression):預測目標的位置和大小。通常輸出四個值,分別對應邊界框的中心坐標(x,y)和寬度、高度(w,h)。
  • 2.置信度評分(Confidence Scores):預測每個邊界框內是否包含目標,以及目標的置信度。
  • 3.類別概率(Class Probabilities):預測目標屬于每個類別的概率。
3.非極大值抑制

(Non-Maximum suppression, NMS)最終的預測結果會經過非極大值抑制處理,以去除重復的檢測框。NMS保留置信度最高的邊界框,并移除與之重罍度高的其他邊界框,確保每個目標只被檢測一次。


其他優化


除了上述結構外,YOLOv8還引入了一些新的優化技術,如:
Anchor-free機制:減少了錨框的超參數設置,通過直接預測目標的中心點來簡化訓練過程。
自適應NMS(Non-Maximum Suppression):改進了傳統的NMS算法,通過自適應調整閾值,減少誤檢和漏檢,提高檢測精度自動混合精度訓練(Automatic Mixed Precision Training):通過在訓練過程中動態調整計算精度,加快訓練速度,同時減少顯存占用。

YOLOv5 與 YOLOv8 的主要區別:

YOLOv5 與 YOLOv8 的主要區別-CSDN博客

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

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

相關文章

docker部署hadoop集群

Docker部署hadoop集群下載資源構建鏡像啟動容器搭建集群配置ssh免密節點職責安排修改配置文件啟動集群測試上傳下載執行wordcount程序補充配置歷史服務器日志聚集單節點啟動Java客戶端使用HDFSMapReduce下載資源 java華為鏡像下載地址:Index of java-local/jdk (hu…

常用的T-SQL命令

文章目錄1. 數據庫操作2. 表操作3. 數據插入、更新、刪除4. 數據查詢5. 存儲過程6. 事務處理7、如何使用T-SQL在表中設置主鍵和外鍵?1. 設置主鍵(PRIMARY KEY)方法1:創建表時定義主鍵方法2:通過ALTER TABLE添加主鍵2. …

C++面試題及詳細答案100道( 31-40 )

《前后端面試題》專欄集合了前后端各個知識模塊的面試題,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs&…

給純小白的 Python 操作 Excel 筆記

🧰 1. 先裝工具電腦鍵盤按 Win R,輸入 cmd,回車,把下面一行粘進去回車,等它跑完。 bashpip install openpyxl——————————————————🛠? 2. 打開一個空白的 Excel 打開 Jupyter Notebook…

HTML 常用屬性介紹

目錄 HTML 屬性 HTML 屬性速查表 一、通用屬性(所有元素適用) 二、鏈接與引用相關屬性 三、表單與輸入控件屬性 四、媒體與多媒體屬性 五、事件屬性(常用 JavaScript 事件) 六、其他常用屬性 核心通用屬性 id 屬性 cla…

HTML5練習代碼集:學習與實踐核心特性

本文還有配套的精品資源,點擊獲取 簡介:HTML5作為新一代網頁標準,對Web開發提供了更豐富的功能和工具。本練習代碼集專門針對HTML5的核心特性,包括語義化標簽、離線存儲、多媒體支持、圖形繪制等,以及CSS3的3D效果和…

【RH134知識點問答題】第 10 章:控制啟動過程

目錄 1. 請簡要說明 RHEL9 的啟動過程。 2. 系統重啟和關機的命令分別是什么? 3. Systemd target 是什么? 4. 重置丟失的 root 密碼需要哪些步驟? 5. 如何讓系統日志在重啟后持久保留 1. 請簡要說明 RHEL9 的啟動過程。 答:①開機自檢…

Apollo10.0學習之固態雷達與IMU的外參標定

固態雷達(如Livox、禾賽等非旋轉式激光雷達)與IMU(慣性測量單元)的外參標定(Extrinsic Calibration)是自動駕駛、機器人定位(如LIO-SAM、FAST-LIO)的關鍵步驟。1. 標定原理 外參標定…

HTML5實現古典音樂網站源碼模板1

文章目錄 1.設計來源1.1 網站首頁1.2 古典音樂界面1.3 著名人物界面1.4 古典樂器界面1.5 歷史起源界面 2.效果和源碼2.1 動態效果2.2 源代碼 源碼下載萬套模板,程序開發,在線開發,在線溝通 作者:xcLeigh 文章地址:http…

40 C++ STL模板庫9-容器2-vector

C STL模板庫9-容器2-vector 文章目錄C STL模板庫9-容器2-vector一、基礎概念1. 類型成員(Type Members)2. 模板參數二、構造函數1. 語法2. 示例三、元素訪問1. 函數說明2. 示例代碼四、容量操作1. 函數說明2. 關鍵點說明3. 關鍵操作解析4. 操作示例五、修…

GPT-5系列文章2——新功能、測試與性能基準全解析

引言 2025年8月,OpenAI正式發布了其新一代旗艦模型GPT-5。與業界此前期待的AGI(人工通用智能)突破不同,GPT-5更像是OpenAI對現有技術的一次深度整合與用戶體驗優化。本文將全面解析GPT-5的新特性、實際測試表現以及官方發布的基準數據,幫助開…

利用cursor+MCP實現瀏覽器自動化釋放雙手

小伙伴們,我們今天利用cursorMCP實現瀏覽器自動化,釋放雙手,工作效率嘎嘎提升!前期準備:安裝node.js網址:https://nodejs.org/zh-cn下載下來安裝即可。 下載browser-tools-mcp擴展程序:下載擴展…

指針/邊界索引混淆梳理

在處理數組/鏈表等數據結構時,時常混淆長度和指針序號。處理技巧:使用0-base索引。則區間長度 rightIndex - LeftIndex 1總長度 lastIndex - firstIndex 1鏈表創建一個dummy節點,添加到head前,則可認為從索引0開始。末尾指針判…

LeetCode 刷題【43. 字符串相乘】

43. 字符串相乘 自己做 解1:矩陣計數 class Solution { public:string multiply(string num1, string num2) {int len1 num1.size();int len2 num2.size();if (num1[0] 0 || num2[0] 0) //結果為0的情況return "0";//存儲計算過程的矩陣vector…

NLP數據增強方法及實現-A

目錄 詞替換 主要參考:paddlenlp/data_aug模塊 詞替換數據增強策略也即將句子中的詞隨機替換為其他單詞進行數據增強,這里我們將介紹如何使用paddlenlp.dataaug.WordSubstitute進行詞級別替換的數據增強。 WordSubstitute 參數介紹:aug_ty…

EhViewer安卓ios全版本類下載安裝工具的完整路徑解析

開發一款類似EhViewer的下載安裝工具(集下載管理、應用部署等功能于一體),需要經歷從需求錨定到落地發布的系統性流程。以下從需求拆解到技術落地的全維度指南,將幫你理清開發脈絡,避開常見陷阱。安裝 GitHub - huangy…

MySQL 主鍵詳解:作用與使用方法

在 MySQL 數據庫中,主鍵(Primary Key) 是表結構設計中最重要的約束之一。它不僅是數據唯一性的保障,也是多表關聯、查詢優化的核心工具。本文將從 主鍵的作用 和 主鍵的用法 兩個方面進行講解,并配合代碼示例幫助理解一…

lib.dom.d.ts

lib.dom.d.ts 是一個 TypeScript 類型聲明文件,它是 TypeScript 標準庫的一部分,用于定義瀏覽器 DOM(文檔對象模型)相關的類型和接口。這個文件為開發者提供了瀏覽器中所有內置的 DOM 類型的定義,包括 localStorage、d…

Spring 工具類:StopWatch

StopWatch 是 Spring 框架提供的一個簡單而強大的計時工具類,用于測量代碼塊的執行時間。它特別適合在開發階段進行性能分析、調試和優化。 基本使用方法 // 創建 StopWatch 實例(可指定 ID) StopWatch stopWatch new StopWatch("性能分…

解決 VSCode 運行 Python 時 ModuleNotFoundError: No module named ‘open_webui‘ 問題

目錄 1. 問題原因分析 2. 解決思路 3. 解決步驟 3.1 打開或創建 .vscode/launch.json 3.2 添加調試配置 3.3 配置說明 3.4 運行測試 4. 總結 在使用 VSCode 調試 Python 項目時,我們經常會遇到類似下面的錯誤: Exception has occurred: ModuleN…