如何評價 Kaiming He 的《Learning to Segment Every Thing》?
https://arxiv.org/pdf/1711.10370.pdf
ronghang太厲害了,在我背後工位每天瘋狂輸出!這個題目聽說是Ross想出來的(具體文章就留給別人分析吧hhh)
2017.11.30
簡單看過論文,來總結一發
感覺He的論文中的idea一向都是簡潔、直接。Mask-RCNN直接在Faster-RCNN上面加了一路。這一篇則是通過一個「weight transfer function」直接溝通了detection和segmentation這兩路,很符合直觀感受,效果也很好。
以下記錄下一些個人理解,如有不妥,歡迎糾正。
Mask-RCNN
Mask-RCNN可以分成三個部分(紅框),每個部分各自是一個可訓練的網路
- backbone+PRN:直接提取整圖特徵,得到一個feature-map,然後將這個feature-map輸入PRN,獲得ROI
- mask head:輸入是某一個ROI,輸出維度是WxHxC,其中C是類別數目。對每一種類別進行一個像素級的二分類。例如:取出輸出中的[:, :, 0],這個feature-map是一個經過sigmoid以後的probability map,越接近於1的像素,越可能是屬於標籤為0的類別的掩碼。自然,對應的ground-truth[:, :, 0]是一個二值圖,標出了類別標籤為0的instance。mask head的loss是binary cross entropy。
- box head:生成detection bounding box的,有兩個loss,第一個是multi-class cross entropy,分類誤差;另一個是smoothed L1 loss,標定box的位置。
Weight transfer
這篇文章的核心應該就是引入遷移學習的思想:將box head的特徵遷移到mask head中,這樣對於缺乏mask ground-truth的類別,只要有box ground-truth,依然可以進行有效分割。
首先我們將兩個head network再細分一下:對於每一個head,將除了最後一層以外的部分看成是提取feature,將最後一層的參數稱作「category-specific parameters」。我們以box head為例,見下圖:
紅框框起來的就是真箇box head,對於一個輸入的ROI,首先通過一系列全連接層(FCs)提取feature,然後分兩路分別進行分類和box regression,這兩路都是一個線性映射,映射矩陣也就是「category-specific parameters」。
同樣,在mask head中,最後一層卷積的輸出應該是前面說的那個WxHxC的維度,這一層卷積的核也是「category-specific parameters」。
作者提出以下的見解:
In our work, the parameters of Mask R-CNN』s box head contain class-specific appearance information and can be seen as embedding vectors learned by training for the bounding box object detection task. The class embedding vectors enable transfer learning in our model by sharing appearance information between visually related classes.
我的理解是這樣:「category-specific parameters」的作用是對於輸入的feature,產生一個類別相關的輸出,因此可以看成是對特徵空間的一種編碼。
那麼接下來就產生了一個很自然的想法:增加一個網路,學習從box head category-specific parameters到mask head category-specific parameters的映射,這樣其實就是教會了模型一個問題:給你一個box,圈住了某一個實例,如何把這個實例的mask畫出來。
值得注意的是,在全監督問題中,這個問題是直接在visual space進行的,也就是輸入一個ROI,輸出一個mask。但是在缺失mask ground-truth的情況下,作者提出了在embedding space進行這個過程,也就是用「category-specific parameters」作為visual information的編碼,學習這個編碼的映射,間接解決這個問題。
Segment Every Thing
接下來就是整個模型的全貌了
- 紅框部分就照應了前文所述的內容,每個head network,最後一層之前的作為feature的提取,最後一層是category-specific parameters,用於將feature映射為最終的box/mask輸出。
- 整個數據集分為兩部分:A部分既有box ground-truth又有mask ground-truth,B部分只有box ground-truth。取並集AUB就代表整個數據集。
- 訓練過程中,模型中有三個部分要通過梯度下降進行更新:
- box head network。使用multi-class cross entropy(分類誤差)和smoothed L1 loss(box regression的誤差)進行反向傳播,使用AUB進行梯度下降。
- mask head network。使用binary cross entropy進行反向傳播,使用A進行梯度下降。
- category-specific parameters的映射網路:其實是間接通過mask head network進行參數更新。
- 2和3應該是一次性進行的,也就是用A計算梯度,然後更新權重,但是要注意這時候box head network的權重應該保持不變(實現起來和GAN很像)
- 用A計算梯度以後,box head network肯定是有梯度的,因為映射函數中使用了box head最後一層的參數,但是這部分梯度不用來更新。作者的給出了很符合直覺的解釋:在對box head network進行梯度下降的時候已經使用過AUB了,如果再和mask head一起多用A進行一次梯度下降,那不就是「偏私於」A了嗎?這勢必導致在box detection中個類別的不平衡。
轉自Reddit, 逃~
Pixel-wised segmentation on everything,這個點子在我讀完Ian的GAN之後就想到了,不愧是Kaiming系——但凡你能想到的,大牛肯定早就想到並且實現了!文章還是用了Mask RCNN,典型的MSRA-FAIR流。之前研究了一下Fully Convolutional Nets (FCN),還曾想著用FCN實現這種unsupervised idea!可惜晚了一步(或許晚了一年)……
CVPR2017有一篇論文,《Annotating Object Instances with a Polygon-RNN》,人手動畫個框圈住物體(手動的RPN),然後進入Polygon-RNN model自動生成圖像中物體的邊緣點,完成實體分割。
人手動進行標註確實比較困難。我覺得本文的思路類似,用R-CNN同時進行目標檢測和實體分割,提高分割種類到3000類別。(ImageNet才有1000類別)。
推薦本人的閱讀筆記深度學習從入門到放棄之CV總目錄
為什麼大神們發文章,比我讀文章搞懂文章還快,人和人的差距真的比人和草履蟲還大啊
說個不負責任的想法,可以用fcn做agnostic的背景分割,然後對object detection的結果做預測,也能得到所有物體的分割,還不需要任何分割的標註
已然對提出這類問題的學術價值無感了,都開始有點煩大牛加持的論文了,人家發個論文,且不論做的如何,總是被宣傳的多牛逼牛逼的!跪舔的姿勢不要太難看!
知乎出這種問題的速度總是遠遠快於大家拜讀論文的速度的,鴨梨山大
標題越來越霸氣了。:)
推薦閱讀:
※怎麼評價 Facebook 的 Relay 框架?
※中美互聯網公司中,工程師和產品經理的職責和定位有何差異?
※Facebook Timeline 的發布將對 Facebook 營銷造成什麼影響?
※Facebook 董事會成員有哪些人?
※如何評價 1 月 21 日李毅吧等 100 多個貼吧聯合出征 Facebook?
TAG:Facebook | 人工智慧 | 機器學習 | 加州大學伯克利分校UCBerkeley | 神經網路 |