R-CNN
?R-CNN由Ross Girshick于2014年提出,R-CNN首先通過選擇性搜索算法Selective Search從一組對象候選框中選擇可能出現(xiàn)的對象框,然后將這些選擇出來的對象框中的圖像resize到某一固定尺寸的圖像,并喂入到CNN模型(經(jīng)過在ImageNet數(shù)據(jù)集上訓(xùn)練過的CNN模型,如AlexNet)提取特征,最后將提取出的特征送入到SVM分類器來預(yù)測該對象框中的圖像是否存在待檢測目標(biāo),并進(jìn)一步預(yù)測該檢測目標(biāo)具體屬于哪一類。
雖然R-CNN算法取得了很大進(jìn)展,但缺點(diǎn)也很明顯:重疊框(一張圖片大2000多個候選框)特征的冗余計(jì)算使得整個網(wǎng)絡(luò)的檢測速度變得很慢(使用GPU的情況下檢測一張圖片大約需要14S)。
為了減少大量重疊框帶來的冗余計(jì)算,K.He等人提出了SPPNet。
SPPNet
SPPNet 提出了一種空間金字塔池化層(Spatial Pyramid Pooling Layer, SPP)。它的主要思路是對于一副圖像分成若干尺度的圖像塊(比如一副圖像分成1份,4份,8份等),然后對每一塊提取的特征融合在一起,從而兼顧多個尺度的特征。SPP使得網(wǎng)絡(luò)在全連接層之前能生成固定尺度的特征表示,而不管輸入圖片尺寸如何。當(dāng)使用SPPNet網(wǎng)絡(luò)用于目標(biāo)檢測時,整個圖像只需計(jì)算一次即可生成相應(yīng)特征圖,不管候選框尺寸如何,經(jīng)過SPP之后,都能生成固定尺寸的特征表示圖,這避免了卷積特征圖的重復(fù)計(jì)算。
相比于RCNN算法,SPPNet在Pascal-07數(shù)據(jù)集上不犧牲檢測精度(VOC-07, MAP=59.2%)的情況下,推理速度提高了20多倍。
和RCNN一樣,SPP也需要訓(xùn)練CNN提取特征,然后訓(xùn)練SVM分類這些特征,這需要巨大的存儲空間,并且多階段訓(xùn)練的流程也很繁雜。除此之外,SPPNet只對全連接層進(jìn)行微調(diào),而忽略了網(wǎng)絡(luò)其它層的參數(shù)。
為了解決以上存在的一些不足,2015年R.Girshick等人提出Fast RCNN
Fast RCNN
Fast RCNN 網(wǎng)絡(luò)是RCNN和SPPNet的改進(jìn)版,該網(wǎng)絡(luò)使得我們可以在相同的網(wǎng)絡(luò)配置下同時訓(xùn)練一個檢測器和邊框回歸器。該網(wǎng)絡(luò)首先輸入圖像,圖像被傳遞到CNN中提取特征,并返回感興趣的區(qū)域RO1,之后再RO1上運(yùn)用RO池化層以保證每個區(qū)域的尺寸相同,最后這些區(qū)域的特征被傳遞到全連接層的網(wǎng)絡(luò)中進(jìn)行分類,并用Softmaxi和線性回歸層同時返回邊界框。
Fast RCNN 在VOC-07數(shù)據(jù)集上將檢測精度MAP從58.5%提高到70.0%,檢測速度比RCNN提高了200倍。
Fast RCNN 仍然選用選擇性搜索算法來尋找感興趣的區(qū)域,這一過程通常較慢,與RCNN不同的是,F(xiàn)ast RCNN處理一張圖片大約需要2秒,但是在大型真實(shí)數(shù)據(jù)集上,這種速度仍然不夠理想。那么問題來了:“我們可以使用CNN模型來直接生成候選框嗎?",基于此,F(xiàn)aster RCNN的提出完美回答這一問題。
Faster RCNN
Faster RCNN 是第一個端到端,最接近于實(shí)時性能的深度學(xué)習(xí)檢測算法,該網(wǎng)絡(luò)的主要創(chuàng)新點(diǎn)就是提出了區(qū)域選擇網(wǎng)絡(luò)用于生成候選框,能極大提升檢測框的生成速度。該網(wǎng)絡(luò)首先輸入圖像到卷積網(wǎng)絡(luò)中,生成該圖像的特征映射。在特征映射上應(yīng)用Region Poposal Network,返回object proposals和相應(yīng)分?jǐn)?shù)。應(yīng)用Rol池化層,將所有proposals修正到同樣尺寸。最后,將proposals傳遞到完全連接層,生成目標(biāo)物體的邊界框。
雖然Faster RCNN的精度更高,速度更快,也非常接近于實(shí)時性能,但它在后續(xù)的檢測階段中仍存在一些計(jì)算冗余;除此之外,如果IOU閾值設(shè)置的低,會引起噪聲檢測的問題,如果IOU設(shè)置的高,則會引起過擬合。
YOLOV1
網(wǎng)絡(luò)架構(gòu)
將輸入的圖像分為S*S的格子,對于每個格子為中心給出兩個先驗(yàn)框,對于置信度高的格子(即位于物體中心的格子)通過回歸任務(wù)將兩個先驗(yàn)框調(diào)整至合適的大小,然后選擇IOU指標(biāo)較大的框作為預(yù)測結(jié)果。
- 網(wǎng)絡(luò)輸入:448×448×3的彩色圖片
- 隱藏層:由若干卷積層和池化層組成,用于提取圖片的抽象特征
- 全連接層:由兩個全連接層組成,用來預(yù)測目標(biāo)的位置和類別概率值
- 網(wǎng)絡(luò)輸出:得到7×7×30的預(yù)測結(jié)果
注:關(guān)于?7×7×30的預(yù)測結(jié)果,是指將圖像分為7*7的網(wǎng)格,同時在30中,1~5代表第一個先驗(yàn)框的(x,y,w,h)以及置信度c,6~10代表第二個先驗(yàn)框,11~30代表對應(yīng)20個類別的預(yù)測概率。
總的來說,將網(wǎng)格數(shù)量定義為S*S,定義B個先驗(yàn)框,預(yù)測C個類別,那么輸出結(jié)果即為S×S×(5×B+C)的矩陣向量
損失計(jì)算
損失函數(shù)主要分為三部分:坐標(biāo)預(yù)測損失、置信度預(yù)測損失、類別預(yù)測損失。
坐標(biāo)損失:
坐標(biāo)損失也分為兩部分,坐標(biāo)中心誤差和位置寬高的誤差,可以看到,對于中心點(diǎn)的損失直接用了均方誤差,但是對于寬高為什么用了平方根呢?這里是這樣的,我們先來看下圖:
上圖中,藍(lán)色為bounding box,紅色框?yàn)檎鎸?shí)標(biāo)注,如果W和h沒有平方根的話,那么bounding box跟兩個真實(shí)標(biāo)注的位置loss是相同的。但是從面積看來B框是A框的25倍,C框是B框的81/25倍。B框跟A框的大小偏差更大,所以不應(yīng)該有相同的loss。
如果W和h加上平方根,那么B對A的位置loss約為3.06,B對C的位置loss約為1.17,B對A的位置loss的值更大,這更加符合我們的實(shí)際判斷。所以,算法對位置損失中的寬高損失加上了平方根。而公式中的?為位置損失的權(quán)重系數(shù),在pascal VOC訓(xùn)練中取5。
置信度損失:
置信度也分成了兩部分,一部分是包含物體時置信度的損失,一個是不包含物體時置信度的值。
其中前一項(xiàng)表示有無人工標(biāo)記的物體落入網(wǎng)格內(nèi),如果有,則為1,否則為0.第二項(xiàng)代表預(yù)測框bounding box和真實(shí)標(biāo)記的box之間的IoU。值越大則box越接近真實(shí)位置。
confidence是針對預(yù)測框bounding box的,由于每個網(wǎng)格有兩個bounding box,所以每個網(wǎng)格會有兩個confidence與之相對應(yīng)。
從損失函數(shù)上看,當(dāng)網(wǎng)格i中的第j個預(yù)測框包含物體的時候,用上面的置信度損失,而不包含物體的時候,用下面的損失函數(shù)。對沒有物體的預(yù)測框的置信度損失,賦予小的loss weight, 記為在pascal VOC訓(xùn)練中?取0.5。所有物體的預(yù)測框的置信度損失和類別的loss的loss weight正常取1。
類別損失:
類別損失這里也用了均方誤差。其中?表示有無物體的中心點(diǎn)落到網(wǎng)格i中,如果網(wǎng)格中包含有物體object的中心的話,那么就負(fù)責(zé)預(yù)測該object的概率。
特點(diǎn)
優(yōu)點(diǎn):
- 檢測速度非???,標(biāo)準(zhǔn)版本的YOLO可以每秒處理 45 張圖像;YOLO的極速版本每秒可以處理150幀圖像。這就意味著 YOLO 可以以小于 25 毫秒延遲,實(shí)時地處理視頻。對于欠實(shí)時系統(tǒng),在準(zhǔn)確率保證的情況下,YOLO速度快于其他方法。
- 實(shí)時檢測的平均精度是其他實(shí)時監(jiān)測系統(tǒng)的兩倍。
- 遷移能力強(qiáng),能運(yùn)用到其他的新的領(lǐng)域(比如藝術(shù)品目標(biāo)檢測)。
缺點(diǎn):
- 對相互靠近的物體,以及很小的群體檢測效果不好,這是因?yàn)橐粋€網(wǎng)格只預(yù)測了2個框,并且都只屬于同一類。
- 由于損失函數(shù)的問題,定位誤差是影響檢測效果的主要原因,尤其是大小物體的處理上,還有待加強(qiáng)。(因?yàn)閷τ谛〉腷ounding boxes,small error影響更大)。
- 對不常見的角度的目標(biāo)泛化性能偏弱。
YOLOV2
YOLOv2采用Darknet-19 作為特征提取網(wǎng)絡(luò),Darknet-19 的整體結(jié)構(gòu)如下:
?Darknet-19
- 與VGG相似,使用了很多3×3卷積核;并且每一次池化后,下一層的卷積核的通道數(shù) = 池化輸出的通道 × 2。
- 在每一層卷積后,都增加了批量標(biāo)準(zhǔn)化(Batch Normalization)進(jìn)行預(yù)處理。
- 采用了降維的思想,把1×1的卷積置于3×3之間,用來壓縮特征。
- 在網(wǎng)絡(luò)最后的輸出增加了一個全局平均池化(global average pooling)層。
- 整體上采用了19個卷積層,5個池化層。
VGG-16 | YOLOv1 | Darknet-19 |
大多數(shù)檢測網(wǎng)絡(luò)框架都是以VGG-16作為基礎(chǔ)特征提取器,它功能強(qiáng)大,準(zhǔn)確率高,但是計(jì)算復(fù)雜度較大,所以速度會相對較慢。因此YOLOv2的網(wǎng)絡(luò)結(jié)構(gòu)將從這方面進(jìn)行改進(jìn)。 | 基于GoogLeNet的自定義網(wǎng)絡(luò)(具體看上周報告),比VGG-16的速度快,但是精度稍不如VGG-16。 | 速度方面,處理一張圖片僅需要55.8億次運(yùn)算,相比于VGG306.9億次,速度快了近6倍。精度方面,在ImageNet上的測試精度為:top1準(zhǔn)確率為72.9%,top5準(zhǔn)確率為91.2%。 |
YOLO v2使用DarkNet19作為特征提取網(wǎng)絡(luò),該網(wǎng)絡(luò)比YOLO v2所使用的VGG-16要更快。
特點(diǎn)
1、在卷積或池化之后,激活函數(shù)之前,對每個數(shù)據(jù)輸出進(jìn)行標(biāo)準(zhǔn)化。
Batch Normalization 簡稱 BN ,意思是批量標(biāo)準(zhǔn)化。2015年由 Google 研究員在論文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》中提出。
BN 對數(shù)據(jù)進(jìn)行預(yù)處理(統(tǒng)一格式、均衡化、去噪等)能夠大大提高訓(xùn)練速度,提升訓(xùn)練效果?;诖耍琘OLOv2 對每一層輸入的數(shù)據(jù)都進(jìn)行批量標(biāo)準(zhǔn)化,這樣網(wǎng)絡(luò)就不需要每層都去學(xué)數(shù)據(jù)的分布,收斂會變得更快。
2、引入 Anchor Box 機(jī)制:在YOLOv1中是直接對邊界框的位置(x, y, w, h)進(jìn)行預(yù)測,這會導(dǎo)致網(wǎng)絡(luò)在前期訓(xùn)練時非常困難,很難收斂。YOLOv2引入了 Anchors box 機(jī)制,希望通過提前篩選得到的具有代表性先驗(yàn)框Anchors,使得網(wǎng)絡(luò)在訓(xùn)練時更容易收斂。
3、Convolution With Anchor Boxes:YOLOv1 有一個致命的缺陷就是:一張圖片被分成7×7的網(wǎng)格,一個網(wǎng)格只能預(yù)測一個類,當(dāng)一個網(wǎng)格中同時出現(xiàn)多個類時,就無法檢測出所有類。針對這個問題,YOLOv2做出了相應(yīng)的改進(jìn):
- 將YOLOv1網(wǎng)絡(luò)的FC層和最后一個Pooling層去掉,使得最后的卷積層的輸出可以有更高的分辨率特征。
- 縮減網(wǎng)絡(luò),用416×416大小的輸入代替原來的448×448,使得網(wǎng)絡(luò)輸出的特征圖有奇數(shù)大小的寬和高,進(jìn)而使得每個特征圖在劃分單元格的時候只有一個中心單元格(Center Cell)。YOLOv2通過5個Pooling層進(jìn)行下采樣,得到的輸出是13×13的像素特征。
- 借鑒Faster R-CNN,YOLOv2通過引入Anchor Boxes,預(yù)測Anchor Box的偏移值與置信度,而不是直接預(yù)測坐標(biāo)值。
- 采用Faster R-CNN中的方式,每個Cell可預(yù)測出9個Anchor Box,共13×13×9=1521個(YOLOv2確定Anchor Boxes的方法見是維度聚類,每個Cell選擇5個Anchor Box)。比YOLOv1預(yù)測的98個bounding box 要多很多,因此在定位精度方面有較好的改善。
4、使用聚類方法選擇Anchors:YOLOv2 使用 K-means 聚類方法得到 Anchor Box 的大小,選擇具有代表性的尺寸的Anchor Box進(jìn)行一開始的初始化。
5、Fine-Grained Features:細(xì)粒度特征,可理解為不同層之間的特征融合。YOLOv2通過添加一個Passthrough Layer,把高分辨率的淺層特征連接到低分辨率的深層特征(把特征堆積在不同Channel中)而后進(jìn)行融合和檢測,以此來提高對小目標(biāo)的檢測能力。
6、【不足】YOLO v2算法只有一條檢測分支,且該網(wǎng)絡(luò)缺乏對多尺度上下文信息的捕獲,所
以對于不同尺寸的目標(biāo)檢測效果依然較差,尤其是對于小目標(biāo)檢測問題。
YOLOV3
YOLOv3 借助殘差網(wǎng)絡(luò)的思想,YOLOv3 將原來的 darknet-19 改進(jìn)為darknet-53。其中darknet-53主要由1×1和3×3的卷積層組成,每個卷積層之后包含一個批量歸一化層和一個Leaky ReLU,加入這兩個部分的目的是為了防止過擬合。卷積層、批量歸一化層以及Leaky ReLU共同組成Darknet-53中的基本卷積單元DBL。因?yàn)樵贒arknet-53中共包含53個這樣的DBL,所以稱其為Darknet-53。
與darknet-19對比可知,darknet-53主要做了如下改進(jìn):
- 沒有采用最大池化層,轉(zhuǎn)而采用步長為2的卷積層進(jìn)行下采樣。
- 為了防止過擬合,在每個卷積層之后加入了一個BN層和一個Leaky ReLU。
- 引入了殘差網(wǎng)絡(luò)的思想,目的是為了讓網(wǎng)絡(luò)可以提取到更深層的特征,同時避免出現(xiàn)梯度消失或爆炸。
- 將網(wǎng)絡(luò)的中間層和后面某一層的上采樣進(jìn)行張量拼接,達(dá)到多尺度特征融合的目的。
結(jié)構(gòu)特點(diǎn)
- 為了能夠預(yù)測多尺度的目標(biāo),YOLOv3 選擇了三種不同shape的Anchors,同時每種Anchors具有三種不同的尺度,一共9種不同大小的Anchors。借鑒特征金字塔網(wǎng)的思想,YOLOv3設(shè)計(jì)了3種不同尺度的網(wǎng)絡(luò)輸出Y1、Y2、Y3,目的是預(yù)測不同尺度的目標(biāo)。由于在每一個尺度網(wǎng)格都負(fù)責(zé)預(yù)測3個邊界框,且COCO數(shù)據(jù)集有80個類。所以網(wǎng)絡(luò)輸出的張量應(yīng)該是:N ×N ×[3?(4 + 1 + 80)]。由下采樣次數(shù)不同,得到的N不同,最終Y1、Y2、Y3的shape分別為:[13, 13, 255]、[26, 26, 255]、[52, 52, 255]。
- YOLOv3 對比YOLOv1中的損失函數(shù)可以知道:位置損失部分并沒有改變,仍然采用的是sum-square error的損失計(jì)算方法。但是置信度損失和類別預(yù)測均由原來的sum-square error改為了交叉熵的損失計(jì)算方法。
- YOLOv3在類別預(yù)測方面將YOLOv2的單標(biāo)簽分類改進(jìn)為多標(biāo)簽分類,在網(wǎng)絡(luò)結(jié)構(gòu)中將YOLOv2中用于分類的softmax層修改為邏輯分類器。為實(shí)現(xiàn)多標(biāo)簽分類就需要用邏輯分類器來對每個類別都進(jìn)行二分類。邏輯分類器主要用到了sigmoid函數(shù),它可以把輸出約束在0到1,如果某一特征圖的輸出經(jīng)過該函數(shù)處理后的值大于設(shè)定閾值,那么就認(rèn)定該目標(biāo)框所對應(yīng)的目標(biāo)屬于該類。
-
【不足】YOLOv3采用MSE作為邊框回歸損失函數(shù),這使得YOLO v3對目標(biāo)的定位并不
精準(zhǔn),之后出現(xiàn)的IOU,G1OU,D1OU和COU等一系列邊框回歸損失大大改善了YOLOv3。
YOLOV4
YOLOV4組成結(jié)構(gòu) | CSPDarknet53(主干網(wǎng)絡(luò)) | 將原來的Darknet53與CSPNet進(jìn)行結(jié)合。 使用MIsh激活函數(shù)代替了原來的Leaky ReLU。 |
SPP附加模塊(頸) | SPP來源于這篇論文:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition,在YOLOv4中,作者引入SPP,是因?yàn)樗@著地增加了感受野,分離出了最重要的上下文特征,并且?guī)缀醪粫档偷腨OLOv4運(yùn)行速度。 | |
?PANet路徑聚合(頸) | 使用PANet代替YOLOv3中的FPN作為參數(shù)聚合的方法,針對不同的檢測器級別從不同的主干層進(jìn)行參數(shù)聚合。并且對原PANet方法進(jìn)行了修改, 使用張量連接(concat)代替了原來的捷徑連接(shortcut connection)。 | |
?YOLOv3(檢測頭) | 繼承了YOLOv3的Head進(jìn)行多尺度預(yù)測,提高了對不同size目標(biāo)的檢測性能。 |
YOLO v4在輸入端,引入了Mosaic數(shù)據(jù)增強(qiáng)、cmBN、SAT自對抗訓(xùn)練
特點(diǎn)
與其它先進(jìn)的檢測器相比,對于同樣的精度,YOLOv4更快(FPS);對于同樣的速度,YOLOv4更準(zhǔn)(AP)。
YOLOv4能在普通的GPU上訓(xùn)練和使用,比如GTX 1080Ti和GTX 2080Ti等。
論文中總結(jié)了各種Tricks(包括各種BoF和BoS),給我們啟示,選擇合適的Tricks來提高自己的檢測器性能。
YOLOV5
YOLOv5官方代碼中,一共給出了5個版本,分別是 YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLO5x 五個模型。
Yolov5s網(wǎng)絡(luò)是Yolov5系列中深度最小,特征圖的寬度最小的網(wǎng)絡(luò)。后面的3種都是在此基礎(chǔ)上不斷加深,不斷加寬。YOLOv5s 和YOLOv4一樣,對輸入的圖像進(jìn)行Mosaic數(shù)據(jù)增強(qiáng)。
骨干網(wǎng)路部分主要采用的是:Focus結(jié)構(gòu)、CSP結(jié)構(gòu)。其中 Focus 結(jié)構(gòu)在YOLOv1-YOLOv4中沒有引入,作者將 Focus 結(jié)構(gòu)引入了YOLOv5,用于直接處理輸入的圖片。
在網(wǎng)絡(luò)的頸部,采用的是:FPN+PAN結(jié)構(gòu),進(jìn)行豐富的特征融合,這一部分和YOLOv4的結(jié)構(gòu)相同。
對于網(wǎng)絡(luò)的輸出,遵循YOLO系列的一貫做法,采用的是耦合的Head。并且和YOLOv3、YOLOv4類似,采用了三個不同的輸出Head,進(jìn)行多尺度預(yù)測。
Yolov5的作者將獲取數(shù)據(jù)集的最佳a(bǔ)nchors這一步驟嵌入到整體代碼中,每次訓(xùn)練時,自適應(yīng)的計(jì)算不同訓(xùn)練集中的最佳錨框值。
YOLOv5為了避免將原圖直接resize成統(tǒng)一大小,造成目標(biāo)變形,采用了灰度填充的方式統(tǒng)一輸入尺寸。
YOLOv5定位部分的損失函數(shù)使用了GIOU函數(shù)。
參考文獻(xiàn)
YOLO系列算法精講:從yolov1至yolov5的進(jìn)階之路(2萬字超全整理)
R-CNN系列算法精講:R-CNN —》Fast R-CNN —》Faster R-CNN 進(jìn)階之路文章來源:http://www.zghlxwxcb.cn/news/detail-451140.html
YOLO-YOLOV5算法原理及網(wǎng)絡(luò)結(jié)構(gòu)整理文章來源地址http://www.zghlxwxcb.cn/news/detail-451140.html
到了這里,關(guān)于從R-CNN到Faster-RCNN再到Y(jié)OLOV5,目標(biāo)檢測網(wǎng)絡(luò)發(fā)展概述的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!