PointRend

論文題目:PointRend: Image Segmentation as Rendering
論文鏈接:https://arxiv.org/pdf/1912.08193.pdf
代碼地址:https://github.com/zsef123/PointRend-PyTorch


  語義分割問題。提出一個新型上採樣方法,針對物體邊緣的圖像分割進行優化,使其在難以分割的物體邊緣部分有更好的表現。

問題提出

  我們分割網絡會存在一個問題,對平滑區域過採樣,對邊界欠採樣
  類比渲染問題,二者有類似的問題要解決:即物體邊緣難以處理。高頻區域多采樣、低頻區域少採樣
  在典型的語義分割網絡中(如FCN、DeepLab),在CNN內部一般都會相對輸入圖像進行降採樣,然後再想辦法上採樣回去。實例分割網絡中,Mask R-CNN 生成的 Mask 僅 28x28,這顯然對物體邊緣的預測十分不利。希望可以在低代價下仍然得到精細的分割結果。

大致思路

  模型最容易誤判的 pixel基本上都在物體邊緣,  邊緣只佔了整個物體中非常小的一部分。
  所以基於這樣的一個想法,作者提出可以每次在預測出來的mask中只選擇Top N最不確定的位置進行細分預測。

具體實現

PointRend 模塊包含三個主要組件:
1. 點選擇策略:選擇少量真值點執行預測,避免對高分辨率輸出網格中的所有像素進行過度計算;
2. 對選中的每個點提取逐點特徵表示:使用每個選中點在 f 規則網格上的 4 個最近鄰點,利用 f 的雙線性內插計算真值點的特徵。因此,該方法能夠利用 f 的通道維度中編碼的子像素信息,來預測比 f 分辨率高的分割;
3. point head:一個小型神經網絡,用於基於逐點特徵表示預測標籤,它獨立於每個點。每個細分點的特徵可以通過Bilinear插值得到,每個位置上的classifier通過一個簡單的MLP來實現。這其實是等價於用一個1*1的conv來預測,但是對於中心很確定的點並不計算。整體的示意圖如下:

在這裏插入圖片描述

  • 預測頭
      使用一個輕量級的預測頭,對目標框產生一個粗略的掩模預測。對於每個邊界框,我們使用雙線性插值從FPN的P2層提取14×14特徵映射。特徵是在邊界框內的規則網格上計算的(此操作可以看作是ROIallign的一個簡單版本)。接下來,我們使用了一個步長爲2×2的卷積層,該卷積層具有256個輸出通道,後面跟着ReLU,從而將空間大小減小到7×7。最後,類似於掩模R-CNN的盒形頭部,應用兩個1024寬的隱藏層的MLP,對每個K類產生7×7的掩模預測。
    
  • 點選擇策略
      推理:
      在每次迭代中,PointRend使用雙線性插值對之前預測的分割進行上採樣,然後在這個密度更大的網格上選擇N個最不確定的點(例如,對於二值預測,概率接近0.5的點)。然後,PointRend爲這N個點中的每一個點計算點特徵表示,並預測它們的標籤。這個過程是重複的,直到分割是上採樣到所需的分辨率。一個coarse-to-fine的過程
    

在這裏插入圖片描述

	訓練:
	在訓練期間,PointRend還需要選擇訓練點來構造 point-wise features,以訓練point head。原則上,點的選擇策略可以類似於推理中使用的細分策略。但是, subdivision 引入了順序步驟,這對使用反向傳播訓練的神經網絡不太友好。相反,對於訓練,我們使用基於隨機採樣的非迭代策略。

在這裏插入圖片描述

(1)從均勻分佈中隨機抽取kN點(k>1)來生成候選點。
(2)通過插值所有kN點的粗預測值,從kN個點中選取βN(β ∈[0,1])個最不確定的點。使用0.5與概率之間的距離作爲逐點不確定性度量。
(3)在從均勻分佈中選取 (1 - β)N 個點。
  • 點的特徵提取
    PointRend通過組合低層特徵 (fine-grained features) 和高層特徵 (coarse prediction),在選定的點上構造逐點特徵。
    Fine-grained features:對每個採樣點從CNN特徵圖上提取的特徵向量。
    Coarse prediction features:來自網絡的一個粗略預測。以實例分割爲例,coarse prediction可以是Mask R-CNN中 7×7 輕量級mask head的輸出。
    
    細粒度特徵雖然可以解析細節,但也存在兩方面的不足:
    (1)不包含特定區域信息,對於實例分割任務,就可能在同一點上預測出不同的標籤。
    (2)用於細粒度特徵的特徵映射,可能僅包含相對較低級別的信息。
    這就需要粗略分割預測 (coarse prediction features) 來進行補充,提供更多全局背景。	
    
  • 點的分類預測
      通過一個多層感知機(MLP)來對每個被選中的點進行分類預測,所有點共享MLP的權重,MLP可以通過標準的任務特定的分段損失來訓練。
    

實驗結果

在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述


總結

 PointRend 方法要點總結來說是一個迭代上採樣的過程:
   while 輸出的分辨率 < 圖片分辨率:
 	1、 對輸出結果進行2倍雙線性插值上採樣得到 coarse prediction_i。
   2、挑選出 N 個“難點”,即結果很有可能和周圍點不一樣的點(例如物體邊緣)。
   3、對於每個難點,獲取其“表徵向量”,“表徵向量”由兩個部分組成,其一是低層特徵(fine-grained features),通過使用點的座標,在低層的特徵圖上進行雙線性插值獲得(類似 RoI Align),其二是高層特徵(coarse prediction),由步驟 1 獲得。
   4、使用 MLP 對“表徵向量”計算得到新的預測,更新 coarse prediction_i 得到 coarse prediction_i+1。這個 MLP 其實可以看做一個只對“難點”的“表徵向量”進行運算的由多個 conv1x1 組成的小網絡。

參考

https://blog.csdn.net/huicheng_chen/article/details/103781237
https://zhuanlan.zhihu.com/p/98351269

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章