後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?


前 言


深度學習助力目標檢測達到了一個前所未有的高峰。自 2014 年以來,目標檢測框架分為two-stage 和 one-stage 兩大類,前者以經典方法 Faster R-CNN 為代表,後者以 YOLO 和 SSD 為主要框架。近年來,兩類最深刻的idea:更好的基礎網絡 & 融合不同卷積層的特徵疊加在經典方法上,產生了大量變體,本文以三類主要框架為基礎,速覽後Faster R-CNN 時代下的目標檢測方法。


01

簡單回顧

所謂目標檢測,實則是從屬於計算機視覺中的一項任務。它的目標是定位圖像中的物體,並且給出其具體類別。在自動駕駛車輛,智能監控中,目標檢測的意義十分重大。而作為評判一個目標檢測系統的標準,我們有三個重要的指標。

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

第一,IOU,也即判別預測的方框和真實的方框有多接近的一個指標。

第二,是 mAP(mean Average Presion),在多個類別的檢測中,每一個類別都可以調整閾值,算出召回率從0到1時的準確率(同一召回率取最高的準確率),計算準確率的平均值,而後再對於所有類求平均得到 mAP。這個值介於0到1之間,且越大越好。

第三,是 fps,用於評判系統速度有多快。

目標檢測算法的目標即為:定位更準、速度更快、分類更精確。有了這些指標,還需要有數據集來對算法進行評估。這裡介紹一下兩類最常用的通用數據集:

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

左:PASCAL VOC, 右:COCO

1、PASCAL VOC 數據集。這個數據集中有20個類別,如person,bird,cat,bicycle等。

2、微軟的 COCO 數據集,這個數據集中一共有80個類別,面向於室內,室外。

它們大多面向於這類生活中的場景。在目標檢測的特定領域應用中,也有特定的數據集。如,加州理工行人檢測數據集,KITTI 自動駕駛算法數據集,可以看到它們的場景都是用車輛在實際的路口中拍攝的。

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

左:加州理工行人數據集, 右:KITTI

豐富而巨大的數據集極大地推動了目標檢測領域的發展。與之對應的,還有不停提升的計算力和算法的更新。隨著 2012 年 AlexNet 卷積神經網絡贏得 ImageNet 分類賽的冠軍,應用了深度學習的計算機視覺取得了一系列重大突破,其中最亮眼之一目標檢測領域,一系列優秀的框架被提出,不少已經投入商用。

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

整個的目標檢測框架也分為兩大類。第一是 two-stage 兩步走的框架,先進行區域推薦,再進行目標分類;另一個是 one-stage 端到端的框架,應用一個網絡把所有事情都做了,一步輸出結果。

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

2014 年 R-CNN 框架的提出是最早將卷積網絡應用到目標檢測上的方法之一。R-CNN 首先利用選擇性搜索這類圖像分割的算法進行區域推薦,而後將這些區域分別裁剪下來,縮放送入卷積網絡,來做判定。在 VOC 數據集上,它一下就提升了 20% 多的 mAP。但是這樣就會造成速度慢,因為給出的推薦區域通常有 2000 多個。

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

在其基礎上改進的 Fast R-CNN 通過在卷積層的最後一層添加一個區域池化層,使得推薦區域能夠直接映射到這裡來提取特徵,減少了數千次重複的卷積運算,大大提升了速度。但它的區域推薦方法還是使用的選擇性搜索,不能和 CNN 共享計算,速度瓶頸仍然存在。而 Faster R-CNN 則推出了區域建議網絡 RPN,將這一步也用 CNN 來做,並且讓區域建議網絡和分類網絡共享卷積特徵,使得目標檢測框架幾乎達到實時,並且 mAP 達到了極高。
上述的 R-CNN 系列都是兩步走的框架,那麼端到端的框架是怎麼樣的呢?

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

來看 YOLO 。它將圖像分成 S*S 個單元,每個單元分別去預測方框,利用網絡對這些方框直接去學習真實方框和所屬類別。YOLO 非常快,小型的模型可以達到 155 fps ,但是隨之而來的是 mAP 的降低,以及定位不準的問題。而 SSD 則有點像 Faster R-CNN 中的多類別 RPN 網絡,是一個十分成功的檢測框架。它採用特徵金字塔的多層預測方法,在不同的卷積層上設置前景方框,在不同大小的特徵圖上考慮不同的尺度,相當於每個層分開預測,最後一起得到結果。

從 R-CNN 到 Faster R-CNN,再到和其並駕齊驅的 YOLO 和 SSD ,目標檢測的發展在2015~2016 年達到了一個巔峰。正如少林武功界的看家本領一樣,在最新的目標檢測研究中,有兩個最主要的 idea 可以極大的提升檢測器的性能,我們一一進行介紹。


02

最深刻的兩個idea

融合不同卷積層的特徵

(1)HyperNet: Towards Accurate Region Proposal Generation and Joint Object Detection (CVPR2016,清華信息科學與技術國家實驗室 + 清華計算機智能技術與系統國重 + Intel 中國研究院 )

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

在 SSD 中有這麼一個思想,低層感受野較小,用它去檢測小物體,高層感受野較大,用它去檢測大物體。然而它忽略了一個事實:低的卷積層語義信息很弱,無法對後續的分類有很好的幫助,導致小目標的檢測提升其實不大。那麼 HyperNet 就採取一個融合卷積特徵的方式。特徵圖的尺寸不同怎麼辦?大的進行一個池化縮小,小的進行一個上採樣進行擴大,而後融合。通過以上的改進策略,HyperNet 可以在產生大約 100 個region proposal 的時候保證較高的recall,同時目標檢測的 mAP 相對於 Fast R-CNN 也提高了大約 6 個百分點。

但是, HyperNet 這樣的方式融合得到的特徵圖在空間信息和語義信息上都是有一些損失的。有沒有更好的特徵融合方式呢?

(2) Feature Pyramid Networks for Object Detection (CVPR2017,FAIR + CMU)

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

2017 年的 CVPR 大會上提出了 FPN 網絡,它採用特徵金字塔的方式,既用融合後的特徵做檢測,又讓預測在不同特徵層獨立進行。在上面我們提到,低的卷積層語義信息很弱,無法對後續的分類有很好的幫助,導致小目標的檢測提升其實不大。那麼 FPN 就嘗試用高層的語義對低層進行彌補,取得了相當不錯的效果。

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

如上圖展示的 4 種利用特徵的形式:(a) 圖像金字塔,(b) 僅採用一層的特徵,(c) SSD 式,(d) FPN 式。可以看到,FPN 似乎是 SSD 和 HyperNet 的結合體與變式。它在右側的路徑通常稱為 top-down path。

如何進行橫向連接和融合?如下。把高層特徵做2倍上採樣,然後將其和對應的前一層特徵結合,注意前一層特徵經過 1*1 的卷積改變維度使得可以用加法進行融合。值得一提的是,這只是其中一種融合方式,當然也可以做通道上的 concat。

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

FPN 並不是一個目標檢測框架,它的這種結構可以融入到其他的目標檢測框架中,去提升檢測器的性能。截至現在,FPN 已經可以說成為目標檢測框架中必備的結構了。

更好的基礎網絡

(1) Deep Residual Learning for Image Recognition (CVPR2016 Best Paper,微軟亞洲研究院)

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

第二個 idea,更好的基礎網絡。這裡就不得不提到深度殘差網絡。傳統的卷積神經網絡模型都以層疊卷積層的方式提高網絡深度,從而提高識別精度。但是實驗發現過深的網絡會出現退化問題,比淺層的網絡損失更高,正確率更低。

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

原因引一下 Wang Feng 的回答:

圖像具備有局部相關性,神經網絡越來越深的時候,反傳回來的梯度之間的相關性會越來越差,最後接近白噪聲。

深度殘差網絡致力於解決這個問題。它的核心結構是通過一個跳層連接把輸入直接疊加到輸出上,在反向傳播的時候,這一路梯度是原封不動的往回傳的,相關性是很強的。

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

ResNet 的應用這個網絡去做 Faster R-CNN 的基礎網絡用於特徵提取,什麼都不用做,在 VOC數據集上取得了 3% 的性能提升,在 COCO 數據集上取得7%的性能提升,而且一舉贏得 2015年的 COCO 目標檢測賽冠軍。在ResNet提出後,幾乎所有取得高 mAP 的目標檢測框架全部應用或借鑑了殘差網絡。

(2)Deformable Convolutional Networks (ICCV2017,微軟亞洲研究院)

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

更好的基礎網絡不僅僅是指的是如何去堆疊網絡的深度,還有如何讓網絡更好的去適應物體的變化。CNN 的幾何結構是固定的,導致對幾何形變的建模受到限制。如何有效地建模物體各種姿勢的變化呢?當然可以用足夠多樣性的數據集,或者是有一些幾何不變性的特徵去構建算法,但是始終存在新的、未知的形變。試想如果卷積核可以沿著物體是什麼樣去提取特徵,似乎就可以一定程度上解決問題。

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

這也是 DCN 的核心思想,和普通的卷積核不同,給每個採樣點加一個偏移,並且這個偏移通過額外的卷積層學習得到。從上邊的圖可以看到,如果能夠學習出偏移,那麼似乎可以表示出擴大,旋轉這類變換。

如何將這類卷積方法應用到網絡中去呢?

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

通過一個額外的卷積層對 feature map 進行卷積,出來的是怎麼偏移的參數(即,每個點代表我該怎麼去偏移?),而後再將這個偏移信息用到對原feature map的卷積上去。

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

怎麼用到 ROI Pooling 層上去呢?如上圖所示,RoI 被分為 3*3 個 bin,被輸入到一個額外的 fc 層來學習 offset,然後通過一個deformable RoI pooling 層來操作使每個 bin 發生偏移。

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

上邊是可視化的結果,紅點表示激活點映射到原圖的採樣點,可以看到這類聚集出來的點是覆蓋了目標的,說明學習是有效的。將其用在目標檢測的基礎網絡上,在 mAP 上能取得 2~9 範圍的提升。

融合不同卷積層的特徵和更好的基礎網絡這兩個 idea 影響深遠,之後的目標檢測框架幾乎都應用了它們去得到更高的 mAP。


03

大顯神通的各類變體

Faster R-CNN的進化

(1)R-FCN:Object Detection via Region-based Fully Convolutional Networks(NIPS2016,微軟亞洲研究院 + 清華大學)

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

Faster R-CNN 的精度其實已經很高了,但是缺點在於它的速度不夠快。什麼原因呢?因為它在區域推薦網絡之後,對於每一個推薦的區域都會分別送入 ROI Pooling 層,而後面還有幾層全連接層用來做分類和迴歸,這個過程拖慢了速度。其次,物體分類是要求有平移不變性的,而定位物體又要要求能夠對物體的平移產生響應,這樣就造成一個矛盾。試想如果沒有後面全連接層的計算,就能提升速度;如果可以讓有較強語義信息的高層特徵圖有空間信息,就可以有更好的精度。R-FCN 基於Faster R-CNN的結構,通過學習位置敏感得分圖和選擇性池化去解決這兩個問題。

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

對於提取的特徵圖,通過k^2*(C+1)個卷積核來生成如此多維度的特徵圖,C代表類別,上面五顏六色的千層餅的一層就有 C+1 個維度(+1表示背景),而 k 方則代表了想要去編碼多少個這樣的位置。如【左上,中上,....,中間,....,中下,右下】一共 9 種位置,那麼這個餅就有9層 (C+1)的特徵。具體的例子,餅的每一層的一個維度的一個像素(好拗口.....)代表的意思可以理解為:屬於(C+1)類中的嬰兒這一類,並且是這個嬰兒的左上位置的概率。看看選擇性池化出來的對應於千層餅的特徵圖顏色可以知道:特定部位的 bins 只在特定的層上產生。

R-FCN 在 PS ROI Pooling 後,沒有全連接層,而是用一個平均池化來產生分類的向量。以這種方式既加入了空間信息,又減少了上百個區域的 fc 運算,因而R-FCN在精度上比Faster R-CNN 略高,並且比 Faster R-CNN 快了 2.5 倍。

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

上圖是可視化的結果,可以看到學習出來的特徵真的能夠去代表左上、右下這些空間信息。

(2)Mask R-CNN (ICCV2017 Best Paper,Facebook AI Research )

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?


Mask R-CNN是Faster R-CNN的橫向擴充,由原來的兩個任務(分類+迴歸)變為了三個任務(分類+迴歸+分割)。在基礎網絡方面,採用了 ResNet-101 + FPN,保證提取的特徵足夠強,此外,通過雙線性插值改進了 ROI Pooling 層,提出新的ROIalign層,解決ROI映射到特徵圖上有小數需要捨棄引發的不對稱的問題,最後,語義分割任務的加入也給目標檢測帶來了一定的性能提升。

YOLO的進化

(1)YOLO 9000 : Better, Faster, Stronger (CVPR2017, 華盛頓大學 + 微軟艾倫人工智能研究院)

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

YOLOv2 是 YOLO 的進化版本,在左邊的表上可以看到它用到了一系列的技巧。最重要的是三個點:

a. 用更好更快的基礎網絡

b. 多尺度訓練的思想,每隔幾次迭代改變網絡結構:每 10 個 batch,網絡會選擇新的圖像大小

c. 引入 Faster R-CNN中的 anchor boxes,並通過聚類方式代替手工選取 prior box

每一個技巧都會有 mAP 的提升,最終在 40fps 下能夠在 VOC2007 數據集上達到 78.6 的mAP,比 Faster R-CNN 略高,但比其快幾倍。在論文中還引入了 WordTree,用層次概念去搭建分類構建可以檢測 9000 種物體的 YOLO9000。

(2)YOLO v3 : An Incremental Improvement

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

YOLO v3 是 YOLO 的終極版本。在基礎網絡上,採用了更加好的網絡,借鑑了 yolov2中Darknet-19 以及 Resnet 的設計,使用了很多有良好表現的 3*3 和 1*1 的卷積層,並且融合了前面的 FPN。最終形成有 53 個卷積層的 Darknet-53。並且在 anchor box 上,仿照 SSD形成多尺度預測,一共有3種尺度,每種尺度預測 3 個 box 。此外,將 Softmax 用獨立的多個logistic分類器替代,更適用於語義聯繫較強的數據集。最終的效果也是十分驚豔,在 COCO 數據集上,以IOU交疊比為大於 0.5 視為預測正確時,YOLO 的表現幾乎全方面超過所有的方法,速度是別人的 2~3 倍。

在 yolov3 中,對於一個 ground truth 只會選擇 iou 交疊比最大的一個 pred box 與其進行配對,從而進行類別與方框的修正。

SSD的進化

DSSD : Deconvolutional Single Shot Detector (CVPR2017,北卡教堂山分校+ 亞馬遜)

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

看完了Faster R-CNN和YOLO的進化,我們再來看SSD是怎麼進化的。我們自然會想到用融合不同卷積層的特徵這個套路,將高層語義信息和低層細節信息進行融合,但是各方法特徵圖金字塔的構造方式各不相同,只是針對於特定的網絡結構來做優化。DSSD 就提出了一種通用的方法,使用反捲積層來做這個事情。

方法就是把藍色的 SSD 層做反捲積操作形成紅色層,使其和上一級藍色層尺度相同,再把二者融合在一起,得到的新的紅色層用來做預測。然後這個新的紅色的特徵圖又這麼跟上一級的特徵反覆一遍,最後在紅色的特徵圖上做多尺度檢測框架。

為了整合淺層特徵圖和反捲積層的信息,作者引入了上面右圖所示的反捲積模塊,在融合特徵圖的時候不是線性相加而是用了點積,這也帶來了額外 0.2 的 mAP 提升。

Faster R-CNN +

Single-Shot Refinement Neural Network for Object Detection (CVPR2018,中科院自動化所 + 麥肯錫全球研究院)

從上面我們基本對 one-stage 和 two-stage 的方法的變體有了大致瞭解。通常情況下,單階段方法速度更快,兩階段方法 mAP 更高。有沒有將兩者融合的方法呢?在前不久的 CVPR2018 上有這樣一個方法,取 Faster R-CNN 和 SSD 兩者之長。

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

從這個網絡結構上看,非常像 SSD 的分層預測再結合,而上下兩個相互關聯的模型 Anchor Refinement Module (ARM)和 Object Detection Module(ODM)分別做區域推薦和目標分類+迴歸,又是 Faster R-CNN 的經典兩步。其中,上面的 ARM 模塊可以看作一個簡化的 SSD,這裡只做二分類,即目標的有無,去除一些無物體的候選區域,對位置和尺寸進行大致的調整;而下面的 ODM 可以看作為一個 Fast R-CNN, 多類別分類是和矩形框迴歸,中間的 TCB 模塊可以看作 FCN 中的 top-down,進行特徵的融合。框架結構簡單又有效,取得了不錯的效果。


04

PASCAL VOC&COCO->終究是Faster R-CNN勝了?

這裡附一下 PASCAL VOC 目標檢測數據集的排名,這個挑戰為 Competition
“comp4”,可以在額外的數據集上訓練(TRAIN ON ADDITIONAL DATA)再來在VOC2012 data 上測試。

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

前十名的變體中,有 4 項來自 SSD 的變體,5 項來自 Faster R-CNN,1項 Faster R-CNN + SSD 的結合變體。在這裡我們可以認為,對目標檢測的精度有要求,似乎就應該選用 Faster R-CNN 或 SSD 為基礎改進的經典目標檢測方法。

後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

而在微軟的COCO數據集上,Faster R-CNN 大有橫掃的意味。前 10 名中有 9 項都是來自於Faster R-CNN 的變體,而剩下的一項還是未公佈具體方法。

雖然 one-stage 的方法在精度上不斷想與 two-stage 的方法抗衡,但在數據集上的結論以及越來越快的 Faster R-CNN 變體的出現是否可以說明,Faster R-CNN 的 two-stage 終歸是更好的方法?期待未來更加精彩的突破出現。

本文為我在實習期間的分享Talk改編而來,感謝 mentor 的修改意見 (๑´ `๑) ,文中的疏漏錯誤請批評指正,筆芯~


後R-CNN時代,Faster R-CNN、SSD...Faster R-CNN系列勝了嗎?

END


分享到:


相關文章: