天天看點

【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion

論文:Learning to Segment Every Thing

連結:https://arxiv.org/abs/1711.10370

【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion
  • 這篇文章是發表在2018的CVPR上的文章,文章的名字起的很霸氣,示例分割所有的東西。下面本部落格對這篇文章進行帶有PPT的圖檔進行講解,若有描述不對的地方,還請各位讀者指教。
目錄
  • Introduction
  • Mask^x R-CNN
  • Experiment
  • Conclusion
  • 文章的一作和四作都是來自加利福尼亞大學,四作是教授;另外的三個人都是來自Facebook,其中三作是何凱明(敲一敲黑闆)。本部落客要從以下四個方面對這篇文章進行闡述。
    【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion

Introduction

【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion
  • 對于我們的示例分割的任務而言,目前最多隻能分割出大概100個種類,而其強烈的監督性導緻其過分的依賴訓練樣本,加上其對訓練樣本的品質要求很高,這限制了示例分割的拓展性。為了能分割新的種類,隻能增加訓練樣本的數量,該操作實在是太耗費時間和人力,分割示例的樣本标注與目标檢測的樣本标注相比會難很多。
  • 為此,作者提出一個這樣一個問題:是否能夠訓練出一個這樣的示例分割的模型,該模型能夠在不學習全部的示例分割的标注,而有能力去分割所有的種類的圖檔?
  • 針對這個問題,本文提出了這樣一個任務:部分監督性的示例分割任務。
    【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion
  • 對于這個partially supervised,其實就是把整個資料集分成兩部分學習,一部分是全監督學習,一部分是半監督學習。具體而言,在全監督學習下,是一小部分帶有mask annotations的子資料集,而在半監督學習下,其資料集是隻有bounding box資訊的資料集。這兩個種資料集的不同就在于,全監督下的資料集包含了mask的相關資訊,半監督的沒有。
  • 前文有談到,示例分割的标注會比bounding box的标準會困難很多,而且在很多資料集中bounding box的資訊也很完善。是以,基于以上,作者在想:是否能夠通過現在較多的bounding box的資訊中,挖掘出instance mask的相關資訊呢?是否可以将bounding box轉換成instance mask呢?
    【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion
  • 對于我們的示例分割的問題,其主要分為兩個子問題:目标檢測問題和mask的預測問題,而Mask R-CNN這個網絡就很适合解決這兩個問題。是以本文的網絡架構是在這個網絡架構中進行實作的。
    【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion
  • 在我們的introduction部分,本文就貼出了一個比較好的示例分割的效果圖。重點可以看到我們的紅框,這個紅框就是在訓練的時候隻提供了bounding box的資訊,可以看出結果挺好的,對于這種比較抽象的概念(如冰箱的把手)都能夠很好的分割出來。

    Mask^x R-CNN

    【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion
  • 本文就是在我們的mask rcnn上運用上遷移學習的方法和思想,想辦法将我們的bounding box的資訊遷移學習到我們的instance mask的相關資訊。具體而言,就是将bounding box的資訊通過本文提出來的一個映射函數映射成為instance mask的相關資訊。以此,就能通過bounding box資訊來得到instance mask的資訊,進而能夠将所有的示例進行分割。
    【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion
  • 首先,是幾個符号的說明。C表示的是everything,是我們所有的種類。A和B是C的兩個子集,對于A子集,它含有詳細的資訊,有mask的資訊(是以可以用來做全監督);對于B子集,它隻含有bounding box的相關資訊(是以可以用來做半監督)。
    【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion
  • 敲黑闆!!這就是本文的網絡惹。上面的一行就是做detection的網絡分支,下面的一行就是做mask prediction的網絡分支。權重Wseg是通過一個T的函數來得到,這個T是由若幹個全連接配接組成的網絡(多少個全連接配接層,是否有激活函數呢?具體怎麼實作的呢,後文的實驗會詳細說明)。
  • 值得關注的是兩個分支的一個訓練資料集:1 detection的資料集是AUB的bounding box資訊;2 mask prediction的資料集隻有A的mask相關資訊。(我知道你還有不懂的,請看下文詳細分解)
    【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion
  • 對于模型訓練,本文提出了兩種方式:stage-wise training 和 end-to-end training.
  • 首先,對于第一種stage-wise training的方式而言,其就相當于兩步走的政策。如上面這張PPT中所示,第一步,先用AUB訓練好上半部分(即Faster RCNN);第二步,固定CNN主體網絡和目标檢測分支的參數,訓練示例分割分支。
  • 這樣分成兩個步驟來訓練網絡,可以先訓練出detection的網絡分支。敲黑闆!!第一步結束後我們的Wdet權重是固定下來惹。
    【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion
  • 第二種是端到端的訓練方式。其實就是第一種方式兩個訓練一起來。但是會出個問題:AUB的boxes損失和A的mask損失進行反向傳播,但是Wdet通過T函數隻能接收到來自A的mask loss。T函數是連接配接box資訊和mask資訊的橋梁,但目前隻能接收到來自A的mask損失的梯度,是以為了更加均衡,即學習bounding box資訊能更好的遷移,隻對參數 θ θ 進行反向傳播更新求導,不對 Wdet W d e t 求導。
    【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion
  • 本文也探究了mask heads的類型提出了兩種方案。(1) an FCN head. 采用一個全卷積網路去預測 M∗M M ∗ M 的mask,偏向擷取局部資訊;(2) an MLP head. 采用幾個全連接配接層去預測 M∗M M ∗ M 的mask,偏向擷取全局資訊。一個擷取局部資訊,一個擷取全局資訊,是以他們倆是屬于互補的關系。到底使用哪個mask head,或者甚至兩個結合起來效果如何呢,作者在實驗部分有詳細的說明。

Experiment

【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion
  • 在實驗部分首先來了解一下第一大實驗的資料集,是在COCO上選取的80個類别。對于這80個類,分為了A和B兩種模式:A為具有box和mask資訊的資料集,B為隻具有box資訊的資料集。同時,針對這80類,又分為20類、60類,其中這20類和PASCAL VOC資料集上類别相同,這60類不在PASCAL VOC資料集上,是以這20類又稱為“voc”,60類稱為“non-voc”。
    【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion
  • 這是本文的baseline,是由Mask R-CNN網絡加上一個FCN的mask prediction head組成的。
    【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion
  • 首先,是本文第一大實驗的(a):探究weight transfer function 的不同輸入結果的效果。
    【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion
  • 一共有5種對比的方式。随機一類的高斯向量作為輸入;采用GloVe向量訓練好的NLP詞向量作為輸入;box head分類器的權重;box regression的權重;box head分類器和box regression的權重。
  • 另外說明一下:voc –> non-voc的意思:訓練集為voc(20類),測試集為non-voc(60類)。
  • 結論:weight transfer function 的輸入為cls+box效果最好。
    【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion
  • 其次,是本文第一大實驗的(b):探究weight transfer function,這個T函數的不同實作方式的效果(前文說了這個T函數是由全連接配接組成的,那麼問題來了:具體多少層,是否使用激活函數,使用啥激活函數呢?本實驗告訴你答案)。
    【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion
  • 通過對比實驗,可以看出不同數量的全連接配接層和不同激活函數對最後的結果是有影響的。
  • 結論:T函數為2個全連接配接層,以LeakyReLU為激活函數去得到效果最好。
【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion
  • 再者,是本文第一大實驗的(c):前文有說到,mask head類型的問題,到底使用MLP還是FCN呢?本實驗進行了關于不同類型的mask branch 的對比,尤其是驗證了MLP mask branch的有效性。
    【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion
  • 通過這個實驗,展現出不同的FCN、MLP組合帶來的不同效果。class-agnostic 和transfer已經包含了FCN作為Mask head,其不同就在于transfer在class-agnostic的基礎上加上了本文提出來的T函數,即增加了weight transfer function。
  • 結論:實驗效果最好的為transfer+MLP的形式,也進一步論證了FCN與MLP之間的互補關系。
    【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion
  • 最後,是本文第一大實驗的(d):前文有說到,實驗也分為了兩種方式:stage-wise training和end-to-end。本實驗室就是來探究到底哪個方式的效果會更好。與此同時,在第二種端到端的方式中,存在 Wdet W d e t 權重是否更新的問題(前文直接說明了結果,不更新),也在本實驗中得到不更新的理由。
    【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion
  • 通過本實驗,很明顯可以看出e2e的訓練方式效果會好很多。
  • 結論:訓練方式為e2e,不更新 Wdet W d e t 權重下的網絡評估結果最好。
    【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion
  • 第二個實驗:探究setB中的AP與setA中訓練樣本數量的關系。

    -結論:setA中的類别instance mask sample的數量越多,在setB中的效果就越好。

    【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion
  • 第三個實驗:實驗效果展示:上行表示的是baseline的效果,下行表示的是本文提出的方法。左邊兩清單示的是來自“voc”中的圖檔,右邊兩清單示的是來自“non-voc”中的圖檔。其中,着重可以看紅框,這個是在訓練中隻提供了bounding box資訊的。尤其可以看到狗和人的分割,效果比baseline的要好。
    【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion
    • 第四個實驗:本文的方法與其他方法進行比較,取得比較好的效果。
【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion
  • 這個為第五個實驗,也是第二大實驗。在大規模的資料集上進行的實驗。将COCO作為了A資料集,另外從Visual Genome資料集取出将近3000個類的資料集作為B。A與B的交集為空。訓練的方式使用的是第一種:stage-wise training的方式。
  • 這個圖是論文中選取了六張,其他圖各位讀者可以從論文原文中檢視。可以看出效果會比較好,特多的紅框,大部分都能取得較好的結果。但是在給出的例子中,能分割出獨立的樹,但是遇到這種樹林,分割的效果就不是很好,這個可以看到PPT左上角的圖。

Conclusion

【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion

- 本文主要做了三件事:第一,提出了部分監督性的學習任務,在大規模資料集中也能取得比較好的效果。第二,本文提出了T函數(weight transfer function)能很好的對bounding box的資訊進行遷移學習成mask的相關資訊。第三,本文的網絡中各資料集中取得了較好的分割效果。

【論文學習筆記】Learning to Segment Every Thing (2018_CVPR)IntroductionMask^x R-CNNExperimentConclusion

- 歡迎各位留言交流!

繼續閱讀