CVPR目標檢測與實例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020)


CVPR目標檢測與實例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020)
1. 目標檢測:FCOS(CVPR 2019)
目標檢測算法FCOS(FCOS: Fully Convolutional One-Stage Object Detection),該算法是一種基於FCN的逐像素目標檢測算法,實現了無錨點(anchor-free)、無提議(proposal free)的解決方案,並且提出了中心度(Center—ness)的思想,同時在召回率等方面表現接近甚至超過目前很多先進主流的基於Anchor box目標檢測算法。
基於像素級預測一階全卷積目標檢測(FCOS)來解決目標檢測問題,類似於語音分割。目前大多數先進的目標檢測模型,例如RetinaNet、SSD、YOLOv3、Faster R-CNN都依賴於預先定義的Anchor box。相比之下,本文提出的FCOS是anchor box free,而且也是proposal free,就是不依賴預先定義的Anchor box或者提議區域。通過去除預先定義的Anchor box,FCOS完全的避免了關於Anchor box的復雜運算,例如訓練過程中計算重疊度,而且節省了訓練過程中的內存占用。更重要的是,本文避免了和Anchor box有關且對最終檢測結果非常敏感的所有超參數。由於后處理只采用非極大值抑制(NMS),所以本文提出的FCOS比以往基於Anchor box的一階檢測器具有更加簡單的優點。
Anchor box缺點
l 檢測表現效果對於Anchor box的尺寸、長寬比、數目非常敏感,因此Anchor box相關的超參數需要仔細的調節。
l Anchor box的尺寸和長寬比是固定的,因此,檢測器在處理形變較大的候選對象時比較困難,尤其是對於小目標。預先定義的Anchor box還限制了檢測器的泛化能力,因為,它們需要針對不同對象大小或長寬比進行設計。
l 為了提高召回率,需要在圖像上放置密集的Anchor box。而這些Anchor box大多數屬於負樣本,這樣造成了正負樣本之間的不均衡。
l 大量的Anchor box增加了在計算交並比時計算量和內存占用。
FCOS詳細介紹
FCOS優勢
l FCOS與許多基於FCN的思想是統一的,因此可以更輕松的重復使用這些任務的思路。
l 檢測器實現了proposal free和anchor free,顯著的減少了設計參數的數目。設計參數通常需要啟發式調整,並且設計許多技巧。另外,通過消除Anchor box,新探測器完全避免了復雜的IOU計算以及訓練期間Anchor box和真實邊框之間的匹配,並將總訓練內存占用空間減少了2倍左右。
l FCOS可以作為二階檢測器的區域建議網絡(RPN),其性能明顯優於基於錨點的RPN算法。
l FCOS可以經過最小的修改便可擴展到其他的視覺任務,包括實例分割、關鍵點檢測。
算法詳細介紹


1.1全卷積一階檢測器
FCOS首先使用Backone CNN(用於提取特征的主干架構CNN),另s為feature map之前的總步伐。
與anchor-based檢測器的區別
第一點
· anchor-based算法將輸入圖像上的位置作為Anchor box的中心店,並且對這些Anchor box進行回歸。
· FCOS直接對feature map中每個位置對應原圖的邊框都進行回歸,換句話說FCOS直接把每個位置都作為訓練樣本,這一點和FCN用於語義分割相同。
FCOS算法feature map中位置與原圖對應的關系,如果feature map中位置為[公式] ,映射到輸入圖像的位置是 [公式]
第二點
· 在訓練過程中,anchor-based算法對樣本的標記方法是,如果anchor對應的邊框與真實邊框(ground truth)交並比大於一定閾值,就設為正樣本,並且把交並比最大的類別作為這個位置的類別。
· 在FCOS中,如果位置

落入任何真實邊框,就認為它是一個正樣本,它的類別標記為這個真實邊框的類別。
這樣會帶來一個問題,如果標注的真實邊框重疊,位置

映射到原圖中落到多個真實邊框,這個位置被認為是模糊樣本,后面會講到用多級預測的方式解決的方式解決模糊樣本的問題。
第三點
· 以往算法都是訓練一個多元分類器
· FCOS訓練C個二元分類器(C是類別的數目)
與anchor-based檢測器相似之處
與anchor-based算法的相似之處是FCOS算法訓練的目標同樣包括兩個部分:位置和類別。
FCOS算法的損失函數為:


其中

是類別損失,

是交並比的損失。
1. 2. 用FPN對FCOS進行多級預測
首先明確兩個問題:
l 基於Anchor box的檢測器由於大的步伐導致低召回率,需要通過降低正的Anchor box所需的交並比分數來進行補償:在FCOS算法中表明,及時是大的步伐(stride),也可以獲取較好的召回率,甚至效果可以優於基於Anchor box的檢測器。
l 真實邊框中的重疊可能會在訓練過程中造成難以處理的歧義,這種模糊性導致基於fcn的檢測器性能下降:在FCOSzhong ,采用多級預測方法可以有效地解決模糊問題,與基於Anchor box的模糊檢測器相比,基於模糊控制器的模糊檢測器具有更好的性能。
前面提到,為了解決真實邊框重疊帶來的模糊性和低召回率,FCOS采用類似FPN中的多級檢測,就是在不同級別的特征層檢測不同尺寸的目標。
與基於Anchor box不同的地方
· 基於Anchor box的檢測器將不同尺寸的Anchor box分配到不同級別的特征層
· FCOS通過直接限定不同特征級別的邊界框的回歸范圍來進行分配
此外,FCOS在不同的特征層之間共享信息,不僅使檢測器的參數效率更高,而且提高了檢測性能。
3.Center-ness


通過多級預測之后發現FCOS和基於Anchor box的檢測器之間仍然存在着一定的距離,主要原因是距離目標中心較遠的位置產生很多低質量的預測邊框。
在FCOS中提出了一種簡單而有效的策略來抑制這些低質量的預測邊界框,而且不引入任何超參數。具體來說,FCOS添加單層分支,與分類分支並行,以預測"Center-ness"位置。
center-ness(可以理解為一種具有度量作用的概念,在這里稱之為"中心度"),中心度取值為0,1之間,使用交叉熵損失進行訓練。並把損失加入前面提到的損失函數中。測試時,將預測的中心度與相應的分類分數相乘,計算最終得分(用於對檢測到的邊界框進行排序)。因此,中心度可以降低遠離對象中心的邊界框的權重。因此,這些低質量邊界框很可能被最終的非最大抑制(NMS)過程濾除,從而顯着提高了檢測性能。
實驗結果
1)召回率


在召回率方便表現接近目前最先進的基於Anchor box的檢測器。
2)有無Center-ness的結果對比


“None”表示沒有使用中心。“中心度”表示使用預測回歸向量計算得到的中心度。“中心度”是指利用提出的中心度分支預測的中心度。中心度分支提高了所有指標下的檢測性能。
3)與先進的一階、二階檢測器效果對比

與目前最主流的一些一階、二階檢測器對比,在檢測效率方面FCOS優於Faster R-CNN、YOLO、SSD這些經典算法。



2. Mask R-CNN(CVPR 2019)
首先回顧一下之前最經典的實例分割方法,‘先檢測再分割’,在這方面做到極致的算法是Mask RCNN。


Mask R-CNN屬於基於兩階段的檢測算法,在檢測框的基礎上進行像素級的語義分割,簡化了實例分割的難度,同時取得了stoa的性能,在'先檢測再分割’ 這一范式上做到了極致。
2.1. 簡介
Mask R-CNN是He Kaiming大神2017年的力作,其在進行目標檢測的同時進行實例分割,取得了出色的效果,其在沒有任何trick的情況下,取得了COCO 2016比賽的冠軍。其網絡的設計也比較簡單,在Faster R-CNN基礎上,在原本的兩個分支上(分類+坐標回歸)增加了一個分支進行語義分割,如下圖所示:
2.2. Mask R-CNN詳細介紹
那么為什么該網絡會有如此好的效果,又有哪些網絡細節呢?下面詳細逐一介紹。
在介紹Mask R-CNN之前,首先了解一下什么是分割,因為Mask R-CNN是做這個的,所以這個首先要搞清楚,看下圖,主要介紹了幾種不同的分割,其中Mask RCNN做的是其中的instance segmentation.
語義分割(semantic segmentation):對圖像中逐像素進行分類。
實例分割(instance segmentation):對圖像中的object進行檢測,並對檢測到的object進行分割。
全景分割(panoptic segmentation):對圖像中的所有物體進行描述。
下面這張圖很好的表示了這幾者分割的區別,如下圖可見,全景分割的難度最大:
Mask R-CNN如何取得好結果
首先實例分割(instance segmentation)的難點在於:需要同時檢測出目標的位置並且對目標進行分割,所以這就需要融合目標檢測(框出目標的位置)以及語義分割(對像素進行分類,分割出目標)方法。在Mask R-CNN之前,Faster R-CNN在目標檢測領域表現較好,同時FCN在語義分割領域表現較好。所以很自然的方法是將Faster R-CNN與FCN相結合嘛,作者也是這么干的,只是作者采用了一個如此巧妙的方法進行結合,並且取得了amazing的結果。
在以前的instance segmentation中,往往是先分割然后識別,這往往是低效的,並且准確率較低,就比如Dai【論文中提到的】,采用級聯的方法,先通過bounding-boxes生成segment區域,然后進行分類。
那么Mask R-CNN是怎么做的呢?
Mask R-CNN是建立在Faster R-CNN基礎上的,那么我們首先回顧一下Faster R-CNN,Faster R-CNN是典型的two stage的目標檢測方法,首先生成 RPN候選區域, 然后候選區域經過Roi Pooling進行目標檢測(包括目標分類以及坐標回歸),分類與回歸共享前面的網絡。
Mask R-CNN做了哪些改進?Mask R-CNN同樣是two stage的,生成RPN部分與Faster R-CNN相同,然后,Mask R-CNN在Faster R-CNN的基礎上,增加了第三個支路,輸出每個ROI的Mask(這里是區別於傳統方法的最大的不同,傳統方法一般是先利用算法生成mask然后再進行分類,這里平行進行)
自然而然,這變成一個多任務問題
網絡結構如下
下圖所示是兩種典型的Mask R-CNN網絡結構,作者借鑒FPN(不了解FPN可以點擊參考此博文)的思想,分別設計了兩種網絡結構,左邊的是采用ResNet or ResNeXt作為網絡的backbone提取特征,右邊的網絡采用FPN網絡作為backbone進行特征提取,並且作者指明,使用FPN作為基礎網絡的效果其實是最好的。


損失函數的設計是網絡的精髓所在
Mask R-CNN的損失函數為:


這里主要介紹一下

​是對每個像素進行分類,其含有Kmm維度的輸出,K代表類別的數量,m*m是提取的ROI圖像的大小。

​被定義為 average binary cross-entropy loss(平均二值交叉熵損失函數)。這里解釋一下是如何計算的,首先分割層會輸出channel為K的Mask,每個Mask對應一個類別,利用sigmoid函數進行二分類,判斷是否是這個類別,然后在計算loss的時候,假如ROI對應的ground-truth的類別是

​,則計算第

​個mask對應的loss,其他的mask對這個loss沒有貢獻計算二值交叉熵搞的公式如下圖中的函數接口。這里不同於FCN的是,FCN是對每個像素進行softmax分類,分為K個類別,然后計算softmax loss。那在inference的時候選擇哪個mask作為最終的輸出呢?作者根據分類分支的預測結果進行判斷,是不是很神奇,並且作者解釋到,利用這種方法比softmax效果要好,因為簡化了loss並且利用了分類信息,應該會有提升的。
另一個創新點:ROI Align
另外由於分割需要較准確的像素位置,而Faster R-CNN方法中,在進行Roi-Pooling之前需要進行兩次量化操作(第一次是原圖像中的目標到conv5之前的縮放,比如縮放32倍,目標大小是600,結果不是整數,需要進行量化舍棄,第二次量化是比如特征圖目標是5*5,ROI-pooling后是2*2,這里由於5不是2的倍數,需要再一次進行量化,這樣對於Roi Pooling之后的結果就與原來的圖像位置相差比較大了),因此作者對ROI-Pooling進行了改進,提出了RoI Align方法,在下采樣的時候,對像素進行對准,使得像素更准確一些。
ROI Align是怎么做的呢?
ROI-Align取消了所有的量化操作,不再進行4舍5入,如下圖所示比較清晰,圖中虛線代表特征圖,其中黑框代表object的位置,可見object的位置不再是整數,而可能在中間,然后進行2*2的align-pooling,圖中的采樣點的數量為4,所以可以計算出4個位置,然后對每個位置取距離最近的4個坐標的值取平均求得。采樣點的數量怎么計算? 這個可以自己設置,默認是設置4個點。 2*2是4個bin。


ROI-Warp:在Roi-Pooling前面增加一層,將Roi區域縮放到固定大小,然后在進行roi-pooling,這樣就減少了量化的操作。
網絡訓練
這里其實跟Faster R-CNN基本一致,IOU > 0.5的是正樣本,並且LmaskLmask L_{mask}Lmask​只在正樣本的時候才計算,圖像變換到短邊 800, 正負樣本比例 1:3 , RPN采用5個scale以及3個aspect ratio。
inference細節
采用ResNet作為backbone的Mask R-CNN產生300個候選區域進行分類回歸,采用FPN方法的生成1000個候選區域進行分類回歸,然后進行非極大值抑制操作,** 最后檢測分數前100的區域進行mask檢測**,這里沒有使用跟訓練一樣的並行操作,作者解釋說是可以提高精度和效率,然后mask分支可以預測k個類別的mask,但是這里根據分類的結果,選取對應的第k個類別,得到對應的mask后,再resize到ROI的大小, 然后利用閾值0.5進行二值化即可。(這里由於resize需要插值操作,所以需要再次進行二值化,m的大小可以參考上圖,mask最后並不是ROI大小,而是一個相對較小的圖, 所以需要進行resize操作。)
2.3. 實驗結果:
實驗效果還是杠杠的,Mask R-CNN輕松打敗了上界冠軍FCIS(其使用了multi-scale訓練,水平翻轉測試,OHEM等)




溶解實驗:
下面一張圖基本上說明了所有的對比問題:


表(a),顯示了網絡越深,效果越好。並且FPN效果要好一些。
表(b),sigmoid要比softmax效果好一些。
表(c,d),roi-align效果有提升,特別是AP75提升最明顯,說明對精度提升很有用。
表(e),mask banch采用FCN效果較好(因為FCN沒有破壞空間關系)
另外作者實驗,mask分支采用不同的方法,方法一:對每個類別預測一個mask ,方法二:所有的都預測一個mask,實驗結果每個類預測一個mask別會好一些 30.3 vs 29.7
對於目標檢測的結果:
對比下表,可見,在預測的時候即使不使用mask分支,結果精度也是很高的,下圖中’Faster R-CNN, ROIAlign’ 是使用ROI Align,而不使用ROI Pooling的結果,較ROI Pooling的結果高了約0.9個點,但是比MaskR-CNN還是低了0.9個點,這個提升,作者將其歸結為多任務訓練的提升,由於加入了mask分支,帶來的loss改變,間接影響了主干網絡的效果。




對於時間消耗來說,Mask R-CNN FPN網絡195ms,比Mask R-CNN, ResNet網絡的400ms要快一些。
人體關鍵點檢測:
與Mask R-CNN進行Mask檢測有什么不同呢?
人體關鍵點檢測,作者對最后m*m的mask進行one-hot編碼,並且,mask中只有一個像素點是foreground其他的都是background。
人體關鍵點檢測,最后的輸出是m^2-way 的softmax, 不再是Sigmoid,作者解釋說,這有利於單獨一個點的檢測。
人體關鍵點檢測, 最后的mask分辨率是56*56,不再是28*28,作者解釋,較高的分辨率有利於人體關鍵點的檢測。
3. 實例分割算法PolarMask(CVPR 2020)
PolarMask基於FCOS,把實例分割統一到了FCN的框架下。把更復雜的實例分割問題,轉化成在網絡設計和計算量復雜度上和物體檢測一樣復雜的任務,把對實例分割的建模變得簡單和高效。PolarMask提出了一種新的instance segmentation建模方式,通過尋找物體的contour建模,提供了一種新的方法供大家選擇。

兩種實例分割的建模方式:
1)像素級建模 類似於圖b,在檢測框中對每個pixel分類
2)輪廓建模 類似於圖c和圖d,其中,圖c是基於直角坐標系建模輪廓,圖d是基於極坐標系建模輪廓


可以看到Mask R-CNN屬於第一種建模方式,而我們提出的PolarMask屬於圖d建模方式。圖c也會work,但是相比圖d缺乏固定角度先驗。換句話說,基於極坐標系的方式已經將固定角度設為先驗,網絡只需回歸固定角度的長度即可,簡化了問題的難度。


PolarMask 基於極坐標系建模輪廓,把實例分割問題轉化為實例中心點分類(instance center classification)問題和密集距離回歸(dense distance regression)問題。同時,我們還提出了兩個有效的方法,用來優化high-quality正樣本采樣和dense distance regression的損失函數優化,分別是Polar CenterNess和 Polar IoU Loss。沒有使用任何trick(多尺度訓練,延長訓練時間等),PolarMask 在ResNext 101的配置下 在coco test-dev上取得了32.9的mAP。 這是首次,我們證明了更復雜的實例分割問題,可以在網絡設計和計算復雜度上,和anchor free物體檢測一樣簡單。我們希望PolarMask可以成為一個簡單且強有效的single shot instance segmentation 的baseline。

PolarMask最重要的特點是:
(1) anchor free and bbox free,不需要出檢測框
(2) fully convolutional network, 相比FCOS把4根射線散發到36根射線,將instance segmentation和object detection用同一種建模方式來表達。

我們選取FCOS嵌入我們的方法,主要是為了simple。FCOS是目前state-of-the-art的anchor-free檢測器,並且十分simple。我們在FCOS的基礎上,幾乎不加任何計算量,就可以建模實例分割問題,並取得competitive的性能,證明了實例分割可以簡化成和目標檢測相同復雜的問題。
此外,FCOS可以看成PolarMask的特殊形式,而PolarMask可以看作FCOS的通用形式,因為bbox本質上是最簡單的Mask,只有0,90,180,270四個角度回歸長度。 我們首次將instance segmentation和object detection用同一種建模方式來表達。
網絡結構


整個網絡和FCOS一樣簡單,首先是標准的backbone + fpn模型,其次是head部分,我們把fcos的bbox分支替換為mask分支,僅僅是把channel=4替換為channel=n, 這里n=36,相當於36根射線的長度。同時我們提出了一種新的Polar Centerness 用來替換FCOS的bbox centerness。
可以看到,在網絡復雜度上,PolarMask和FCOS並無明顯差別。
Polar Segmentation建模


首先,輸入一張原圖,經過網絡可以得到中心點的位置和n(n=36 is best in our setting)根射線的距離,其次,根據角度和長度計算出輪廓上的這些點的坐標,從0°開始連接這些點,最后把聯通區域內的區域當做實例分割的結果。
在實驗中,我們以重心為基准,assign到feature map上,會在重心周圍采樣,作為正樣本,別的地方當做負樣本,訓練方式和FCOS保持一致,采用Focal Loss, 在此,我們提出Polar CenterNess,用來選擇出高質量的正樣本,給低質量的正樣本降低權重。
Polar CenterNess
如何在Polar Coordinate下定義高質量的正樣本?我們通過如下公式定義


其中 d1 d2....dn指的是36根射線的長度,最好的正樣本必須具備dmin ——> dmax.
用一張圖舉例


以看到中間的圖,會出現長度回歸差別很大的問題,而右邊的圖中心點位置就較為合適,到所有輪廓的長度回歸就較為接近,36根射線的距離會比較均衡。 Polar Centerness 可以給右邊圖的點較高的centerness分數,給中間圖的點降低centerness分數,這樣在infernece的時候右邊圖的點分數較高。

根據消融實驗,Polar Centerness可以有效提高1.4的性能,同時不增加網絡復雜度。結果如下圖所展示




Polar IoU Loss
在PolarMask中,需要回歸k(k=36)根射線的距離,這相比目標檢測更為復雜,如何監督regression branch是一個問題。我們提出Polar IoU Loss近似計算出predict mask和gt mask的iou,通過Iou Loss 更好的優化mask的回歸。通過實驗證明,Polar IoU Loss相比Smooth L1loss可以明顯提高2.6個點,同時Smooth L1loss還面臨和其他loss不均衡的問題,需要精心調整權重,這是十分低效的,Polar IoU loss不需要調整權重就可以使mask分支快速且穩定收斂。
那么,Polar IoU Loss如何計算呢?如下圖所展示


可以看到 兩個mask的Iou可以簡化為在dθ下的三角形面積iou問題並對無數個三角形求和,最終可以推倒到如下形式:
我們在論文中還做了如下消融實驗:射線數量的選擇,加不加bbox branch, backbone以及尺寸和速度的trade off. 細節在論文中都有,不一一展開。
上限分析
看到這里,很多人心里都會有一個疑問,射線這種建模方式,對於凹的物體會有性能損失,上限達不到100mAP,PolarMask怎么處理這個問題?
答案是這樣,PolarMask相比Mask R-CNN這種pixel建模的方法,對於形狀特別奇怪的mask的確建模會失敗,但是這並不代表polarmask毫無意義。原因有兩個,(1)Mask R-CNN的上限也到不了100 mAP 因為有下采樣這類操作使得信息損失。(2)不管Mask R-CNN還是PolarMask,他們的實際性能距離100mAP的上限都特別遠。
所以我們目前應該關注如何讓實際網絡性能去更好地趨近於上限。

定量分析分析射線建模的上限:


如圖所示,當采用mass center做instance中心時,當射線數量不斷提高,射線的gt和真實的gt的平均iou高達90%以上,這證明了對於射線建模的性能上限的憂慮還遠遠不需要擔心。現階段需要操心的問題是如何不斷提高基於射線建模的網絡性能。
實驗
最終,配上一圖一表展示一下相比sota的結果


可以看到, 沒用采用任何trick的情況下,PolarMask在resnext101-fpn的情況下,取得了32.9的配置,雖然不是stoa,但是也比較有競爭力。我們目前並沒有采用很多常用的能漲點的trick,比如 ms train和longer training epochs。相比之下,別的one stage方法都不約而同的采用了mstrain和longer training epoches。 我們會進一步改進,爭取再提高性能。


免責聲明!

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



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