【語義分割】PointRend


 本文記錄了博主閱讀ICCV2019一篇關於語義分割論文的筆記

論文題目:《PointRend: Image Segmentation as Rendering

原文地址:https://arxiv.org/abs/1912.08193

開源地址:https://github.com/zsef123/PointRend-PyTorch(第三方針對語義分割任務的復現)

附上自己組會做的ppt:鏈接:https://pan.baidu.com/s/1mM0FPLSbDqazsZqAb-D7pA  提取碼:zl50

動機

  大多數現有的語義分割網絡都是將圖片放入網絡中,首先進行編碼,然后再想辦法進行上采樣,但是在進行decoder的時候,都會存在一個直接的4x~16x上采樣操作,以deepv3plus為例,最后直接進行4x的上采樣,而pspnet進行8x的上采樣。那么仔細想想,分割是一個特別精細化的任務(尤其是邊緣),直接進行這種大尺度的上采樣是不是存在問題呢?而且直接這樣上采樣對我們的邊緣會特別的不利。

 

 

 

    然后我們再從采樣的角度理解語義分割這個任務,現有的網絡都是對圖片進行均勻划分,每個像素點相當於一個采樣點,然后使用分割算法,對采樣點進行分類。但是,我們都知道圖片中存在低頻(相對平滑,顏色變化小)和高頻區域(變化明顯,物體邊緣),對於低頻區域來說,大概率屬於某一類,我們是不是不用采樣過多的點,而針對高頻區域來說,如果采樣的點太過稀疏,最終可能導致分割出來的物體邊界過於平滑,不太真實。因此,我們分割網絡會存在一個問題,對平滑區域過采樣,對邊界欠采樣。所以作者想到一個重要的思路:優化采樣方法。而類似的問題在圖形學圖像渲染中同樣會遇到,它往往就是采樣某種采樣方式進行采樣,例如,高頻區域多采樣、低頻區域少采樣。然后計算每個采樣的像素值。借助這種思路,作者將分割問題看成一個類似渲染問題來處理,先通過一中合理的采樣方式進行非均勻采樣,計算出每個采樣點的分割結果;然后再將結果映射到規則的grid里面。如下圖所示,我們可以先看一下可視化的效果。

 

 

 

方法

PointRend模塊主要由如下三部分構成:
  1)點選擇策略:選擇少數的一些點(難點)進行預測,避免在高分辨率的輸出中過量的計算所有的像素;
  2)point-wise特征表示:提取被選擇出來的點的特征,這些的特征通過雙線性插值計算,然后沿着通道維度編碼子像素信息預測分割;
  3)point head:小的網絡,進行預測。

 

點選擇策略

  測試:選點工作主要是受圖形學中adaptive subdivision的啟發,adaptive subdivision的主要思想是通過只計算那些最可能與周圍像素不同的點去高效的渲染圖像,所有其他的位置,都通過插值的方法計算輸出的值。每一步,我們迭代的渲染輸出的mask,也就是需要經過一個coarse-to-fine的過程。coarse的預測是由分割的head得到的。在每次的迭代中,PointPend使用雙線性插值上采樣前一步分割預測結果,然后在這個更密集的特征圖中選擇N個最不確定的點,比方說概率接近0.5的點。然后計算這N個點的特征表示並且預測它們的lables。這個過程一直被重復,直到上采樣到需要的大小。其中的一次迭代如下圖所示:

 

  對於M0xM0的輸入,想要得到MxM的輸出。PointRend要求不超過Nlog2(M/M0)個點的預測,這個值比MxM小的多,這樣可以減少計算量。例如:M0=7,M=224,執行5部subdivision。選擇N=28*28,PointRend僅僅會預測28*28*4.25個點(為什么是4.25,我也不太理解,感覺應該是5),比224*224的1/15還小。

  訓練:訓練過程中PointRend選擇一些點然后重構他們的特征。原則上,選擇策略與推理時應該一樣,但是由於subdivision的操作是不可微的,沒辦法直接嵌入到具有BP的網絡中訓練,因此,訓練過程中,使用基於隨機采樣的非迭代策略。在特征圖上選擇N個點(這里的N與推理時的N不同),它用來選擇不確定的區域,同時保持一定程度的統一覆蓋,使用如下三個原則:

  1)Over generation: 在均勻分布中隨機采樣over-generation kN個點候選點(k>1)

  2)Importance sampling: 重點關注着插值后kN個候選點中不確定的點並且對不確定性進行估計。在kN中選擇βN個最不確定的點,β∈[0, 1]

  3)Coverage:剩下的(1-β)N個點從均勻分布采樣

  訓練的時候,預測值和損失函數僅僅在N個采樣點上計算,更加高效比BP通過subdivide步驟。這個設計類似於Faster R-CNN中的 RPN+Fast R-CNN。

 

 

 特征重建的Point-wise特征表示和進行預測的Point Head

  PointRend重建特征通過結合細粒度的特征和粗糙的預測概率。

  細粒度的特征:為了使得PointRend渲染好的分割細節,從特征圖的每個采樣點提取特征向量。因為一個點有一個2D的坐標系,在特征圖上使用雙線性插值計算特征向量。可以使用單尺度的特征圖,僅僅只用resnet第2個殘差塊得到的特征圖,也可以使用多尺度的特征圖,同時使用resnet第2到第5個殘差塊的特征圖。

  粗糙預測圖:細粒度的特征可以加強細節信息,但是在兩方面是不足的。第一,他們不能得到包含明確區域的信息, 並且因此兩個實例的邊界框重疊的點將具有相同的細粒度特征。因此,對於實例分割的任務,在區域可以預測同一點的不同標簽,需要額外的區域特定信息。第二,由於細粒度的特征圖可能僅僅包含一些low-level的信息。在這種情況下,具有更多上下文和語義信息的特征圖是有幫助的。這個問題對實例分割和語義分割都有影響。基於上面這些考慮,第二個特征類型是一個粗糙的分割預測圖(具有明確的上下文和語義信息),每個點有一個K為的向量表示K類的預測。粗糙預測圖用來提供全局信息,然而通道傳遞語義類別。這些粗糙特征圖與顯存的結構相似,訓練過程中被監督。對於實例分割任務而言,可以是Mask R-CNN mask head 7*7的輸出,對於語義分割,可以是步長16的特征圖。

  Point Head:給定每個選定點的point-wise特征表示,Head使用簡單的多層感知機進行預測。在所有的點上MLP共享權重。類似於圖卷積或者PointNet。

 

實驗

實例分割(COCO和cityscapes上進行)

試驗設置

              評價指標使用AP(3次試驗的中值coco 5次試驗的中值cityscapes)

    baseline:MaskR-CNN ResNet50 + FPN

    具體的試驗設置請看如下表格:

    

             

       

試驗結果:

 

 

 

 

 

 

 

語義分割

試驗設置

              數據集cityscapes

    評價指標miou(5次試驗的中值)

              Baseline:semantic-FPN(resnet101)  Deeplabv3(resnet103) resnet103指的是將res101第一個7*7替換層3個3*3的殘差網絡,這個backbone在語義分割中經常會用到

             

試驗結果

             


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM