以下為我總結出的論文各部分的主要內容,某些地方可能夾帶着一些自己的理解和思考。
摘要
-
本文內容:SOLO
提出新的、非常簡單的實例分割方法SOLO
-
與許多其他密集預測任務(比如語義分割)相比,實例分割的難點
實例數量的不確定性
-
實例分割的主流方法,把實例分割任務分解為2個分類任務
- 先檢測后分割,比如Mask R-CNN
- 先預測embedding vector,然后通過聚類將像素分組成獨立實例
-
本文提出的SOLO的方法
引入“instance categories”的概念:根據實例的位置和大小為實例中的每個像素分配類別,從而很好地將實例分割轉換為分類問題
-
SOLO的性能
精度與Mask R-CNN持平,比最近的其它single-shot實例分割算法要高。
1. 引言
-
實例分割的難點
語義分割可以視為給每個像素分類的任務,但由於實例數量的不確定性,導致語義分割等任務的方法不能在實例分割中奏效。
-
實例分割算法分類及其優缺點
為克服上面提到的實例分割的難點,最近的實例風格算法(也就是摘要提到的主流方法)可分為兩類,缺點是step-wise、indirect
-
top-down
-
思路
‘detect-then-segment’,先檢測矩形邊界框,然后在每個矩形框內做分割
-
缺點
嚴重依賴精准的矩形檢測框
-
-
bottom-up
-
思路
通過push屬於不同實例的像素並close同一實例中的像素來學習affinity relation(親和關系),為每個像素分配embedding vector,然后通過分組后處理以分離實例。
-
缺點
依賴像素級的embedding learning和分組后處理
-
-
SOLO
基於實例分割標注(有監督訓練),直接預測實例的掩碼
-
-
rethinking
- 圖片中的物體實例的根本區別是什么?
- 以MSCOCO為例,絕大多數情況下,圖片中的兩個實例要么有不同的中心位置、要么有不同尺寸,數據分析如下:
- 98.3%的object pair(實例對)的中心的距離超過30個像素
- 剩下的1.7%,其中40.5%的實例對的大小比例大於1.5
- 所以可以直接通過中心位置和大小區分實例
-
模仿語義分析主流方法
-
語義分析主流方法是用FCN(全卷積神經網絡)輸出N個通道,每個通道負責一個語義類別
-
SOLO模仿語義分析使用FCN的方法,提出“instance categories”的概念,即量化的中心位置center locations和實例大小object sizes
個人思考:這不是和YOLO很像嗎??
-
Locations
- SOLO如何處理Locations,即實例的位置
- SOLO把一張圖片分成a grid of S×S cells(S×S個單元格)即得到S×S個center location classes。
- SOLO根據實例的中心坐標為每個實例分配one of the grid cells,作為該實例的center location category
- DeepMask and TensorMask,pack the mask into the channel axis。SOLO將center location category編碼為channel axis,類似於語義分割中的語義類別。輸出的每個channel代表一個center location category,預測屬於這個center location category的實例的掩碼。
- SOLO這樣處理Location的作用
- 本質上,instance category近似於center location。因此,把每個像素分類到instance category其中,等效於使用回歸從每個像素預測center location。
- 將location預測任務轉換為分類而不是回歸的重要性在於,通過分類,使用固定數量的通道對不同數量的實例進行建模更加簡單明了,同時又不依賴於grouping或者learning embeddings等后處理
- 個人思考:前文強調了實例分割任務中實例的數量是不確定的,導致實例分割很難,可以猜測是之前的方法是回歸,處理實例數量不確定這個情況的方法並不優雅
Sizes
- SOLO如何處理Sizes,即實例的大小
- 使用特征金字塔網絡FPN,為大小不同的實例分配對應大小的特征圖,作為其object size classes。
- 注意FPN旨在檢測圖像中不同大小的實例。在之后,我們根據經驗證明FPN是SOLO的核心組成部分,對分割性能(尤其是大小不同的目標)產生深遠影響。
總結
-
SOLO只需要分割標注,不需要框標注(目前多數方法是需要的),即可完成實例分割
-
在COCO上的性能,摘要里講過
-
通用性:我們通過實例輪廓檢測的任務展示了我們框架的通用性,將實例邊緣輪廓視為one-hot的二進制掩碼,幾乎沒有任何修改,SOLO可以生成合理的實例輪廓。
-
SOLO只需解決兩個像素級分類任務
和語義分割一樣,所以可以再參考語義分割領域的進步,提高SOLO
-
本質上,SOLO通過離散量化將坐標回歸轉換為分類
避免了通常在諸如YOLO之類的檢測器中使用的坐標規范化和對數轉換
2. 相關工作
回顧了一些和SOLO最相近的實例分割工作
Top-down Instance Segmentation
SOLO和下面的方法相比, 不受限於anchor和box
-
典型方法
在邊界框里做分割
-
FCIS
FCIS:由region proposal network(RPN)生成的ROI中assemble(計算?)position-sensitive score maps,以預測實例掩碼。
-
Mask R-CNN
擴展Faster R-CNN,具體來講是在其中添加一個branch(用於在檢測到的邊界框中分割實例)
-
PANet
基於Mask R-CNN,進一步增強了特征表示以提高准確性
-
Mask Scoring R-CNN
基於Mask R-CNN,添加了mask-IoU分支(預測所預測的掩碼的質量並對掩碼進行評分)以提高性能。
-
TensorMask
采用dense sliding window方法,通過預定義的windows和scales在每個像素的本地窗口中分割實例
Bottom-up Instance Segmentation
這類方法通過將像素分組為圖像中的實例(任意數量)來進行實例分割,可通過損失函數實現,這類方法的精度一般比Top-down的要低,特別是有復雜場景和語義類別的圖片。
-
SGN
把語義分割分解為一系列分組問題
-
SSAP
學習像素對相關性金字塔,即兩個像素屬於同一實例的概率,並通過級聯圖分區順序生成實例掩碼。
Direct Instance Segmentation
目前沒有這種方法,最近提出的一些方法被視為‘semi-direct’(半直接)。
這兩個方法都是分步驟的,或者是折中的(比如粗略表示掩碼)
-
AdaptIS
先預測點,然后生成位於這些點中的實例的實例的掩碼
-
PolarMask
PolarMask提出使用極坐標表示來編碼掩碼,並將每個像素的掩碼預測轉換為距離回歸。
-
本文SOLO
圖片作為輸入,直接輸出掩碼和概率;全卷積;不需要box不需要分組也不需要ROI等
3. 我們的方法SOLO
3.1 問題表述
-
實例分割做什么
給定一張圖片,如果其中存在實例,要求返回實例的掩碼
-
SOLO
- 將實例分割任務分為兩個同時的任務:category-aware prediction和instance-aware mask generation
- 把圖片分成a uniform grids(S×S),如果物體中心在某個grid cell中,那這個grid cell負責預測語義類別和掩碼
3.1.1 語義類別
-
對於每個grid,SOLO都會預測C維輸出表示語義類別概率,其中C是類別數,這些概率取決於grid cell。
-
如果將輸入圖像划分為S×S grids,則輸出空間將為S×S×C,如圖2(頂部)所示。
-
該設計基於以下假設:each cell of S×S grids必須屬於一個單獨的實例,因此僅屬於一個語義類別。
這個假設很重要
-
在推理期間,C維輸出表示每個對象實例的各類概率。
3.1.2 實例掩碼
-
與語義類別預測並行,每個正grid cell還將生成相應的實例掩碼。
-
對於輸入圖像I,如果將其划分為S×S grids,則總共最多會有\(S^2\)個預測的掩碼。我們在3D輸出張量的第3維(通道)上顯式編碼這些掩碼。具體而言,實例掩碼輸出的尺寸為\(H_I×W_I×S^2\),第k個通道將負責在grid(i,j)處分割實例,其中k = i·S + j(i和j從零開始)。為此,在語義類別和與類無關的掩碼之間建立了一對一的對應關系(圖2)。
-
預測實例掩碼的直接方法是采用完全卷積網絡,例如語義分割中的FCN。
-
FCN的缺點,這一點不是很懂
常規的卷積運算在某種程度上在空間上是不變的,空間不變性對於某些任務(例如圖像分類)是理想的,因為它會引入魯棒性。
但是,這里我們需要一個空間變化(spatially variant)的模型,或者更精確地說,是位置敏感的模型,因為我們的分割掩碼的條件是網格單元和必須由不同的功能通道分隔。 -
最后還要進行NMS
3.2. 網絡結構
- FPN會為每個級別生成具有不同大小的特征圖金字塔,並具有固定數量的通道(通常為256-d)。網格數可能在不同的金字塔上有所不同。
- 這些特征圖用作每個預測頭的輸入:語義類別和實例掩碼。
- 頭部的權重在不同級別上共享。
3.3 SOLO Learning
3.3.1 標簽分配
-
正負樣本
如果網格(i,j)在任一個實例的中心區域,則視其為正樣本;否則,它為負樣本。
-
中心區域
center (cx, cy),factor,中心區域為(cx, cy, w×factor, h×factor),factor=0.2
3.3.2 損失函數
-
損失函數
L = Lcate + λLmask
3.4. 推理
- 給定輸入圖像,然后通過骨干網絡和FPN推理,並獲得網格(i,j)處的類別得分pi,j和相應的掩碼mk,其中k = i·S + j,因為我們通常保持行優先(有效)。
- 使用置信度閾值0.1來過濾低置信度的預測,然后選擇得分排名前500位的掩碼,並將其輸入到NMS操作中,使用閾值0.5將預測的軟掩碼二進制化,保留前100個實例蒙版進行評估。
4. 實驗
- 測試集:COCO
- 訓練細節
- synchronized SGD
- 8 GPUs with a total of 16 images per mini-batch、
- 36 epochs
- initial learning rate of 0.01,which is then divided by 10 at 27th and again at 33th epoch
- All models are initialized from ImageNet pre-trained weights
- 比例抖動:較短的圖像邊從640到800像素中隨機采樣。
4.1. 主要結果
引言和摘要里講過
4.2. SOLO如何工作/起效?
核心在圖4,可以看到預測出的掩碼。每個網格將僅對應一個實例,多個相鄰的掩碼通道可以預測同一個實例,最后使用NMS抑制這些冗余掩碼。
4.3. Ablation Experiments
-
Grid number
在MS COCO上,S = 12已經可以達到27.2 AP。
將網格數提高到24時,SOLO獲得29.0 AP。此結果表明,我們的單比例SOLO可適用於對象比例變化不大的某些場景。 -
Multi-level Prediction
單尺度SOLO在分割多尺度實例方面遇到了困難,使用FPN的多級預測可以很大程度上解決此問題,獲得了35.8 AP,分割效果的所有指標均得到了很大的改善。
-
CoordConv
標准卷積可以在某種程度上具有空間變異性,兩個或多個CoordConv無法帶來明顯的改善。
這表明單個CoordConv已經使預測對空間變體/位置敏感。 -
Loss function
Focal Loss比BCE要好,因為實例掩碼的大多數像素都在背景中,而FL可通過減少分類良好的樣本的損失來減輕樣本不平衡問題。但DL最好,而無需手動調整損耗超參數。
通過仔細調整平衡超參數並引入其他訓練技巧,可以大大改善BCE和FL的結果。
但是,這里的要點是,DL使訓練通常變得更加穩定,並且在不使用大量啟發式方法的情況下更有可能獲得良好的效果。- BCE
- 正樣本的掩碼損失權重設置為10,將像素權重設置為2
- FL
- 掩碼損失權重設置為20
- DL
Dice Loss可將像素視為一個整體,並可以自動在前景像素和背景像素之間建立適當的平衡。
- BCE
4.4. SOLO-512
較小SOLO版本,輸入分辨率較小,旨在加快推理速度。SOLO-512和SOLO之間的其他訓練和測試參數相同。
34.2 mask AP,SOLO-512達到了22.5 FPS的模型推斷速度
5. Decoupled SOLO
- output space is decreased from H×W×\(S^2\) to H×W×2S
- 表7所示,Decoupled SOLO的性能與普通SOLO相同,由於輸出空間大大減少,因此在訓練和測試期間,Decoupled SOLO需要的GPU內存要少得多。
6. 錯誤分析
表8,對於每個預測的二進制掩碼,我們用標注計算IoU,然后用最重疊的標注替換。
- SOLO AP:37.1
- Ground Truth AP:68.1
7. SOLO for 實例輪廓檢測
- 改變掩碼預測分支的優化目標
- 使用OpenCV的findContours函數將COCO中的標注轉換為實例輪廓,然后使用該輪廓優化掩碼分支。
使用Focal Loss來優化輪廓檢測,其他設置與實例分割基線相同。
8. 結論
- 與Mask R-CNN相比,具有競爭優勢。
- 端到端可訓練,以恆定推理時間將輸入圖像直接映射到所需的實例掩碼。
- 首次引入“實例類別”這一新概念,將實例分割變為為簡單的分類任務,從而比所有當前方法都更加簡單。
作者:@臭咸魚
轉載請注明出處:https://www.cnblogs.com/chouxianyu/
歡迎討論和交流!