Instance Segmentation 比 Semantic Segmentation 難很多嗎?
Image semantic segmentation 到 Image instance segmentation的過渡,難度在哪?網路模型的設計上主要需要有哪些考究?
最近也在做跟這個相關的問題,來分享一下自己的見解.
圖1. 這張圖清楚說明了image classification, object detection, semantic segmentation, instance segmentation之間的關係. 摘自COCO dataset (https://arxiv.org/pdf/1405.0312.pdf)
Semantic segmentation的目的是在一張圖裡分割聚類出不同物體的pixel. 目前的主流框架都是基於Fully Convolutional Neural Networks (FCN,詳情見https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn.pdf).FCN區別於物體識別網路諸如AlexNet最主要的差別是pixel-wise prediction,就是每個像素點都有個probability, 而AlexNet是一張圖一個prediction.AlexNet或者VGG通過一個小的trick(caffe/net_surgery.ipynb at master · BVLC/caffe · GitHub)就可以轉變成FCN. 這裡有個八卦是當年FCN得到CVPR"15 best paper honorable mention的時候, Yann LeCun等人出來吐槽這個"FCN"的概念早就有了,AlexNet裡面的fully connected layer (FC)本身就是個誤導,因為FC layer可以看成是1x1的convolution, 本來就可以輸入任意大小的圖片.
Semantic segmentation的其他典型代表還有諸SegNet, Dilated Convolution Net, deconvolutionNet
等.這裡又有兩個八卦,比如SegNet相關的幾篇論文連續投了兩年多到現在都還沒中(作者要哭暈在廁所里了),以及關於deconvolution, dilated convolution, atrous convolution這幾個概念的爭論(這裡有篇分析我覺得不錯Dilated Convolutions and Kronecker Factored Convolutions).在我個人使用過程中,相對於FCN等帶skip connection結構的網路,我更喜歡類似於Dilated Net這種桶狀結構的網路,原因是帶skip connection的網路由於需要normalize不同layer之間的activation, 比較難訓練. Liu Wei有一篇專門分析這個layer之間normalization trick的論文(http://www.cs.unc.edu/~wliu/papers/parsenet.pdf).
切入正題,semantic segmentation把圖片里人所在的區域分割出來了,但是本身並沒有告訴這裡面有多少個人,以及每個人分別的區域.這裡就跟instance segmentation聯繫了起來,如何把每個人的區域都分別分割出來,是比semantic segmentation要難不少的問題.基於semantic segmentation來做instance segmentation的論文,大家可以看看Jifeng Dai最近的幾篇論文:https://arxiv.org/pdf/1512.04412v1.pdf,https://arxiv.org/pdf/1603.08678v1.pdf. 大致做法是在dense feature map上面整合個instance region proposal/score map/RoI, 然後再分割.
這裡instance segmentation本身又是跟object detection是緊密相關的.最近Facebook放出來的DeepMask和SharpMask(GitHub - facebookresearch/deepmask: Torch implementation of DeepMask and SharpMask), 很明確地點出了兩者關係. 我之前跟Piotr Dollar也討論過這個問題, 他自己覺得: semantic segmentation is a bad direction, we should focus on object detection. 我不贊同他的觀點,但覺得還是挺有道理:) 這裡可以想像, 如果object proposal和object detection能做得非常好, instance segmentation本身這個問題就能比較好的解決. COCO detection challenge (COCO - Common Objects in Context) 裡面一個track, 就是要求predict segmentation mask rather than bbox, 可惜今年只有兩個隊參加(你參加的話再差都是第三喲:p) .
總結一下, instance segmentation其實是semantic segmentation和object detection殊途同歸的一個結合點, 是個挺重要的研究問題. 我非常期待後面能同時結合semantic segmentation和object detection兩者優勢的instance segmentation演算法和網路結構.
圖2. Scene Parsing (MIT Scene Parsing Challenge 2016) from ADE20K dataset (ADE20K dataset). 每張圖的每個物體以及物體的物體都有清楚的標註.
最後,我個人覺得之所以大家猛搞semantic segmentation而忽略instance segmentation的一個原因是沒有好的數據集. pascal dataset裡面一張圖片里的instance數量非常少, 而且物體種類也只有20種. 這裡自薦下我自己的工作, 我們組最近搞了個Scene parsing dataset and challenge (MIT Scene Parsing Challenge 2016). 這裡scene parsing跟semantic segmentation最大的不同是我們包含了150類概念類別(包括離散物體類別諸如person, car, table, 也包含了很多stuff類別, 如floor, ceiling, wall) , 圖片裡面每個pixel都需要被predict. 分割floor, ceiling, wall這些類對於robot navigation等應用也是非常重要,但是他們並沒有instance segmentation的概念. 今年我們的scene parsing challenge採用semantic segmentation的框架進行, 大家提出了不少新穎的模型, 也挺受歡迎 . 我們明年的scene parsing challenge (ICCV"17) 將設立instance segmentation track, 希望能推動instance segmentation 的進步.
再然後,其實semantic segmentation可以用到很多地方,比如說我們lab之前的一個PhD把這個用在medical imaging中癌症細胞的檢測和分割(https://people.csail.mit.edu/khosla/papers/arxiv2016_Wang.pdf),拿了獎,還開了自己的startup如果要說 Instance Segmentation 比 Semantic Segmentation 難,主要原因應該是在網路結構的設計上。對於 Semantic segmentation,現有結構基本都是 FCN 及其變種的 end2end 訓練,是一個十分乾淨整潔的框架。實現也簡單,就是一個 per-pixel 的分類問題。FCN 後面加上各種奇奇怪怪的 hack 之類的還都能漲點 (CRF, dilated convolution 之類的)。。可問題在於 FCN 無法做 detection 啊。。
然而 instance segmentation 就會涉及到要先做一遍 detection 然後再在 detection 結果裡面估計 segmentation 的結果。雖說光是 detection 的話,框架也很整潔,然而如何在 detection 框架內加入 segmentation 這個問題並不是十分 trivial,而且正因為這個先做 detection 再來 segmentation 的設計思想,一旦 box proposal 做壞了,box proposal 裡面的 mask 也會 GG(所以COCO leader board 上面 object detection 的絕對數字要比 object segmentation 高一截)。所以做好 instance segmentation 就需要同時對 semantic segmentation 和 object detection 有了解。
這個領域雖然做的人沒有 detection 那麼多,但是一一對應的脈絡實際上是十分清晰的。
R-CNN ------ SDS (simultaneous detection and segmentation)
Fast RCNN ----- CFM (convolutional feature masking)
RPN ----- Deep Mask (Learning to Segment Object Candidates)
Faster RCNN ----- MNC (RPN + Deep Mask + CFM)
-----------------------------------------------------------------------------------------------------
另外最近的 Instance FCN, R-FCN, FCIS,解決的正是開篇提到的 FCN 不能做 detection 的問題,這三篇 paper 其實還是挺有意思。
然後給自己的paper打個廣告,FCIS (Fully convolutional instance-aware semantic segmentation) 部分解決了我剛剛提到的 「一旦 box proposal 做壞了,box proposal 裡面的 mask 也會 GG」 的問題。(所以COCO leader board 上面 FCIS 的 detection vs segmentation 結果是 39.7 vs 37.6,反觀 Google 就是 41.6 vs 33.8)。代碼也剛剛開源:msracver/FCIS
難不難,大家看看兩個任務在cityscapes數據集Benchmark Suite上的情況:
semantic segmentation:
instance-level results:
雖說兩個任務評估標準不一樣,但是難易程度還是可以從結果比較出來的。
(最近稍微讀了一點這方面的)Semantic segmentation用一個FCN能解決得不錯了。Instance semantic segmentation其實就和detection差不多了。從FCN到FCIS裡面就借鑒了很多R-CNN這條路線的技巧,而kaiming he最近有用MASK-RCNN把那條路子打了回去。從FCN開始,最初的困難應該來自如果讓CNN能區分不同位置的物體,這一方面衍生除了很多辦法,比如COCO 2015里MSRA那篇用了一個Multi-task的方法,COCO 2016MSRA那篇又用了position-sensitive的map來做到instance-aware。從稍難的segmentation的問題到實質上是detection的問題還是有些跨度的。
推薦閱讀:
※如何評價李飛飛和李佳加盟谷歌?
※如何通俗易懂地講解 Photoshop 中的「通道」概念?
TAG:人工智慧 | 機器學習 | 計算機視覺 | 深度學習(Deep Learning) | Caffe(深度學習框架) |