目標檢測之:Faster-R-Cnn

        目標檢測即在一張圖中找出目標所在的位置,faster-r-cnn爲雙階段目標檢測,第一階段獲取目標所在位置的候選框,然後獲得目標的種類以及更加精細的位置。

        下圖爲使用VGG16作爲 backbone的faste-r-rcnn。

        使用 resnet50backbone的特整體提取層取resnet得layer3 ,即[3,4,6,3]的6,layer4以及avgpool作爲 classifier。還有inception等backbone。

 

1、獲取特徵圖。上部分爲特徵提取網絡,截止到VGG16的最後一個maxpool,獲取16*16的特徵圖。

2、生成錨點框。上圖中在獲得16*16的特徵圖以後,特徵圖的每一個點對應回原圖有一個座標,而且每一個點生成9個anchor(3個比例,3個大小)所以總的anchor爲16*16*9=2034個,anchor的屬性爲(2034, 4)其中的4爲錨框的 左上和右下的座標。

3、rpn階段。上圖的左下分支,訓練這個部分的爲的是獲取 想要的目標候選框。在生成的2304個anchor中,首先篩選在圖像內的框,有一部分錨點框會出界,將出界的錨點框label設置爲-1。對內框分別於圖中的GT計算iou,取iou最大的以及大於0.7(設置的 閾值)爲正樣本,在n個正樣本中取128個label設置爲1,實際也可能小於128,大於128個的時候隨機選取128個剩餘的label設置爲-1。 iou小於0.3的爲負樣本,label設置爲0,個數爲256-剛剛正樣本的個數。對每一個框計算座標的修正係數,所以得到的是:(2034,4)的位置修正信息,以及(2034,1)的類別信息。在計算RPN部分的loss時,就是這兩個與圖中左下的兩個分支計算,其中計算cls的loss 時忽略label爲-1的, 在計算loc的loss的時候只計算正樣本的loss。

4、ROI階段 。上圖的右下分支。 使用RPN階段訓練出來的(2034,4)的網絡輸出去修正anchor得到2034個roi,將anchor小於0的設置爲0,大於邊界的設置爲邊界長寬。根據RPN階段訓練出來的(2034,1)進行置信度由大到小的排序,取前1200個(輸入圖像較小,沒有那麼多anchor)roi,對這1200個進行NMS(非極大值抑制),NMS意思是,選取一個置信度最大的框,其他與該框iou大於閾值的時候的這些框都不要只留最大置信度的這個框。進行NMS後選取200個rois。將GT的框加入到rois裏面變爲202個,分別與GT計算iou,此時這202個候選框分別有了多個iou,對每個候選框取最大iou作爲他的目標類得到202個label_temp。iou大於閾值0.5的時候,選取iou最大的那一類的label+1作爲該框的label,因爲0是負樣本的label。正負比例1:3,總 的框128,所以目標的候選框最大爲32個,很多時候大於0.5的其實沒那麼多。 背景框爲128-樣本框。小於0.5的爲負樣本,選取之後有128個rois,對這128個框計算修正係數,每個框對應的爲label_temp所對應的那個GT,返回的是128個框框以及128個類別,128個(128,4)的修正係數。

在得到這128個框框後,除以16  座標換算到特徵圖像,在16*16的的特徵圖上截取ROI,因爲這128個小的特徵圖大小不同,使用ROIpooling,無論輸入多大轉換到同一 大小,在這裏使用VGG時候輸出爲7*7,在使用resnet50的時候輸出爲14*14,後接全連接 層,最後得到128*4的位置修正輸出層 以及分類的(128,classes)的分類層。

5、loss的計算。faster-r-cnn一共包含4個loss,分別爲建議框生成時候位置修正的loss以及將anchor分爲正負樣本的loss,roi階段的位置修正以及分類loss

  這個網絡的理解最好還是根據代碼實現來理解,文字容易給人繞糊塗了。

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