1. 程式人生 > >faster rcnn end2end 訓練與測試

faster rcnn end2end 訓練與測試

除了前面講過的rpn與fast rcnn交替訓練外,faster rcnn還提供了一種近乎聯合的訓練,姑且稱為end2end訓練。

根據論文所講,end2end的訓練一氣呵成,對於前向傳播,rpn可以作為預設的網路提供proposal.而在後向傳播中,rpn,與fast rcnn分別傳導,而匯聚到shared layer.,但是沒有考慮掉roi pooling層對於predicted bounding box的導數。如下圖:



對於roi pooling層,顯然依賴於影象本身,和roi區域。對於fast rcnn來講,roi是固定的,而對於faster rcnn來說,roi是通過rpn產生的,rpn不定,所以roi的生成依賴於

影象。


但是由於最大池化的作用,所以沒有辦法對roi的四個位置求導。



所以忽略掉對於roi的導數,當然瞭如果改變max pooling的方式,比如如下所說採取雙線性插值,這樣輸出既有roi的座標也有影象畫素值,則可以關於roi求導。



  • For training smaller networks (ZF, VGG_CNN_M_1024) a good GPU (e.g., Titan, K20, K40, ...) with at least 3G of memory suffices
  • For training Fast R-CNN with VGG16, you'll need a K40 (~11G of memory)
  • For training the end-to-end version of Faster R-CNN with VGG16, 3G of GPU memory is sufficient (using CUDNN)

使用end2end的訓練方式,視訊記憶體也減少了,從原先的11g減少到3g.我覺得主要的原因是在原先的交替訓練中,rpn訓練結束後,會有一個rpn生成的過程,這時會生成所有訓練圖片的proposals,而這是個巨大的負擔。而使用end2end的方式訓練,一次訓練一張圖片,rpn階段產生一張圖片的proposal,然後送入fast rcnn訓練。顯然這種方法很省時也很省記憶體。

對於end2end的測試,從網路配置上基本與交替訓練的相同。在一些小的細節,比如end2end測試時仍然保留了drop層,而對於交替訓練的方式,在訓練階段有,測試時去掉了。

下面給出了個人畫的end2end的訓練網路圖。

請訪問:連結