从R-CNN到Faster-RCNN再到YOLOV5,目标检测网络发展概述
R-CNN
?R-CNN由Ross Girshick于2014年提出,R-CNN首先通過(guò)選擇性搜索算法Selective Search從一組對(duì)象候選框中選擇可能出現(xiàn)的對(duì)象框,然后將這些選擇出來(lái)的對(duì)象框中的圖像resize到某一固定尺寸的圖像,并喂入到CNN模型(經(jīng)過(guò)在ImageNet數(shù)據(jù)集上訓(xùn)練過(guò)的CNN模型,如AlexNet)提取特征,最后將提取出的特征送入到SVM分類器來(lái)預(yù)測(cè)該對(duì)象框中的圖像是否存在待檢測(cè)目標(biāo),并進(jìn)一步預(yù)測(cè)該檢測(cè)目標(biāo)具體屬于哪一類。
雖然R-CNN算法取得了很大進(jìn)展,但缺點(diǎn)也很明顯:重疊框(一張圖片大2000多個(gè)候選框)特征的冗余計(jì)算使得整個(gè)網(wǎng)絡(luò)的檢測(cè)速度變得很慢(使用GPU的情況下檢測(cè)一張圖片大約需要14S)。
為了減少大量重疊框帶來(lái)的冗余計(jì)算,K.He等人提出了SPPNet。
SPPNet
SPPNet 提出了一種空間金字塔池化層(Spatial Pyramid Pooling Layer, SPP)。它的主要思路是對(duì)于一副圖像分成若干尺度的圖像塊(比如一副圖像分成1份,4份,8份等),然后對(duì)每一塊提取的特征融合在一起,從而兼顧多個(gè)尺度的特征。SPP使得網(wǎng)絡(luò)在全連接層之前能生成固定尺度的特征表示,而不管輸入圖片尺寸如何。當(dāng)使用SPPNet網(wǎng)絡(luò)用于目標(biāo)檢測(cè)時(shí),整個(gè)圖像只需計(jì)算一次即可生成相應(yīng)特征圖,不管候選框尺寸如何,經(jīng)過(guò)SPP之后,都能生成固定尺寸的特征表示圖,這避免了卷積特征圖的重復(fù)計(jì)算。
相比于RCNN算法,SPPNet在Pascal-07數(shù)據(jù)集上不犧牲檢測(cè)精度(VOC-07, MAP=59.2%)的情況下,推理速度提高了20多倍。
 和RCNN一樣,SPP也需要訓(xùn)練CNN提取特征,然后訓(xùn)練SVM分類這些特征,這需要巨大的存儲(chǔ)空間,并且多階段訓(xùn)練的流程也很繁雜。除此之外,SPPNet只對(duì)全連接層進(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ò)配置下同時(shí)訓(xùn)練一個(gè)檢測(cè)器和邊框回歸器。該網(wǎng)絡(luò)首先輸入圖像,圖像被傳遞到CNN中提取特征,并返回感興趣的區(qū)域RO1,之后再RO1上運(yùn)用RO池化層以保證每個(gè)區(qū)域的尺寸相同,最后這些區(qū)域的特征被傳遞到全連接層的網(wǎng)絡(luò)中進(jìn)行分類,并用Softmaxi和線性回歸層同時(shí)返回邊界框。
Fast RCNN 在VOC-07數(shù)據(jù)集上將檢測(cè)精度MAP從58.5%提高到70.0%,檢測(cè)速度比RCNN提高了200倍。
Fast RCNN 仍然選用選擇性搜索算法來(lái)尋找感興趣的區(qū)域,這一過(guò)程通常較慢,與RCNN不同的是,Fast RCNN處理一張圖片大約需要2秒,但是在大型真實(shí)數(shù)據(jù)集上,這種速度仍然不夠理想。那么問(wèn)題來(lái)了:“我們可以使用CNN模型來(lái)直接生成候選框嗎?",基于此,Faster RCNN的提出完美回答這一問(wèn)題。
Faster RCNN
Faster RCNN 是第一個(gè)端到端,最接近于實(shí)時(shí)性能的深度學(xué)習(xí)檢測(cè)算法,該網(wǎng)絡(luò)的主要?jiǎng)?chuàng)新點(diǎn)就是提出了區(qū)域選擇網(wǎng)絡(luò)用于生成候選框,能極大提升檢測(cè)框的生成速度。該網(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í)時(shí)性能,但它在后續(xù)的檢測(cè)階段中仍存在一些計(jì)算冗余;除此之外,如果IOU閾值設(shè)置的低,會(huì)引起噪聲檢測(cè)的問(wèn)題,如果IOU設(shè)置的高,則會(huì)引起過(guò)擬合。
YOLOV1
?
網(wǎng)絡(luò)架構(gòu)
將輸入的圖像分為S*S的格子,對(duì)于每個(gè)格子為中心給出兩個(gè)先驗(yàn)框,對(duì)于置信度高的格子(即位于物體中心的格子)通過(guò)回歸任務(wù)將兩個(gè)先驗(yàn)框調(diào)整至合適的大小,然后選擇IOU指標(biāo)較大的框作為預(yù)測(cè)結(jié)果。
- 網(wǎng)絡(luò)輸入:448×448×3的彩色圖片
 - 隱藏層:由若干卷積層和池化層組成,用于提取圖片的抽象特征
 - 全連接層:由兩個(gè)全連接層組成,用來(lái)預(yù)測(cè)目標(biāo)的位置和類別概率值
 - 網(wǎng)絡(luò)輸出:得到7×7×30的預(yù)測(cè)結(jié)果
 
注:關(guān)于?7×7×30的預(yù)測(cè)結(jié)果,是指將圖像分為7*7的網(wǎng)格,同時(shí)在30中,1~5代表第一個(gè)先驗(yàn)框的(x,y,w,h)以及置信度c,6~10代表第二個(gè)先驗(yàn)框,11~30代表對(duì)應(yīng)20個(gè)類別的預(yù)測(cè)概率。
總的來(lái)說(shuō),將網(wǎng)格數(shù)量定義為S*S,定義B個(gè)先驗(yàn)框,預(yù)測(cè)C個(gè)類別,那么輸出結(jié)果即為S×S×(5×B+C)的矩陣向量
損失計(jì)算
損失函數(shù)主要分為三部分:坐標(biāo)預(yù)測(cè)損失、置信度預(yù)測(cè)損失、類別預(yù)測(cè)損失。
?特點(diǎn)
優(yōu)點(diǎn):
缺點(diǎn):
YOLOV2
YOLOv2采用Darknet-19 作為特征提取網(wǎng)絡(luò),Darknet-19 的整體結(jié)構(gòu)如下:
?Darknet-19
| VGG-16 | YOLOv1 | Darknet-19 | 
| 大多數(shù)檢測(cè)網(wǎng)絡(luò)框架都是以VGG-16作為基礎(chǔ)特征提取器,它功能強(qiáng)大,準(zhǔn)確率高,但是計(jì)算復(fù)雜度較大,所以速度會(huì)相對(duì)較慢。因此YOLOv2的網(wǎng)絡(luò)結(jié)構(gòu)將從這方面進(jìn)行改進(jìn)。 | 基于GoogLeNet的自定義網(wǎng)絡(luò)(具體看上周報(bào)告),比VGG-16的速度快,但是精度稍不如VGG-16。 | 速度方面,處理一張圖片僅需要55.8億次運(yùn)算,相比于VGG306.9億次,速度快了近6倍。精度方面,在ImageNet上的測(cè)試精度為: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ù)之前,對(duì)每個(gè)數(shù)據(jù)輸出進(jìn)行標(biāo)準(zhǔn)化。
Batch Normalization 簡(jiǎn)稱 BN ,意思是批量標(biāo)準(zhǔn)化。2015年由 Google 研究員在論文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》中提出。
BN 對(duì)數(shù)據(jù)進(jìn)行預(yù)處理(統(tǒng)一格式、均衡化、去噪等)能夠大大提高訓(xùn)練速度,提升訓(xùn)練效果。基于此,YOLOv2 對(duì)每一層輸入的數(shù)據(jù)都進(jìn)行批量標(biāo)準(zhǔn)化,這樣網(wǎng)絡(luò)就不需要每層都去學(xué)數(shù)據(jù)的分布,收斂會(huì)變得更快。
2、引入 Anchor Box 機(jī)制:在YOLOv1中是直接對(duì)邊界框的位置(x, y, w, h)進(jìn)行預(yù)測(cè),這會(huì)導(dǎo)致網(wǎng)絡(luò)在前期訓(xùn)練時(shí)非常困難,很難收斂。YOLOv2引入了 Anchors box 機(jī)制,希望通過(guò)提前篩選得到的具有代表性先驗(yàn)框Anchors,使得網(wǎng)絡(luò)在訓(xùn)練時(shí)更容易收斂。
3、Convolution With Anchor Boxes:YOLOv1 有一個(gè)致命的缺陷就是:一張圖片被分成7×7的網(wǎng)格,一個(gè)網(wǎng)格只能預(yù)測(cè)一個(gè)類,當(dāng)一個(gè)網(wǎng)格中同時(shí)出現(xiàn)多個(gè)類時(shí),就無(wú)法檢測(cè)出所有類。針對(duì)這個(gè)問(wèn)題,YOLOv2做出了相應(yīng)的改進(jìn):
- 將YOLOv1網(wǎng)絡(luò)的FC層和最后一個(gè)Pooling層去掉,使得最后的卷積層的輸出可以有更高的分辨率特征。
 - 縮減網(wǎng)絡(luò),用416×416大小的輸入代替原來(lái)的448×448,使得網(wǎng)絡(luò)輸出的特征圖有奇數(shù)大小的寬和高,進(jìn)而使得每個(gè)特征圖在劃分單元格的時(shí)候只有一個(gè)中心單元格(Center Cell)。YOLOv2通過(guò)5個(gè)Pooling層進(jìn)行下采樣,得到的輸出是13×13的像素特征。
 - 借鑒Faster R-CNN,YOLOv2通過(guò)引入Anchor Boxes,預(yù)測(cè)Anchor Box的偏移值與置信度,而不是直接預(yù)測(cè)坐標(biāo)值。
 - 采用Faster R-CNN中的方式,每個(gè)Cell可預(yù)測(cè)出9個(gè)Anchor Box,共13×13×9=1521個(gè)(YOLOv2確定Anchor Boxes的方法見(jiàn)是維度聚類,每個(gè)Cell選擇5個(gè)Anchor Box)。比YOLOv1預(yù)測(cè)的98個(gè)bounding box 要多很多,因此在定位精度方面有較好的改善。
 
4、使用聚類方法選擇Anchors:YOLOv2 使用 K-means 聚類方法得到 Anchor Box 的大小,選擇具有代表性的尺寸的Anchor Box進(jìn)行一開始的初始化。
5、Fine-Grained Features:細(xì)粒度特征,可理解為不同層之間的特征融合。YOLOv2通過(guò)添加一個(gè)Passthrough Layer,把高分辨率的淺層特征連接到低分辨率的深層特征(把特征堆積在不同Channel中)而后進(jìn)行融合和檢測(cè),以此來(lái)提高對(duì)小目標(biāo)的檢測(cè)能力。
6、【不足】YOLO v2算法只有一條檢測(cè)分支,且該網(wǎng)絡(luò)缺乏對(duì)多尺度上下文信息的捕獲,所
 以對(duì)于不同尺寸的目標(biāo)檢測(cè)效果依然較差,尤其是對(duì)于小目標(biāo)檢測(cè)問(wèn)題。
YOLOV3
YOLOv3 借助殘差網(wǎng)絡(luò)的思想,YOLOv3 將原來(lái)的 darknet-19 改進(jìn)為darknet-53。其中darknet-53主要由1×1和3×3的卷積層組成,每個(gè)卷積層之后包含一個(gè)批量歸一化層和一個(gè)Leaky ReLU,加入這兩個(gè)部分的目的是為了防止過(guò)擬合。卷積層、批量歸一化層以及Leaky ReLU共同組成Darknet-53中的基本卷積單元DBL。因?yàn)樵贒arknet-53中共包含53個(gè)這樣的DBL,所以稱其為Darknet-53。
與darknet-19對(duì)比可知,darknet-53主要做了如下改進(jìn):
- 沒(méi)有采用最大池化層,轉(zhuǎn)而采用步長(zhǎng)為2的卷積層進(jìn)行下采樣。
 - 為了防止過(guò)擬合,在每個(gè)卷積層之后加入了一個(gè)BN層和一個(gè)Leaky ReLU。
 - 引入了殘差網(wǎng)絡(luò)的思想,目的是為了讓網(wǎng)絡(luò)可以提取到更深層的特征,同時(shí)避免出現(xiàn)梯度消失或爆炸。
 - 將網(wǎng)絡(luò)的中間層和后面某一層的上采樣進(jìn)行張量拼接,達(dá)到多尺度特征融合的目的。
 
?
結(jié)構(gòu)特點(diǎn)
精準(zhǔn),之后出現(xiàn)的IOU,G1OU,D1OU和COU等一系列邊框回歸損失大大改善了YOLOv3。
YOLOV4
| YOLOV4組成結(jié)構(gòu) | CSPDarknet53(主干網(wǎng)絡(luò)) |   將原來(lái)的Darknet53與CSPNet進(jìn)行結(jié)合。 使用MIsh激活函數(shù)代替了原來(lái)的Leaky ReLU。  | 
| SPP附加模塊(頸) | SPP來(lái)源于這篇論文:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition,在YOLOv4中,作者引入SPP,是因?yàn)樗@著地增加了感受野,分離出了最重要的上下文特征,并且?guī)缀醪粫?huì)降低的YOLOv4運(yùn)行速度。 | |
| ?PANet路徑聚合(頸) | 使用PANet代替YOLOv3中的FPN作為參數(shù)聚合的方法,針對(duì)不同的檢測(cè)器級(jí)別從不同的主干層進(jìn)行參數(shù)聚合。并且對(duì)原PANet方法進(jìn)行了修改, 使用張量連接(concat)代替了原來(lái)的捷徑連接(shortcut connection)。 | |
| ?YOLOv3(檢測(cè)頭) | 繼承了YOLOv3的Head進(jìn)行多尺度預(yù)測(cè),提高了對(duì)不同size目標(biāo)的檢測(cè)性能。 | 
YOLO v4在輸入端,引入了Mosaic數(shù)據(jù)增強(qiáng)、cmBN、SAT自對(duì)抗訓(xùn)練
特點(diǎn)
與其它先進(jìn)的檢測(cè)器相比,對(duì)于同樣的精度,YOLOv4更快(FPS);對(duì)于同樣的速度,YOLOv4更準(zhǔn)(AP)。
 YOLOv4能在普通的GPU上訓(xùn)練和使用,比如GTX 1080Ti和GTX 2080Ti等。
 論文中總結(jié)了各種Tricks(包括各種BoF和BoS),給我們啟示,選擇合適的Tricks來(lái)提高自己的檢測(cè)器性能。
YOLOV5
YOLOv5官方代碼中,一共給出了5個(gè)版本,分別是 YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLO5x 五個(gè)模型。
?
Yolov5s網(wǎng)絡(luò)是Yolov5系列中深度最小,特征圖的寬度最小的網(wǎng)絡(luò)。后面的3種都是在此基礎(chǔ)上不斷加深,不斷加寬。YOLOv5s 和YOLOv4一樣,對(duì)輸入的圖像進(jìn)行Mosaic數(shù)據(jù)增強(qiáng)。
骨干網(wǎng)路部分主要采用的是:Focus結(jié)構(gòu)、CSP結(jié)構(gòu)。其中 Focus 結(jié)構(gòu)在YOLOv1-YOLOv4中沒(méi)有引入,作者將 Focus 結(jié)構(gòu)引入了YOLOv5,用于直接處理輸入的圖片。
在網(wǎng)絡(luò)的頸部,采用的是:FPN+PAN結(jié)構(gòu),進(jìn)行豐富的特征融合,這一部分和YOLOv4的結(jié)構(gòu)相同。
對(duì)于網(wǎng)絡(luò)的輸出,遵循YOLO系列的一貫做法,采用的是耦合的Head。并且和YOLOv3、YOLOv4類似,采用了三個(gè)不同的輸出Head,進(jìn)行多尺度預(yù)測(cè)。
Yolov5的作者將獲取數(shù)據(jù)集的最佳a(bǔ)nchors這一步驟嵌入到整體代碼中,每次訓(xùn)練時(shí),自適應(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萬(wàn)字超全整理)
R-CNN系列算法精講:R-CNN —》Fast R-CNN —》Faster R-CNN 進(jìn)階之路
YOLO-YOLOV5算法原理及網(wǎng)絡(luò)結(jié)構(gòu)整理
總結(jié)
以上是生活随笔為你收集整理的从R-CNN到Faster-RCNN再到YOLOV5,目标检测网络发展概述的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
                            
                        - 上一篇: OCAD应用:三组元连续变焦系统
 - 下一篇: python公司企业编码条形码二维码生成