主流網絡模型之目標檢測

1.概述

1.2 目標檢測的任務

目標檢測任務就是找到圖片中有哪些物體(分類)及它們的位置(坐標回歸)

1.3 目標檢測的分類

1.one-stage和two-stage

one-stage直接輸出物體的類別概率和坐標,速度快,準確度較two-stage低。two-stage第一步是通過RPN(Region Proposal Network)生成候選區域,第二步對每個候選區域進行分類和回歸得到最終結果。

出處:yolov4

2.anchor-based和anchor-free

對于anchor-based模型來說,anchor的形狀是一般是通過對數據集內的框進行K-means聚類得到。anchor代表了數據集一種統計,相當于一種先驗。

3種聚合方式的特點:Mean,反映分布;Max,忽略重復;Sum:單射。??這句話可以忽略

出處:yolov3

anchor-based模型的缺點:

1.anchor的質量影響模型效果;

2.大部分的在圖上的anchor都是負樣本,正負樣本不均勻的問題。

3.NMS的計算

對于anchor-free模型來說,以FCOS為例,直接對特征圖上每個像素點進行預測。

出處:FOCS。其他anchor free的還有Reppoints ,CornerNet等

2.R-CNN系列


two-stage

2.1?R-CNN(Region with CNN features)

R-CNN是2014年提出的,RCNN具體原理解析

整體結構如下:

網絡分為四個部分:區域劃分、特征提取、區域分類、邊框回歸

區域劃分:使用selective search算法畫出2k個左右候選框,送入CNN

特征提取:使用imagenet上訓練好的模型,進行finetune

區域分類:從頭訓練一個SVM分類器,對CNN出來的特征向量進行分類

邊框回歸:使用線性回歸,對邊框坐標進行精修

優點

ss算法比滑窗得到候選框高效一些;使用了神經網絡的結構,準確率比傳統檢測提高了

缺點

1、ss算法太耗時,每張圖片都分成2k,并全部送入CNN,計算量很大,訓練和inference時間長

2、四個模塊基本是單獨訓練的,CNN使用預訓練模型finetune、SVM重頭訓練、邊框回歸重頭訓練。微調困難,可能有些有利于邊框回歸的特征并沒有被CNN保留

GPU上13s/image(Nvidia的,具體沒說什么型號),CPU上53s/imge。??

2.2?Fast R-CNN

Fast R-CNN是R-CNN的同一個作者(Ross Girshick)在2015年提出的。

Fast-RCNN具體原理解析



具體做法如下:

step1:輸入是整張圖片和候選區域(Selective Search得到)的集合,經過CNN(VGG16)后得到特征圖

step2:使用RoI pooling將特征圖采樣(RoI pooling layer+ FC)為一個定長的特征向量;

step3:對于每個RoI特征向量進行兩個任務1)softmax輸出類別;2)bbox回歸

ROI Pooling具體操作如下:

根據輸入image,將ROI映射(projection)到feature map對應位置;

將映射后的區域劃分為相同大小的sections(sections數量與輸出的維度相同);

對每個sections進行max pooling操作;

相對RCNN,準確率和速度都提高了,具體做了以下改進

1、依舊使用了selective search算法對原始圖片進行候選區域劃分,但送入CNN的是整張原始圖片,相當于對一張圖片只做一次特征提取,計算量明顯降低

2、在原圖上selective search算法畫出的候選區域對應到CNN后面輸出的feature map上,得到2k個左右的大小長寬比不一的候選區域,然后使用RoI pooling將這些候選區域resize到統一尺寸,繼續后續的運算

3、將邊框回歸融入到卷積網絡中,相當于CNN網絡出來后,接上兩個并行的全連接網絡,一個用于分類,一個用于邊框回歸,變成多任務卷積網絡訓練。這一改進,相當于除了selective search外,剩余的屬于端到端,網絡一起訓練可以更好的使對于分類和回歸有利的特征被保留下來

4、分類器從SVM改為softmax,回歸使用平滑L1損失

缺點:因為有selective search,所以還是太慢了,一張圖片inference需要3s左右,其中2s多耗費在ss上,且整個網絡不是端到端

在nvidia k40 GPU上最快0.06s/image。??

2.3?Faster R-CNN

Faster R-CNN是2016年提出的模型,作者中包括R-CNN的作者。

Fseter-RCNN具體原理解析 1

Fseter-RCNN具體原理解析 2

重點:RPN(Region Proposal Network),anchor

Faster R-CNN將整個框架分為了2個部分1)RPN;2)detector

Our object detection system, called Faster R-CNN, is composed of two modules. The first module is a deep fully convolutional network that proposes regions, and the second module is the Fast R-CNN detector that uses the proposed regions.

具體做法如下:

step1:卷積層對輸入的圖像進行特征提取得到特征圖

step2:RPN網絡使用先驗anchor輸出帶有objectness socre的矩形候選區域(通過先驗anchor產生)集合

objecness socre:二分類,表示是背景類和有目標;

倘若特征圖大小為W × H ,使用k個先驗anchor,則總共有W H k個矩形候選區域;

k表示使用k個anchor;2k:表示二分類數量,4k:是坐標數量

用下面一張圖更容易理解:

特征圖通過一個3 × 3的卷積核遍歷整個特征圖,然后以特征圖上的每個像素為中心生成k個anchor,然后利用全連接對anchors進行分類(上面的分支)和初步的bbox回歸(下面的分支)。

step3:將RPN的輸出經過ROI Pooling后進行bbox回歸和分類

引入RPN,Faster-RCNN相當于Fast-RCNN+RPN,準確率和速度進一步提高,主要做了以下改進:

1、移除selective search算法,還是整張原始圖片輸入CNN進行特征提取,在CNN后面的卷積不再使用ss算法映射過來的候選區域,而是采用新的網絡RPN,使用神經網絡自動進行候選區域劃分

2、RPN通過生成錨點,以每個錨點為中心,畫出9個不同長寬比的框,作為候選區域,然后對這些候選區域進行初步判斷和篩選,看里面是否包含物體(與groundtruth對比IoU,大于0.7的為前景,小于0.3的為背景,中間的丟棄),若沒有就刪除,減少了不必要的計算

3、有效的候選區域(置信度排序后選取大概前300個左右)進行RoI pooling后送入分類和邊框回歸網絡

優點:端到端網絡,整體進行優化訓練;使用神經網絡自動生成的候選區域對結果更有利,比ss算法好;過濾了一些無效候選區,較少了冗余計算,提升了速度

RPN網絡和錨點具體原理和訓練過程

RPN訓練

1、加載預訓練模型,訓練RPN

2、訓練fast-rcnn,使用的候選區域是RPN的輸出結果,然后進行后續的bb的回歸和分類

3、再訓練RPN,但固定網絡公共的參數,只更新RPN自己的參數

4、根據RPN,對fast-rcnn進行微調訓練

在k40 GPU上最快17fps(ZF+Fast R-CNN)??


2.4.1 R-FCN

R-FCN具體原理解析

在Faster-RCNN基礎上,進一步提高了準確率,主要以下改進

1、使用全卷積層代替CNN basenet里面的全連接層

2、CNN得到的feature map在RoI pooling之后變成3x3大小,把groundtruth也變成3x3大小,對9宮格每個區域分別比較和投票

2.4.2?Mask R-CNN(201703)

Mask R-CNN是何凱明在2017年提出的實例分割模型。

Mask-RCNN具體原理解析1

Mask-RCNN具體原理解析2

Mask-RCNN具體原理解析3(RoI Align解釋)

主要改進1)Faster R-CNN加了一個輸出mask的分支;2)將RoI Pooling改為了RoI Align


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

RoI Align的具體做法?如下圖所示,虛線是特征圖,黑實線是RoI區域。可以看到,RoI是保留小數的。然后將RoI的分為4個區域(本例為2 × 2 2,原文叫bin,倉),每個區域設立4個采樣點。RoI Align通過從特征圖上附近的網格點進行雙線性插值來計算每個采樣點的值。對RoI、其bin或采樣點所涉及的任何坐標不進行量化。

3.YOLO系列

官方網站:https://pjreddie.com/publications/

yolo->v2->v3:https://github.com/pjreddie/darknet

└->v4:https://github.com/AlexeyAB/darknet

│ │?https://github.com/Tianxiaomo/pytorch-YOLOv4???

│ └->scaled-v4:https://github.com/WongKinYiu/ScaledYOLOv4??? ?? ??

└->v5:https://github.com/ultralytics/yolov5?????

關于yolov5:https://github.com/pjreddie/darknet/issues/2198???

??表示python實現;??表示新提出的模型(2020年)

YOLO具體原理解析1

YOLO具體原理解析2

3.1?YOLOv1

yolov1是發表于2016年的一種anchor-free模型。

YOLOv1論文理解

yolov1的模型如上圖,有24個卷積層和2個全連接層組成,輸出形狀為7 × 7 × 30。其中7 × 7表示網絡將原圖劃分為了7 × 7 個區域;30 = ( 4 + 1 ) × 2 + 20,4表示( w , h , x , y ),1表示置信度c cc,2表示預測兩個矩形框;20代表預測20個類。當然,最后輸出也可以是其他值,滿足S × S × ( B ? 5 + C )規則。


yolov1的做法如下:

圖像輸入網絡后,輸出?S × S × ( B ? 5 + C )的特征圖;?S × S特征圖中的每個格子負責預測一個類,輸出一個置信度c 加上bbox回歸的值5 55,類別信息C,如果每個格子負責預測兩個,則乘一個B。最后使用NMS去重。

顯然,yolov1最多只能預測S × S 個目標且對小目標不敏感。

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(可以看到全局圖像,有上下文信息)


3.2?YOLOV2/YOLO9000

yolov2是2017年提出,首次引入了Faster RCNN的anchor及其他的trick。

YOLO9000的論文標題為:YOLO9000: Better, Faster, Stronger

Better:

BN

高精度與訓練

Anchor

使用聚類選anchor

使用相對坐標進行預測(相對于格子)

passthrough層(將26 × 26 × 1 特征圖變為了13 × 13 × 4 的特征圖)

多尺度訓練(32的倍數{ 320 , 352 , … , 608 })

Faster

Darknet-19

bottleneck結構


Stronger

使用WordTree進行層次分類(預測9000類的技術,從大類往小類預測,層次)

3.3?YOLOv3

YOLOv3是YOLO原作者(Joseph Redmon)最后參與的、2018年發布的模型。

主要改進在網絡結構上。

Backbone:DarkNet53! ??

殘差;更深了


Neck:FPN:

出處:Feature Pyramid Networks for Object Detection;上采樣使用最近鄰插值


FPN接受3個尺度的特征圖32 × 32 ,16 × 16 ,8 × 8,分別對應小、中、大尺度的目標。每個預測分支使用3種anchor,共9個anchor。

3.4?YOLOv4

我的翻譯:https://blog.csdn.net/kobayashi_/article/details/109361339

yolov4是現在的darknet的維護者Alexey Bochkovskiy于今年(2020年4月)提出的模型,即對模型進行了優化也對數據預處理進行了優化!????

YOLOv4由下列組成:

Backbone:CSPDarknet53

Neck:SPP,PAN

Head:YOLOv3

YOLOv4使用了:

在Backbone上使用的BoF:CutMix和Mosaic數據增強,DropBlock正則化,類標簽平滑(Class label smoothing)

在Backbone上使用的BoS:Mish激活,跨階段部分連接(CSP),多輸入殘差連接加權(MiWRC)

在探測器上使用的BoF:CIoU-loss,CmBN,DropBlock正則化,Mosaic數據增強,自對抗訓練,使用對單個ground truth用對各anchor來消除網格敏感性,余弦退火scheduler,最優超參數,隨機訓練形狀

在探測器上使用的BoS:Mish激活,SPP塊,SAM塊,PAN路徑聚合塊,DIoU-NMS

3.4.1?scaled YOLOv4

我的翻譯:https://blog.csdn.net/kobayashi_/article/details/109960073

scaled-yolov4是今年(2020年11月)在yolov4的基礎上提出的,將yolov4使用的CSP技術進一步擴展到了Neck層。提高了網絡的速度,最高能跑到1774FPS(YOLOV4-tiny)!??

3.5?YOLOv5

至今為止沒有論文,預計于2020年年底出,代碼還在更新中。模型沒啥大改動,數據集處理的亮點是馬賽克(Mosaic)數據增強,不過v4也用了。具體等論文。

關于yolov5論文:?https://github.com/ultralytics/yolov5/issues/1333

4.其他模型

4.1?SSD

SSD是2016年提出的模型。

SSD具體原理解析

SSD和yolov1的對比:

對比上圖可知,SSD使用了多尺度的特征圖進行檢測,這樣做的好處是可以利用多種尺度的特征圖來預測多種尺度的目標。SSD對小目標的檢測能力優于yolov1。同時,又因為SSD生成的多尺度default box一定有更高概率找到更加貼近于 Ground Truth 的候選框,所以模型的訓練穩定性是肯定比yolov1強。

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的檢測也有幫助,原因在于隨機裁剪后的圖像相當于“放大”原圖像,所以這樣的裁剪操作不僅增加了圖像數量,也放大了圖像。不過這樣速度很慢。

4.1.1?FPN(CVPR2017)——對于小目標難檢測問題的解決

FPN具體原理解析

低層的特征語義信息比較少,但是目標位置準確;高層的特征語義信息比較豐富,但是目標位置比較粗略。對圖像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種不同的錨點。

4.2?RetinaNet/Focal Loss

RetinaNet在2018提出,主要是為了驗證一個更為重要的技術——Focal Loss。

Focal Loss的是在cross entropy損失函數上改進的:

FL=?(1?p_{t} )^γ   log(p_{t} )

γ \gammaγ是對于容易學習樣本的懲罰,γ \gammaγ越大,越容易學習到的樣本計算后的loss越小。

一般來說,網絡對容易樣本的擬合能力強,具體體現在輸出層的輸出的概率值接近于1。(1?p_{t} )^γ在這里的作用是將概率值大的loss變小(從橫軸看),將loss大的概率值變小(從縱軸看),具體體現在γ越大,小概率值區間的梯度越大。

Focal loss主要解決的是one-stage類模型的正負樣本不均衡問題(we discover that the extreme foreground-background class imbalance encountered during training of dense detectors is the central cause)

4.3?EfficientDet

EfficientDet是2019年年底提出的模型,它使用EfficientNet作為backbone,并提出了BiFPN結構

BiFPN:Bi-directional FPN,雙向FPN

各種類型的FPN:

[FPN:自頂向下

PANet:先自頂向下再自地向上(雙向)]->簡單的多尺度特征融合方式

[NAS-FPN:NAS(神經網絡架構搜索)出來的結構

BiFPN:雙向,重復,殘差結構]->復雜的融合方式

4.4?MTCNN

MTCNN不同于上面所有的模型,它于2016年提出,使用了**級聯(Cascade)**的思想。


MTCNN的結構如上圖所示,由3個網絡構成:1)P-Net:負責輸出候選區域;2)R-Net:負責對候選區域進行進一步調整;3)O-Net:負責對R-Net調整之后的區域又進一步調整,然后輸出。有了這種級聯的思想,甚至可以根據任務需要在O-Net后面再加n個!

?MTCNN的數據處理流程如下圖:


P-Net:首先對輸入圖片使用金字塔,每縮放一次傳入P-Net得到候選區域,直至圖片縮放的12 × 12(這樣做可以檢測到多尺度的目標)。然后根據P-Net的輸出反算回原圖,得到目標在圖片上的坐標;

R-Net:R-Net接受到P-Net輸出的目標在原圖的候選區域(縮放到24 × 24尺度大小)進行分類和調整,根據輸出反算回原圖得到目標在圖片上的區域;

O-Net: O-Net接受到R-Net輸出的目標在原圖的候選區域(縮放到48 × 48尺度大小)進行分類和調整,根據輸出反算回原圖得到目標在圖片上的區域;

NMS:NMS根據反算回原圖的坐標結果進行去重處理。

總結

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,345評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,494評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,283評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,953評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,714評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,410評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,940評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,776評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,210評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,654評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容