YoloV9改進策略:Block改進|輕量實時的重參數結構|最新改進|即插即用(全網首發)

摘要

本文使用重參數的Block替換YoloV9中的RepNBottleneck,GFLOPs從239降到了227;同時,map50從0.989漲到了0.99(重參數后的結果)。

改進方法簡單,只做簡單的替換就行,即插即用,非常推薦!

在這里插入圖片描述

論文翻譯:《用于實時語義分割的可重參數化雙分辨率網絡》

https://arxiv.org/pdf/2406.12496

語義分割在自動駕駛和醫學圖像等應用中發揮著關鍵作用。盡管現有的實時語義分割模型在準確性和速度之間取得了令人稱贊的平衡,但其多路徑塊仍然影響著整體速度。為了解決這個問題,本研究提出了一種專門用于實時語義分割的重參數化雙分辨率網絡(RDRNet)。具體來說,RDRNet采用了一種雙分支架構,在訓練過程中使用多路徑塊,并在推理過程中將它們重參數化為單路徑塊,從而同時提高了準確性和推理速度。此外,我們還提出了重參數化金字塔池化模塊(RPPM),以增強金字塔池化模塊的特征表示能力,同時不增加其推理時間。在Cityscapes、CamVid和Pascal VOC 2012數據集上的實驗結果表明,RDRNet在性能和速度方面都優于現有的最先進模型。研究代碼可在https://github.com/gyyang23/RDRNet獲取。

關鍵詞:實時語義分割,多分支,雙分辨率深度網絡,重參數化,金字塔池化模塊。

一、引言

語義分割是計算機視覺領域中的一項關鍵任務,它要求將圖像中的每個像素分配到一個特定的語義類別中。這項技術在包括自動駕駛[1]、醫學圖像分析[2]和環境監測[3]在內的各種應用中發揮著重要作用。隨著深度學習技術的發展,語義分割模型的性能得到了大幅提升。然而,仍然存在一些需要解決的問題,例如模型無法快速分析圖像。這一限制阻礙了模型在自動駕駛等下游任務中的直接部署。因此,對語義分割算法進行進一步的研究和改進仍然具有重要意義。

在過去,為了滿足實時性或移動性要求,已經提出了許多實時語義分割模型[4]-[8]。這些模型的特點在于參數較少、計算量降低以及推理速度快。最早的模型之一ERFNet[4]通過使用一維卷積核和跳躍連接重新設計ResNet[9]塊,實現了參數和計算量的減少。然而,ERFNet的編碼器-解碼器架構限制了其從高分辨率特征中有效學習空間信息的能力。為了應對這一限制,BiSeNetV1[5]引入了一種雙分支架構,其中一個分支專注于空間細節學習,另一個分支則專注于深度語義信息。雖然BiSeNetV1&V2[5]、[6]在速度和準確性之間取得了良好的平衡,但DDRNet[7]和PIDNet[8]的出現進一步提高了模型的速度和準確性,其中PIDNet甚至在準確性上匹配或超過了高性能分割模型。

雖然這些模型[7]、[8]在速度和準確性方面取得了成功,但網絡架構中使用殘差塊[9]無疑會阻礙推理速度。雖然殘差塊解決了深度神經網絡中梯度消失和爆炸的問題,但其殘差連接增加了計算成本和內存使用量,最終影響了推理速度。相比之下,由于單向性,單路徑塊[10]更適合實時分割。多路徑塊在訓練方面表現出色,但不適合推理,而單路徑塊則表現出相反的特性。因此,受上述內容的影響,我們旨在使用多路徑塊進行訓練,并使用單路徑塊進行推理。雖然這種方法在實時語義分割領域很少被探索,但在分類任務中,某些研究[11]-[13]在模型訓練期間加入了多路徑塊,隨后在推理期間將它們重新參數化為單路徑塊。

在本研究中,我們受到先前研究[13]、[14]的啟發,提出了一種基于雙分支架構的可重參數化雙分辨率網絡(RDRNet),用于實時語義分割任務。在提取淺層特征后,RDRNet將這些特征引導到兩個不同的分支中。一個分支專注于學習深度語義信息(語義分支),而另一個分支則深入獲取空間細節信息(細節分支)。值得注意的是,RDRNet不僅僅是在兩個分支的末尾進行輸出融合,而是促進了分支之間的多次交互,以實現更有效的信息融合。我們重新設計了ResNet塊,通過消除冗余的內核,僅保留一個單一的 3 × 3 3 \times 3 3×3內核,并引入了一條帶有兩個 1 × 1 1 \times 1 1×1內核的新路徑。重要的是,殘差路徑保持不變。在整個訓練階段,RDRNet塊都遵循此配置。然而,在推理過程中,它經歷了重參數化,將三條路徑合并成一條帶有 3 × 3 3 \times 3 3×3卷積核的單路徑。此外,認識到PAPPM[8]與DAPPM[7]相比性能快速但相對較弱,我們提出了一種新的金字塔池化模塊:可重參數化金字塔池化模塊(RPPM)。RPPM通過在PAPPM旁邊并行添加一個 3 × 3 3 \times 3 3×3分組卷積來學習更多的特征表示。在推理時,這個卷積與另一個分組卷積合并,生成一個新的 3 × 3 3 \times 3 3×3分組卷積,從而確保RPPM不會引入額外的計算負擔。值得注意的是,RPPM在性能上與DAPPM相似,同時匹配了PAPPM的速度。
在這里插入圖片描述

為了評估我們模型的性能和實時能力,我們在三個數據集上進行了實驗:Cityscapes[15]、CamVid[16]和Pascal VOC 2012[17]。實驗結果表明,RDRNet在分割精度和推理速度之間達到了最佳平衡,如圖1所示。與其他最先進的實時語義分割模型相比,我們的模型表現出更優越的性能和更快的速度。此外,我們還進行了消融實驗,以證明所提出的RPPM的有效性。

主要貢獻總結如下:

  • 通過利用多路徑塊在訓練中的優勢來提升模型性能,并在推理過程中將多路徑塊重參數化為單路徑塊以提升推理速度,我們提出了一種新穎的模型,稱為可重參數化雙分辨率網絡(RDRNet),用于實時語義分割。
  • 為了使金字塔池化模塊能夠學習更豐富的特征表示而不增加推理時間,我們引入了可重參數化金字塔池化模塊(RPPM)。
  • 在三個公共數據集上的實驗表明,與其他最先進的實時語義分割模型相比,所提出的模型在性能和推理速度上都表現出更優越的性能。

II、相關工作

語義分割旨在將圖像中的每個像素分配給其對應的語義類別。此外,語義分割可以進一步分為高性能語義分割和實時語義分割。

A. 高性能語義分割

高性能語義分割指的是在保證分割質量和準確性的前提下對圖像進行語義分割。作為最早的深度學習分割模型,FCN(全卷積網絡)[18]通過將傳統CNN(卷積神經網絡)模型中的全連接層替換為卷積層,實現了端到端的像素級語義分割。然而,FCN中過度使用下采樣操作導致特征圖中空間細節的丟失。為了解決這個問題并在不犧牲空間分辨率的情況下擴大感受野,DeepLab系列[19]、[20]將具有不同擴張率的空洞卷積[21]集成到網絡中,這偏離了傳統的卷積方式。此外,為了從多尺度特征中聚合上下文信息并增強網絡捕獲全局信息的能力,PSPNet(金字塔場景解析網絡)[22]引入了金字塔池化模塊。與通過多尺度特征融合來捕獲上下文的方法不同,DANet(雙注意力網絡)[23]在網絡內部采用雙注意力機制,以自適應地合并局部特征及其全局依賴。近年來,Transformer取得了顯著的發展,催生了幾種基于Transformer結構的分割模型[24]-[26]。這些模型利用Transformer的自注意力機制有效地捕獲長距離依賴,從而在語義分割任務中實現了性能上的顯著提升。

B. 實時語義分割

實時語義分割指的是在確保分割速度的前提下對圖像進行語義分割。這種方法通常會采用輕量級網絡架構,或者通過模型壓縮和加速等技術來提高分割速度。根據實時語義分割模型的架構,模型可以進一步分為兩大類:編碼器-解碼器架構和多分支架構。

編碼器-解碼器架構:ERFNet [4] 引入了一種新型塊,該塊利用非對稱卷積核(ID convolution kernel)和跳躍連接(skip connection)來減少參數和計算量。類似地,CGNet [27] 提出了上下文引導塊(Context Guided block),該塊在同時學習局部特征和周圍上下文特征的同時,還利用全局上下文信息對它們進行進一步改進。為了提高推理速度和減少參數,CGNet在上下文引導塊中使用了逐通道卷積(channel-wise convolutions),并精心設計了整個網絡。STDC [28] 認識到在BiSeNet [5] 中添加額外分支以補償空間信息不足的做法是耗時的。為了解決這個問題,STDC 提出了一種細節聚合模塊(Detail Aggregation Module),該模塊以單分支的方式保留了低級特征的空間信息。此外,PPLiteSeg [29] 優化了解碼器部分,并引入了一個靈活且輕量級的解碼器來減少計算開銷。

多分支架構:編碼器-解碼器架構模型通常使用跳躍連接(skip connections)來連接編碼器和解碼器之間的特征圖,從而利用空間細節。相比之下,多分支架構模型在網絡中加入了額外的分支,使空間細節的學習成為可能。ICNet [30] 集成了由適當標簽指導的多分辨率分支。BiSeNetV1和V2 [5], [6] 引入了一個雙分支架構,其中一個分支專門用于學習深層的語義信息,另一個分支則專注于學習空間信息。值得注意的是,這兩個分支不共享權重。相比之下,[7], [8], [31] 等方法則共享了一些主干網絡的低層權重。Fast-SCNN [31] 在提取了一定的淺層特征后,將特征分成兩個分支:一個分支保留特征,另一個分支提取全局特征。DDRNet [7] 在兩個分支之間進行了多次雙邊融合,以高效地合并信息,同時引入了深度聚合金字塔池化模塊(DAPPM),該模塊按順序合并提取的多尺度上下文信息。PIDNet [8] 提出了一個三分支架構,利用三個分支分別解析詳細信息、深層語義信息和邊界信息。此外,PIDNet 還引入了并行聚合金字塔池化模塊(PAPPM),它是DAPPM的改進版本,旨在實現并行計算。

盡管基于編碼器-解碼器架構的模型旨在加強其學習空間細節的能力,但與多分支架構模型相比,仍存在差距。這種差距體現在準確性與速度之間的權衡上。因此,我們基于雙分支架構實現了RDRNet。現有的實時語義分割模型,無論是基于編碼器-解碼器還是多分支架構,都受到多路徑塊使用的阻礙,這限制了模型的推理速度。與這些模型不同,我們的RDRNet在訓練過程中采用多路徑塊以確保其學習能力。然而,在推理過程中,RDRNet將多路徑塊重新參數化為單路徑塊,以在不犧牲準確性的情況下提高其速度。

III、方法

在本節中,我們首先介紹所提出的可重新參數化雙分辨率網絡(RDRNet)的總體框架,然后詳細解釋可重新參數化塊(Reparameterizable Block)和可重新參數化金字塔池化模塊(Reparameterizable Pyramid Pooling Module)。最后,我們詳細闡述了模型訓練階段所使用的損失函數。

A. 可重新參數化雙分辨率網絡

如圖2所示,RDRNet在提取淺層特征后,將特征圖分流到兩個分支。上分支稱為語義分支,設計用于學習深層語義信息。相比之下,下分支稱為細節分支,負責捕獲空間細節信息。在階段4的多個塊中進行特征提取后,兩個分支的特征進行雙邊融合,使兩個分支能夠相互補充。階段5也執行類似的操作。在階段6之后,語義分支的特征被送入金字塔池化模塊以生成更豐富的特征表示,而細節分支的特征保持不變。最終,兩個分支的特征相加并傳遞給分割頭進行預測。在訓練階段,一個輔助分割頭提供了一個額外的損失函數,有助于模型全面學習數據特征。值得注意的是,由于輔助分割頭在推理階段不被使用,因此它不會影響模型的推理速度和效率。
在這里插入圖片描述

在以往的研究中,如DDRNet[7]和PIDNet[8]等作品采用了ResNet[9]殘差塊作為其模型的基本塊。為了消除殘差塊導致的較慢推理速度,我們使用提出的可重新參數化塊作為RDRNet的基本塊。在圖2中,可以看到可重新參數化塊占據了整個模型的主要部分(階段1到5),這是我們RDRNet推理速度提升的主要因素。在進行雙邊融合時,RDRNet將使用 1 × 1 1 \times 1 1×1卷積來壓縮語義分支的特征,使用雙線性插值進行上采樣,然后將其加到細節分支的特征上。細節分支的特征則通過步長為2的 3 × 3 3 \times 3 3×3卷積(或兩個)進行擴展和下采樣,然后加到語義分支的特征上。圖3展示了階段4之后的雙邊融合過程。假設 R S R_{S} RS? R D R_{D} RD?分別對應語義分支和細節分支的一系列可重新參數化塊, T S → D T_{S \rightarrow D} TSD? T D → S T_{D \rightarrow S} TDS?分別表示語義到細節的特征對齊操作和細節到語義的特征對齊操作。雙邊融合后,語義分支的第 i i i個特征,記為 X S i X_{S}^{i} XSi?,和細節分支的第 i i i個特征,記為 X D i X_{D}^{i} XDi?,可以表述如下:

{ X S i = ReLU ? ( R S ( X S i ? 1 ) + T D → S ( R D ( X D i ? 1 ) ) ) X D i = ReLU ? ( R D ( X D i ? 1 ) + T S → D ( R S ( X S i ? 1 ) ) ) \left\{\begin{array}{l} X_{S}^{i}=\operatorname{ReLU}\left(R_{S}\left(X_{S}^{i-1}\right)+T_{D \rightarrow S}\left(R_{D}\left(X_{D}^{i-1}\right)\right)\right) \\ X_{D}^{i}=\operatorname{ReLU}\left(R_{D}\left(X_{D}^{i-1}\right)+T_{S \rightarrow D}\left(R_{S}\left(X_{S}^{i-1}\right)\right)\right) \end{array}\right. {XSi?=ReLU(RS?(XSi?1?)+TDS?(RD?(XDi?1?)))XDi?=ReLU(RD?(XDi?1?)+TSD?(RS?(XSi?1?)))?

我們RDRNet的分割頭與DDRNet類似,包含一個 3 × 3 3 \times 3 3×3卷積后跟一個 1 × 1 1 \times 1 1×1卷積。 3 × 3 3 \times 3 3×3卷積用于學習在合并語義特征和細節特征后的特征,同時也調整通道維度( O c O_{c} Oc?)。 1 × 1 1 \times 1 1×1卷積用于將特征通道數與類別數對齊;例如,如果類別數為19,則 1 × 1 1 \times 1 1×1卷積將特征從通道 O c O_{c} Oc?調整到19。
在這里插入圖片描述

我們對RDRNet的深度和寬度進行了縮放,并構建了RDRNet的四個不同版本,即RDRNetS-Simple、RDRNet-S、RDRNet-M和RDRNet-L。在表I中,我們展示了RDRNet-S和RDRNet-L的詳細架構。RDRNetS-Simple和RDRNet-S具有相同的深度和寬度,但在分割頭中的 O c O_{c} Oc?不同,而RDRNet-M的寬度是RDRNet-S的兩倍。我們將這四個模型的 O c O_{c} Oc?分別設置為64、128、128和256。
在這里插入圖片描述

B. 可重新參數化塊

如圖4所示,可重新參數化塊(RB)在訓練期間有三條路徑:第一條路徑應用一個 3 × 3 3 \times 3 3×3卷積,第二條路徑應用兩個 1 × 1 1 \times 1 1×1卷積,第三條路徑是殘差連接。在進行下采樣操作時,會移除殘差連接。這是因為殘差連接用于保持輸入特征圖,而下采樣操作會將特征圖的空間分辨率減半,使得殘差路徑不再適用。在推理時,RDRNet將RB重新參數化為一個 3 × 3 3 \times 3 3×3卷積,而不會損失精度。與ResNet塊相比,RB增加了一條由兩個 1 × 1 1 \times 1 1×1卷積組成的路徑。這條路徑使RB能夠學習更多的特征表示,有助于提高模型的性能。
在這里插入圖片描述

在進行重新參數化時,RB首先將卷積權重與批量歸一化(BN)的參數合并。假設在BN中,縮放因子、偏移因子、均值和方差分別為 γ , β , μ \gamma, \beta, \mu γ,β,μ σ ∈ R C out \sigma \in \mathbb{R}^{C_{\text{out}}} σRCout?,對于一個輸入通道為 C in C_{\text{in}} Cin?、輸出通道為 C out C_{\text{out}} Cout? k × k k \times k k×k卷積,將卷積權重 W ∈ R C out × ( C in × k × k ) W \in \mathbb{R}^{C_{\text{out}} \times\left(C_{\text{in}} \times k \times k\right)} WRCout?×(Cin?×k×k)與偏置 B ∈ R C out B \in \mathbb{R}^{C_{\text{out}}} BRCout?和BN合并后得到的權重和偏置如下:

W ′ = γ σ W , B ′ = ( B ? μ ) γ σ + β W^{\prime}=\frac{\gamma}{\sigma} W, \quad B^{\prime}=\frac{(B-\mu) \gamma}{\sigma}+\beta W=σγ?W,B=σ(B?μ)γ?+β

在這里插入圖片描述

如圖5所示,在合并卷積和BN后,RB會將兩個 1 × 1 1 \times 1 1×1卷積串聯起來。假設有兩個 1 × 1 1 \times 1 1×1卷積,輸入特征為 x ∈ R C in × H × W x \in \mathbb{R}^{C_{\text{in}} \times H \times W} xRCin?×H×W,輸出特征為 y ∈ R C out 2 × H ′ × W ′ y \in \mathbb{R}^{C_{\text{out} 2} \times H^{\prime} \times W^{\prime}} yRCout2?×H×W,則卷積可以表示為:

其中*表示卷積操作,.表示矩陣乘法。 i m 2 c o l \mathrm{im} 2 \mathrm{col} im2col算子將輸入 x x x轉換為一個二維矩陣,該矩陣對應于卷積核的形狀。例如, i m 2 c o l 1 \mathrm{im} 2 \mathrm{col}_{1} im2col1?會將形狀為 C in × H × W C_{\text{in}} \times H \times W Cin?×H×W x x x轉換為形狀為 ( C in × 1 × 1 ) × ( H ′ × W ′ ) \left(C_{\text{in}} \times 1 \times 1\right) \times\left(H^{\prime} \times W^{\prime}\right) (Cin?×1×1)×(H×W) X X X。reshape算子將得到的矩陣轉換為張量(特征圖)。由于 W 1 × 1 ( 2 ) W_{1 \times 1}^{(2)} W1×1(2)?是一個形狀為 C out 2 × ( C out 1 × 1 × 1 ) C_{\text{out} 2} \times\left(C_{\text{out} 1} \times 1 \times 1\right) Cout2?×(Cout1?×1×1) 1 × 1 1 \times 1 1×1卷積核,并且 W 1 × 1 ( 1 ) ? i m 2 c o l 1 ( x ) W_{1 \times 1}^{(1)} \cdot \mathrm{im} 2 \mathrm{col}_{1}(x) W1×1(1)??im2col1?(x)的形狀為 C out 1 × ( H ′ × W ′ ) C_{\text{out} 1} \times\left(H^{\prime} \times W^{\prime}\right) Cout1?×(H×W),我們可以得出:

im ? 2 col ? 2 ( reshape ? ( W 1 × 1 ( 1 ) ? im ? 2 col ? ( x ) ) ) = W 1 × 1 ( 1 ) ? im ? 2 col ? 1 ( x ) .? \begin{array}{l} \operatorname{im} 2 \operatorname{col}_{2}\left(\operatorname{reshape}\left(W_{1 \times 1}^{(1)} \cdot \operatorname{im} 2 \operatorname{col}(x)\right)\right) \\ =W_{1 \times 1}^{(1)} \cdot \operatorname{im} 2 \operatorname{col}_{1}(x) \text {. } \\ \end{array} im2col2?(reshape(W1×1(1)??im2col(x)))=W1×1(1)??im2col1?(x).??

根據方程3和方程4,可以進一步推導如下:
= W 1 × 1 ( 2 ) ? W 1 × 1 ( 1 ) ? im2col ( x ) = ( W 1 × 1 ( 2 ) ? W 1 × 1 ( 1 ) ) ? im2col 1 ( x ) = W 1 × 1 ? x , \begin{array}{l} =W_{1 \times 1}^{(2)} \cdot W_{1 \times 1}^{(1)} \cdot \text{im2col}(x) \\ =\left(W_{1 \times 1}^{(2)} \cdot W_{1 \times 1}^{(1)}\right) \cdot \text{im2col}_1(x) \\ =W_{1 \times 1} * x \text{,} \\ \end{array} =W1×1(2)??W1×1(1)??im2col(x)=(W1×1(2)??W1×1(1)?)?im2col1?(x)=W1×1??x,?
其中 W 1 × 1 W_{1 \times 1} W1×1?是合并后產生的新卷積。因此,兩個 1 × 1 1 \times 1 1×1卷積可以合并為一個單獨的 1 × 1 1 \times 1 1×1卷積,而不會導致任何性能下降。值得注意的是,方程4僅在第二個 1 × 1 1 \times 1 1×1卷積的步長為1時成立。當RB執行下采樣時,第一個 1 × 1 1 \times 1 1×1卷積的步長設置為2,而第二個 1 × 1 1 \times 1 1×1卷積的步長設置為1。

在合并了兩個串聯的 1 × 1 1 \times 1 1×1卷積之后,RB(殘差塊)中剩下了一個 3 × 3 3 \times 3 3×3卷積、一個 1 × 1 1 \times 1 1×1卷積和一個殘差連接。隨后,RB將分別重新參數化 1 × 1 1 \times 1 1×1卷積和殘差連接為 3 × 3 3 \times 3 3×3卷積。如圖5所示,直觀上很明顯, 1 × 1 1 \times 1 1×1卷積是 3 × 3 3 \times 3 3×3卷積的一個特例,其中中心元素的權重值非零,而其他元素的權重值為0。因此,RB可以很容易地將 1 × 1 1 \times 1 1×1卷積重新參數化為 3 × 3 3 \times 3 3×3卷積。關于殘差連接,RB將首先構建一個 1 × 1 1 \times 1 1×1卷積 W r c ∈ R C i × C j × 1 × 1 ( i ≤ j ≤ out ) W_{rc} \in \mathbb{R}^{C_{i} \times C_{j} \times 1 \times 1}(i \leq j \leq \text{out}) Wrc?RCi?×Cj?×1×1(ijout)來替代它,其中如果 i i i等于 j j j,則權重值為1;如果 i i i不等于 j j j,則權重值為0。然后,將 1 × 1 1 \times 1 1×1卷積重新參數化為 3 × 3 3 \times 3 3×3卷積。由于現在所有三條路徑都是 3 × 3 3 \times 3 3×3卷積,RB可以直接將這三個 3 × 3 3 \times 3 3×3卷積的權重和偏置相加,以獲得一個新的 3 × 3 3 \times 3 3×3卷積。

總的來說,RB不僅受益于多路徑塊的訓練優勢,還繼承了單路徑塊的推理優勢。這種設計不僅使模型在訓練期間能夠充分利用多路徑塊的豐富信息和復雜的特征表示,還促進了推理階段的快速圖像分割。
C. 可重新參數化的金字塔池化模塊

金字塔池化模塊(PPM)[22]被用于捕獲圖像在多個尺度上的特征,幫助模型理解和分析圖像中的局部和全局信息。在實時語義分割模型中,提出的深度聚合PPM(DAPPM)[7]和并行聚合PPM(PAPPM)[8]顯著提升了模型的性能。雖然PAPPM基于DAPPM采用并行處理來加快模塊速度,但由于并行化中省略了某些操作,模塊的精度有所降低。為了同時實現PAPPM的速度和DAPPM的性能,我們引入了可重新參數化的PPM(RPPM)。
在這里插入圖片描述

圖6展示了RPPM的總體結構,清晰地可視化了從輸入特征到輸出特征的流程,其中并行卷積本質上是分組卷積。鑒于PyTorch中的分組卷積利用并行計算技術,在不同卷積對不同輸入進行操作的情況下,我們可以將不同的輸入拼接起來,然后傳遞給分組卷積,從而利用并行計算來提升推理速度。在RPPM中,我們采用兩個并行結構的 3 × 3 3 \times 3 3×3分組卷積,使模塊能夠學習更豐富的特征表示,從而提升性能。值得注意的是,這兩個卷積僅在訓練過程中存在,在測試時,RPPM將它們重新參數化為一個單獨的、優化的分組卷積。這個過程類似于殘差塊(RB)的重新參數化過程。訓練后,RPPM首先將兩個 3 × 3 3 \times 3 3×3分組卷積及其對應的批量歸一化(BN)層進行融合,然后通過元素相加合并兩個卷積的權重和偏置。由于RPPM的推理結構與PAPPM一致,RPPM成功保持了PAPPM的推理效率,同時實現了性能提升。
D. 深度監督

先前的研究[6]-[8]已經證明,在模型訓練階段引入輔助分割頭可以在不增加額外推理成本的情況下提升分割性能。在RDRNet中,我們在訓練過程中使用了一個額外的輔助分割頭,該分割頭在測試過程中被移除。如圖2所示,這個輔助分割頭位于RDRNet第4階段雙側融合之后,從細節分支接收特征。模型經過前向傳播后,總損失可以表示為:

L = L n + α L a L=L_{n}+\alpha L_{a} L=Ln?+αLa?

其中, L n L_{n} Ln? L a L_{a} La?分別代表正常損失和輔助損失, α \alpha α表示輔助損失的權重系數,在RDRNet中設置為0.4。為了有效地處理數據不平衡和難例樣本問題,我們還采用了OHEM交叉熵作為損失函數,這與之前的工作[8]保持一致。

IV. 實驗

A. 數據集

Cityscapes。Cityscapes[15]在城市場景理解和自動駕駛領域被廣泛使用。它包含19個類別,共有5000張圖像,其中2975張用于訓練,500張用于驗證,1525張用于測試。這些圖像都經過了精細的標注,分辨率為 1024 × 2048 1024 \times 2048 1024×2048像素。

CamVid。CamVid[16]是第一個帶有語義標簽的視頻數據集。它包含701張圖像,其中367張用于訓練,101張用于驗證,233張用于測試。每張圖像的分辨率為 720 × 960 720 \times 960 720×960像素。該數據集包含32個類別標簽,但通常只有其中的11個用于訓練和評估。

Pascal VOC 2012。Pascal VOC 2012[17]主要用于圖像分類、目標檢測和圖像分割等任務。它涵蓋了20個類別和1個背景類別。共有2913張圖像用于語義分割任務,包括訓練集中的1464張圖像和驗證集中的1449張圖像。與Cityscapes和CamVid不同,這些圖像的分辨率不是固定的。
B. 實現細節

Cityscapes。我們使用隨機梯度下降(SGD)作為優化器,動量設置為0.9,權重衰減為0.0005。初始學習率設置為0.01,并采用冪次為0.9的多項式學習率策略逐漸降低學習率。在訓練過程中,應用了數據增強技術,包括在0.5到2.0范圍內進行隨機縮放、以 1024 × 1024 1024 \times 1024 1024×1024的分辨率進行隨機裁剪,以及以0.5的概率進行隨機水平翻轉。在推理過程中,使用了分辨率為 1024 × 2048 1024 \times 2048 1024×2048的原始圖像,并未應用數據增強。我們將批量大小設置為12,并在兩個GPU上訓練模型進行了 120 K 120 \mathrm{~K} 120?K次迭代(大約484個周期)。

CamVid。遵循先前的工作[7]、[8],我們使用了Cityscapes的預訓練模型,并將學習率初始化為0.001。在訓練過程中,我們使用了與Cityscapes相同的數據增強技術,但不同之處在于圖像被隨機裁剪到 720 × 960 720 \times 960 720×960的分辨率。在推理過程中,使用了分辨率為 720 × 960 720 \times 960 720×960的原始圖像。我們在單個GPU上訓練了模型7800次迭代(200個周期),其余超參數的設置與Cityscapes中使用的相同。

Pascal VOC 2012。我們使用了Cityscapes的預訓練模型,并將初始學習率設置為0.001。在訓練過程中,圖像分辨率被調整為 512 × 2048 512 \times 2048 512×2048,然后應用了與Cityscapes相同的數據增強技術,但不同之處在于圖像被隨機裁剪到 512 × 512 512 \times 512 512×512的分辨率。在推理過程中,圖像分辨率被調整為 512 × 2048 512 \times 2048 512×2048。值得注意的是,這里的分辨率只是一個調整目標。由于Pascal VOC中的圖像分辨率不是固定的,因此為了保持縱橫比,將圖像調整到接近 512 × 2048 512 \times 2048 512×2048的分辨率。我們在兩個GPU上進行了24400次迭代(200個周期)的訓練,其余超參數的設置與Cityscapes中使用的相同。

C. 計算平臺

我們使用的計算平臺硬件包括Intel Xeon Gold 5218R CPU和兩個NVIDIA RTX 3090 GPU。軟件堆棧包括Ubuntu 20.04.1、CUDA 11.3、PyTorch 1.12.1和MMSegmentation [35] 1.0.0。在訓練階段,我們使用兩個GPU,而在推理階段,只使用一個GPU,并將批量大小設置為1。

D. 與最先進模型的比較

我們在三個基準數據集(即Cityscapes、CamVid和Pascal VOC 2012)上評估了我們的模型性能。為了確保公平比較,我們在表中指出了模型是否在ImageNet [36]數據集上進行了預訓練,因為一些現有工作采用了這種策略,而其他工作則沒有。在評估指標方面,我們選擇平均交并比(mIoU)作為主要指標來評估所有模型的性能。
在這里插入圖片描述

Cityscapes。表II展示了分割模型在Cityscapes驗證集和測試集上的實驗結果,其中*符號表示我們在自己的平臺上重新訓練了模型,并在自己的平臺上評估了模型的推理速度。值得注意的是,表中列出的模型在測試集上進行評估之前,都使用了組合的訓練集和驗證集進行訓練。實驗結果表明,我們的RDRNet在mIoU方面優于其他最先進的模型,同時保持了具有競爭力的推理速度和模型大小。作為我們最快的模型,RDRNet-S-Simple在驗證集上達到了 76.8 % m I o U 76.8\% \mathrm{mIoU} 76.8%mIoU,優于同規模的其他模型,并且達到了134.6 FPS,這也優于其他模型。

盡管Fast-SCNN是最快的,達到了192.0 FPS,但其性能僅為 71.0 % 71.0\% 71.0%,這還不夠。在測試集上,我們的RDRNetS-Simple模型僅次于PIDNet-S。經過進一步分析,我們發現PIDNet-S中分割頭的 O c O_{c} Oc?(此參數在III-A中引入)為128,而我們的RDRNet-S-Simple的 O c O_{c} Oc?較低,為64,這限制了模型的表示能力。通過將 O c O_{c} Oc?增加到128(RDRNet-S),我們的模型在測試集上的性能與PIDNet-S相當,同時仍然保持了速度優勢。此外,與其他相同大小的模型相比,我們的RDRNet-M和RDRNet-L模型也表現出了卓越的性能和快速的推理速度。例如,我們的RDRNet-L在驗證集和測試集上的mIoU分別比PIDNet-L提高了 0.5 % 0.5\% 0.5% 0.2 % 0.2\% 0.2%,同時保持了8.2 FPS的速度優勢。

CamVid。表III展示了分割模型在CamVid測試集上的實驗結果,其中表中的所有模型都使用MMSegmentation在我們的平臺上重新訓練,并在我們的平臺上進行推理。基于之前的研究[7]、[8],訓練過程利用了由訓練集和驗證集組成的組合數據集,而測試集則用于模型評估。在重新訓練過程中,我們將所有模型的學習率降低到原始學習率的 1 / 10 1/10 1/10,并對Cityscapes預訓練權重進行了7800次迭代微調,同時保持其他訓練參數與Cityscapes訓練時一致。
在這里插入圖片描述

實驗結果表明,我們的RDRNet在性能和推理速度之間保持了平衡。與ERFNet、ICNet、CGNet、BiSeNet和STDC相比,RDRNet在性能和速度上都處于領先地位。雖然Fast-SCNN是最快的,但其mIoU僅達到 66.2 % 66.2\% 66.2%。與DDRNet-23-Slim相比,RDRNet-SSimple在性能和速度上都表現出色。然而,雖然RDRNet-M的mIoU高于DDRNet-23,但其FPS略低。與PIDNet-S相比,RDRNet-S達到了相同的mIoU,但速度快了46.6 FPS。此外,RDRNet-M和RDRNet-L分別在性能和速度上優于PIDNet-M和PIDNet-L。具體來說,RDRNet-M在保持與PIDNet-M相似mIoU的同時,實現了19.5 FPS的提升,而RDRNet-L在mIoU上優于PIDNet-L,并實現了11.4 FPS的提升。

Pascal VOC 2012. 表IV展示了分割模型在Pascal VOC 2012驗證集上的實驗結果,其中表中的所有模型都使用MMSegmentation在我們的平臺上重新訓練,并在我們的平臺上進行推理。在重新訓練過程中,我們將所有模型的學習率降低到原始學習率的 1 / 10 1/10 1/10,并對Cityscapes預訓練權重進行了24400次迭代微調,同時保持其他訓練參數與Cityscapes訓練時一致。實驗結果表明,所提出的RDRNet在性能和推理速度之間達到了最佳平衡。雖然PIDNet在Cityscapes和CamVid上取得了優異的結果,但在VOC 2012上卻難以復制這種成功。相比之下,RDRNet在所有三個數據集上都始終表現出色。作為我們最快的模型,RDRNet-SSimple在mIoU方面分別比DDRNet-23-Slim和PIDNet-S高出 0.6 % 0.6\% 0.6% 1.0 % 1.0\% 1.0%,并且在FPS上有顯著的9.8和53.8的提升。此外,我們的其他RDRNet變體也表現出強大的性能。除了mIoU指標外,我們還通過像素精度指標來補充我們的評估,該指標是通過確定準確分類的像素占總像素數的比例來計算的。實驗結果表明,我們的RDRNet在像素精度方面也表現出優越性。有趣的是,BiSeNetV1在VOC驗證集上的mIoU特別出色,比BiSeNetV2高出顯著的 6.0 % 6.0\% 6.0%

我們不確定這是否是由于ImageNet預訓練的影響,因為BiSeNetV1雖然在ImageNet上進行了預訓練,但在CamVid測試集上的表現卻不如BiSeNetV2。為了驗證這種效果是否確實由ImageNet預訓練引起,我們進行了不使用ImageNet預訓練的額外實驗。實驗結果表明,在沒有ImageNet預訓練的情況下,BiSeNetV1的mIoU從 56.0 % 56.0\% 56.0%下降到 54.2 % 54.2\% 54.2%。這表明,即使不進行ImageNet預訓練,BiSeNetV1在VOC數據集上仍然能夠表現出色。盡管BiSeNetV1在這個特定數據集上表現出色,但考慮到在所有三個數據集上的實驗,我們得出結論,RDRNet總體上優于BiSeNetV1。

E. 可視化結果分析

為了清晰地展示我們模型的性能,我們對DDRNet-Slim、PIDNet S和我們的RDRNet-Simple的分割結果進行了可視化,如圖7所示。該圖表明,與其他分割模型相比,RDRNet能夠更完整地識別目標。例如,在第一行中,三個模型都沒有完全識別出卡車,但RDRNet提供了更完整的識別。在識別公共汽車(第四行)時也出現了同樣的問題。在第五行中,DDRNet和PIDNet對地面上的交通標志似乎不太敏感,而RDRNet則準確地識別了它。因此,RDRNet獲得了更好的分割結果。
在這里插入圖片描述

F. 消融研究

可重參數化塊。為了驗證RB的有效性,我們進行了一系列消融實驗。具體來說,我們從包含一個 3 × 3 3 \times 3 3×3卷積的單路徑塊開始實驗,并逐步添加了一個包含兩個 1 × 1 1 \times 1 1×1卷積的路徑和一個具有殘差連接的路徑。由于 1 × 1 1 \times 1 1×1卷積路徑包括兩個 1 × 1 1 \times 1 1×1卷積,我們進一步通過減少這些卷積來探索其他組合。如表V所示,當僅使用單路徑塊時,RDRNet的性能最低,mIoU僅為 75.6 % 75.6\% 75.6%。然而,隨著額外路徑的引入,性能逐漸提高,達到了 76.8 % 76.8\% 76.8%。有趣的是,“Conv $3 \times 3+\operatorname{Conv}_{1 \times 1}^{(1)}+ $Residual”組合的性能比“Conv 3 × 3 + Conv ? 1 × 1 ( 1 ) 3 \times 3+ \operatorname{Conv}_{1 \times 1}^{(1)} 3×3+Conv1×1(1)?”組合更差,這表明殘差連接并不總是對模型性能產生積極影響。此外,由于包含 1 × 1 1 \times 1 1×1卷積的路徑可以包含任意數量的此類卷積,我們進行了消融實驗以確定此路徑的最佳數量。表VI中的實驗結果表明,當此路徑包含兩個 1 × 1 1 \times 1 1×1卷積時,RDRNet的性能最佳。每個額外的 1 × 1 1 \times 1 1×1卷積都會使模型訓練的內存使用量增加約3.3 GiB。值得注意的是,我們在這些實驗中沒有測試FPS,因為在推理過程中,所有組合的結構都保持一致。
在這里插入圖片描述

可重參數化金字塔池化模塊。為了驗證RPPM的有效性,我們進行了一系列消融實驗。具體來說,我們分別用PPM、DAPPM和PAPPM替換了RDRNet中的RPPM。此外,我們還完全移除了RPPM,從而消除了金字塔池化模塊,以觀察其對模型性能的影響。實驗結果如圖8所示,其中不同深淺的紫色代表不同的模塊,“None”表示沒有金字塔池化模塊。如圖所示,所提出的RPPM達到了最高的性能,達到了 76.8 % 76.8\% 76.8%,比PAPPM高出 0.6 % 0.6\% 0.6%。與PAPPM相比,這種性能提升并沒有增加額外的推理時間成本,因為RPPM的結構在推理過程中被重新參數化為與PAPPM一致。當不使用金字塔池化模塊時,模型實現了最快的推理速度,達到了140.0 FPS,但mIoU僅為 72.9 % 72.9\% 72.9%。我們認為為了mIoU提高 3.9 % 3.9\% 3.9%而犧牲5.4 FPS是合理的。
在這里插入圖片描述

雙向融合。為了驗證兩種雙向融合的有效性,我們進行了一系列消融實驗。具體來說,我們深入研究了RDRNet不使用雙向融合、RDRNet僅使用雙向融合1(在第四階段后應用)和RDRNet僅使用雙向融合2(在第五階段后應用)的場景。圖8顯示,在不使用雙向融合的情況下,RDRNet的mIoU最低,為 74.8 % 74.8\% 74.8%,但達到了最快的FPS,達到144.2。與僅使用雙向融合1相比,僅使用雙向融合2可以實現更高的性能,但推理速度較慢。當同時利用雙向融合1和雙向融合2時,mIoU達到峰值 76.8 % 76.8\% 76.8%,但相應的FPS下降到134.6。總而言之,盡管模型的推理速度有所降低(但仍可接受),但采用兩種雙向融合證明對于提高性能是有效的。

V、結論

在本研究中,我們提出了一種可重參數化雙分辨率網絡(RDRNet)用于實時語義分割。通過在訓練過程中利用多路徑塊并在推理過程中將其重新參數化為單路徑塊,我們優化了準確性和速度。此外,我們還引入了一個可重參數化金字塔池化模塊(RPPM)來增強特征表示,同時不增加推理時間。廣泛的實驗結果表明,RDRNet優于現有的最先進模型,提供了高性能和快速推理能力。未來,我們計劃探索更多強大的可重參數化訓練結構。

改進方法

測試結果

yolov9-c summary: 555 layers, 48445152 parameters, 0 gradients, 227.8 GFLOPsClass     Images  Instances          P          R      mAP50   mAP50-95: 100%|██████████| 15/15 00:05all        230       1412      0.924      0.977       0.99      0.729c17        230        131      0.962      0.985      0.994        0.8c5        230         68      0.948          1      0.989      0.838helicopter        230         43      0.953          1      0.982      0.656c130        230         85      0.988      0.999      0.995       0.69f16        230         57      0.949      0.965      0.976      0.658b2        230          2      0.762          1      0.995      0.601other        230         86      0.939      0.953       0.98      0.579b52        230         70      0.963      0.957      0.983      0.823kc10        230         62      0.985      0.984      0.988      0.834command        230         40      0.947          1      0.993      0.798f15        230        123      0.984          1      0.995      0.699kc135        230         91      0.954      0.989      0.987      0.716a10        230         27      0.968      0.963      0.981      0.477b1        230         20          1      0.987      0.995      0.668aew        230         25      0.883          1      0.972       0.76f22        230         17       0.95          1      0.995      0.727p3        230        105      0.984          1      0.995      0.806p8        230          1      0.598          1      0.995      0.597f35        230         32          1      0.984      0.995      0.567f18        230        125      0.982      0.992      0.989      0.815v22        230         41      0.981          1      0.995      0.726su-27        230         31       0.97          1      0.995      0.859il-38        230         27      0.954          1      0.995      0.788tu-134        230          1      0.599          1      0.995      0.895su-33        230          2          1       0.61      0.995      0.697an-70        230          2       0.76          1      0.995      0.796tu-22        230         98      0.993          1      0.995      0.809

總結

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

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

相關文章

使用ndoe實現自動化完成增刪改查接口

使用ndoe實現自動化完成增刪改查接口 最近工作內容比較繁瑣,手里需要開發的項目需求比較多,常常在多個項目之間來回切換,有時候某些分支都不知道自己開發了什么、做了哪些需求, 使用手寫筆記的方式去記錄分支到頭來也是眼花繚亂&a…

vscode調試教程

VSCode調試 VSCode Debuggers VSCode使用launch.json進行細粒度的控制,可以啟動程序或將其附加到復雜的調試場景中 打開Run and Debug視圖Ctrl Shift D 點擊create a launch.json file,選擇C(GDB/LLDB) 會在工作目錄自動創建.vscode/launch.json文…

【MyBatis】MyBatis 理論 40 問(二)

《MyBatis 理論 40 問》包含以下 2 篇文章: MyBatis 理論 40 問(一)MyBatis 理論 40 問(二) MyBatis 理論 40 問(二) 21.如何獲取生成的主鍵?22.當實體類中的屬性名和表中的字段名不…

influxQL基本語法及常用的聚合函數

InfluxQL(Influx Query Language)是與InfluxDB緊密集成的一種SQL風格的語言,專為處理時間序列數據而設計。其基本語法結構清晰,方便開發者理解和實現。以下是對InfluxQL基本語法及常用聚合函數的簡單介紹: 目錄 一、…

Docker Dockerfile:構建與優化

Docker Dockerfile:構建與優化 簡介 Docker 是一種廣泛使用的容器化技術,它允許開發人員將應用程序及其依賴環境打包到一個可移植的容器中。Dockerfile 是 Docker 中用于自動化容器鏡像構建的腳本文件。本文將詳細介紹 Dockerfile 的基本結構、指令使用…

【Python】已解決:(MongoDB安裝報錯)‘mongo’ 不是內部或外部命令,也不是可運行的程序

文章目錄 一、分析問題背景二、可能出錯的原因三、錯誤代碼示例四、正確代碼示例及解決方案五、注意事項 已解決:(MongoDB安裝報錯)‘mongo’ 不是內部或外部命令,也不是可運行的程序 一、分析問題背景 在安裝和配置MongoDB時,有…

怎樣在 PostgreSQL 中優化對 UUID 數據類型的索引和查詢?

文章目錄 一、UUID 數據類型概述二、UUID 索引和查詢的性能問題三、優化方案(一)選擇合適的索引類型(二)壓縮 UUID(三)拆分 UUID(四)使用覆蓋索引(五)優化查詢…

一二三應用開發平臺應用開發示例(6)——代碼生成、權限配置、運行效果查看

生成代碼 完成配置工作,接下來就是見證奇跡的時刻~ 返回到實體列表,選中“文件夾”記錄,點擊“生成代碼”按鈕,提示成功后,在項目的output目錄下輸出了平臺基于配置模板產生的各層代碼,在原有后端的基礎上…

Pyserial設置緩沖區大小失敗

文章目錄 問題描述原因分析解決方案 問題描述 使用set_buffer_size()設置緩沖區大小后,buffer size仍為默認的4096 import time import serial ser serial.Serial(baudrate9600, timeout0.5) ser.port COM1 ser.set_buffer_size(rx_size8192) ser.open() while …

windows上部署python3.11

hello,大家好,我是一名測試開發工程師,至今已在自動化測試領域深耕9個年頭,現已將本人實戰多年的多終端自動化測試框架【wyTest】開源啦,在接下來的一個月里,我將免費指導大家使用wyTest,請大家…

歐拉函數.

性質1:質數n的歐拉函數為n-1. 性質2:如果p,q都是質數,那么? ( p ? q ) ? ( p ) ? ? ( q ) ( p ? 1 ) ? ( q ? 1 ) 證明:p,2p....q*p都不與q*p互質,q同理,所以總的不互質個…

JavaEE初階-網絡編程

文章目錄 前言一、UDP與TCP1.1 有連接與無連接1.2 全雙工1.3 可靠傳輸與不可靠傳輸1.4 面向子節流與面向數據報 二、UDP回顯服務器及客戶端編寫三、UDP字典服務器四、TCP回顯服務器及客戶端編寫五、數據序列化的方式5.1 基于行文本的方式傳輸5.2 基于XML的格式5.3 基于json5.4 …

STM32芯片系列與產品后綴解讀

一. 產品系列 STM32單片機是一系列基于ARM Cortex-M內核的32位微控制器,廣泛應用于嵌入式系統中。 STM32系列由STMicroelectronics(意法半導體)開發和生產,并憑借其靈活的設計、豐富的外設和強大的生態系統,成為嵌入式…

咬文嚼字:詞元是當今生成式人工智能失敗的一個重要原因

生成式人工智能模型處理文本的方式與人類不同。了解它們基于"標記"的內部環境可能有助于解釋它們的一些奇怪行為和頑固的局限性。從 Gemma 這樣的小型設備上模型到 OpenAI 業界領先的 GPT-4o 模型,大多數模型都建立在一種稱為轉換器的架構上。由于轉換器在…

Ubuntu24.04清理常見跟蹤軟件tracker

盡量一天一更,不刷視頻,好好生活 打開系統監視器,發現開機有個tracker-miner-fs-fs3的跟蹤程序,而且上傳了10kb的數據。 搜索知,該程序會搜集應用和文件的信息。 刪除tracker 顯示帶tracker的apt程序 sudo apt lis…

ThreadLocal的內存泄漏

什么是內存泄漏 程序在申請內存后,無法釋放已申請的內存空間在定義變量時,需要一段內存空間來存儲數據信息,而這段內存如果一直不被釋放,那么就會導致內存被占用光,而被占用的這個對象,一直不能被回收掉&am…

書生·浦語2.5開源,推理能力再創新標桿

導讀 2024 年 7 月 3 日,上海人工智能實驗室與商湯科技聯合香港中文大學和復旦大學正式發布新一代大語言模型書?浦語2.5(InternLM2.5)。相比上一代模型,InternLM2.5 有三項突出亮點: 推理能力大幅提升,在…

VUE與React的生命周期對比

前言 在前端開發中,Vue和React是兩個非常流行的JavaScript框架,它們各自有著獨特的生命周期機制。了解并熟練掌握這些生命周期,對于開發高效、可維護的前端應用至關重要。本文將詳細對比Vue和React的生命周期,幫助開發者更好地理…

Python | Leetcode Python題解之第222題完全二叉樹的節點個數

題目: 題解: # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def countNodes(self,…

好玩的珠璣妙算-加作弊帶概率空間+日志存儲240705mindMaster

Python代碼 import random import time import datetimeNUM_DIGITS 10 #NUM_NON_ZERO_DIGITS 9failFlag 0class Mastermind:def __init__(self, code_length, max_attempts, secret01code, game_id): # def __init__(self, code_length, max_attempts):self.code_length…