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