YOLO、SSD、FPN、Mask-RCNN检测模型对比
YOLO、SSD、FPN、Mask-RCNN檢測(cè)模型對(duì)比
一.YOLO(you only look once)
YOLO 屬于回歸系列的目標(biāo)檢測(cè)方法,與滑窗和后續(xù)區(qū)域劃分的檢測(cè)方法不同,他把檢測(cè)任務(wù)當(dāng)做一個(gè)regression問(wèn)題來(lái)處理,使用一個(gè)神經(jīng)網(wǎng)絡(luò),直接從一整張圖像來(lái)預(yù)測(cè)出bounding box 的坐標(biāo)、box中包含物體的置信度和物體所屬類別概率,可以實(shí)現(xiàn)端到端的檢測(cè)性能優(yōu)化
原理如下:
輸入一張圖片,圖片中包含N個(gè)object,每個(gè)object包含4個(gè)坐標(biāo)(x,y,w,h)和1個(gè)label。在網(wǎng)絡(luò)最后面會(huì)生成一個(gè)7x7x30的三維矩陣,其中7x7對(duì)應(yīng)到原圖,就是將圖片劃分為7x7個(gè)grid cell,每個(gè)cell預(yù)測(cè)兩個(gè)bounding box,30=5+5+20,第一個(gè)5代表預(yù)測(cè)的第一個(gè)bounding box的4個(gè)坐標(biāo)和置信度,第二個(gè)5代表第二個(gè)bounding
box的4個(gè)坐標(biāo)和置信度,最后的20代表PASCAL VOC數(shù)據(jù)集的20個(gè)分類。
預(yù)測(cè)的結(jié)果和groundtruth進(jìn)行對(duì)比,每個(gè)object的groundtruth的中心對(duì)應(yīng)到原圖會(huì)落在某個(gè)grid cell里面,該object的檢測(cè)由這個(gè)grid cell負(fù)責(zé)。預(yù)測(cè)的結(jié)果如果也落在該grid cell里,代表該grid cell有object(前提),分?jǐn)?shù)(score)是預(yù)測(cè)bounding box與groundtruth的IoU值,若沒(méi)有落在該grid cell中,代表沒(méi)有object,分?jǐn)?shù)(score)為0。最后會(huì)得到一個(gè)20x(7x7x2)=20x98的score矩陣,其中20行代表20個(gè)分類,98列代表的是整張圖輸出的所有bounding box,整個(gè)矩陣代表每個(gè)bounding box預(yù)測(cè)為這20個(gè)分類的分?jǐn)?shù)。對(duì)于同一個(gè)類來(lái)說(shuō),有98個(gè)bounding box,這里用非極大值抑制法(NMS)進(jìn)行候選框的篩選和合并。
每個(gè)grid cell負(fù)責(zé):
1、預(yù)測(cè)兩個(gè)bounding box
2、每個(gè)bounding box是否包含物體,置信度為0(無(wú)物體)或IoU(有物體)
3、每個(gè)bounding box所包含物體分別屬于20個(gè)分類的概率
Inference: 輸入一張圖像,跑到網(wǎng)絡(luò)的末端得到7x7x30的三維矩陣,這里雖然沒(méi)有計(jì)算IOU,但是由訓(xùn)練好的權(quán)重已經(jīng)直接計(jì)算出了bounding box的confidence。然后再跟預(yù)測(cè)的類別概率相乘就得到每個(gè)bounding box屬于哪一類的概率。
YOLO缺點(diǎn):
1、對(duì)小目標(biāo)和密集型目標(biāo)檢測(cè)的效果差,如一群小鴨子(因?yàn)閳D片劃分為7x7個(gè)grid cell,而每個(gè)cell只產(chǎn)生兩個(gè)bounding box,意思就是每個(gè)grid cell的區(qū)域最多只會(huì)預(yù)測(cè)兩個(gè)object)(是否可以用裁剪方法得到原圖的局部放大圖?每個(gè)grid cell預(yù)測(cè)多個(gè)bounding box?最后的卷積使用14x14x20?)
2、YOLO的物體檢測(cè)精度低于其他state-of-the-art的物體檢測(cè)系統(tǒng)。
3、YOLO容易產(chǎn)生物體的定位錯(cuò)誤
YOLO優(yōu)點(diǎn):
1、YOLO檢測(cè)物體非常快(45-155FPS)
2、YOLO可以很好的避免背景錯(cuò)誤,產(chǎn)生false positives(可以看到全局圖像,有上下文信息)
二.SSD(single shot mutibox detector)
SSD算法是一種直接預(yù)測(cè)bounding box的坐標(biāo)和類別的object detection算法,沒(méi)有生成proposal的過(guò)程。針對(duì)不同大小的物體檢測(cè),傳統(tǒng)的做法是將圖像轉(zhuǎn)換成不同的大小,然后分別處理,最后將結(jié)果綜合起來(lái),而本文的ssd利用不同卷積層的feature map進(jìn)行綜合也能達(dá)到同樣的效果。算法的主網(wǎng)絡(luò)結(jié)構(gòu)是VGG16,將兩個(gè)全連接層改成卷積層再增加4個(gè)卷積層構(gòu)造網(wǎng)絡(luò)結(jié)構(gòu)。對(duì)其中5個(gè)不同的卷積層的輸出分別用兩個(gè)3*3的卷積核進(jìn)行卷積,一個(gè)輸出分類用的confidence,每個(gè)default box生成21個(gè)confidence(這是針對(duì)VOC數(shù)據(jù)集包含20個(gè)object類別而言的);一個(gè)輸出回歸用的localization,每個(gè)default box生成4個(gè)坐標(biāo)值(x,y,w,h)。另外這5個(gè)卷積層還經(jīng)過(guò)priorBox層生成default box(生成的是坐標(biāo))。上面所述的5個(gè)卷積層中每一層的default box的數(shù)量是給定的。最后將前面三個(gè)計(jì)算結(jié)果分別合并然后傳遞給loss層。
算法的結(jié)果:對(duì)于300300的輸入,SSD可以在VOC2007 test上有74.3%的mAP,速度是59 FPS(Nvidia Titan X),對(duì)于512512的輸入, SSD可以有76.9%的mAP。相比之下Faster RCNN是73.2%的mAP和7FPS,YOLO是63.4%的mAP和45FPS。即便對(duì)于分辨率較低的輸入也能取得較高的準(zhǔn)確率。可見(jiàn)作者并非像傳統(tǒng)的做法一樣以犧牲準(zhǔn)確率的方式來(lái)提高檢測(cè)速度。作者認(rèn)為自己的算法之所以在速度上有明顯的提升,得益于去掉了bounding box proposal以及后續(xù)的pixel或feature的resampling步驟。
SSD也是使用回歸的方法直接預(yù)測(cè)bounding box和分類,沒(méi)有使用候選區(qū)域。
1、算法的主網(wǎng)絡(luò)結(jié)構(gòu)是VGG16,將兩個(gè)全連接層改成卷積層再增加4個(gè)卷積層構(gòu)造網(wǎng)絡(luò)結(jié)構(gòu)
2、對(duì)其中5個(gè)不同的卷積層的輸出分別用兩個(gè)3 *3的卷積核進(jìn)行卷積,一個(gè)輸出分類用的confidence,每個(gè)default
box生成21個(gè)confidence(這是針對(duì)VOC數(shù)據(jù)集包含20個(gè)object類別而言的);一個(gè)輸出回歸用的localization,每個(gè)default box生成4個(gè)坐標(biāo)值(x,y,w,h)
3、每個(gè)feature map中default box的來(lái)源是由prior box通過(guò)計(jì)算產(chǎn)生的,包括default box的長(zhǎng)寬比
上述5個(gè)feature map中每一層的default box的數(shù)量是給定的(5個(gè)層總和是8732個(gè))。最后將前面三個(gè)計(jì)算結(jié)果分別合并然后傳給loss層。
注意:
1、feature map cell 是指feature
map中每一個(gè)小格子,如圖中分別有64和16個(gè)cell。default box是指在feature
map的每個(gè)小格(cell)上都有一系列固定大小的box,如圖中每個(gè)cell包含4個(gè)default box(這部分和Faster-RCNN RPN中的錨點(diǎn)和畫候選區(qū)域有點(diǎn)像,Faster-RCNN產(chǎn)生錨點(diǎn)和邊框的地方是在最后一層卷積上,使用RPN產(chǎn)生的,而SSD則是在多個(gè)層次的feature
map上產(chǎn)生default box,然后把預(yù)測(cè)的坐標(biāo)和分類結(jié)果進(jìn)行拼接)。
2、假設(shè)每個(gè)feature map cell有k個(gè)default box,則每個(gè)default box都需要預(yù)測(cè)c個(gè)類別score和4個(gè)offset,如果一個(gè)feature map的大小是m×n,也就是有m * n個(gè)feature map cell,則該feature map就一共有(c+4)* k * m * n 個(gè)輸出。這些輸出個(gè)數(shù)的含義是:采用3×3的卷積核對(duì)該層的feature
map卷積時(shí)卷積核的個(gè)數(shù),包含兩部分(實(shí)際code是分別用不同數(shù)量的3 * 3卷積核對(duì)該層feature map進(jìn)行卷積):數(shù)量c * k * m * n是confidence輸出,表示每個(gè)default box的confidence,也就是類別的概率;數(shù)量4 * k * m * n是localization輸出,表示每個(gè)default box回歸后的坐標(biāo))。
3、最后對(duì)使用NMS算法對(duì)所有層產(chǎn)生的這些box區(qū)域進(jìn)行篩選合并
SSD算法的核心:
1、對(duì)于每個(gè)feature map cell都使用多種橫縱比的default boxes,所以算法對(duì)于不同橫縱比的object的檢測(cè)都有效
2、對(duì)default boxes的使用來(lái)自于多個(gè)層次的feature map,而不是單層,所以能提取到更多完整的信息
優(yōu)點(diǎn):
1、檢測(cè)速度很快
2、檢測(cè)準(zhǔn)確率比f(wàn)aster-rcnn和yolo高
缺點(diǎn):
文中作者提到該算法對(duì)于小的object的detection比大的object要差,還達(dá)不到Faster R-CNN的水準(zhǔn)。作者認(rèn)為原因在于這些小的object在網(wǎng)絡(luò)的頂層所占的信息量太少,另外較低層級(jí)的特征非線性程度不夠,所以增加輸入圖像的尺寸對(duì)于小的object的檢測(cè)有幫助。另外增加數(shù)據(jù)集對(duì)于小的object的檢測(cè)也有幫助,原因在于隨機(jī)裁剪后的圖像相當(dāng)于“放大”原圖像,所以這樣的裁剪操作不僅增加了圖像數(shù)量,也放大了圖像。不過(guò)這樣速度很慢。
三.對(duì)于小目標(biāo)難檢測(cè)問(wèn)題的解決——FPN(CVPR2017)
Feature Pyramid Networks for Object Detection
論文鏈接:https://arxiv.org/pdf/1612.03144.pdf
低層的特征語(yǔ)義信息比較少,但是目標(biāo)位置準(zhǔn)確;高層的特征語(yǔ)義信息比較豐富,但是目標(biāo)位置比較粗略。對(duì)圖像feature的利用有以下四個(gè)方法:
1)輸入網(wǎng)絡(luò)前進(jìn)行裁切,然后scale,縮放圖像,這種方法會(huì)增加網(wǎng)絡(luò)訓(xùn)練和預(yù)測(cè)的時(shí)間
2)類似于faster-rcnn和fast-rcnn,對(duì)卷積網(wǎng)絡(luò)最后一層的feature map進(jìn)行利用
3)類似于SSD,在網(wǎng)絡(luò)中間,抽取一些卷積層產(chǎn)生的feature map進(jìn)行利用
4)RPN
FPN類似于SSD+FCN+RPN,先自底向上進(jìn)行正常的網(wǎng)絡(luò)前向傳播,每個(gè)階段生成空間尺寸不斷縮小的feature map,然后再?gòu)捻敳康膄eature map(空間尺寸最小的那個(gè))開(kāi)始,進(jìn)行2倍上采樣,倒數(shù)第二層的feature map進(jìn)行1x1卷積后(通道數(shù)匹配),兩個(gè)feature map進(jìn)行加和,然后再用3x3的卷積對(duì)新的feature map進(jìn)行卷積融合,去除上采樣加和的混疊。之后就按照這個(gè)思路不斷上采樣加和到前一個(gè)stage(前向傳播中空間尺寸一致的當(dāng)做一個(gè)stage),每一個(gè)stage生成的新feature map都獨(dú)立進(jìn)行預(yù)測(cè)。這里的預(yù)測(cè)可以是把生成的feature map送入RPN中,進(jìn)行滑窗生成錨點(diǎn)和對(duì)應(yīng)的bounding box,總共有15種不同的錨點(diǎn)。
四.Mask-RCNN(201703)
Mask-RCNN主要是基于Faster-RCNN,在RoI操作之后增加了一個(gè)分支,使用FCN進(jìn)行語(yǔ)義分割操作,主要技術(shù)要點(diǎn)如下:
1、在RoI操作之后,除了接全連接的分類和邊框回歸之外,額外引出一個(gè)分支,用FCN進(jìn)行語(yǔ)義分割,所以最終模型的loss來(lái)自于三個(gè)部分,分別是:分類loss、回歸loss和分割loss
2、引入RoIAlign,替代原來(lái)的RoI
pooling,RoI pooling是在fast-rcnn里提出的,用于對(duì)大小不同的候選框進(jìn)行resize之后送入后面的全連接層分類和回歸,但RoI pooling計(jì)算時(shí)存在近似/量化,即對(duì)浮點(diǎn)結(jié)果的像素直接近似為整數(shù),這對(duì)于分類來(lái)說(shuō)影響不大(平移不變性),但新引入的Mask分割來(lái)說(shuō),影響很大,造成結(jié)果不準(zhǔn)確,所以引入了RoI Align,對(duì)浮點(diǎn)的像素,使用其周圍4個(gè)像素點(diǎn)進(jìn)行雙線性插值,得到該浮點(diǎn)像素的估計(jì)值,這樣使結(jié)果更加準(zhǔn)確。
五.幾種檢測(cè)模型性能對(duì)比
總結(jié)
以上是生活随笔為你收集整理的YOLO、SSD、FPN、Mask-RCNN检测模型对比的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: RCNN系列、Fast-RCNN、Fas
- 下一篇: 第四代自动泊车从APA到AVP技术