【语义分割】ICCV21_Mining Contextual Information Beyond Image for Semantic Segmentation
文章目錄
- 一、背景
- 二、動機
- 三、方法
- 3.1 整體結構
- 3.2 特征存儲模塊 Feature Memory Module
- 3.3 數據集層面的上下文聚合 Dataset-level Context Aggregation
- 3.4 表達一致性的學習 Representation Consistent Learning
- 3.5 Loss
- 四、效果
論文鏈接: https://arxiv.org/pdf/2108.11819.pdf
代碼鏈接: https://github.com/CharlesPikachu/mcibi
代碼合并到 sssegmentation: https://github.com/SegmentationBLWX/sssegmentation
一、背景
在語義分割中,探索不同類別的 “共現” 特征來建模的方法層出不窮,如 PSP/ASPP/OCR 等,但這些方法通常只在圖像內建模,沒有考慮到對單個圖像以外的信息建模。但作者認為,深度學習模型是對一個數據集的整體數據學習,所以為了對像素進行更準確的分類,應該將其他圖像中對應的相同類別的語義信息也加入學習中。
二、動機
所以為了緩解上面提到的問題,本文作者提出 “挖掘單個圖像以外的上下文信息,來提升像素的特征表達”,如圖 1 所示。
- 首先,在訓練中,設置一個 “feature memory” 模塊,來存儲 dataset-level 的各個類別的歷史輸入
- 之后,預測當前圖片的像素表達的概率分布,該概率分布是由真值的分布來監督訓練的
- 最后,使用加權聚合的 dataset-level 的表達來增強每個像素表達,這里加權的全職是由相應的類概率分布決定的。
此外,為了在整個數據集層面進一步使得類內更聚合和類間更分散,作者設計了一個“表達一致性學習策略”,來使得分類頭同時學習以下兩者:
- 整個數據集層面:不同類別的 dataset-level 的表達
- 單個圖像層面:pixel-level 的表達
三、方法
3.1 整體結構
首先,給定輸入圖像 III 經過 backbone 得到輸出 R∈C×H8×W8R \in C \times \frac{H}{8} \times \frac{W}{8}R∈C×8H?×8W?,該輸出矩陣中存儲了圖像的像素表達。
然后,使用如下方式來挖掘單個輸入圖像之外的上下文信息:
- 不同類別的 dataset-level 的表達存儲在 feature memory module MMM 中
- AbiA_{bi}Abi? 是提出的 dataset-level 的上下文聚合機制
- Cbi∈C×H8×W8C_{bi} \in C \times \frac{H}{8} \times \frac{W}{8}Cbi?∈C×8H?×8W? 存儲了來自于 MMM 的 dataset-level 的上下文聚合信息
- H1H_1H1? 是分類頭,被用來預測像素表達的類別概率分布
為了將本文提出的方法嵌入現有的分割網絡中,作者給所利用的網絡設計了 self-existing context scheme,稱為 AwiA_{wi}Awi?,于是有:
- CwiC_{wi}Cwi? 存儲了當前輸入圖像的上下文信息
之后,RRR 被增強:
- FFF 是 transform function,被用于聚合原始表達 RRR,單個圖像之外的上下文表達 CbiC_{bi}Cbi?,圖像內部的上下文表達 CwiC_{wi}Cwi?
隨后,使用 RaugR_{aug}Raug? 來預測輸入圖像的每個像素的類別:
3.2 特征存儲模塊 Feature Memory Module
如圖 2 所示,維度為 K×CK \times CK×C 的 feature memory module MMM 被用來存儲不同類別的 dataset-level 的特征表達,MMM 的初始化采用隨機初始化,在每次訓練之后使用移動平均的方式來更新:
- mmm:動量
- ttt:是當前 iter
- LLL:用來把 RRR 的維度處理的和 MMM 相同
- mmm:使用多項式退火方法來確定
- TTT:iteration 總數
- ppp 和 m0m_0m0? 都為 0.9
LLL 的實現:
- 首先,定義一個大小為 K×CK\times CK×C 的矩陣 R′R'R′,并使用 MMM 中的值來初始化該矩陣
- RRR 被上采樣,然后展成 HW×CHW\times CHW×C大小
- 然后,對于每個類別 ckc_kck?,則有:
- 其中,GTGTGT of size HWHWHW 是真值
- RckR_{ck}Rck? of size Nck×CN_{ck} \times CNck?×C 存儲了類別 ckc_kck? 的表達
- NckN_{ck}Nck? 是圖像中真值為 ckc_kck? 的像素個數
- 之后,計算 RckR_{ck}Rck? 和 M[ck,?]M_{[c_k, *]}M[ck?,?]? 的相似矩陣 SckS_{ck}Sck? of size NckN_{ck}Nck?
- 最后,R′R'R′ 中的 ckc_kck? 的表達被更新為:
3.3 數據集層面的上下文聚合 Dataset-level Context Aggregation
首先,預測一個大小為 K×H8×W8K \times \frac{H}{8} \times \frac{W}{8}K×8H?×8W? 的權重矩陣 WWW,來存儲 RRR 中的特征表達的類別概率分布:
- H1H_1H1?:由兩個 1x1 卷積和 softmax 函數組成
然后,計算粗糙的 dataset-level representation 矩陣 Cbi′C_{bi}'Cbi′?:
- Cbi′C_{bi}'Cbi′?:大小為 HW64×K\frac{HW}{64}\times K64HW?×K,存儲了 dataset-level 的聚合表達
- permute(W)permute(W)permute(W):將 WWW 的維度轉換為 HW64×K\frac{HW}{64}\times K64HW?×K
由于 H1H_1H1? 僅僅使用了 RRR 來預測 WWW,所以像素表達可能會類別錯誤,所以作者計算了 RRR 和 Cbi′C_{bi}'Cbi′? 的相關性,來獲得位置置信權重來進一步 refine Cbi′C_{bi}'Cbi′?,也就是:
- 首先,使用如下方式計算相關性 PPP:
- permutepermutepermute 用來將 RRR 的維度變為 HW64×K\frac{HW}{64}\times K64HW?×K
- 然后,refine Cbi′C_{bi}'Cbi′?
- permutepermutepermute 用來將 RRR 的維度變為 C×H8×W8C \times \frac{H}{8}\times \frac{W}{8}C×8H?×8W?
3.4 表達一致性的學習 Representation Consistent Learning
由于分割網絡的目標是將整個數據集中的每個像素的特征表達影射到一個非線性空間中,但其訓練時是通過 mini-batch 的方式來訓練的,這種不一致的學習會導致網絡缺失從整個數據集的角度來將同類拉近,將不同類分散開的能力,于是作者提出了 representation consistent learning strategy。
實現:
在訓練時,使用 H2H_2H2? 來預測 MMM 中的 dataset-level 表達的類別:
- reshape:將 MMM reshape 到 K×C×1×1K\times C\times 1 \times 1K×C×1×1 的大小
- H2H_2H2?:由兩個卷積層和一個 softmax 層構成
- OMO^MOM:保存了 MMM 中的 dataset-level 的預測概率分布,MMM 中的每個表達都是對整個數據集的同一類別像素表達的整合
- 所以,在預測 OOO 和 OMO^MOM 的時候使用共享的分類頭可以使得 H2H_2H2? 能夠 ① 提高圖像內的每個像素的分類能力 ② 從整個數據集中學習到如何將類內拉近,將類間分散開。
3.5 Loss
該 Loss 是一個多任務 loss,涉及到 WWW、OMO^MOM、OOO
WWW 的 loss:
OMO^MOM 的 loss:
OOO 的 loss:
總體 loss:
- α=0.4\alpha=0.4α=0.4
- β=1\beta=1β=1
MMM 的值在反向傳播中不更新
四、效果
學習到的特征的可視化:
在使用了本文的方法之后,學習到的特征的空間分布更明朗了,也就是同一個類別的像素表達更加集中,不同類別的像素特征表達更加分散。
總結
以上是生活随笔為你收集整理的【语义分割】ICCV21_Mining Contextual Information Beyond Image for Semantic Segmentation的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【知识蒸馏】ICCV21_Channel
- 下一篇: 苹果现已推出 Apple Music R