paper: Object-Contextual Representations for Semantic Segmentation
code: PyTorch
Abstract
- OCR是MSRA和中科院的一篇語義分割工作,結合每一類的類別語義信息給每個像素加權,再和原始的pixel特征concat組成最終每個像素的特征表示,個人理解其是一個類似coarse-to-fine的語義分割過程。
- 目前cityscape的分割任務中,排名最高的還是HRNetv2+OCR,參考paperswithcode
- OCR的整體方法流程圖如下
Details
- OCR的motivation是為了將每個pixel和其對應的類別信息結合起來,構造更加魯棒的像素的特征表達。下圖和ASPP的對比能夠比較明顯看出來。
- 每一個像素最終的特征表達方式如下面的公式及處理流程如下所示:
- step1: 計算一個coarse的segmentation結果,即文中說的soft object region
- 實現過程:從backbone(ResNet或HRNet)最后的輸出的FM,再接上一組conv操作,然后計算cross-entropy loss
- step2: 結合圖像中的所有像素計算每個object region representation,即公式中的\( f_k \)
- 實現過程:對上一步計算的soft object region求softmax,得到每個像素的類別信息,然后再和原始的pixel representation相乘
- step3: 利用object region representation和原始的pixel representation計算得到pixel-region relation,即得到公式中的\( w_ik \)
- 實現過程:將object region representation和pixel representation矩陣相乘,再求softmax
- step4: 計算最終每個像素的特征表示
- 實現過程:將step3的結果object region representation矩陣相乘,得到帶有權重的每個像素的特征表示,並和原始的pixel representation連接到一起
- step1: 計算一個coarse的segmentation結果,即文中說的soft object region
- 代碼
- 論文讀完,暈暈乎乎的,沒想明白按文中的表述怎么實現,看代碼發現還是比較清晰的,文中提到的多種轉換全部是通過不同size的conv實現的
- OCR的整體流程
- step2對應的代碼
- step3對應的代碼
- 如下的OCR流程圖,更為清晰的表示整體流程,以及和文中公式之間的對應關系(截圖來自這里)
- 性能
- OCR和其他類似功能模塊的速度對比
- mIoU對比見文中表格(太長了...)
- OCR和其他類似功能模塊的速度對比
寫在后面
- 本文也引入了一個auxiliary loss,PSPNet中也有引入。如果將網絡分成多個stage,而后一個stage依賴與前一個stage的話,對前一個stage引入一個auxiliary loss來監督訓練(loss設置一個權重,PSP中和本文都是0.4),對性能提升是有幫助的