1. 程式人生 > >Faster R-CNN的訓練過程的理解

Faster R-CNN的訓練過程的理解

我才剛剛學習Faster R-CNN,看了好多部落格,覺得對知識點講的很好,但是順序不對,應該首先講解總的框架,然後再講解內部的細節,所以我就自己寫了一篇,請大家指正。


Faster R-CNN,可以大致分為兩個部分,一個是RPN網路,另一個是Fast R-CNN網路,前者是一種候選框(proposal)的推薦演算法,而後者則是在此基礎上對框的位置和框內的物體的類別進行細緻計算。


不管是RPN還是Fast R-CNN網路,其網路結構一部分來自於pre-trained model的卷積層(下文簡稱model),另一部分則是他們各自特有的結構(有卷積和FC,下文簡稱unique)。
這裡,我主要講的就是訓練過程。

第一步:用model初始化RPN網路,然後訓練RPN,在訓練後,model以及RPN的unique會被更新。


第二步:用model初始化Fast-rcnn網路,注意這個model和第一步一樣。然後使用訓練過的RPN來計算proposal,再將proposal給予Fast-rcnn網路。接著訓練Fast-rcnn。訓練完以後,model以及Fast-rcnn的unique都會被更新。
說明:第一和第二步,用同樣的model初始化RPN網路和Fast-rcnn網路,然後各自獨立地進行訓練,所以訓練後,各自對model的更新一定是不一樣的(論文中的different ways),因此就意味著model是不共享的(論文中的dont share convolution layers)。



第三步:使用第二步訓練完成的model來初始化RPN網路,第二次訓練RPN網路。但是這次要把model鎖定,訓練過程中,model始終保持不變,而RPN的unique會被改變。
說明:因為這一次的訓練過程中,model始終保持和上一步Fast-rcnn中model一致,所以就稱之為著共享。


第四步:仍然保持第三步的model不變,初始化Fast-rcnn,第二次訓練Fast-rcnn網路。其實就是對其unique進行finetune,訓練完畢,得到一個文中所說的unified network。


這就是總體框架的描述,如果你理解了這些,再想深入內部細節的演算法,就不會一頭霧水,沒有方向。至於細節演算法,比如anchor,RoI等等可以參考其他部落格文章,都寫的不錯,只不過從學習者角度來說,他們都把這些演算法寫在最前面,讓學習者看的時候有些茫然。