計算機視覺算法整理(一):Faster RCNN,bounding box regression,IOU,GIOU

專門收錄一下一些有趣的,計算機視覺中我想記錄一下的算法,重點關注的是loss function,順便說下相關算法。因爲是收錄,只爲日後查看之需,有一些會借用一些資料,我會給出引用。

1、Faster RCNN

兩階段目標檢測的代表作,可以說是開創了目標檢測的一番局面。現在很多公司實際在商用的目標檢測算法,依然很多是基於Faster RCNN的。雖然後來各種論文都號稱吊打Faster RCNN,但是實際上往往是調參下的結果(有很多,但不是全部)。如果對Faster RCNN也進行細緻調參,替換更好的預訓練backbone,以及進行樣本均衡、難負樣本挖掘(hard negtive mining)、loss優化等技術,往往可以得到不錯的結果。

經過R-CNN和Fast RCNN的積澱,Ross B. Girshick在2016年提出了新的Faster RCNN,在結構上,Faster RCNN已經將特徵抽取(feature extraction),proposal提取,bounding box regression(rect refine),classification都整合在了一個網絡中,使得綜合性能有較大提高,在檢測速度方面尤爲明顯[1]

總體結構

在這裏插入圖片描述
圖1

Faster RCNN其實可以分爲4個主要內容[1]:

  • Conv layers。作爲一種CNN網絡目標檢測方法,Faster RCNN首先使用一組基礎的conv+relu+pooling層提取image的feature maps。該feature maps被共享用於後續RPN層和全連接層。
  • Region Proposal Networks。RPN網絡用於生成region proposals。該層通過softmax判斷anchors屬於positive或者negative,再利用bounding box regression修正anchors獲得精確的proposals。
  • Roi Pooling。該層收集輸入的feature maps和proposals,綜合這些信息後提取proposal feature maps,送入後續全連接層判定目標類別。
  • Classification。利用proposal feature maps計算proposal的類別,同時再次bounding box regression獲得檢測框最終的精確位置。

對Faster RCNN的更詳細的一個結構圖如下:
在這裏插入圖片描述圖2

上圖展示了python版本中的VGG16模型中的faster_rcnn_test.pt的網絡結構,可以清晰的看到該網絡對於一副任意大小PxQ的圖像,首先縮放至固定大小MxN,然後將MxN圖像送入網絡;而Conv layers中包含了13個conv層+13個relu層+4個pooling層;RPN網絡首先經過3x3卷積,再分別生成positive anchors和對應bounding box regression偏移量,然後計算出proposals;而Roi Pooling層則利用proposals從feature maps中提取proposal feature送入後續全連接和softmax網絡作classification(即分類proposal到底是什麼object)[1]。

說實話,Faster RCNN整個端到端流程非常複雜,並不是一下子發明的,首先其集成了大量以往CV領域的成熟技術,比如NMS去重框,以及繼承了RCNN,Fast-RCNN發展過來的思路,還有提出Anchor技術,有點集大成的感覺。這些想要細看的同學推薦去看下原論文,以及帖子:Fast R-CNN文章詳細解讀,以及一文讀懂Faster RCNN。記得我自己16年看的時候也是費了不少勁,這裏先不贅述了。

bounding box regression

我要重點記錄的是 bounding box regression,以及其loss。bounding box regression主要是用來修正anchors(基準框)獲得精確的proposals(預測的物體框)。字面意思,regression就是說是要預測出bounding box的位置,所以後面肯定得跟一個迴歸loss,下面會說。注意的是,bounding box regression在圖2的流程中實際上用了兩次,一次在proposal框的地方,一次在後面bbox_pred的地方。可以看做第一次是粗調,後一次是細調。

下圖所示綠色框爲飛機的Ground Truth(GT),紅色爲提取的positive anchors,即便紅色的框被分類器識別爲飛機,但是由於紅色的框定位不準,這張圖相當於沒有正確的檢測出飛機。所以我們希望採用一種方法對紅色的框進行微調,使得positive anchors和GT更加接近。w
在這裏插入圖片描述
圖3

對於窗口一般使用四維向量[x,y,w,h]表示,分別表示窗口的中心點座標和寬高。對於圖 3,紅色的框A代表原始的positive Anchors,綠色的框G代表目標的GT,我們的目標是尋找一種關係,使得輸入原始的anchor A經過映射得到一個跟真實窗口G更接近的迴歸窗口G’,即:

在這裏插入圖片描述
在這裏插入圖片描述
圖4
在這裏插入圖片描述
所以呢,dx(A),dy(A),dw(A),dh(A)這四個值就是要求的變換值,知道後就可以直接基於A框的原始位置得到G‘的位置。怎麼得到這四個值呢?用regression!

在這裏插入圖片描述
形式如下[2]:
在這裏插入圖片描述
在這裏插入圖片描述(這裏的xx就是前面的GxG_xxax_a就是前面的AxA_x。其他幾個字母也類似。)

2、IOU,GIOU

IoU,又被稱爲Jaccard指數,是用於評估兩個任意形狀相似度的最常用指標,比如用於目標檢測和圖像分割中。對於如圖1中的兩個邊界框A和B,我們計算出兩者的交集I(紅色部分),然後計算並集U,那麼IoU就是兩者的比值[3]:

在這裏插入圖片描述
在這裏插入圖片描述
圖5

IoU編碼的是兩個邊界框的形狀性質,那麼邊界框的長,寬以及位置信息已經包含在內,所以說IoU是對物體尺度是不敏感的。而且IoU是一個歸一化的指標,其值範圍在[0,1]之間,當兩個物體完全無交集時爲0,而完全重疊時爲1。所以IoU用於評價預測框和真實框的一致性是非常合適的。

而實際上主流的目標檢測模型在訓練時都是採用的迴歸損失,如L1和L2(Faster R-CNN採用smooth L1),我們來分析一下回歸損失所面臨的問題,邊界框通常用左上和右下兩個頂點來表示:(x1,y1,x2,y2)。下圖給出了相同迴歸loss下邊界框的差異性,其IoU值相差較大。

在這裏插入圖片描述
圖6

其中綠色是真實框,而黑色是預測框,對於圖6a,我們固定了兩個框的左下頂點,同時固定了右上頂點的距離,此時預測框可以變化多測,但是L2損失是固定的。我們計算IoU值後發現也是變化非常大。同樣的圖6b可以看到L1損失存在類似的問題。這說明迴歸loss可能會陷入IoU指標的一個局部極值點。

(不過,也有一點牽強,比如上面寫的Faster RCNN,並不是簡單用頂點來回歸的)

IoU loss已經被應用在圖像分割中(與檢測不太一樣),IoU作爲一種損失函數是可以進行BP的,因而可用於模型訓練。但是IoU有一個致命的缺點,那就是當兩個形狀沒有任何重疊時,IoU值爲0,無法反映兩個形狀的具體偏差,而且梯度是0,無法對模型進行優化。圖7可以展示這個問題,藍色是真實框,圖7a的黃色框和3的綠色框均與真實框沒有交集,但是明顯7b的預測更好,但是反映在IoU上均爲0。

在這裏插入圖片描述
圖7

由於IoU本身存在的問題,論文據此提出了一種新的指標:generalized IoU (GIoU),其計算公式如下:
在這裏插入圖片描述
最重要的是GIoU會克服IoU的短板,當A和B完全不重合時,GIoU依然起作用。還是前面的例子如圖8所示,可以看到圖8a相比圖b,C的大小較大,這樣圖8a的GIoU值是小於圖b的,這說明GIoU對這種情況是可以處理的,雖然IoU值爲0,但是當預測更好時,GIoU值是增加的。論文中以YOLOv3和Faster R-CNN進行實驗,發現採用GIoU作爲邊界框loss,效果有提升。

在這裏插入圖片描述
圖8

在這裏插入圖片描述

參考資料

[1] https://zhuanlan.zhihu.com/p/31426458
[2] https://blog.csdn.net/liuxiaoheng1992/article/details/81779474
[3] 另闢蹊徑!斯坦福大學提出邊界框迴歸任務新Loss:GIoU
[4] Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression
[5] Generalized Intersection over Union(GIOU)論文核心思想解讀筆記
[6] 白話mAP

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