摘要
本文使用重參數的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} TS→D?和 T D → S T_{D \rightarrow S} TD→S?分別表示語義到細節的特征對齊操作和細節到語義的特征對齊操作。雙邊融合后,語義分支的第 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?)+TD→S?(RD?(XDi?1?)))XDi?=ReLU(RD?(XDi?1?)+TS→D?(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)} W∈RCout?×(Cin?×k×k)與偏置 B ∈ R C out B \in \mathbb{R}^{C_{\text{out}}} B∈RCout?和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} x∈RCin?×H×W,輸出特征為 y ∈ R C out 2 × H ′ × W ′ y \in \mathbb{R}^{C_{\text{out} 2} \times H^{\prime} \times W^{\prime}} y∈RCout2?×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(i≤j≤out)來替代它,其中如果 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