目標檢測一覽1

1.目標檢測問題

1.1分類和迴歸

目標檢測,即是分類問題,也是迴歸問題。

分類Classification:對打框的部分進行分類,是目標物體?還是背景?解決識別與分類(classification)

迴歸Regression:cat(x,y,w,h),逼近這四個數值(例如:歐式距離作爲損失函數);可以用來校正目標框。解決定位(localization)

目標檢測問題,可以大體分爲級聯的兩步/兩個模型:

  • 識別。是不是目標?
  • 分類。如果是目標的話,是什麼目標?

image.png  image.png

1.2概念

Ground Truth、Region Proposal

對訓練數據上的目標物體進行打框,需要手動去做;有公司專業做這部分工作。目標的真實標記區,也叫Ground Truth。目標框也叫 Region Proposal(Proposal:建議。可以理解爲目標框是一種選區的建議,即選定的區域並不一定真的是目標)。

正/負樣本

正樣本:如果某個region proposal和當前圖像上的所有ground truth中重疊面積最大的那個的IOU大於等於0.5(閾值),則該region proposal作爲這個ground truth類別的正樣本,否則作爲負樣本。另外正樣本還包括了Ground Truth。

負樣本:區域A與GT的重合度在20~50%之間,且A和其他任何一個已生成的負樣本之間的重合度<=70%,則A爲負樣本。

IOU、NMS

IOU(Intersection Over Union)是測量在特定數據集中檢測相應物體準確度的一個標準。一般IOU>0.5時,就可以認爲目標檢測的比較準確。

image.png

NMS(Non-Maximum Suppression)非極大值抑制:

每個邊界框有一個置信度得分(confidence score),即分類器的類別分類概率,根據概率排序。

將置信度最高的邊框A放入最終輸出列表,計算剩下邊框與A的IOU。設定閾值,用來刪除重疊度較大的邊界框。重複上述過程,直到邊界框列表爲空。

非極大值抑制,在計算機視覺任務中得到了廣泛的應用,例如邊緣檢測、人臉檢測、目標檢測(DPM,YOLO,SSD,Faster R-CNN)等。

image.png

1.3技術演進

two stage

two stage:Proposals+Detection(class-agnostic proposals,class-specific detection)

算法:古典的目標識別、R-CNN、SppNet、Fast R-CNN、Faster R-CNN、(FCN,unet語義分割)、R-FCN等。

one stage

one stage:Detection(class-specific detection)

算法:YOLO、SSD、Retinanet等。

2.古典目標識別

2.1Selective Search選擇搜索

CPU運行環境下,Selective Search可以在幾秒內給出1000個Region Proposal。因爲效率較低,一般不再使用Selective Search,它只是作爲古典目標識別的一部分。

SS是一種圖像bounding box算法,2011年由KoenE.A提出。

選擇搜索的主要思路:我們想要框選的區域應該是有相似性或連續性的(顏色、紋理、大小等相似),對輸入圖像用分割算法得到很多子區域,根據相似性再對子區域進行合併提取bounding boxes候選邊界框,不斷進行區域迭代合併。在迭代過程中,對合並的子區域打上bounding boxes,這些boxes就是候選框

選定候選框的其他算法還有很多,例如:

image.png

Selective Search的策略就是將層次聚類的思想用到了區域合併上。

image.png

2.2古典目標識別的步驟

  • 構造訓練集。使用SS進行區域融合,採納正負樣本,負樣本會遠多於正樣本。
  • 提取正負樣本的特徵。將正負樣本轉爲特徵向量:SIFT算法、HOG算法。
  • SVM訓練,分類超平面依賴於支持向量,正負樣本的數量比例不影響分類效果。
  • 反饋False Positive(預測爲正,實際爲負)。收集FP,結合第三步得到的SVM權值作爲初始權值,進行SVM二次訓練。False Negative不如FP那麼關鍵,所以不用收集FN。
  • 測試。使用SS得到圖像的候選區域,對每個區域提取特徵向量,用SVM對區域進行軟分類,並按分類概率值進行排序,保留概率值>0.5的區域A並計算它們與概率值更高區域之間的重疊程度IOU,如果IOU>30%,則把A也去除,最後剩下的就是目標區域(NMS)。

2.3古典目標識別的不足

用SS提取候選框,效率低下;SVM用於二分類,古典目標識別更多是用於目標的定位,或者區分開目標與背景。

4.R-CNN

R-CNN(Region-based Convolutional Neural Network)即通過CNN來代替古典目標識別中的SIFT/HOG算法來將圖像區域(regions)轉變爲向量。

4.1 R-CNN網絡結構

image.png

R-CNN對比古典目標識別

R-CNN與古典目標識別的相同:

使用Selective Search提取候選框(RoI:Regions of Interest);

使用SVM進行分類。

R-CNN與古典目標識別的不同:

  • Warped:對圖像區域變形(resize)成統一的大小,是爲了網絡最後樣本能以同樣維度輸入SVM,而不得不採取的做法。區域變形之後其實會影響分類結果。
  • ConvNet:是指CNN網絡中的卷積層和池化層,作用是將resize後的圖像區域轉成vector。ConvNet使用已有的預訓練的網絡結構(VGG16/AlexNet等),遷移學習,只需要結合softmax進行微調Fine-tune(log loss交叉熵);ConvNet訓練好了之後,接入SVM,使用hinge loss訓練SVM;接入線性迴歸,使用MSE訓練Bbox reg。

     針對每個類別訓練一個SVM的二分類器:輸出的是是否屬於該類別,訓練結果是得到SVM的權重矩陣W;這裏選定負樣本時將IOU的閾值從0.5改成0.3(和fine-tuning時的閾值不一樣),即IOU<0.3的是負樣本,正樣本是Ground Truth。因爲前面fine-tuning需要大量的樣本,所以設置成0.5會比較寬鬆。而在SVM階段是由於SVM適用於小樣本,所以設置0.3會更嚴格一點。

迴歸:只對那些跟ground truth的IOU超過某個閾值且IOU最大的proposal迴歸,其餘的region proposal不參與。對於某個region proposal:R,以及其對應的Ground truth:G,預測結果是:P,我們希望P儘可能接近G。損失函數可以表達爲:R和G的差距減去P和G的差距要儘可能小。迴歸的作用包括對x,y的平移以及對w,h的縮放。

  • Bbox reg:SS提取的候選框並不一定是最好的,添加Bbox reg(線性迴歸)進行候選框的校正,通過Loss設計,只對正樣本做校正。R-CNN中有兩個終端,一個進行分類,一個進行迴歸,total loss=分類loss+迴歸loss。

使用迴歸修正候選框的位置:

image.png

4.2 R-CNN的不足

  • 圖像區域變形,影響模型效果:R-CNN中,在提取RoI之後需要變形,這是不得已的做法,實際會影響網絡模型的效果。
  • 訓練分多步,步驟繁瑣:R-CNN的訓練先要fine tuning一個預訓練的網絡,然後針對每個類別都訓練一個SVM分類器,最後還要用regressors對bounding-box進行迴歸。
  • 訓練階段太慢,佔用大量磁盤空間:經驗來看,訓練階段需要84小時,在訓練SVM和迴歸的時候需要用網絡訓練的特徵作爲輸入,特徵保存在磁盤上再讀入的時間消耗還是比較大的,也佔用磁盤空間。
  • 測試階段太慢:在使用VGG16訓練ConvNet的情況下,每張圖片完成正向傳播(Inference)需要47秒。每張圖片的每個region proposal都要做卷積,重複操作太多。

【問題】爲什麼測試階段每張圖片需要47秒那麼久?

首先selective search提取候選框(大約2k個)時,耗時需要幾秒鐘;

其次,2000多個候選框輸入ConvNet並轉變成vector(即先提取RoI,再輸入CNN轉換爲向量,需要轉換2000多次),耗時最久。

5.SPP-net

5.1網絡拓撲圖

image.png

對R-CNN的改善

SPP-Net對R-CNN的改善,是針對R-CNN的缺點進行的改善:

  • SPP-Net先將原圖輸入CNN得到特徵圖FM,再將從原圖中提取的RoI(也是使用Selective Search方法)映射到FM,和R-CNN剛好相反。SPP-Net中只需要將原圖輸入ConvNet一次,但R-CNN中需要將2000多個RoIs輸入ConvNet2000多次。
  • 相對於R-CNN中對RoI進行變形,SPP-Net對每個RoI進行了金字塔池化,雖然會損失部分圖像信息,但效果好於對圖像區域進行變形。SPP是詞袋(Bag-of-Words)模型的一種擴展。

5.2特徵圖上的RoI

經過ConvNet(VGG16)的多次卷積池化後,得到的Feature map有多個通道(512個),在FM上是在多個通道上都尋找/映射候選框。(在原圖中的proposal經過多次卷積後,位置是相對於原圖不變的)

從輸入尺寸224x224到conv5之後的14x14,原圖被縮小了16倍,所以用SS在FM上提取RoI,如果原圖的候選框上某點的座標爲(n,n),則在FM上映射的RoI上點的座標

假設表示原輸入圖片上的點,表示特徵圖上的點,則

是CNN中所有卷積、池化的stride的乘積,例如:(ZF-5中)S=2*2*2*2=16

image.png

 

image.png

5.3空間金字塔池化層(SPP)

SPP中的池化跟CNN中的池化不太一樣,經過SPP layer之後得到不同大小的FM,例如:3x3,是指將一個RoI區域劃分成3x3,橫向和縱向不必等長。

空間金字塔池化,使得任意大小的特徵圖都能夠轉換成固定大小的特徵向量(多尺度特徵提取出固定大小的特徵向量)。

image.png

image.png

256是convNet最後一個卷積層中卷積核的數量,即feature map的通道數爲256。

假設原圖輸入是224x224,經過conv5後的輸出FM是13x13x256,即有256個大小爲13x13的reponse map。將reponse map分成1x1(金字塔底座),2x2(金字塔中間),4x4(金字塔頂座)三張子圖,分別做max pooling後,出來的特徵就是(16+4+1)x256 維度。如果原圖的輸入不是224x224,出來的特徵依然是(16+4+1)x256維度。這樣就實現了不管圖像尺寸如何,SPP 的輸出永遠是 (16+4+1)x256 維度。

image.png

6.Fast R-CNN

6.1網絡拓撲圖

image.png

對R-CNN和SPP-Net的改善

  • 分類器從SVM換成了Softmax。好處是不用再像R-CNN和SPP-Net那樣分開訓練ConvNet、SVM和線性迴歸,而是可以將ConvNet+Softmax一起訓練;分類結果更適用於多分類的實際情況。

     因爲是模型和分類器、線性迴歸一起訓練,整體的損失函數是:log loss+L1 loss。

     線性迴歸校正候選框時只校正正樣本。

  • 簡化了對FM上的RoIs的池化。Fast-RCNN使用RoI Pooling,每個RoI只進行一次池化,其實是SPP layer的一個特例,實驗證明,只進行一次池化也能有較好的效果。

6.2RoI Pooling

RoI Pooling就是將一個個大小不同的box矩形框,映射成大小固定的矩形框。

roi_pool層將每個候選區域均勻分成M×N塊,對每塊進行max pooling。將特徵圖上大小不一的候選區域轉變爲大小統一的數據,送入下一層(FC)。

image.png

6.3分層採樣:hierarchical sampling

在梯度計算時,R-CNN和SPP-Net是從多張不同圖片中隨機區域性採樣(region-wise sampling)一共128個RoIs,來構建mini-batch 進行SGD;

Fast-RCNN是分層採樣(hierarchical sampling),每次從兩張圖片中各採樣64個RoIs,來構建mini-batch 進行SGD,這樣進行梯度下降時更有效率。

image.png

6.4Fast R-CNN的不足

Fast-RCNN提取候選框仍然使用Selective Search,SS本身就是需要耗時幾秒的,這導致Fast-RCNN檢測速度首先。

image.png

7.Faster R-CNN

7.1網絡拓撲圖

image.png

對Fast R-CNN的改善

  • Faster R-CNN使用RPN在FM上提取並校正候選框。Fast R-CNN的不足在於仍然使用SS在原圖上提取候選框並映射到FM,這個過程SS算法需要幾秒鐘,而Faster R-CNN用RPN卷積神經網絡替換了SS,從根本上解決了問題。(可以簡單的認爲Faster R-CNN = Fast R-CNN + RPN
  • Faster R-CNN在將候選框映射到FM上之前,做了候選框的前景/背景分類和候選框座標位置的校正。

     訓練時,是RPN網絡的分類Loss和迴歸Loss,加上最頂端的分類Loss和迴歸Loss,一共4個Loss一起訓練。

從R-CNN到Fast R-CNN,再到Faster R-CNN,目標檢測的四個基本步驟---生成候選區域、特徵提取、分類、位置精修,最後被統一到一個深度網絡框架中。

image.png

7.2RPN區域生成網絡

RPN(Region Proposal Network)是一種全卷積網絡(FCN),可以同時預測每個位置的目標邊界和目標分數,它代替了Selective Search用來提取候選框。

RPN的結構

  • 生成候選區域。一張1000x600的圖片經過特徵提取後得到feature map尺寸爲60x40,256通道,對於feature map上的每一個位置,給出9個候選框(即anchor boxes):三種面積 X 三種尺寸。當k=9時,候選框一共有約20000個(60*40*9);去除越界的邊框,還剩約6000個(模型測試階段不會去除越界的邊框,只會沿着邊界裁剪);爲了減少冗餘,我們基於候選框的分類分數,經過NMS篩選,最後從每張圖片上獲得約2000個候選區域。(2-stage的檢測)
  • 分類和位置精修。將2000個候選結果送入分類器和迴歸器。分類層(cls_score)輸出每一個位置上,9個anchor屬於前景和背景的概率(K個前景類+1個背景);窗口迴歸層(bbox_pred)輸出每一個位置上,9個anchor對應窗口應該平移縮放的參數。分類層和迴歸層都是全連接網絡,使用尺寸爲1x1的卷積網絡實現。

image.png

image.png

image.png

RPN的訓練

  • 篩選anchor,劃分前景樣本、背景樣本。考察訓練集中的每張圖像:與某個標定的真值(Ground Truth)邊框IoU最大的anchors記爲前景樣本,與任意一個Ground Truth邊框的IoU大於0.7,也記爲前景樣本;如果其與任意一個標定的重疊比例都小於0.3,記爲背景樣本。選定前景、背景之後,還有剩餘的anchor,棄去不用;跨越圖像邊界的anchor棄去不用。(每個mini-batch包含從一張圖像中提取的256個anchor,前景背景樣本1:1。 )
  • 損失函數設計。同時最小化兩種代價:分類誤差,前景樣本的窗口位置偏差。

分類代價:,其中,爲真實分類u對應的概率。

窗口定位代價:,其中,是真實分類u對應的預測參數,是真實平移縮放參數。

總代價:

Faster R-CNN整體訓練:交替訓練

Faster R-CNN中交替訓練(Alternating training)RPN和探測器(Detector)Fast R-CNN,有以下四步:

  • 【訓練RPN】使用小批量數據(即每張圖片提取256個anchor boxes),通過BP和SGD端到端的訓練RPN,用於提取特徵的ConvNet通過預訓練的分類模型初始化,其他參數通過均值爲0標準差爲0.01的高斯分佈初始化。
  • 【訓練Fast R-CNN】根據第一步RPN生成的區域,訓練一個單獨的檢測網絡Fast R-CNN,檢測網絡也是通過預訓練的分類模型進行初始化。(此時兩個網絡還不共享卷積層)
  • 【微調RPN】固定共享的卷積層,使用Fast R-CNN網絡初始化RPN訓練,對RPN的網絡層進行微調。
  • 【微調Fast R-CNN】固定共享的卷積層,對Fast R-CNN的網絡層進行微調。

image.png

7.3邊框迴歸(bounding box reg)

在Faster R-CNN的總體損失中,根據論文表述,訓練時,迴歸損失爲:,其中,是一個向量,表示預測的邊框的四個參數(分別是平移、縮放),是與正樣本錨點相關的真實邊框(GT)的參數向量。其中,表示邊界框的中心座標及其寬和高。變量分別表示預測邊界框,錨點框(anchor box)和實際(ground-truth)邊界框(也是一樣的表示方法)。

預測邊界框對應圖中的,錨點框(anchor box)對應,實際真實邊框對應

模型訓練時,只是輔助作用,是已知的,我們期望錨點框到預測邊框的偏移和錨點框到真實邊框的偏移儘量一致,即,這樣根據預測的偏移向量挪動錨點框,就得到和真實邊框相近的位置。

模型用於預測時,的信息是隱藏在圖中,並不能被提前知道,我們期望:

(輸入除了位置信息,還包括經過ConvNet提取特徵後的feature map中的特徵向量。)

image.png

【問題1】邊框微調/偏移的公式是如何推導的?

訓練階段,我們期望錨點框區域要向預測邊框的位置偏移,即

區域的中心點和寬高的變化量可以表示爲:

所以位置變換的一般形式表示爲:

所以有,即

同樣的,我們期望錨點邊框也要向真實邊框的位置偏移,即

所以有,即

【問題2】爲什麼中心點的平移量要分別除以高和寬?高和寬的縮放量要取對數?

CNN中同樣的模式,不論縮放大小,識別到的特徵是不變的,輸入迴歸模型,期望輸出的平移量也是相近的,平移量除以anchor的高和寬是保證學習到的變換參數就具有尺度不變性;

高和寬的縮放量始終是大於0的,取對數可以保證這種變換。

【問題3】爲什麼只取正樣本/前景樣本做位置的精修?

正樣本/前景樣本是目標檢測任務最終關心的;另外,只針對正樣本/前景樣本做邊框迴歸,即和Ground Truth的IoU大於0.7,這是爲了滿足線性變換的條件,進行線性迴歸建模。

例如:,當時,是線性變換,即高和寬要比較接近,此時候選框和真實邊框的IoU要儘可能的大,樣本歸類爲前景樣本。

 

 

 

來源:

1.CSDN:《Fast RCNN算法詳解》《Faster RCNN算法詳解》魏凱峯 https://blog.csdn.net/u014380165/article/details/72851319

2.https://blog.csdn.net/qq_38906523/article/details/79977437

3.邊框迴歸:https://blog.csdn.net/v1_vivian/article/details/80292569

4.RPN:https://www.cnblogs.com/Terrypython/p/10584384.html

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章