前一陣子好忙啊,好久沒更新了。最近正好挖了新坑,來更新下。因為之前是做檢測的,而目前課題順道偏到了instance segmentation,這篇文章簡單梳理一下從檢測、分割結果到instance segmentation結果問題在哪里,以及已有的解決方案。
初見instance segmentation
分類、檢測、分割是有天然的聯系的:從目的來講,三個任務都是為了正確的分類一張(或一部分)圖像;進一步,檢測和分割還共同負責定位任務。這些任務之間的不同是由於人在解決同一類問題時,對問題的描述方案不同導致的,是人為的。因而,可以找到一種共同的描述(或任務),即instance segmentation。那么,instance segmentation既然集成了上述3種任務,如果有上述3種任務的結果,是不是通過簡單組合就可以得到instance segmentation的結果呢?顯然是不行的。
為什么不可以呢?或者說需要補全什么才可以得到instance segmentation的結果呢?我們先從每個任務分開來看,
- 檢測:已經編碼了空間上的相關性,但是缺少精細的定位(即segmentation mask)
- 分割:已經具備了精細的定位,但是缺少空間相關性
解釋一下空間上的相關性,它對於檢測和instance segmentation都非常重要。空間上的相關性即同一個像素由於處在物體的不同相對位置,它對於不同物體可能語義並不相同,如圖中人的框雖然覆蓋了部分羊,但是該框並不會分到羊這個類別,而是分到了人,正是由於空間上,羊沒並有主導整個框。既然如此,解決方案似乎顯而易見了,缺什么補什么就行了。
常用instance segmentation范例
依然沿着以上思路,精細定位比較容易補出來,那么空間相關性如何編碼呢?與檢測相似,可以采用roi pooling或position sensitive map解決。由於region是不規則的類似one-stage detection的anchor box的方案,就比較難實現了。我們可以開發出幾種不同的解決方案:
- segmnetation-first:rank segmentation proposal, cut segmentation map
- 使用分割結果作為初步結果,進一步加工產生結果
- instance-first
- 使用bounding box作為初步結果,然后在框內估計region mask
- simutaneously
- 借助position-sensitive map同時產生instance segmentation和detection的結果
對於每一個方案,將簡要介紹一篇相關論文,加深理解。僅僅是為了闡述明白每一個解決方案,文章不是特別新,大家多包涵了。
Segmnetation-first
Rank Segmentation Proposal: Simultaneous detection and segmentation [2] (2014)
這篇文章解決方案非常直接,對每個segmentation proposal提取特征,對他們進行分類,就可以得到instance segmentation的結果。采用兩種特征:1)segmentation proposal bounding box內的特征,2)以上特征mask掉segmentation proposal的背景部分。
Cut Segmentation Map: Instancecut: from edges to instances with multi-cut [9] (2017)
也可借助另外一種方案使用segmentation map:利用邊緣圖對segmentation map進行分割,分割成不同的物體。[9]使用instance segmentation的標注訓練了邊緣檢測器,注意這里的“邊緣”是boundary,而不是edge。然后,使用這個邊緣圖划分超像素,以超像素為單位對圖進行划分和貼標簽。這里假設了一個物體一定對應一個聯通域(這個假設是有問題的,有時候由於遮擋等問題可能對應多個聯通域)。
其中,image partition采取非深度學習的方法進行求解,是CRF和multicut的結合。我自己對這部分的理解如下。
輸入有三種:
其中,u,v是兩個超像素,l,l'是他們的label。
為了給所有超像素選取標簽(xu,l=1表示超像素u標注為l)采用conditional random field(CRF),這里先假設同標簽的超像素之間不存在邊緣。
利用已有的數學工具可有效的對最后一個方程式求解。
為了分割屬於不同物體但被標為同一類別的像素,采用multicut的方法。
最后一個方程的不等式約束,使得圖中所有的cycle只能包含0個或2個以上cutting edge。設想如果沒有第二個cutting edge那么一定存在一個cycle可以聯通兩個區域,即無法形成聯通域;如果有2個或以上cutting edge則可以將cycle徹底階段,只能形成區域內和區域外的循環。 同樣,利用已有的數學工具可有效的對方程式求解。
最后,為了同時對上述兩個問題求解,只需要優化一個共同的目標,即:
Instance-first
這類方法比較多,如著名的mask RCNN就屬於這種方法,思路是先進行檢測,再對檢測框中的內容進行分割。
我選的這篇文章Instance-aware semantic segmentation via multi-task network cascades [11] 年代更早一點,從結構圖中,可以清晰的看到先進行類別無關的物體檢測(rpn),然后對框內的部分估計一個類別無關的mask,最后對mask進行分類(與[1]方法相似)。
注意在stage3上再加入一個額外的box regression支路,這個結構就可以進行多次疊加。
Simutaneously
這里介紹Fully convolutional instance-aware semantic segmentation [12],把它分為simutaneously不知道是否合適,不過這個方法確實比較不同。
由於物體的部件很難完全重合在一起,那么通過部件位置+類別就可以區分出不同物體,因而采用inside score map。outside score map是為了同時進行檢測和分割任務,outside部分雖然不屬於物體,但是對bounding box有貢獻,也需要有響應,因而又設置了outside score map並使用pixel-wise max的方式對inside和outside map進行結合,投票出檢測結果。
總結
Reference
- Segmentation First
- Resort segment proposals
- [1] B. Hariharan, P. Arbela ́ez, R. Girshick, and J. Malik. Simultaneous detection and segmentation. In ECCV. 2014.
- [2] B.Hariharan,P.Arbela ́ez,R.Girshick,andJ.Malik.Hyper- columns for object segmentation and fine-grained localization. In CVPR, 2015.
- [3] J. Dai, K. He, and J. Sun. Convolutional feature masking for joint object and stuff segmentation. In CVPR, 2015
- Learn to propose
- [4] P. O. Pinheiro, R. Collobert, and P. Dollar. Learning to segment object candidates. In NIPS, 2015.
- [5] P. O. Pinheiro, T.-Y. Lin, R. Collobert, and P. Dolla ́r. Learning to refine object segments. In ECCV, 2016.
- [6] J. Dai, K. He, Y. Li, S. Ren, and J. Sun. Instance-sensitive fully convolutional networks. In ECCV, 2016.
- Cut semantic segmentation map into instances
- [7] A. Arnab and P. H. Torr. Pixelwise instance segmentation with a dynamically instantiated network. In CVPR, 2017.
- [8] M. Bai and R. Urtasun. Deep watershed transform for in- stance segmentation. In CVPR, 2017.
- [9] A. Kirillov, E. Levinkov, B. Andres, B. Savchynskyy, and C. Rother. Instancecut: from edges to instances with multi- cut. In CVPR, 2017.
- [10] S. Liu, J. Jia, S. Fidler, and R. Urtasun. SGN: Sequen- tial grouping networks for instance segmentation. In ICCV, 2017.
- Resort segment proposals
- Instance First
- [11] J. Dai, K. He, and J. Sun. Instance-aware semantic segmentation via multi-task network cascades. In CVPR, 2016.
- Mask RCNN (2018)
- Simultaneously
- [12] Y. Li, H. Qi, J. Dai, X. Ji, and Y. Wei. Fully convolutional instance-aware semantic segmentation. In CVPR, 2017.