【YOLO系列】YOLOv9論文超詳細解讀(翻譯 +學習筆記)

前言?

時隔一年,YOLOv8還沒捂熱,YOLO系列最新版本——YOLOv9 終于閃亮登場!

YOLOv9的一作和v7一樣。v4也有他。

他于2017年獲得臺灣省National Central University計算機科學與信息工程博士學位,現在就職于該省Academia Sinica的信息科學研究所。

悄悄說一句,這篇文章的排版是我目前最喜歡的一篇,強迫癥福音!

學習資料:

  • 論文題目:《YOLOv9: 利用可編程梯度信息學習你想學習的內容》
  • YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information論文鏈接:YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information
  • 開源項目:GitHub - WongKinYiu/yolov9: Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information

YOLO論文系列前期回顧:?

【YOLO系列】YOLOv7論文超詳細解讀(翻譯 +學習筆記)

【YOLO系列】YOLOv6論文超詳細解讀(翻譯 +學習筆記)

【YOLO系列】YOLOv5超詳細解讀(網絡詳解)

【YOLO系列】YOLOv4論文超詳細解讀2(網絡詳解)

【YOLO系列】YOLOv4論文超詳細解讀1(翻譯 +學習筆記)

【YOLO系列】YOLOv3論文超詳細解讀(翻譯 +學習筆記)

【YOLO系列】YOLOv2論文超詳細解讀(翻譯 +學習筆記)

【YOLO系列】YOLOv1論文超詳細解讀(翻譯 +學習筆記)


目錄

前言?

Abstract—摘要

翻譯

精讀

1. Introduction—簡介

翻譯

精讀

2. Related work—相關工作

2.1. Real-time Object Detectors—實時目標檢測器

翻譯

精讀

2.2. Reversible Architectures—可逆結構

翻譯

精讀

2.3. Auxiliary Supervision—輔助監督

翻譯

精讀

3. Problem Statement—問題描述

翻譯

精讀

3.1. Information Bottleneck Principle—信息瓶頸原理

翻譯

精讀

3.2. Reversible Functions—可逆函數

翻譯

精讀

?4. Methodology—方法

4.1. Programmable Gradient Information—可編程的梯度信息

翻譯

精讀?

4.1.1 Auxiliary Reversible Branch—輔助可逆分支

翻譯

精讀

4.1.2 Multi-level Auxiliary Information—多級輔助信息?

翻譯

精讀

4.2. Generalized ELAN—廣義ELAN

翻譯

精讀

5. Experiments—實驗

5.1. Experimental Setup—實驗設置

翻譯

精讀

5.2. Implimentation Details—實現細節

翻譯

精讀

5.3. Comparison with state-of-the-arts—與最先進水平的比較

翻譯

精讀

5.4. Ablation Studies—消融實驗

5.4.1 Generalized ELAN—廣義ELAN(實驗)

翻譯

精讀?

5.4.2 Programmable Gradient Information—可編程梯度信息(實驗)

翻譯

精讀

5.5. Visualization—可視化

翻譯

精讀

6. Conclusions—結論

翻譯

精讀


Abstract—摘要

翻譯

當今的深度學習方法專注于設計最合適的目標函數,以使模型的預測結果與實際情況最接近。同時,必須設計一個合適的架構,以便獲取足夠的信息進行預測。現有方法忽略了一個事實,即當輸入數據經過逐層特征提取和空間變換時,大量信息將會丟失。本文將深入探討當數據通過深度網絡傳輸時的數據丟失重要問題,即信息瓶頸和可逆函數。我們提出了可編程梯度信息(PGI)的概念,以處理深度網絡所需的各種變化,以實現多個目標。PGI可以為目標任務提供完整的輸入信息來計算目標函數,從而獲得可靠的梯度信息以更新網絡權重。此外,基于梯度路徑規劃設計了一種新的輕量級網絡架構——廣義高效層聚合網絡(GELAN)。GELAN的架構證實了PGI在輕量級模型上取得了優異的結果。我們在基于MS COCO數據集的目標檢測上驗證了提出的GELAN和PGI。結果顯示,GELAN僅使用常規卷積算子即可實現比基于深度卷積開發的最先進方法更好的參數利用率。PGI可用于各種模型,從輕量級到大型。它可用于獲取完整信息,使得從頭開始訓練的模型可以獲得比使用大型數據集預訓練的最先進模型更好的結果,比較結果如圖1所示。源代碼可在以下網址找到:https://github.com/WongKinYiu/yolov9。


精讀

傳統深度學習方法的不足

深度網絡輸入數據在逐層進行特征提取和空間變換時,會丟失大量的信息

本文主要解決問題

針對數據在傳輸時的信息丟失問題,研究問題如下:

(1)提出了可編程梯度信息(PGI)的概念,以應對深度網絡實現多個目標所需的各種變化。

(2)設計了一種新的基于梯度路徑規劃的輕量級網絡結構——廣義高效層聚合網絡(GELAN)

本文取得成果

(1)在基于MS COCO數據集的目標檢測上驗證了提出的GELAN和PGI。

(2)GELAN僅使用常規卷積算子可以獲得更好的參數利用率

(3)PGI可用于從輕型到大型的各種模型,并且可以用來獲取完整的信息,使得從頭開始訓練的模型比使用大數據集預訓練的最先進的模型獲得更好的結果。

圖1.MS COCO數據集上實時目標檢測器的比較。基于GELAN和pgi的目標檢測方法在目標檢測性能上超越了以往所有從頭開始訓練的方法。在精度方面,新方法優于大數據集預訓練的RT DETR[43],在參數利用率方面也優于基于深度卷積的設計YOLO MS[7]。

1. Introduction—簡介

翻譯

基于深度學習的模型在各個領域,如計算機視覺、語言處理和語音識別等方面,已經展示出遠遠優于過去人工智能系統的性能。近年來,深度學習領域的研究人員主要關注如何開發更強大的系統架構和學習方法,例如CNNs、Transformers、Perceivers和Mambas等。此外,一些研究人員嘗試開發更通用的目標函數,如損失函數、標簽分配和輔助監督等。上述研究都試圖精確地找到輸入和目標任務之間的映射關系。然而,大多數過去的方法忽視了在前向傳播過程中輸入數據可能會存在大量信息丟失的事實。這種信息丟失會導致偏倚的梯度流,隨后用于更新模型。上述問題可能導致深度網絡建立目標與輸入之間的錯誤關聯,使得訓練模型產生不正確的預測。

在深度網絡中,輸入數據在前向傳播過程中丟失信息的現象通常被稱為信息瓶頸,其示意圖如圖2所示。目前,主要可以緩解這一現象的方法有:(1)使用可逆架構:該方法主要使用重復的輸入數據并以顯式方式保留輸入數據的信息;(2)使用掩模建模:主要利用重構損失,采用隱式方式最大化提取的特征并保留輸入信息;(3)引入深度監督概念:利用未丟失太多重要信息的淺層特征,預先建立特征到目標的映射,以確保重要信息能夠傳遞到更深層。然而,以上方法在訓練和推理過程中存在不同的缺點。例如,可逆架構需要額外的層來結合重復輸入數據,這會顯著增加推理成本。此外,由于輸入數據層到輸出層不能有太深的路徑,這一限制會使訓練過程中難以建模高階語義信息。至于掩模建模,其重構損失有時會與目標損失沖突。此外,大多數掩模機制還會與數據產生不正確的關聯。對于深度監督機制來說,它會產生誤差累積,如果淺監督在訓練過程中丟失信息,后續層將無法檢索所需信息。以上現象在困難任務和小模型上會更顯著。

為了解決上述問題,我們提出了一個新概念,即可編程梯度信息(PGI)。該概念通過輔助可逆分支生成可靠的梯度,使深層特征仍然保持執行目標任務的關鍵特性。輔助可逆分支的設計可以避免傳統深度監督過程可能導致的語義丟失,這種過程集成了多路徑特征。換句話說,我們正在在不同語義層次上編程梯度信息傳播,從而實現最佳的訓練結果。PGI的可逆架構建立在輔助分支上,因此沒有額外的成本。由于PGI可以自由選擇適合目標任務的損失函數,它也克服了掩模建模遇到的問題。所提出的PGI機制可應用于各種規模的深度神經網絡,比深度監督機制更通用,后者只適用于非常深的神經網絡。

在本文中,我們還基于ELAN設計了廣義ELAN(GELAN),GELAN的設計同時考慮了參數數量、計算復雜性、準確性和推理速度。這種設計允許用戶隨意選擇適合不同推理設備的計算塊。我們將提出的PGI和GELAN結合起來,然后設計了一個新一代的YOLO系列目標檢測系統,我們稱之為YOLOv9。我們使用了MS COCO數據集進行實驗,并實驗結果驗證了我們提出的YOLOv9在所有對比中均取得了最佳性能。

我們總結本文的貢獻如下:

  1. 我們從可逆功能的角度對現有深度神經網絡架構進行了理論分析,在這一過程中成功解釋了許多過去難以解釋的現象。我們還根據這一分析設計了PGI和輔助可逆分支,并取得了出色的結果。
  2. 我們設計的PGI解決了深度監督只能用于極深神經網絡架構的問題,從而使新的輕量級架構能夠真正應用于日常生活。
  3. 我們設計的GELAN只使用傳統卷積,以實現比基于最先進技術的深度卷積設計更高的參數使用率,同時顯示出輕量、快速和準確的巨大優勢。
  4. 結合所提出的PGI和GELAN,YOLOv9在MS COCO數據集上的目標檢測性能在各個方面大大超過了現有的實時目標檢測器。

精讀

研究背景1:目標檢測

  • 基于GELAN和PGI的目標檢測方法逐漸流行,超越了傳統方法。
  • 在精度方面,新方法優于大數據集預訓練的RT DETR。
  • 在參數利用率方面,也優于基于深度卷積的設計YOLO MS。

存在的問題:

  • 過去的大部分方法忽略了在前饋過程中輸入數據可能存在的信息損失。
  • 這種信息丟失可能導致梯度流的偏差,并且可能會導致深度網絡在目標和輸入之間建立不正確的關聯,從而導致訓練模型出現不正確的預測。

研究背景2:信息瓶頸

目前解決方法:

  • 可逆架構
  • 掩模建模
  • 引入深度監督概念

存在的問題:

  • 可逆架構——需要額外的層來組合重復輸入的數據,這將增加推理成本,并且在訓練過程中難以對高階語義信息進行建模。
  • 掩模建模——重建損失有時與目標損失相沖突。此外,大多數掩碼機制也會與數據產生不正確的關聯。
  • 深層監督機制——會產生誤差積累。

可編程梯度信息(PGI)

思想:?通過輔助可逆分支生成可靠的梯度,使深層特征仍能保持關鍵特征以執行目標任務。

目的:?輔助可逆分支的設計可以避免傳統的多路徑特征融合深度監督過程可能造成的語義損失


廣義ELAN (GELAN)

思想:?GELAN的設計同時考慮了參數數量計算復雜度精度和推理速度

目的:?這種設計允許用戶為不同的推理設備任意選擇合適的計算塊


本文主要貢獻

通過對現有深度神經網絡架構進行理論分析,從可逆函數的角度解釋了許多以前難以理解的現象。通過引入PGI和輔助可逆支路,實現了良好的效果。

  1. PGI解決了深度監督只適用于極深度神經網絡架構的限制,使新的輕量級架構真正適用于日常生活中。
  2. 結合PGI和GELAN,YOLOv9在MS COCO數據集上在實時目標檢測方面在各個方面都明顯超過了現有的目標檢測器
  3. GELAN是一種僅使用常規卷積的設計,具有比基于最先進技術的深度卷積設計更高的參數利用率,并顯示出輕量、快速和準確的巨大優勢。

2. Related work—相關工作

2.1. Real-time Object Detectors—實時目標檢測器

翻譯

當前主流的實時目標檢測器是YOLO系列[2, 7, 13–15, 25, 30, 31, 47–49, 61–63, 74, 75],其中大多數模型使用CSPNet [64]或ELAN [65]及其變體作為主要計算單元。在特征集成方面,改進的PAN [37]或FPN [35]經常被用作工具,然后改進的YOLOv3頭部[49]或FCOS頭部[57, 58]被用作預測頭部。最近一些實時目標檢測器,如RT DETR [43],其基礎是DETR [4],也已經被提出。然而,由于DETR系列目標檢測器極其難以在沒有相應的領域預訓練模型的情況下應用于新領域,目前最廣泛使用的實時目標檢測器仍然是YOLO系列。本文選擇了YOLOv7 [63]作為基礎,因為它已在各種計算機視覺任務和各種場景中被證明是有效的,以開發提出的方法。我們使用GELAN來改進架構和訓練過程,并提出的PGI。上述新穎方法使得提出的YOLOv9成為新一代頂級實時目標檢測器。


精讀

  • YOLO系列(YOLOv1—v8)
  • DETR系列

2.2. Reversible Architectures—可逆結構

翻譯

可逆架構的操作單元[3, 16, 19]必須保持可逆轉換的特性,以確保每個操作單元層的輸出特征圖能夠保留完整的原始信息。在此之前,RevCol [3]將傳統的可逆單元泛化至多個層級,從而可以擴展不同層單元所表達的語義層級。通過對各種神經網絡架構的文獻綜述,我們發現有許多具有不同程度可逆屬性的高性能架構。例如,Res2Net模塊[11]以分層方式將不同的輸入分區與下一個分區組合,然后將所有轉換后的分區連接在一起反向傳遞。CBNet [34, 39]通過復合主干重新引入原始輸入數據,以獲得完整的原始信息,并通過各種組合方法獲得不同級別的多級可逆信息。這些網絡架構通常具有出色的參數利用率,但額外的復合層會導致推理速度較慢。DynamicDet [36]將CBNet [34]和高效實時目標檢測器YOLOv7 [63]結合起來,以在速度、參數數量和準確性之間取得很好的平衡。本文將DynamicDet架構引入作為設計可逆分支的基礎。此外,可逆信息還進一步引入到提出的PGI中。提出的新架構在推理過程中不需要額外的連接,因此能充分保留速度、參數數量和準確性的優勢。


精讀

  • RevCol
  • Res2Net
  • CBNet
  • DynamicDet

2.3. Auxiliary Supervision—輔助監督

翻譯

深度監督[28, 54, 68]是最常見的輔助監督方法,通過在中間層插入額外的預測層進行訓練。特別是在基于Transformer的方法中引入多層解碼器的應用最為常見。另一種常見的輔助監督方法是利用相關的元信息指導中間層生成的特征圖,并使其具有目標任務所需的屬性[18, 20, 24, 29, 76]。這種類型的示例包括使用分割損失或深度損失來增強目標檢測器的準確性。最近,文獻中有很多關于使用不同的標簽分配方法生成不同的輔助監督機制以加快模型收斂速度并同時提高魯棒性的報道[53, 67, 82]。然而,輔助監督機制通常僅適用于大型模型,因此當應用于輕量級模型時,很容易導致欠參數化現象,使性能變差。我們提出的PGI設計了一種重新編程多層語義信息的方式,這種設計使得輕量級模型也能從輔助監督機制中受益。


精讀

  • 深度監督

3. Problem Statement—問題描述

翻譯

通常,人們將深度神經網絡收斂問題的困難歸因于諸如梯度消失或梯度飽和等因素,這些現象在傳統深度神經網絡中確實存在。然而,現代深度神經網絡通過設計各種規范化和激活函數已經從根本上解決了上述問題。盡管如此,深度神經網絡仍然存在收斂速度慢或收斂結果差的問題。

在本文中,我們進一步探討上述問題的本質。通過深入分析信息瓶頸,我們推斷出這個問題的根本原因是,最初來自非常深層網絡的初始梯度在傳遞后很快失去了實現目標所需的許多信息。為了證實這一推斷,我們使用具有初始權重的不同架構的前饋深度網絡,然后在圖2中將它們可視化和說明。顯然,PlainNet在深層中已經丟失了進行目標檢測所需的許多重要信息。至于ResNet、CSPNet和GELAN能夠保留的重要信息比例,確實與訓練后可以獲得的準確性相關。我們進一步設計了基于可逆網絡的方法來解決上述問題的根源。在本節中,我們將詳細闡述我們對信息瓶頸原理和可逆函數的分析。


精讀

主要解決問題

深度神經網絡存在收斂速度慢或收斂效果差的問題。

推斷

這個問題的根本原因是原本來自非常深的網絡的初始梯度在傳輸后不久就丟失了大量實現目標所需的信息。

可視化分析

圖2.不同網絡架構隨機初始權值輸出特征圖的可視化結果:(a)輸入圖像,(b) PlainNet, (c) ResNet, (d) CSPNet, (e)提議的GELAN。從圖中可以看出,在不同的體系結構中,提供給目標函數計算損失的信息都有不同程度的丟失,我們的體系結構可以保留最完整的信息,為計算目標函數提供最可靠的梯度信息。

3.1. Information Bottleneck Principle—信息瓶頸原理

翻譯

根據信息瓶頸原理,我們知道數據 X 在經過轉換時可能會引起信息損失,如下所示的方程式?

I(X,X)\geq I(X,f\theta (X))\geq I(X,g\phi (f\theta (X)))\: \: \: \: \: \: \: \: \: \: (1)

其中,I 表示互信息,f 和 g 是轉換函數,θ 和 ? 分別是 f 和 g 的參數。

在深度神經網絡中,fθ(·) 和 g?(·) 分別代表深度神經網絡中兩個連續層的操作。從方程式 1 中,我們可以預測隨著網絡層的增加,原始數據更有可能丟失。然而,深度神經網絡的參數是基于網絡輸出以及給定目標,然后通過計算損失函數生成新的梯度更新網絡。可以想象,深層神經網絡的輸出能力較低,無法完整地保留有關預測目標的信息。這將導致在網絡訓練過程中使用不完整信息,導致不可靠的梯度和收斂困難。

解決上述問題的一種方法是直接增加模型的大小。當我們使用大量參數構建模型時,它更有能力對數據進行更完整的轉換。上述方法即使在數據前饋過程中丟失信息,仍有機會保留足夠信息進行映射到目標。上述現象解釋了為什么在大多數現代模型中,寬度比深度更重要。然而,上述結論并不能根本解決非常深的神經網絡中不可靠梯度的問題。接下來,我們將介紹如何使用可逆函數來解決問題并進行相關分析。


精讀

公式1:數據X在進行變換時可能會造成信息丟失

  • X:輸入數據
  • I:互信息
  • f和g:變換函數
  • θ和φ:f和g的參數
  • fθ(·)和g?(·):表示深度神經網絡中連續兩層的操作

預測結果:隨著網絡層數的加深,原始數據丟失的可能性也會增大。

信息瓶頸原理

網絡在訓練中使用信息(得到的輸入信息)是不完整的,從而導致梯度不可靠,收斂性差。

方法嘗試

直接增加模型的大小。

不足:不能從根本上解決極深神經網絡中梯度不可靠的問題。


3.2. Reversible Functions—可逆函數

翻譯

當一個函數 r 具有反向轉換函數 v 時,我們稱這個函數為可逆函數,如方程式 2 所示:

X=v\zeta (r\psi (X))\, \, \, \: \: \: \: (2)

其中,ψ 和 ζ 分別是 r 和 v 的參數。數據 X 經可逆函數轉換后不會丟失信息,如方程式 3 所示:

I(X,X)=I(X,r\psi (X))=I(X,v\zeta (r\psi (X)))\: \: \: \: \: (3)

當網絡的轉換函數由可逆函數組成時,可以獲得更可靠的梯度來更新模型。幾乎所有當今流行的深度學習方法都符合可逆性質,如方程式 4:

X^{l+1}=X^{l}+f_{\theta }^{l+1}(X_{l})\; \; \; \; \; (4)

其中 l 表示 PreAct ResNet 的第 l 層,f 是第 l 層的變換函數。PreAct ResNet 通過明確的方式將原始數據 X 重復傳遞給后續層。盡管這樣的設計可以使具有超過一千層的深度神經網絡非常好地收斂,但它破壞了我們需要深度神經網絡的一個重要原因。即,對于困難問題,我們難以直接找到簡單的映射函數將數據映射到目標。這也解釋了為什么在層數較少時,PreAct ResNet 的表現不如 ResNet。

此外,我們嘗試使用允許變壓器模型取得重大突破的蒙版建模。我們使用近似方法,如方程式 5,試圖找到函數 r 的反向轉換 v,使得轉換后的特征能夠保留足夠的信息使用稀疏特征。方程式 5 的形式如下:

X=v\varsigma (r\psi (X)\cdot M)\: \: \: \: (5)

其中 M 是一個動態二進制蒙版。常用于執行上述任務的其他方法包括擴散模型和變分自動編碼器,它們都有找到逆函數的功能。然而,當我們將上述方法應用于輕量級模型時,會出現缺陷,因為輕量級模型將對大量原始數據進行下參數化。由于上述原因,將數據 X 映射到目標 Y 的重要信息 I(Y,X) 也會面臨同樣的問題。針對這個問題,我們將探討采用信息瓶頸概念。信息瓶頸的公式如下:

I(X,X)\geq I(Y,X)\geq I(Y,f\theta (x))\geq ...\geq I(Y,\hat{Y})\; \; \; \; (6)

一般來說,I(Y,X) 在 I(X,X) 中僅占很小一部分。但它對于目標任務至關重要。因此,即使在前向傳播階段丟失的信息量不大,只要涵蓋了 I(Y,X),訓練效果將受到極大影響。輕量級模型本身處于下參數化狀態,因此在前向傳播階段很容易丟失大量重要信息。因此,我們對于輕量級模型的目標是如何準確地從 I(X,X) 中過濾出 I(Y,X)。至于完全保留 X 的信息,那是難以實現的。根據以上分析,我們希望提出一種新的深度神經網絡訓練方法,既能生成可靠的梯度更新模型,也適用于淺層和輕量級神經網絡。


精讀

公式2:可逆函數原理

  • r:可逆函數
  • v:逆變換函數
  • ψ和ζ:分別是r和v的參數

公式3:數據X用可逆函數變換,不丟失信息

公式4:一個符合可逆性質的架構的深度學習網絡的栗子

  • PreAct ResNet以顯式的方式將原始數據X反復傳遞給后續層
  • l:PreAct ResNet的第l層
  • f:第l層的變換函數

公式5:試圖找到r的逆變換v,使變換后的特征可以使用稀疏特征保留足夠的信息

  • M:動態二進制掩碼

不足:輕量級模型將被參數化為大量的原始數據。

公式6:信息瓶頸的計算公式

I(Y,X)只占I(X,X)的很小一部分,但對目標任務至關重要。


思路

即使前饋階段丟失的信息量并不顯著,但只要覆蓋了I(Y,X),訓練效果就會受到很大影響。

目標

輕量級模型的目標:如何準確地從I(X,X)中過濾出I(Y,X)。

本文目標

提出一種新的深度神經網絡訓練方法,既能生成可靠的梯度來更新模型,又能適用于淺層和輕量級神經網絡。


?4. Methodology—方法

4.1. Programmable Gradient Information—可編程的梯度信息

翻譯

為了解決前述問題,我們提出了一個名為可編程梯度信息(PGI)的新輔助監督框架,如圖 3(d)所示。PGI 主要包括三個組件,分別是主分支、輔助可逆分支和多級輔助信息。從圖 3(d)中可見,PGI 的推理過程只使用主分支,因此不需要額外的推理成本。至于另外兩個組件,它們用于解決或減緩深度學習方法中的幾個重要問題。其中,輔助可逆分支設計用于處理由神經網絡加深引起的問題。網絡加深將導致信息瓶頸,這將使損失函數無法生成可靠的梯度。至于多級輔助信息,它設計用于處理深度監督造成的錯誤累積問題,特別適用于多個預測分支的架構和輕量級模型。接下來,我們將逐步介紹這兩個組件。


精讀?

可編程梯度信息(Programmable Gradient Information, PGI)

圖3.PGI和相關的網絡體系結構和方法。(a)路徑聚合網絡(PAN) [37], (b)可逆列(RevCol) [3], (c)常規深度監督,(d)我們提出的可編程梯度信息(PGI)。PGI主要由三個部分組成:(1)主分支:用于推理的架構;(2)輔助可逆分支:生成可靠的梯度,為主分支提供反向傳輸;(3)多級輔助信息:控制主分支學習可規劃的多級語義信息。

PGI主要包括三個部分,即:

(1)主分支(用于推理過程)

(2)輔助可逆分支(用于解決神經網絡深度化帶來的問題)

(3)多級輔助信息(用于處理深度監督帶來的誤差積累問題,特別是針對多預測分支的架構和輕量化模型。)


4.1.1 Auxiliary Reversible Branch—輔助可逆分支

翻譯

在 PGI 中,我們提出了輔助可逆分支以生成可靠的梯度并更新網絡參數。通過提供從數據到目標的映射信息,損失函數可以提供指導,并避免在不完整的前饋特征中找到與目標不相關的虛假相關性的可能性。我們通過引入可逆架構來保持完整信息,但是將主分支添加到可逆架構中將消耗大量推理成本。我們分析了圖 3(b)的架構,發現當添加從深層到淺層的附加連接時,推理時間將增加 20%。當我們將輸入數據重復添加到網絡的高分辨率計算層(黃色框)時,推理時間甚至會超過兩倍。

由于我們的目標是使用可逆架構獲取可靠的梯度,“可逆”并非推理階段的唯一必要條件。基于這一點,我們將可逆分支視為深度監督分支的擴展,然后設計輔助可逆分支,如圖 3(d)所示。至于由于信息瓶頸而可能丟失重要信息的主分支深層特征,它們將能夠從輔助可逆分支接收可靠的梯度信息。這些梯度信息將推動參數學習,幫助提取正確和重要的信息,上述操作可以使主分支獲得更有效的適用于目標任務的特征。此外,可逆架構在淺層網絡上的表現不如一般網絡,因為復雜任務需要在更深的網絡中進行轉換。我們提出的方法不會強制主分支保留完整原始信息,而是通過輔助監督機制生成有用的梯度進行更新。這種設計的優勢在于,所提出的方法也適用于較淺的網絡。

最后,由于輔助可逆分支可以在推理階段移除,因此可以保留原始網絡的推理能力。我們還可以在 PGI 中選擇任何可逆架構來擔當輔助可逆分支的角色。


精讀

引入可逆體系結構的不足

在可逆體系結構中增加主干會消耗大量的推理成本,推理時間將增加20%。

可逆結構在淺層網絡上的表現比一般網絡差。

本文做法

將可逆分支作為深度監管分支的擴展,然后設計輔助可逆分支,如圖3 (d)所示。

  • 優點1:?在一些主要分支中可能因信息瓶頸的bug而丟失重要信息,而本文的方法能夠從輔助可逆分支接收驅動參數學習,幫助提取正確的重要信息。
  • 優點2:?不強制主分支保留完整的原始信息,而是通過輔助監督機制生成有用的梯度來更新原始信息。所提的方法也可以應用于較淺的網絡。
  • 優點3:?輔助可逆分支可以在推理階段去除,因此可以保留原始網絡的推理能力。
  • 優點4:?可以在PGI中選擇任意可逆體系結構來充當輔助可逆分支的角色。

4.1.2 Multi-level Auxiliary Information—多級輔助信息?

翻譯

在本節中,我們將討論多層次輔助信息的工作原理。深度監督架構包括多個預測分支,如圖 3(c)所示。對于目標檢測,可以使用不同的特征金字塔執行不同的任務,例如它們可以一起檢測不同大小的物體。因此,在連接到深度監督分支之后,淺層特征將被引導學習用于小物體檢測所需的特征,此時系統將將其他大小物體的位置視為背景。然而,上述做法將導致深層特征金字塔丟失預測目標對象所需的大量信息。針對這個問題,我們認為每個特征金字塔都需要接收有關所有目標對象的信息,以便后續的主分支可以保留完整信息來學習各種目標的預測。

多層次輔助信息的概念是在輔助監督的特征金字塔層級和主分支之間插入一個集成網絡,然后使用它來結合不同預測頭返回的梯度,如圖 3(d)所示。多層次輔助信息是為了匯總包含所有目標對象的梯度信息,并將其傳遞給主分支,然后更新參數。這時,主分支的特征金字塔層次的特征將不會被某些特定對象的信息所主導。因此,我們的方法可以緩解深度監督中的信息丟失問題。此外,任何集成網絡都可以用于多層次輔助信息。因此,我們可以規劃所需的語義級別以指導不同大小的網絡架構的學習。


精讀

深度監督分支工作原理

目標檢測中,可以使用不同的特征金字塔來執行不同的任務,例如它們可以一起檢測不同大小的對象。

不足:

會導致深層特征金字塔丟失大量預測目標物體所需的信息

多級輔助信息的概念

  • 在輔助監督的特征金字塔層次和主分支之間插入一個集成網絡,然后利用它來組合不同預測頭返回的梯度。
  • 多級輔助信息將包含所有目標對象的梯度信息聚合,傳遞給主分支,再更新參數。

優點:

  • 該方法可以緩解深度監督中的信息破碎問題。
  • 任何集成網絡都可以使用多層次的輔助信息。

4.2. Generalized ELAN—廣義ELAN

翻譯

在這一部分中,我們描述了提出的新網絡架構 - GELAN。通過結合兩種神經網絡架構,即帶有梯度路徑規劃的 CSPNet 和 ELAN,我們設計了考慮輕量化、推理速度和準確性的廣義高效層聚合網絡(GELAN)。其整體架構如圖 4 所示。我們將 ELAN 的能力進行了泛化,原本只使用卷積層堆疊的 ELAN,可以使用任何計算塊的新架構。


精讀

圖 4. GELAN 的架構: (a) CSPNet [64], (b) ELAN [65], 和 (c) 提出的 GELAN。我們模仿了 CSPNet 并將 ELAN 擴展為支持任何計算塊的 GELAN。

作者把 CSPNet、 ELAN 這兩種神經網絡架構結合起來,從而設計出兼顧輕量級、推理速度和準確性的通用高效層聚合網絡(generalized efficient layer aggregation network ,GELAN)。

將最初僅使用卷積層堆疊的 ELAN 的功能泛化到可以使用任何計算塊的新架構。


5. Experiments—實驗

5.1. Experimental Setup—實驗設置

翻譯

我們使用 MS COCO 數據集驗證了提出的方法。所有實驗設置都遺傳自 YOLOv7 AF [63],數據集為 MS COCO 2017。所有提到的模型都是使用從頭開始訓練的策略進行訓練,總訓練次數為 500 個 epochs。在設置學習率時,我們在前三個 epochs 中使用線性預熱,隨后的 epochs 根據模型規模設置相應的衰減方式。至于最后的 15 個 epochs,我們關閉了馬賽克數據增強。更多設置,請參考附錄。


精讀

  • 數據集:?MS COCO 2017拆分
  • 實驗設置:?遵循YOLOv7 AF
  • 訓練次數:?500
  • 學習率:?前3個epoch采用線性預熱,之后的epoch根據模型尺度設置相應的衰減方式。對于最后15個epoch,我們關閉馬賽克數據增強。

5.2. Implimentation Details—實現細節

翻譯

我們基于 YOLOv7 [63] 和 Dynamic YOLOv7 [36] 分別構建了 YOLOv9 的一般和擴展版本。在網絡架構設計中,我們使用帶有 CSPNet 塊的 GELAN 替換了 ELAN [65],并將計劃的 RepConv [63] 作為計算塊。我們還簡化了下采樣模塊,并優化了無錨點預測頭部。至于 PGI 的輔助損失部分,我們完全遵循了 YOLOv7 的輔助頭部設置。更多細節,請參考附錄。


精讀

基礎構件:?分別基于YOLOv7和Dynamic YOLOv7構建了通用版和擴展版yolov9。

網絡架構設計:?使用CSPNet塊和計劃的RepConv作為計算塊,將ELAN替換為GELAN。


5.3. Comparison with state-of-the-arts—與最先進水平的比較

翻譯

表格1列出了我們提出的 YOLOv9 與其他從頭開始訓練的實時物體檢測器的比較。總體而言,在現有方法中表現最好的方法分別是輕量級模型 YOLO MS-S [7],中等模型 YOLO MS [7],通用模型 YOLOv7 AF [63],和大模型 YOLOv8-X [15]。與輕量級和中等模型 YOLO MS [7]相比,YOLOv9 的參數少約10%,計算量少5~15%,但在 AP 上仍有0.4~0.6%的提升。與 YOLOv7 AF 相比,YOLOv9-C 的參數少42%,計算量少21%,但達到相同的 AP (53%)。與 YOLOv8-X 相比,YOLOv9-X 的參數少15%,計算量少25%,在 AP 上有明顯的1.7%改進。上述比較結果表明,與現有方法相比,我們提出的 YOLOv9 在各個方面都有明顯的改進。

另外,我們還將 ImageNet 預訓練模型包括在比較中,結果顯示在圖5中。我們分別基于參數和計算量進行比較。在參數數量方面,表現最佳的大模型是 RT DETR [43]。從圖5中可以看出,使用傳統卷積的 YOLOv9 在參數利用率上甚至比使用深度卷積的 YOLO MS 更好。對于大型模型的參數利用率,它也遠遠超過了使用 ImageNet 預訓練模型的 RT DETR。更好的是,在深度模型中,YOLOv9 顯示出使用PGI的巨大優勢。通過精確保留和提取將數據映射到目標所需的信息,我們的方法只需要64%的參數來保持與RT DETR-X相同的準確性。

在計算量方面,從最小到最大的最佳現有模型分別為 YOLO MS [7]、 PP YOLOE [74] 和 RT DETR [43]。從圖5中可以看出,YOLOv9 在計算復雜性方面遠遠優于從頭開始訓練的方法。此外,如果與基于深度卷積和基于 ImageNet 預訓練模型的方法進行比較,YOLOv9 也具有很強的競爭力。


精讀

表1:最先進的實時目標探測器的比較

  • 與輕量化和中型型號YOLO MS相比:參數減少約10%,計算量減少5 ~ 15%,但AP仍提高0.4 ~ 0.6%。
  • 與YOLOv7 AF相比:YOLOv9- c參數減少42%,計算量減少21%,但AP達到相同(53%)。
  • 與YOLOv8- x相比:YOLOv9- x參數減少15%,計算量減少25%,AP顯著提高1.7%。

圖5:加入了ImageNet預訓練模型進行比較

圖5.最先進的實時目標探測器的比較。參與比較的方法均使用ImageNet作為預訓練權值,包括RT DETR[43]、RTMDet[44]、PP-YOLOE[74]等。使用從頭開始訓練方法的YOLOv9的性能明顯優于其他方法。
  • 參數利用率方面:使用常規卷積的YOLOv9甚至比使用深度卷積的yoloms更好。
  • 在大型模型的參數利用率方面:大大超過了使用ImageNet預訓練模型的RT - DETR。

5.4. Ablation Studies—消融實驗

5.4.1 Generalized ELAN—廣義ELAN(實驗)

翻譯

對于 GELAN,我們首先對計算塊進行了消融研究。我們分別使用了 Res 塊 [21]、Dark 塊 [49] 和 CSP 塊 [64] 進行實驗。如表2所示,在用不同的計算塊替換 ELAN 中的卷積層后,系統仍能保持良好性能。用戶確實可以隨意替換計算塊,并在各自的推斷設備上使用它們。在不同的計算塊替換中,CSP 塊表現特別出色。它們不僅減少了參數的數量和計算量,還提高了 AP 0.7%。因此,我們選擇將 CSP-ELAN 作為 YOLOv9 中 GELAN 的組件單元。

接下來,我們對不同大小的 GELAN 進行 ELAN 塊深度和 CSP 塊深度實驗,并在表3中展示結果。我們可以看到,當將 ELAN 的深度從 1 增加到 2 時,準確性顯著提高。但當深度大于或等于 2 時,無論是增加 ELAN 的深度還是增加 CSP 的深度,參數數量、計算量和準確性始終呈現線性關系。這意味著 GELAN 對深度不敏感。換句話說,用戶可以任意組合 GELAN 中的組件來設計網絡架構,而無需特殊設計即可獲得穩定性能的模型。在表3中,對于 YOLOv9-{S,M,C},我們設置 ELAN 深度和 CSP 深度的配對為{{2, 3}, {2, 1}, {2, 1}}。


精讀?

表2:不同計算塊的消融研究

在不同的計算塊替換中,CSP塊執行得特別好。它們不僅減少了參數和計算量,而且使AP提高了0.7%。

表3:ELAN和CSP深度的消融研究

GELAN對深度不敏感。換句話說,用戶可以任意組合GELAN中的組件來設計網絡架構,無需特別設計就能得到性能穩定的模型。


5.4.2 Programmable Gradient Information—可編程梯度信息(實驗)

翻譯

關于 PGI,我們對主干和頸部進行了輔助可逆分支和多層次輔助信息的消融研究。我們設計了輔助可逆分支 ICN,使用 DHLC [34] 連接獲得多級可逆信息。至于多層次輔助信息,我們使用 FPN 和 PAN 進行消融研究,而 PFH 的作用相當于傳統的深層監督。所有實驗結果列在表4中。從表4中可以看出,PFH 只在深度模型中有效,而我們提出的 PGI 可以在不同組合下提高準確性。特別是在使用 ICN 時,我們獲得了穩定且更好的結果。我們還嘗試將 YOLOv7 [63] 中提出的前導頭引導分配方法應用于 PGI 的輔助監督,結果表現更加優秀。

我們進一步將 PGI 和深層監督的概念應用于不同大小的模型,并比較了結果,這些結果顯示在表5中。正如在開始時分析的那樣,引入深層監督會導致淺層模型的精度損失。對于一般模型,引入深層監督會導致性能不穩定,并且深層監督的設計概念只能在極深模型中帶來增益。提出的 PGI 可以有效處理信息瓶頸和信息中斷等問題,并全面提高不同大小模型的準確性。PGI 的概念帶來了兩個有價值的貢獻。第一個貢獻是使輔助監督方法適用于淺層模型,而第二個貢獻是使深度模型訓練過程獲得更可靠的梯度。這些梯度使深度模型能夠使用更準確的信息建立數據和目標之間的正確關系。

最后,我們在表格中展示了從基準 YOLOv7 逐漸增加組件到 YOLOv9-E 的結果。我們提出的 GELAN 和 PGI 給模型帶來了全面的改進。


精讀

表4:主干及頸部PGI的消融研究

PFH僅在深度模型中有效,而我們提出的PGI在不同組合下都可以提高精度。

表5:PGI的消融研究

所提出的PGI能夠有效處理信息瓶頸、信息破碎等問題,全面提高不同尺寸模型的精度。


5.5. Visualization—可視化

翻譯

這一部分將探討信息瓶頸問題并對其進行可視化。此外,我們還將展示提出的 PGI 如何利用可靠的梯度來找到數據和目標之間的正確關系。在圖 6 中,我們展示了在不同架構下使用隨機初始權重作為前向傳播獲取到的特征圖的可視化結果。我們可以看到隨著層數的增加,所有架構的原始信息逐漸減少。例如,在 PlainNet 的第 50 層,很難看出物體的位置,在第 100 層所有可分辨的特征都會丟失。至于 ResNet,雖然在第 50 層仍然能看到物體的位置,但邊界信息已經丟失。當深度達到第 100 層時,整個圖像變得模糊。無論是 CSPNet 還是提出的 GELAN 都表現出色,它們都能保持特征以支持對物體的清晰識別,直到第 200 層。在比較中,GELAN 的結果更穩定,邊界信息更清晰。 圖 7 用于展示 PGI 是否能在訓練過程中提供更可靠的梯度,以便用于更新的參數能夠有效捕獲輸入數據和目標之間的關系。

圖 7 顯示了在 PAN 偏置預熱中,GELAN 和 YOLOv9(GELAN + PGI)的特征圖的可視化結果。通過比較圖 7(b) 和 (c),我們可以清楚地看到 PGI 準確簡潔地捕捉到包含物體的區域。至于不使用 PGI 的 GELAN,我們發現在檢測對象邊界時存在發散,并且在某些背景區域還產生了意料之外的響應。這個實驗證實了 PGI 確實能夠提供更好的梯度來更新參數,并使主分支的前向傳播階段保留更多重要特征。


精讀

圖6:在不同架構下使用隨機初始權重作為前饋得到的特征圖的可視化結果

圖6.PlainNet、ResNet、CSPNet、GELAN在不同深度隨機初始權值輸出的特征圖(可視化結果)。在100層之后,ResNet開始產生前饋輸出,足以混淆對象信息。我們提出的GELAN到150層仍然可以保留相當完整的信息,到200層仍然具有足夠的判別能力。

隨著層數的增加,所有架構的原始信息逐漸減少。在比較中,GELAN的結果更穩定,邊界信息更清晰。

圖7:PGI在訓練過程中是否能夠提供更可靠的梯度

圖7.偏置預熱一歷元后,GELAN和YOLOv9 (GELAN + PGI)的PAN特征圖(可視化結果)。GELAN原本有一些分歧,但在加入PGI的可逆分支后,它更能聚焦于目標物體。

本實驗證實了PGI確實可以提供更好的梯度來更新參數,使主分支的前饋階段保留更重要的特征。


6. Conclusions—結論

翻譯

在這篇論文中,我們提出使用 PGI 來解決信息瓶頸問題以及深度監督機制不適用于輕量級神經網絡的問題。我們設計了 GELAN,一個高效且輕量級的神經網絡。在目標檢測方面,GELAN 在不同的計算塊和深度設置下表現出強大且穩定的性能。它確實可以被廣泛擴展為適用于各種推斷設備的模型。針對以上兩個問題,引入 PGI 使得輕量級模型和深度模型在準確性上都取得了顯著改進。通過將 PGI 和 GELAN 結合設計的 YOLOv9 在 MS COCO 數據集上表現出強大的競爭力。它的優秀設計使得與 YOLOv8 相比,深度模型的參數數量減少了 49%,計算量減少了 43%,但在 MS COCO 數據集上仍然有 0.6% 的平均準確率提升。


精讀

本文設計了一種高效、輕量級的神經網絡GELAN。在目標檢測方面,在不同的計算塊和深度設置下,GELAN具有強大而穩定的性能。

它確實可以廣泛地擴展成適用于各種推理裝置的模型。由PGI和GELAN聯合設計的YOLOv9表現出了很強的競爭力。

與YOLOv8相比,其出色的設計使深度模型的參數數量減少了49%,計算量減少了43%,但在MS COCO數據集上仍有0.6%的AP改進。?


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

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

相關文章

【大數據】Flink SQL 語法篇(六):Temporal Join

《Flink SQL 語法篇》系列,共包含以下 10 篇文章: Flink SQL 語法篇(一):CREATEFlink SQL 語法篇(二):WITH、SELECT & WHERE、SELECT DISTINCTFlink SQL 語法篇(三&…

機器視覺——硬件選型

1、相機選型 在選擇機器視覺相機時,通常需要考慮以下幾個方面: 1、分辨率:相機的分辨率決定了其拍攝圖像的清晰度和細節程度。根據具體的應用需求,可以選擇適當的分辨率范圍。 2、幀率:幀率表示相機每秒鐘能夠拍攝的…

2023年營養保健品線上電商市場行業分析(2024年營養保健行業未來趨勢分析)

近年來,受人口老齡化、養生年輕化等因素驅動,保健品行業增長強勁,加之越來越多的年輕人也加入養生大軍,成為保健品市場上的一股新力量,進一步帶動市場擴容。 鯨參謀數據顯示,2023年度,京東平臺…

[pdf]《軟件方法》2024版部分公開-共196頁

DDD領域驅動設計批評文集 做強化自測題獲得“軟件方法建模師”稱號 《軟件方法》各章合集 潘加宇《軟件方法》2024版部分公開pdf文件,共196頁,已上傳CSDN資源。 也可到以下地址下載: http://www.umlchina.com/url/softmeth2024.html 如果…

Ubuntu20.04 ssh終端登錄后未自動執行.bashrc

sudo vim ~/.profile輸入以下內容 if [ -n "$BASH_VERSION" ]; then if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi 執行 source ~/.profile重新測試 其他答案 如果你的~/.bashrc文件在Ubuntu中沒有自動生效,…

3. 文檔概述(Documentation Overview)

3. 文檔概述(Documentation Overview) 本章節簡要介紹一下Spring Boot參考文檔。它包含本文檔其它部分的鏈接。 本文檔的最新版本可在 docs.spring.io/spring-boot/docs/current/reference/ 上獲取。 3.1 第一步(First Steps) …

解析電源模塊測試條件與測試步驟 快速完成測試

高溫高濕儲存測試是電源模塊環境適應性測試內容之一,在實際使用過程中由于應用場景不同電源所處的環境也是多樣的,因此需要測試電源對各種環境的適應能力,提高電源的性能和可靠性。 電源高溫高濕存儲測試的目的是為了測量環境對電源結構、元件…

C語言第三十三彈---動態內存管理(上)

?個人主頁: 熬夜學編程的小林 💗系列專欄: 【C語言詳解】 【數據結構詳解】 動態內存管理 1、為什么要有動態內存分配 2、malloc和free 2.1、malloc 2.2、free 3、calloc和realloc 3.1、calloc 3.2、realloc 4、常見的動態內存的錯…

氣象數據收集

1、國家氣象科學數據中心 預報數據:需要定制,收費10萬+ 觀測數據:國家氣象信息中心-中國氣象數據網 (cma.cn)https://data.cma.cn/data/cdcdetail/dataCode/A.0012.0001.html 地面基本氣象觀測數據 滯后2天 滯后一天 路面數據同化系統,實時 國家氣象信息中心-中國氣象數…

11.以太網交換機工作原理

目錄 一、以太網協議二、以太網交換機原理三、交換機常見問題思考四、同網段數據通信全過程五、跨網段數據通信全過程六、關鍵知識七、調試命令 前言:在網絡中傳輸數據時需要遵循一些標準,以太網協議定義了數據幀在以太網上的傳輸標準,了解以…

android移動應用開發基礎答案,安卓工程師面試題

一線企業的app都是多線程和多進程的,而Android進程間通信機制就是Binder,原生的線程間通信則是Handler,Binder和Handler是了解安卓運行機制必須要掌握的一個知識點,更是一線企業面試必問的知識點! 以下幾道就是大廠關于…

【QT+QGIS跨平臺編譯】之五十五:【QGIS_CORE跨平臺編譯】—【qgsmeshcalcparser.cpp生成】

文章目錄 一、Bison二、生成來源三、構建過程一、Bison GNU Bison 是一個通用的解析器生成器,它可以將注釋的無上下文語法轉換為使用 LALR (1) 解析表的確定性 LR 或廣義 LR (GLR) 解析器。Bison 還可以生成 IELR (1) 或規范 LR (1) 解析表。一旦您熟練使用 Bison,您可以使用…

Unity中URP實現水體(整理優化)

文章目錄 前言一、優化水的深度1、我們把 水流動的方向 和 水深淺過渡值,整合到一個四維變量中2、修改 水體流動方向3、在片元著色器中,修改使用過渡變量 二、優化泡沫三、優化水下的扭曲1、修復原本擾動UV的計算 四、優化水面高光1、把高光強度、光滑度…

紅隊基礎設施建設

文章目錄 一、ATT&CK二、T1583 獲取基礎架構2.1 匿名網絡2.2 專用設備2.3 滲透測試虛擬機 三、T1588.002 C23.1 開源/商用 C23.1.1 C2 調研SliverSliver 對比 CS 3.1.2 CS Beacon流量分析流量規避免殺上線 3.1.3 C2 魔改3.1.4 C2 隱匿3.1.5 C2 準入應用場景安裝配置說明工具…

UC++對象方法IsValid()、IsValidLowLevel()、IsValidLowLevelFast()的區別

在 Unreal Engine 中,IsValid(), IsValidLowLevel(), 和 IsValidLowLevelFast() 是用于檢查 UObject(Unreal Object)有效性的三個不同的方法。它們之間的區別主要在于檢查的級別和效率。 IsValid(): 檢查級別: IsVal…

深度學習 精選筆記(2)自動求導與概率

學習參考: 動手學深度學習2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、請聯系侵刪。 ②已寫完的筆記文章會不定時一直修訂修改(刪、改、增),以達到集多方教程的精華于一文的目的。 ③非常推薦上面(學習參考&#x…

Linux系統——LAMP架構

目錄 一、LAMP架構組成 1.LAMP定義 2.各組件的主要作用 3.CGI和FastCGI 3.1CGI 3.3CGI和FastCGI比較 4.PHP 4.1PHP簡介 4.2PHP的Opcode語言 4.3PHP設置 二、LAMP架構實現 1.編譯安裝Apache httpd服務 2.編譯安裝Mysql 3.編譯安裝PHP 4.安裝論壇 5.搭建博客 W…

Linux編程 2.4 文件和目錄-Linux文件系統結構

1、文件操作基本元素 文件操作相關的最基本元素是:目錄結構、索引節點和文件的數據本身。 目錄結構(目錄項)索引節點(i節點)文件的數據 2、文件系統的三個區域 屬性: 超級塊:存放文件系統本身…

vs code快捷鍵

ShiftCtrlO vs code 提供很強大的功能,就是可以快速查文件中的符號列表和函數列表,我們首先打開一個源碼文件,比tcp.c,然后我們通過快捷鍵“ShiftCtrlO”即可打開對應源碼文件的符號列表和函數列表,通過查看這些列表&a…

【學習心得】Python調用JS的三種常用方法

在做JS逆向的時候,一種情況是直接用Python代碼復現JS代碼的功能,達成目的。但很多時候這種方法有明顯的缺點,那就是一旦JS代碼邏輯發生了更改,你就得重寫Python的代碼邏輯非常不便。于是第二種情況就出現了,我直接得到…