CVPR2021佳作 | One-Shot都嫌多,Zero-Shot實例樣本分割


 

歡迎關注“ 計算機視覺研究院 圖片

計算機視覺研究院專欄

作者:Edison_G

給一個包含了未知種類多個實體的沒訓練過的新樣本(the query image),如何檢測以及分割所有這些實例???

 

圖片

長按掃描二維碼關注我們

一、分割回顧

實例分割(Instance Segmentation)

圖片

實例分割(Instance Segmentation)是視覺經典四個任務中相對最難的一個,它既具備語義分割(Semantic Segmentation)的特點,需要做到像素層面上的分類,也具備目標檢測(Object Detection)的一部分特點,即需要定位出不同實例,即使它們是同一種類。因此,實例分割的研究長期以來都有着兩條線,分別是自下而上的基於語義分割的方法和自上而下的基於檢測的方法,這兩種方法都屬於兩階段的方法,下面將分別簡單介紹。

以下摘自於:CSDN- 三十八元

兩階段實例分割 自上而下(Top-Down)自上而下的實例分割方法的思路是:首先通過目標檢測的方法找出實例所在的區域(bounding box),再在檢測框內進行語義分割,每個分割結果都作為一個不同的實例輸出。 圖片這類方法的代表作就是大名鼎鼎的Mask R-CNN了,如下圖,總體結構就是Faster R-CNN的兩階段目標檢測,box head用來做檢測,增加了mask head用來做分割,模型大家都很熟,細節就不再贅述。 圖片 自下而上(Bottom-Up)自下而上的實例分割方法的思路是:首先進行像素級別的語義分割,再通過聚類、度量學習等手段區分不同的實例。 圖片自下而上的工作並不多,通常的做法都是通過Instance Embedding的做法來做。舉一篇CVPR2017的文章為例,論文名稱:Semantic Instance Segmentation with a Discriminative Loss Function參考代碼:https://github.com/Wizaron/instance-segmentation-pytorch這篇論文的實例分割做法是:(1)語義分割:首先在第一個階段做了語義分割,得到了所有的物體mask;(2)像素嵌入:再通過使用一個判別式損失函數來訓練網絡,網絡的優化目標是將圖像每個像素投影到 n維特征空間后,同屬於一個實例的像素盡量靠近,形成一個 cluster, 每一個實例對應一個 cluster, 不同 cluster則盡量遠離;(3)后處理:最后使用聚類的方法(如mean-shift)來輸出不同的實例。 圖片文章的關鍵在於提出的判別式損失函數,它的組成如下: 圖片(1)拉力。懲罰同一實例中所有元素與其平均值之間的距離。也就是說,獲取一個實例的所有像素,並計算平均值。這種拉力會將同一實例中的所有像素點拉近到嵌入空間中的同一個點。簡單說,就是減少每一個實例的嵌入方差。(2)推力。獲取所有中心點 (在嵌入空間embedding中,而不是空間中心),然后將它們推得更遠。(3)正則化。中心點不應該離原點太遠。文章的超參數設置和迭代方法還是有比較多的坑,感興趣的可以去看原文和代碼。更多關於Instance Embedding的文章可以看看[1]。單階段實例分割下面就聊聊單階段實例分割(Single Shot Instance Segmentation),這方面工作其實也是受到了單階段目標檢測研究的影響,因此也有兩種思路,一種是受one-stage, anchot-based 檢測模型如YOLO,RetinaNet啟發,代表作有YOLACT和SOLO;一種是受anchor-free檢測模型如 FCOS 啟發,代表作有PolarMask和AdaptIS。目前(2020年1月)來看,單階段實例分割的精度最高的模型應該是新出的BlendMask(COCO, 41.3),在精度和速度上都超越了Mask R-CNN,已經很接近兩階段模型(SOTA應該是HTC?)了。 YOLACT&YOLACT++  ICCV 2019原文:https://arxiv.org/abs/1904.02689代碼(官方):https://github.com/dbolya/yolactYOLACT是我最早看的一篇單階段實例分割的文章,主要參照了單階段檢測模型RetinaNet,因此把它歸類於單階段的實例分割。YOLACT將實例分割任務拆分成兩個並行的子任務:(1)通過一個Protonet網絡, 為每張圖片生成 k 個 原型mask(2)對每個實例,預測k個的線性組合系數(Mask Coefficients)最后通過線性組合,生成實例mask,在此過程中,網絡學會了如何定位不同位置、顏色和語義實例的mask。具體網絡結構如下: 圖片
(1)Backbone:Resnet 101+FPN,與RetinaNet相同;(2)Protonet:接在FPN輸出的后面,是一個FCN網絡,預測得到針對原圖的原型mask(3)Prediction Head:相比RetinaNet的Head,多了一個Mask Cofficient分支,預測Mask系數,因此輸出是4*c+k。 圖片此外,論文中還用到了Fast NMS方法,比原有的NMS速度更快,精度減得不多。之后,作者又提出了改進版的YOLACT++,改進之處主要有:(1)參考Mask Scoring RCNN,添加fast mask re-scoring分支,更好地評價實例mask的好壞;(2)Backbone網絡中引入可變形卷積DCN;(3)優化了Prediction Head中的anchor設計YOLACT和YOLACT++的實驗效果如下: 圖片

二、One shot實例分割

論文地址:https://arxiv.org/pdf/1811.11507.pdf

動機

該文聚焦在一個前沿的問題:給一個包含了未知種類多個實體的沒訓練過的新樣本(the query image),如何檢測以及分割所有這些實例。這個問題和現實應用密切相關,因為檢測/分割的落地場景中不可能有類似MS-COCO或者OpenImages之類數據集包含了非常多的實例,現實任務中的實例是窮舉不完的,如何從有限種類和數量的樣本中學習到一些知識並推演到新的種類中是很具有挑戰和實際意義的。該問題的研究大多還是停留在分類任務上,檢測和分割少。

主要亮點:

1.提出siamese Mask R-CNN框架,能夠僅給一個樣本,就能夠較好的檢測&分割新的該樣本同類實例;

2.構建了一個新的評測標准在MS-COCO。

圖片

Different from MRCNN:
正如名字一樣,主體框架就是由SiameseNetwork + Mask R-CNN。改進前后的框架比對如下圖。

圖片

主要的4處不同已經用紅色標識,即R、Siamese、Matching、L1。R代表了輸入不僅有Query Image還有Reference Image;SiameseNetwork則對兩者分別進行encode;Matching是將編碼后的2個feature vector進行逐一的匹配;L1則是算diff的手段。具體的匹配流程如下圖。

圖片

該框架的結果如下:

圖片

圖片

三、Zero shot實例分割

研究者提出了一個新的任務稱之為零樣本實例分割(Zero-Shot Instance Segmentation)——ZSI。ZSI的任務要求在訓練過程中,只用已經見過並有標注的數據進行訓練,但在測試和推理時能夠同時分割出見過和沒見過的物體實例。

首先用數學語言對該任務進行描述,然后提出了一個方法來解決ZSI的問題。新方法包括零樣本檢測器(Zero-shot Detector)、Semantic Mask Head、Backgro Aware RPN和Synchronized Background Strategy。實驗結果表明,提出的方法不僅在ZSI的任務上效果不錯,在零樣本檢測任務上也取得了比之前已有研究更好的表現。

亮點:(部分采用:https://www.jiqizhixin.com/articles/2021-03-17)

1:針對零樣本實例分割任務,提出應對的算法,該算法是基於Backgro Aware的檢測-分割框架;

2:定義了零樣本分割(ZSI)自己獨特的測試基准;

3:測試結果表明在ZSD任務上超越了已有的方法,且在ZSI任務上的結果很有競爭力。

圖片

整個零樣本實例分割的框架如下圖所示。對於一張輸入圖像來講,首先要使用骨干網絡(backbone),BA-RPN和ROI Align來提取視覺特征和背景的詞向量,然后經過Sync-bg模塊后分別送入零樣本檢測器和語義分割頭,從而得到實例分割的結果。

圖片

零樣本檢測器的設計細節如下圖所示,采用了編碼-解碼結構,在測試/推理時只是用解碼器的Te。

圖片

語義分割頭的結構如下圖4所示,它是一個encoder-decoder的架構,在訓練階段,使用encoder來把圖像的特征編碼到語義-文字特征向量。然后使用decoder把上面構建的語義-文字特征向量去重建圖像的任務:檢測,分割等。

圖片

 

實驗:

圖片

圖片 圖片


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM