天天看點

《ICNet for Real-Time Semantic Segmentation on High-Resolution Images》論文閱讀及代碼實作

論文原文

https://arxiv.org/pdf/1704.08545.pdf

香港中文大學,騰訊優圖,商湯科技聯合發表的一篇用于語義分割的論文。

摘要

ICNet是一個基于PSPNet的實時語義分割網絡,設計目的是減少PSPNet推斷時期的耗時,論文對PSPNet做了深入分析,在PSPNet的基礎上引入級聯特征融合子產品,實作快速且高品質的分割模型。論文報告了在Cityscape上的表現。

摘要

主要通過下面的圖來表現:

《ICNet for Real-Time Semantic Segmentation on High-Resolution Images》論文閱讀及代碼實作

可以看到之前的許多分割的經典方法速度不快,而速度快的ENet的精度又不高,PSPNet在速度和精度找到了一個平衡點。論文的主要貢獻在于:

  • 綜合低分辨率的處理速度和高分辨率圖像的推斷品質,提出圖像級聯架構逐漸細化分割預測
  • ICNet可以在1024

    ×

    \times

    × 2048分辨率下保持30fps運作

相關工作

高品質的語義分割模型

先驅工作FCN将全連接配接層換成卷積層;DeepLab等使用空洞卷積(dilated convolution);Encoder-Decoder結構融合高層的語義和底層的細節;也有使用CRG,MRF模拟空間關系;PSPNet采用空間上的金字塔池化結構。這些方法對于提升性能有效,但不能用于實時系統。

快速的語義分割模型

SegNet放棄層資訊來提速;ENet是一個輕量級網絡,這些方法雖然快,但是性能差。

視訊分割模型

視訊中包含大量備援資訊,可利用減少計算量。

PSPNet給出了一個快讀的語義分割的層次結構,利用級聯圖像作為輸入加速推理,建構一個實時分割系統。

時間分析

《ICNet for Real-Time Semantic Segmentation on High-Resolution Images》論文閱讀及代碼實作

藍色的分辨率為1024

×

\times

× 2048,綠色的分辨率為512

×

\times

× 512。上圖顯示了多個資訊:

  • 不同分辨率下的速度差異很大,呈平方趨勢增加
  • 網絡的寬度越大速度越慢
  • 核數量越多速度越慢

加速政策

輸入降采樣

根據上面的分析,半分辨率的推斷時間為全分辨率的1/4。測試不同分辨率下輸入下的預測情況。一個簡單的測試方法使用1/2,1/4的輸入,将輸出上采樣回原來的大小。實驗如下:

《ICNet for Real-Time Semantic Segmentation on High-Resolution Images》論文閱讀及代碼實作

對比在不同縮放比例下得到的結果可以發現,在縮放比例為0.25的情況下,雖然推斷時間大大減短,但是預測結果非常粗糙,丢失了很多小但是重要的細節。縮放0.5相對來說好了很多,但丢失了很多細節,并且最麻煩的是推理速度達不到實時要求了。

特征降采樣

輸入能降采樣,自然特征也可以降采樣。這裡以1:8,1:16,1:32的比例測試PSPNet50,結果如下:

《ICNet for Real-Time Semantic Segmentation on High-Resolution Images》論文閱讀及代碼實作

較小的特征圖可以以犧牲準确度換取更快的推斷,但考慮到使用1:32(132ms)依然達不到實時要求。

模型壓縮

減少網絡的複雜度,有一個直接的方法就是修正每層的核數量,論文測試了一些有效的模型壓縮政策。即使隻保留四分之一的核,推斷時間還是很長。并且準确率大大降低了。

ICNet的結構

ICNet在總結了上面的加速政策後,提出了一個綜合性的方法:使用低分辨率加速捕捉語義,使用高分辨率擷取細節,使用級聯網絡結合,在限制的時間内獲得有效的結果。模型結構如下:

《ICNet for Real-Time Semantic Segmentation on High-Resolution Images》論文閱讀及代碼實作

圖檔分為1,1/2,1/4這3個尺度分三路送到模型中。3個分支介紹如下:

  • 對于第一個1/4分支,可以看到經過3次卷積(下采樣)後分辨率為原圖的1/32,經過卷積後使用幾個空洞卷積層擴充感受野但不縮小尺寸,最終以原圖的1/32大小輸出feture map。這一個分支雖然層數較多,但分辨率小,速度快,且與第二個分子共享一部分權重。
  • 以原圖的1/2分辨率作為輸入,經過卷積後以1/8縮放,得到原圖1/16大小的feature map,再将低分辨率分支的輸出feature map通過CFF單元融合得到最終輸出。這一和分子有17個卷積層,與第一個分支共享一部分權重,與分支1一共耗時6ms。
  • 第3個分支以原圖作為輸入,經過卷積後以1/8縮放,得到原圖大小1/8的特征圖,再将中分辨率處理後的輸出通過CFF單元融合,第3層有3個卷積層,雖然分辨率高,但層少,耗時9ms。

    \quad

    對于每個分支的輸出特征,首先會上采樣二倍做輸出,在訓練的時候,會以ground truth的1/16,1/8,1/4來指導各個分支的訓練,這樣的輔助訓練使得梯度優化更加平滑,便于訓練收斂,随着每個分支學習能力的增強,預測沒有被任何一個分支主導。利用這樣漸變的特征融合和級聯引導結構可以産生合理的預測結果。ICNet使用低分辨率完成語義分割,使用高分辨率幫助細化結果,在結構上,産生的feature大大減少,同時仍然保持必要的細節。

CFF單元

《ICNet for Real-Time Semantic Segmentation on High-Resolution Images》論文閱讀及代碼實作

F1代表低分辨率輸入,F2代表高分辨率輸入。将低分辨率的圖檔上采樣後使用空洞卷積(dilated conv),擴大上采樣結果的感受野範圍。注意将輔助的标簽引導設定為0.4(根據PSPNet的實驗結果),即如果下分支的

l

o

s

s

L

3

loss L_3

lossL3​的占比

λ

3

\lambda_3

λ3​為1的話,則中分支的

l

o

s

s

L

2

loss L_2

lossL2​的占比

λ

2

\lambda_2

λ2​為0.4,上分支的

l

o

s

s

L

1

loss L_1

lossL1​的占比

λ

1

\lambda_1

λ1​為0.16。

損失函數和模型壓縮

損失函數

依據不同的分支定義如下:

L

=

λ

1

L

1

+

λ

2

L

2

+

λ

3

L

3

L=\lambda_1L_1+\lambda_2L_2+\lambda_3L_3

L=λ1​L1​+λ2​L2​+λ3​L3​,根據CCF的設定,下分支的

l

o

s

s

L

3

loss L_3

lossL3​的占比

λ

3

\lambda_3

λ3​為1的話,則中分支的

l

o

s

s

L

2

loss L_2

lossL2​的占比

λ

2

\lambda_2

λ2​為0.4,上分支的

l

o

s

s

L

1

loss L_1

lossL1​的占比

λ

1

\lambda_1

λ1​為0.16。

壓縮模型

這裡不是很懂,論文采用的一個簡單而有效的辦法:漸進式壓縮。例如以壓縮率1/2為例,我們可以先壓縮到3/4,對壓縮後的模型進行微調,完成後,再壓縮到1/2,再微調。保證壓縮穩定進行。這裡采用Pruning filters for efficient convnets(可以查一下這篇論文)的方法,對于每個濾波器計算核權重的L1和,降序排序,删除權重值較小的。

模型壓縮的結果

《ICNet for Real-Time Semantic Segmentation on High-Resolution Images》論文閱讀及代碼實作

mIoU降低了,但推理時間170ms達不到實時要求。這表明隻是模型壓縮是達不到有良好分割結果的實時性能。對比ICNet,有類似的分割結果,但速度提升了5倍多。

級聯結構的有效性

結論

代碼實作