YOLO、SSD、FPN、Mask-RCNN檢測模型對比


YOLOSSD、FPN、Mask-RCNN檢測模型對比

一.YOLO(you only look once)

YOLO 屬於回歸系列的目標檢測方法,與滑窗和后續區域划分的檢測方法不同,他把檢測任務當做一個regression問題來處理,使用一個神經網絡,直接從一整張圖像來預測出bounding box 的坐標、box中包含物體的置信度和物體所屬類別概率,可以實現端到端的檢測性能優化

原理如下:

輸入一張圖片,圖片中包含N個object,每個object包含4個坐標(x,y,w,h)和1個label。在網絡最后面會生成一個7x7x30的三維矩陣,其中7x7對應到原圖,就是將圖片划分為7x7個grid cell,每個cell預測兩個bounding box,30=5+5+20,第一個5代表預測的第一個bounding box的4個坐標和置信度,第二個5代表第二個bounding box的4個坐標和置信度,最后的20代表PASCAL VOC數據集的20個分類。

預測的結果和groundtruth進行對比,每個object的groundtruth的中心對應到原圖會落在某個grid cell里面,該object的檢測由這個grid cell負責。預測的結果如果也落在該grid cell里,代表該grid cell有object(前提),分數(score)是預測bounding box與groundtruth的IoU值,若沒有落在該grid cell中,代表沒有object,分數(score)為0。最后會得到一個20x(7x7x2)=20x98的score矩陣,其中20行代表20個分類,98列代表的是整張圖輸出的所有bounding box,整個矩陣代表每個bounding box預測為這20個分類的分數。對於同一個類來說,有98個bounding box,這里用非極大值抑制法(NMS)進行候選框的篩選和合並。

每個grid cell負責:

1、預測兩個bounding box

2、每個bounding box是否包含物體,置信度為0(無物體)或IoU(有物體)

3、每個bounding box所包含物體分別屬於20個分類的概率

Inference: 輸入一張圖像,跑到網絡的末端得到7x7x30的三維矩陣,這里雖然沒有計算IOU,但是由訓練好的權重已經直接計算出了bounding box的confidence。然后再跟預測的類別概率相乘就得到每個bounding box屬於哪一類的概率。

YOLO缺點:

1、對小目標和密集型目標檢測的效果差,如一群小鴨子(因為圖片划分為7x7個grid cell,而每個cell只產生兩個bounding box,意思就是每個grid cell的區域最多只會預測兩個object)(是否可以用裁剪方法得到原圖的局部放大圖?每個grid cell預測多個bounding box?最后的卷積使用14x14x20?)

2、YOLO的物體檢測精度低於其他state-of-the-art的物體檢測系統。

3、YOLO容易產生物體的定位錯誤

YOLO優點:

1、YOLO檢測物體非常快(45-155FPS)

2、YOLO可以很好的避免背景錯誤,產生false positives(可以看到全局圖像,有上下文信息)

 

 二.SSD(single shot mutibox detector)

SSD算法是一種直接預測bounding box的坐標和類別的object detection算法,沒有生成proposal的過程。針對不同大小的物體檢測,傳統的做法是將圖像轉換成不同的大小,然后分別處理,最后將結果綜合起來,而本文的ssd利用不同卷積層的feature map進行綜合也能達到同樣的效果。算法的主網絡結構是VGG16,將兩個全連接層改成卷積層再增加4個卷積層構造網絡結構。對其中5個不同的卷積層的輸出分別用兩個3*3的卷積核進行卷積,一個輸出分類用的confidence,每個default box生成21個confidence(這是針對VOC數據集包含20個object類別而言的);一個輸出回歸用的localization,每個default box生成4個坐標值(x,y,w,h)。另外這5個卷積層還經過priorBox層生成default box(生成的是坐標)。上面所述的5個卷積層中每一層的default box的數量是給定的。最后將前面三個計算結果分別合並然后傳遞給loss層。

算法的結果:對於300*300的輸入,SSD可以在VOC2007 test上有74.3%的mAP,速度是59 FPS(Nvidia Titan X),對於512*512的輸入, SSD可以有76.9%的mAP。相比之下Faster RCNN是73.2%的mAP和7FPS,YOLO是63.4%的mAP和45FPS。即便對於分辨率較低的輸入也能取得較高的准確率。可見作者並非像傳統的做法一樣以犧牲准確率的方式來提高檢測速度。作者認為自己的算法之所以在速度上有明顯的提升,得益於去掉了bounding box proposal以及后續的pixel或feature的resampling步驟。

SSD也是使用回歸的方法直接預測bounding box和分類,沒有使用候選區域。

1、算法的主網絡結構是VGG16,將兩個全連接層改成卷積層再增加4個卷積層構造網絡結構

2、對其中5個不同的卷積層的輸出分別用兩個3 * 3的卷積核進行卷積,一個輸出分類用的confidence,每個default box生成21個confidence(這是針對VOC數據集包含20個object類別而言的);一個輸出回歸用的localization,每個default box生成4個坐標值(x,y,w,h)

3、每個feature map中default box的來源是由prior box通過計算產生的,包括default box的長寬比

上述5個feature map中每一層的default box的數量是給定的(5個層總和是8732個)。最后將前面三個計算結果分別合並然后傳給loss層。

注意:

1、feature map cell 是指feature map中每一個小格子,如圖中分別有64和16個cell。default box是指在feature map的每個小格(cell)上都有一系列固定大小的box,如圖中每個cell包含4個default box(這部分和Faster-RCNN RPN中的錨點和畫候選區域有點像,Faster-RCNN產生錨點和邊框的地方是在最后一層卷積上,使用RPN產生的,而SSD則是在多個層次的feature map上產生default box,然后把預測的坐標和分類結果進行拼接)。

2、假設每個feature map cell有k個default box,則每個default box都需要預測c個類別score和4個offset,如果一個feature map的大小是n,也就是有m * n個feature map cell,則該feature map就一共有(c+4)* k * m * n 個輸出。這些輸出個數的含義是:采用3的卷積核對該層的feature map卷積時卷積核的個數,包含兩部分(實際code是分別用不同數量的3 * 3卷積核對該層feature map進行卷積):數量c * k * m * n是confidence輸出,表示每個default box的confidence,也就是類別的概率;數量4 * k * m * n是localization輸出,表示每個default box回歸后的坐標)。

3、最后對使用NMS算法對所有層產生的這些box區域進行篩選合並

SSD算法的核心:

1、對於每個feature map cell都使用多種橫縱比的default boxes,所以算法對於不同橫縱比的object的檢測都有效

2、對default boxes的使用來自於多個層次的feature map,而不是單層,所以能提取到更多完整的信息

優點:

1、檢測速度很快

2、檢測准確率比faster-rcnn和yolo高

缺點:

文中作者提到該算法對於小的object的detection比大的object要差,還達不到Faster R-CNN的水准。作者認為原因在於這些小的object在網絡的頂層所占的信息量太少,另外較低層級的特征非線性程度不夠,所以增加輸入圖像的尺寸對於小的object的檢測有幫助。另外增加數據集對於小的object的檢測也有幫助,原因在於隨機裁剪后的圖像相當於“放大”原圖像,所以這樣的裁剪操作不僅增加了圖像數量,也放大了圖像。不過這樣速度很慢。

 

 三.對於小目標難檢測問題的解決——FPN(CVPR2017)

Feature Pyramid Networks for Object Detection

論文鏈接:https://arxiv.org/pdf/1612.03144.pdf

低層的特征語義信息比較少,但是目標位置准確;高層的特征語義信息比較豐富,但是目標位置比較粗略。對圖像feature的利用有以下四個方法:

1)輸入網絡前進行裁切,然后scale,縮放圖像,這種方法會增加網絡訓練和預測的時間

2)類似於faster-rcnn和fast-rcnn,對卷積網絡最后一層的feature map進行利用

3)類似於SSD,在網絡中間,抽取一些卷積層產生的feature map進行利用

4)RPN

FPN類似於SSD+FCN+RPN,先自底向上進行正常的網絡前向傳播,每個階段生成空間尺寸不斷縮小的feature map,然后再從頂部的feature map(空間尺寸最小的那個)開始,進行2倍上采樣,倒數第二層的feature map進行1x1卷積后(通道數匹配),兩個feature map進行加和,然后再用3x3的卷積對新的feature map進行卷積融合,去除上采樣加和的混疊。之后就按照這個思路不斷上采樣加和到前一個stage(前向傳播中空間尺寸一致的當做一個stage),每一個stage生成的新feature map都獨立進行預測。這里的預測可以是把生成的feature map送入RPN中,進行滑窗生成錨點和對應的bounding box,總共有15種不同的錨點。

 

 四.Mask-RCNN(201703)

Mask-RCNN主要是基於Faster-RCNN,在RoI操作之后增加了一個分支,使用FCN進行語義分割操作,主要技術要點如下:

1、在RoI操作之后,除了接全連接的分類和邊框回歸之外,額外引出一個分支,用FCN進行語義分割,所以最終模型的loss來自於三個部分,分別是:分類loss、回歸loss和分割loss

2、引入RoIAlign,替代原來的RoI pooling,RoI pooling是在fast-rcnn里提出的,用於對大小不同的候選框進行resize之后送入后面的全連接層分類和回歸,但RoI pooling計算時存在近似/量化,即對浮點結果的像素直接近似為整數,這對於分類來說影響不大(平移不變性),但新引入的Mask分割來說,影響很大,造成結果不准確,所以引入了RoI Align,對浮點的像素,使用其周圍4個像素點進行雙線性插值,得到該浮點像素的估計值,這樣使結果更加准確。

 

 

 

 五.幾種檢測模型性能對比

 


免責聲明!

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



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