AI學習筆記(十二)物體檢測(上)

Lee森發表於2020-12-11

物體檢測簡介

在這裡插入圖片描述

  • 物體識別時要分辨出圖片有什麼物體,輸入是圖片,輸出是類別標籤和概率。物體檢測演算法不僅要檢測圖片中有什麼物體,還要輸出物體的外框 ( x , y , w i d t h , h e i g h t ) (x,y,width,height) (x,y,width,height)來定位物體的位置;
  • object detection,就是在給定的圖片中精確找到物體所在位置,並標註出物體的類別,其需要解決的問題是物體在哪裡以及是什麼;
  • 然而,這個問題並不容易解決,物體尺寸變化範圍很大,擺放物體的角度,姿態不定,而且可以出現在圖片的任何地方,更何況物體還可以是多個類別。
    -

常見檢測網路

目前學術和工業界出現的目標檢測演算法分成3類:
1、傳統的目標檢測演算法:Casscade+HOG/DPM+Haar/SVM以及上述方法的諸多改進、優化;
2、候選區域/框+深度學習分類:通過提取候選區域,並對相應區域進行以深度學習方法為主的分類方案,如:

  • R-CNN(Slective Serrch + CNN + SVM)
  • SPP-net(ROI Pooling)
  • Fast R-CNN(Selective Search + CNN + ROI)
  • Faster R-CNN(RPN + CNN + ROI)
    3、基於深度學習的迴歸方法:YOLO/SSD/DenseBox等方法;以及最近出現的結合RNN演算法的RRC detection;結合DPM的Deformable CNN等。
    在這裡插入圖片描述
    在這裡插入圖片描述

IOU

**Intersection over Union(IOU)**是一種測量在特定資料集中檢測相應五一準確度的一個標準。
IOU是一個簡單的測量標準,只要是在輸出中得到一個預測範圍(bounding boxex)的任務都可以用IOU來進行測量;
為了可以使IOU用於測量任意帶下形狀的物體檢測,我們需要:
1、ground-truth bounding boxex(認為在訓練集影像中標出要檢測物體的大概範圍);
2、演算法得出的結果範圍;
在這裡插入圖片描述

TP、TN、FP、FN

TP、TN、FP、FN一共出現了4個字母,分別為T(ture),F(false),P(positive),N(negtive)。T、F代表該樣本是否被正確分類;P、N代表的是該樣本原本是正樣本還是負樣本;

字母含義
TP(True Positives)被分為了正樣本,而且分對了
TN(True Negatives)被分為了負樣本,而且分對了
FP(False Positives)被分為了正樣本,但是分錯了(事實上為負樣本)
FN(False Negatives)被分為了正樣本,而且分錯了(事實上為正樣本)

在mAP計算的過程中主要用到了,TP、FP、FN這三個概念。

precision(精確度)和recall(召回率)

P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP+FP} Precision=TP+FPTPTP是分類器認為是正樣本而且確實是正樣本的例子,FP是分類器認為是正樣本但實際不是正樣本的例子,Precision即為分類器認為是正類而且確實是正類的部分所佔所有分類器認為是正類的比例。
R e c a l l = T P T P + F N Recall=\frac{TP}{TP+FN} Recall=TP+FNTPTP是分類器認為是正樣本而且確實是正樣本的例子,FN是分類器認為是負樣本但實際不是負樣本的例子,Recall即為分類器認為是正類而且確實是正類的部分所佔確實是正類的比例。精度就是找得對,召回率就是找得全。
在這裡插入圖片描述

  • 藍色的框是真實框。綠色和紅色的框是預測框,綠色的框是正樣本,紅色的框是負樣本。
  • 一般來講,當預測框和真實框IOU>=0.5時,被認為是正樣本。

邊框迴歸

在這裡插入圖片描述

  • 對於視窗一般使用四維向量 ( x , y , w , h ) (x,y,w,h) (x,y,w,h)來表示,分貝表示視窗的中心點座標和寬高;
  • 紅色的框P代表原始的Proposal
  • 綠色的框代表目標的Ground Truth
    邊框迴歸是指尋找一種關係使得輸入原始的視窗 P P P經過對映得到一個跟真實視窗 G G G更接近的迴歸視窗 G ^ \widehat G G 加粗樣式
    所以邊框迴歸的目的即是:
    給定 ( P x , P y , P w P h ) (P_x,P_y,P_wP_h) (Px,Py,PwPh)尋找一種對映 f f f使得: f ( P x , P y , P w , P h ) = ( G x ^ , G y ^ , G w ^ , G h ^ ) f(P_x,P_y,P_w,P_h)=(\widehat{G_x},\widehat{G_y},\widehat{G_w},\widehat{G_h}) f(Px,Py,Pw,Ph)=(Gx ,Gy ,Gw ,Gh )並且 ( G x ^ , G y ^ , G w ^ , G h ^ ) ≈ ( G x , G y , G w , G h ) (\widehat{G_x},\widehat{G_y},\widehat{G_w},\widehat{G_h})\approx(G_x,G_y,G_w,G_h) (Gx ,Gy ,Gw ,Gh )(Gx,Gy,Gw,Gh)

邊框迴歸具體方法

其主要思路為平移+尺度縮放,R-CNN論文中描述如下:
1、先做平移 ( △ x , △ y ) , △ x = P w d x ( P ) , △ y = P h d x ( P ) (\triangle x,\triangle y),\triangle x=P_wdx(P),\triangle y=P_hdx(P) (x,y),x=Pwdx(P),y=Phdx(P)
{ G ^ x = P w d x ( P ) + P x G ^ y = P h d y ( P ) + P x \left\{\begin{array}{l}{\widehat G}_x=P_wdx(P)+P_x\\{\widehat G}_y=P_hdy(P)+P_x\end{array}\right. {G x=Pwdx(P)+PxG y=Phdy(P)+Px
2、然後再做尺度縮放 ( S w , S h ) , S w = e x p ( d w ( P ) ) , S h = e x p ( d h ( P ) ) (S_w,S_h),S_w=exp(dw(P)),S_h=exp(dh(P)) (Sw,Sh),Sw=exp(dw(P)),Sh=exp(dh(P))
{ G ^ w = P w e x p ( d w ( P ) ) G ^ h = P h e x p ( d h ( P ) ) \left\{\begin{array}{l}{\widehat G}_w=P_wexp(dw(P))\\{\widehat G}_h=P_hexp(dh(P))\end{array}\right. {G w=Pwexp(dw(P))G h=Phexp(dh(P))
Input
R e g i o n P r o p o s a l → P = ( P x , P y , P w , P h ) RegionProposal\rightarrow P=(P_x,P_y,P_w,P_h) RegionProposalP=(Px,Py,Pw,Ph)
(注:訓練階段輸入還包括Ground Truth)
Output
需要進行的平移變換和尺度縮放 d x , d y , d w , d h dx,dy,dw,dh dx,dy,dw,dh,或者說是 △ x , △ y , S w , S h \triangle x,\triangle y,S_w,S_h x,y,Sw,Sh。有了這四個變換就可以直接得到Ground Truth。

Selective Search

Selective Search通過顏色、紋理、大小等特徵的相似度把影像分成許多個不同的區域,目標檢測演算法可以從這些去榆中檢測物件,加快檢測速度。
在這裡插入圖片描述
第一步:使用Efficient graph-based image segmentation演算法(基於圖的影像分割)生成初始區域集R,同樣設定區域相似S為空集;
第二步:對於相鄰的區域 ( r i , r j ) (ri,rj) (ri,rj),計算他們的相似度 s ( r i , r j ) s(ri,rj) s(ri,rj),並新增到相似集S中;
第三步:獲取S中相似度最高的兩個區域 s ( r i , r j ) s(ri,rj) s(ri,rj)
第四步:合併區域 r i ri ri r j rj rj r t rt rt
第五步:刪除與 r i ri ri r j rj rj有關的相似度;
第六步:計算新區域 r t rt rt與相鄰區域的相似度 S t St St,並新增 S t St St新增到S中, r t rt rt新增到區域集R中;
第七步:如果S不為空,返回第三步。
總的說,Selective Search演算法不斷合併相似度區域。

Faster R-CNN

Faster RCNN可以分為4個主要內容:
1、Conv layers:作為一種CNN網路目標檢測方法,Faster RCNN首先使用一組基礎的conv+relu+pooling層提取image的feature maps。該feature maps被共享用於後繼RPN層和全連線層;
2、Region Proposal Networks:RPN網路用於生成region proposals。通過softmax判斷anchors屬於positive或者negative,再利用bounding box regression修正anchors獲得精確地proposals;
3、Roi Pooling:該層收集輸入的feature maps和proposals,綜合這些資訊後提取proposal feature maps,送入後續全連線層判斷目標類別;
4、Classification:利用proposal feature maps計算proposal的類別,同時再次bounding box regression獲得檢測框最終的精確位置。
在這裡插入圖片描述

Conv layers

Conv layers

Conv layers包含了conv,pooling,relu三種層。公有13個conv層,13個relu層,4個pooling層。
在Conv layer層中
1、所有的conv層都是:kerner_size=3,pad=1,stride=1;
2、所有的pooling層都是:kerner_size=2,pad=1,stride=2
在Faster RCNN Conv layers中對所有的卷積都做了pad處理(pad=1,即填充一圈0),導致原圖變為 ( M + 2 ) × ( N + 2 ) (M+2)\times(N+2) (M+2)×(N+2)大小,再做 3 × 3 3\times 3 3×3卷積後輸出 M × N M\times N M×N。正是這種設定,導致Conv layers中的conv層不改變輸入和輸出矩陣大小。
在這裡插入圖片描述
類似的是,Conv layers中的pooling層kernel_size=2,stride=2。這樣每個經過pooling層的 M × N M\times N M×N矩陣,都會變成 ( M / 2 ) × ( N / 2 ) (M/2)\times(N/2) (M/2)×(N/2)大小。
綜上所述,在整個Conv layers中,conv和relu層不改變輸入輸出大小,只有pooling層使輸出長寬變為輸入的 1 / 2 1/2 1/2
那麼,一個 M × N M\times N M×N大小的矩陣經過Conv layers固定變為 ( M / 16 ) × ( N / 16 ) (M/16)\times(N/16) (M/16)×(N/16)。這樣Conv layers生成的feature map都可以和原圖對應起來。

區域生成網路Region Proposal Networks(RPN)

經典的檢測方法生成檢測框都非常耗時。直接使用RPN生成檢測框,是Faster RCNN的巨大優勢,能極大特徵檢測框的生成速度。
在這裡插入圖片描述

  • 可以看到RPN網路實際分為兩條線:
    1、上面一條他通過softmax分類anchors獲得positive和negtive分類;
    2、下面一條用於計算對於anchors的bounding box regression偏移量,已獲得精確的proposal。
  • 而最後的Proposal層則負責綜合positive anchors和對應bounding box regression偏移量獲取proposals,同事剔除太小和超出邊界的proposals。
  • 其實整個網路到了Proposal Layer這裡,就完成了相當於目標定位的功能。

anchors

RPN網路在卷積後,對每個畫素點,上取樣對映到原始影像一個區域,找到這個區域的中心位置,然後基於這個中心位置按規則選取9中anchor box。
9個矩形公有3中面積:128,256,512;3種形狀:長寬比大約為1:1,1:2,2:1(可調)。每行的4個值表示矩形左上和右下角點座標。
在這裡插入圖片描述
遍歷Conv layers獲得的feature maps,為每一個點都配備這9彙總anchors作為初始的檢測框。
這些anchor box都是對應於原圖的尺寸,可以直接使用標記的候選框和分類結果進行訓練,其中:
1、把每個標定的ground-truth box與其重疊最大的anchor box記為正樣本。(保證每個ground-truth box至少對應一個正樣本anchor)
2、剩餘的anchor box與某個ground-truth box重疊大於0.7的記為正樣本。(每個ground-truth box可能會對應多個正樣本anchor。但每個正樣本anchor只可能對應一個grand-truth box)
3、與任意一個標記ground-truth box重疊小於0.3的anchor box記為負樣本,其餘的捨棄。
這樣做獲得的檢測框很不準確,通過後面的2次bounding box regression可以修正檢測框位置。

softmax判定positive與negtive

其實RPN最終就是在原圖尺度上,設定了密密麻麻的候選anchor。然後從cnn去判斷那些anchor是裡面有目標的positive anchor,哪些是沒目標的negtive anchor。所以,僅僅是個二分類而已。
在這裡插入圖片描述
可以看到其num_output=18,也就是經過該卷積的輸出影像為 W × H × 18 W\times H\times18 W×H×18大小。
這也就剛好對應了feature maps每一個點都有9個anchors,同時每個anchors又有可能是positive和negative,所有這些資訊都儲存在 W × H × ( 9 × 2 ) W\times H\times (9\times 2) W×H×(9×2)大小的矩陣。
這樣做的原因是後面接softmax分類獲得positive anchors,也就相當於初步提取了檢測目標候選區域box(一般認為目標在positive anchors中)。
由此可知,在softmax前後都接一個reshape layer其實只是為了便於softmax分類。
前面的positive/negtive anchors的矩陣,其在caffe中的儲存形式為 [ 1 , 18 , H , W ] [1,18,H,W] [1,18,H,W]。而在softmax分類時需要進行positive/negtive二分類,所以reshape layer會將其變為 [ 1 , 2 , 9 × H , W ] [1,2,9\times H,W] [1,2,9×H,W]大小,即單獨“騰空”出來一個維度以便softmax分類,之後再reshape恢復原狀。

對proposal進行bounding box regression

在這裡插入圖片描述
可以看到起num_output=36,即經過該卷積輸出影像為 W × H × 36 W\times H\times 36 W×H×36。這裡相當於feature maps每個點都有9個anchors,每個anchors又都有4個用於迴歸的變換量:
[ d x ( A ) , d y ( A ) , d w ( A ) , d h ( A ) ] \lbrack d_x(A),d_y(A),d_w(A),d_h(A)\rbrack [dx(A),dy(A),dw(A),dh(A)]

Proposal Layer

Proposal Layer負責綜合所有變換量和positive anchors,計算出精準的proposal,送入後學RoI Pooling Layer。
Proposal Layer有4個輸入:
1、positive vs negative anchors分類器結果rpn_cls_prob_reshape;
2、對應的bbox reg的變換量rpn_bbox_pred,
3、im_info:對於一幅任意大小 P × Q P\times Q P×Q影像,傳入Faster RCNN前首先reshape到固定 M × N , i m i n f o = [ M , N , s c a l e f a c t o r ] M\times N,im_info=[M,N,scale_factor] M×Niminfo=[M,N,scalefactor]則儲存了此次縮放的所有資訊。
4、引數teat_stride=16
輸入影像經過Conv Layers,經過4次pooling變為 W × H = ( M / 16 ) × ( N / 16 ) W\times H=(M/16)\times(N/16) W×H=(M/16)×(N/16)大小,其中feature_stride=16則儲存了該資訊,用於計算anchor偏移量。

Proposal layer處理過程

1、利用變換量對所有的anchors做bbox regression迴歸;
2、按照輸入的positive softmax scores由大到小排序anchors,提取前pre_nums_topN(e.g. 6000)個anchors,即提取修正位置後的postive anchors;
3、限定超出影像邊界的positive anchors為影像邊界,防止後續roi pooling時proposak超出影像邊界;
4、提出尺寸非常小的positive anchors;
5、對剩餘的positive anchors進行NMS(non-maximum suppression)。
6、輸出proposal
注意,由於在第三步中將anchors對映回原圖判斷是否超出邊界,所以這裡輸出的proposal是對應 M × N M\times N M×N輸入影像尺寸的,這點在後續網路中有用。嚴格意義的檢測應該到此就結束了,後續部分應該屬於識別了。
RPN網路結構總結起來即為:
生成anchors → \rightarrow softmax分類器提取positive anchors → \rightarrow bbox reg迴歸positive anchors → \rightarrow Proposal Layer生成proposals

RoI pooling

RoI Pooling層負責收集proposal,並計算proposal feature maps,送入後續網路。
RoI Pooling層有兩個輸入:
1、原始的feature maps
2、RPN輸出的proposal boxes(大小各不相同)

為何需要RoI Pooling

對於傳統的CNN(如AlexNet和VGG),當網路訓練好後輸入的影像尺寸必須是固定值,同時網路輸出也是固定大小的vector or matrix。如果輸入影像大小不定,這個問題就變得比較麻煩。其解決方法如下:
1、從影像中crop一部分傳入網路(破壞了影像的完整結構)
2、warp稱需要的大小傳入網路(破壞了影像原始形狀資訊)
在這裡插入圖片描述

RoI Pooling原理

新引數pooled_w、pooled_h和spatial_scale(1/16)
RoI Pooling layer farward過程:
1、由於proposal是對應 M × N M\times N M×N尺度的,所以首先使用spatial_scale引數將其對映回 ( M / 16 ) × ( N / 16 ) (M/16)\times(N/16) (M/16)×(N/16)大小的feature map尺度;
2、再講每個proposal對應的feature map區域水平分為pooled_wpooled_h的網路;
3、對網路的每一份都進行max pooling處理
這樣處理後,即使大小不同的proposal輸出結果都是pooled_w
pooled_h固定大小,實現了固定長度輸出。
在這裡插入圖片描述

Classification

Classification部分利用已經獲得的proposal feature maps,通過full connect層與softmax計算每個proposal具體屬於哪個類別(如人,車,電視等),輸出cls_prob概率向量;
同時再次利用bounding box regression獲得每個proposal的位置偏移量bbox_pred,用於迴歸更加精確的目標檢測框。
在這裡插入圖片描述
從RoI Pooling獲取到pooled_w*pooled_h大小的proposal feature maps後,送入後續網路,做了如下兩件事:
1、通過全連線和softamx對proposal進行分類,這實際上已經是識別的範疇了
2、再次對proposal進行bounding box regression,獲得更高精度的預測框

全連線層InnerProduct layers

( x 1 x 2 x 3 ) ( w 11 w 12 w 21 w 22 w 31 w 32 ) + ( b 1 b 2 ) = ( y 1 y 2 ) \begin{pmatrix}x_1&x_2&x_3\end{pmatrix}\begin{pmatrix}w_{11}&w_{12}\\w_{21}&w_{22}\\w_{31}&w_{32}\end{pmatrix}+\begin{pmatrix}b_1&b_2\end{pmatrix}=\begin{pmatrix}y_1&y_2\end{pmatrix} (x1x2x3)w11w21w31w12w22w32+(b1b2)=(y1y2)
輸入X和輸出Y是固定大小。所以,這也就印證了之前RoI Pooling的必要性。
在這裡插入圖片描述

One stage和Two stage

Two Stage

Two stage演算法會使用一個網路生成proposal,如selective search和RPN網路,前者是基於一些人造特徵來的,RPN是一個需要訓練的網路,RPN出現後,ss方法基本就被放棄。RPN網路接在影像特徵提取網路backbone後(和之後的fast-RCNN網路架構公用特徵提取層),會設定RPN loss(bbox regression loss + classification loss)對RPN網路進行訓練,RPN生成的proposal再送到後面的網路中進行更精細的bbox regression和classification。
Two stage演算法主要是RCNN系列,包括RCNN,fast-RCNN,Faster-RCNN。之後的Mask-RCNN融合了Faster-RCNN框架、Resnet和FPN(Feature Pyramid Networks) backbone,以及FCN裡的segmentation方法,在完成了segmention的同時也提高了detection的AP。

One Stage

One stage追求速度捨棄了two stage架構,即不再設定網路單獨生成proposal,而是直接在feature map上進行密集抽樣,產生大量的先驗框,如YOLO的網路方法和SSD沿用Faster-RCNN的anchor方法。這些西安兗礦沒有經過兩步處理,且框的尺寸往往是認為設定,精度肯定會比較低。而且Retina-Net論文中提到,one stage產生的先驗框正負樣本比例嚴重失衡(背景樣本佔多數),會引起訓練上的問題。
One Stage演算法最早是YOLO(後面又更新了YOLO2,YOLO3),該演算法速度極快。之後出現了SSD。還有解決了one stage演算法里正負樣本極不均衡問題的Retina-Net。

YOLO(You Only Look Once)

YOLOV1

在這裡插入圖片描述
YOLO演算法採用了一個單獨的CNN模型實現end-to-end的目標檢測:
1、Resize成 448 × 448 448\times 448 448×448,影像分割得到 7 × 7 7\times 7 7×7網格(cell)
2、CNN提取特徵和預測:卷積部分負責提取特徵,全連線部分負責預測;
3、過濾bbox(通過nms)
在這裡插入圖片描述

  • YOLO演算法整體來說就是把輸入的圖片分為 S × S S\times S S×S格子,這裡是 3 × 3 3\times 3 3×3個格子。
  • 當被檢測的目標的中心點落入這個格子時,這個格子負責檢測這個目標,如圖中的人。
  • 把圖片輸入到網路中,最後輸出的尺寸也是 S × S × n S\times S\times n S×S×n(n是通道數),這個輸出的 S × S S\times S S×S與原輸入圖片 S × S S\times S S×S相對應(都是 3 × 3 3\times 3 3×3)。
  • 假如我們網路一共能檢測20個類別的目標,那麼輸出的通道數 n = 2 × ( 4 + 1 ) + 20 = 30 n=2\times(4+1)+20=30 n=2×(4+1)+20=30。這裡的2指的是每個格子有兩個標定框(論文指出的),4代表標定框的座標資訊,1代表標定框的置信度,20是檢測目標的類別數。
  • 所以網路最後輸出結果的尺寸是 S × S × n = 3 × 3 × 30 S\times S\times n=3\times 3\times 30 S×S×n=3×3×30

關於標定框

  • 網路的輸出是 S × S × ( 5 × B + C ) S\times S\times\left(5\times B+C\right) S×S×(5×B+C)的一個tensor(S-尺寸,B-標定框個數,C-檢測類別數,5-標定框的資訊)。
  • 其中5分為4+1。4代表標定框的位置資訊,框的中心點(x,y),框的高寬h,w;1表示每個標定框的置信度以及標定框的準確度資訊。
    在這裡插入圖片描述

一般情況下,YOLO不會預測邊界框中心的確切座標,而預測與預測目標的網格單元左上角相關的偏移;使用特徵圖單元的維度進行歸一化的偏移。
例如:
以上圖為例,如果中心的預測是 ( 0.4 , 0.7 ) \left(0.4,0.7\right) (0.4,0.7),則中心在 13 × 13 13\times 13 13×13特徵圖上的座標是 ( 6.4 , 6.7 ) \left(6.4,6.7\right) (6.4,6.7)(紅色單元的左上角座標是 ( 6 , 6 ) \left(6,6\right) (6,6)
但是,如果預測到的x,y座標大於1,比如 ( 1.2 , 0.7 ) \left(1.2,0.7\right) (1.2,0.7)。那麼預測的中心座標是 ( 7.2 , 6.7 ) \left(7.2,6.7\right) (7.2,6.7)。注意該中心在紅色單元右側的單元中。這打破了YOLO背後的理論,因為如果我們假設紅色框負責檢測目標狗,那麼狗的中心必須在紅色單元中,不應該在它旁邊的網格單元中。因此,為了解決這個問題,對輸出執行sigmod函式,將輸出壓縮到區間 [ 0 , 1 ] \left[0,1\right] [0,1],有效確保中心處於執行預測的網格單元中。

置信度與準確度

P r ( O b j e c t ) × I O U p r e d t r u t h Pr(Object)\times IOU_{pred}^{truth} Pr(Object)×IOUpredtruth左邊代表包含這個標定框的格子裡是否有目標,有為1無為0。
右邊的部分是把兩個標定框(一個是Ground truth一個是預測的標定框)進行一個IOU操作,即兩個標定框的交集比並集,數值越大,越準確。

類別置信度

由此可計算出各個標定框的類別置信度(class-specific confidence scores/class scores)來表示該標定框中目標屬於各個類別的可能性大小以及標定框匹配目標的好壞。
每個網路預測的class資訊和bounding box預測的confidence資訊相乘,就得到每個bounding box的class-specific confidence score。
P r ( C l a s s i ∣ O b j e c t ) × P r ( O b j e c t ) × I O U p r e d t r u t h = P r ( C l a s s i ) × I O U p r e d t r u t h Pr(Class_i\vert Object)\times Pr(Object)\times IOU_{pred}^{truth}=Pr(Class_i)\times IOU_{pred}^{truth} Pr(ClassiObject)×Pr(Object)×IOUpredtruth=Pr(Classi)×IOUpredtruth

在這裡插入圖片描述

  • 其進行了二十多次卷積還有四次最大池化。其中 3 × 3 3\times 3 3×3卷積用於壓縮特徵,最後將影像壓縮到 7 × 7 × f i l t e r 7\times 7\times filter 7×7×filter的大小,相當於將整個影像劃分為 7 × 7 7\times 7 7×7的網路,每個網路負責自己這一塊區域的目標檢測。
  • 整個網路最後利用全連線層使其結果的size為 ( 7 × 7 × 30 ) \left(7\times7\times30\right) (7×7×30),其中 7 × 7 7\times 7 7×7代表的是 7 × 7 7\times 7 7×7的網格,30的前20個代表的是預測的種類,後10個代表兩個預測框及其置信度 ( 5 × 2 ) \left(5\times2\right) (5×2)

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

對每一個網格的每一個bbox執行同樣操作, 7 × 7 × 2 = 98 b b o x 7\times7\times2=98bbox 7×7×2=98bbox(每個bbox既有對應的class資訊又有座標資訊)。
在這裡插入圖片描述
在這裡插入圖片描述
得到每個bbox的class-specific confidence score以後,設定閾值,濾掉得分低的boxes,對保留的bbox進行NMS處理,就得到最終的檢測結果。
在這裡插入圖片描述
排序後,不同位置的框內,概率不同:
在這裡插入圖片描述
以最大值作為bbox_max,並與比它小的非0值(bbox_cur)做比較:IOU
在這裡插入圖片描述
遞迴,以下一個非0 bbox_cur(0.2)作為bbox_max繼續作比較IOU:
在這裡插入圖片描述
最終,剩下n個框:
在這裡插入圖片描述
對bb3( 20 × 1 20\times 1 20×1)類別的分數,找分數對最大類別的索引 → \rightarrow class bb3( 20 × 1 20\times 1 20×1)中最大的分 → \rightarrow score
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
Yolo的缺點:

  • YOLO對相對靠近的很近的物體(挨在一起且中心點都落在同一個格子上的情況),還有很小的群體檢測效果不好,這是因為一個網格中只預測了兩個框並且歸屬於一類;
  • 測試影像中,當一類物體出現不常見的長寬比和其他情況是泛化能力偏弱。

YOLOV2

1、YOLOV2使用了一個新的分類網路作為特徵提取器;
2、網路使用了較多的 3 × 3 3\times 3 3×3卷積核,在每一次赤化操作後把通道數翻倍;
3、把 1 × 1 1\times 1 1×1的卷積核置於 3 × 3 3\times 3 3×3的卷積核之間,用來壓縮特徵;
4、使用Batch normalization穩定模型訓練,加速收斂;
5、保留了一個shortcut用於儲存之前的特徵;
6、出去網路結構的優化外,YOLOV2相比YOLOV1加入了先驗框部分,最後輸出的conv_dec的shape為 ( 13 , 13 , 425 ) \left(13,13,425\right) (13,13,425)

  • 13 × 13 13\times 13 13×13是把整個圖分為 13 × 13 13\times 13 13×13的網格用於檢測。
  • 425可以分解為 ( 85 × 5 ) \left(85\times 5\right) (85×5),在85中,由於YOLO2常用的是coco資料集,其中具有80個類;剩餘的5指的是x、y、w、h和其置信度。 × 5 \times 5 ×5意味著預測結果包含5個框,分別對應5個先驗框。

在這裡插入圖片描述

YOLOV3

在這裡插入圖片描述
YOLOV3相比於之前的YOLOV1和YOLOV2,改進較大,主要改進方向如下:
1、使用了殘差網路Residual
2、提取多特徵層進行目標檢測,一共提取3個特徵層,它的shape分別為 ( 13 , 13 , 75 ) \left(13,13,75\right) (13,13,75) ( 26 , 26 , 75 ) \left(26,26,75\right) (26,26,75) ( 52 , 52 , 425 ) \left(52,52,425\right) (52,52,425)。最後一個維度為75是因為該圖是基於voc資料集的,它的類為20類。YOLOV3針對每一個特徵層存在3個先驗框,所以最後的維度為 3 × 25 3\times 25 3×25
3、其採用反摺積UpSampling2d設計,逆卷積相對於卷積在神經網路結構的正向和反向傳播中做相反的運算,其可以更多更好的提取出特徵。

YOLOV3行人檢測

在這裡插入圖片描述

SSD

在這裡插入圖片描述
SSD也是一個多特徵網路層,其一共具有11層,前半部分結構是VGG16:
1、首先通過了多個 3 × 3 3\times 3 3×3卷積層,5次步長為2的最大池化取出特徵,形成了5個block,其中第四個Block用於提取小目標(多次卷積後大目標的特徵儲存得更好,小目標特徵會消失,需要在比較靠前的層提取小目標特徵);
2、進行一次卷積核膨脹dilate;
3、讀取第七個Block7的特徵;
4、分別利用 1 × 1 1\times 1 1×1 3 × 3 3\times 3 3×3的卷積提取特徵,在 3 × 3 3\times 3 3×3卷積的時候使用步長2,縮小特徵數,獲取第八個Block的特徵;
5、重複步驟4,獲得9、10、11卷積層特徵。

相關文章