Faster rcnn代碼理解(3)


緊接着之前的博客,我們繼續來看faster rcnn中的AnchorTargetLayer層:

該層定義在lib>rpn>中,見該層定義:

首先說一下這一層的目的是輸出在特征圖上所有點的anchors(經過二分類和回歸)

(1)輸入blob:bottom[0]儲存特征圖信息,bottom[1]儲存gt框坐標,bottom[2]儲存im_info信息;

(2)輸出blob:top[0]存儲anchors的label值(fg是1,bg是0,-1類不關心),top[1]存儲的是生成的anchors的回歸偏移量,即論文中的tx,ty,tw,th四個量(所以說整個faster rcnn總共兩次bbox回歸,第一次在RPN中,第二次在fast rcnn中),top[2]和top[3]分別存儲的是bbox_inside_weights和bbox_outside_weights,這兩者的具體形式后面再說,作用還不是很清楚;

好的,先進入層的setup函數:

該函數通過解析父類對自己的一些參數進行初始化,同時定義該層的輸入輸出blob;

該函數中要注意的是generate_anchors()函數,它的作用是產生對應與特征圖上最左上角那個點的九種anchor(尺寸對應與輸入圖像),這9個anchor在后面被用來產生所有圖像上的anchors,進入generate_anchors()函數:

 

三種長寬比(0.5,1,2)和三種參考尺寸(128,256,512)形成了九種anchors(注意這里只是參考尺寸,是用來計算anchors尺寸時用到的三種規格,並不是說anchors的規格就是這三種);

接着向下看該層的前向傳播函數forward函數:

 

這里獲得輸入bottom[0]、bottom[1]、bottom[2],繼續:

這里的shift_x和shift_y分別對應x和y軸上的偏移量,用在之前說過的用generate_anchors()函數生成的最左上角的anchors上,對其進行偏移,從而獲得所有圖像上的anchors;all_anchors用來存儲所有這些anchors,total_anchors用來存儲這些anchors的數量K×A,其中,K是輸入圖像的num,A是一幅圖像上anchor的num;之后作者還對這些anchors進行了篩選,超出圖像邊界的anchors都將其丟棄~繼續:

這一部分主要就是獲得這些anchors和對應gt的最大重疊率的情況,以及正樣本的划分標准:a.對於每一個gt,重疊率最大的那個anchor為fg;b,對於每一個gt,最大重疊率大於0.7的為fg;

cfg.TRAIN.RPN_CLOBBER_POSITIVE則涉及到一種情況,即如果最大重疊率小於cfg.TRAIN.RPN_NEGATIVE_OVERLAP=0.3,則到底正還是負,這里的cfg.TRAIN.RPN_CLOBBER_POSITIVE默認是False;

繼續:

這一部分是說,如果我們得到的正樣本或者負樣本太多的話,那么就選取一定數量的,丟棄一定數量的anchors,應該是為了加速(這里的選取方法也很直接,就是隨機選取),繼續:

這一部分是生成bbox_targets、bbox_inside_weights、bbox_inside_weights;其中對於bbox_targets,它這里是調用了_compute_targets()函數,見:

在該函數又接着調用了bbox_transform函數,見:

從而得到了論文中所需要的四個偏移量tx,ty,tw,th四個量;

而對於后兩個bbox_inside_weights和bbox_outside_weights,函數中定義的是bbox_inside_weights初始化為n×4的0數組,然后其中正樣本的坐標的權值均為1;而bbox_outside_weights同樣的初始化,其中正樣本和負樣本都被賦值1/num(anchors的數量),還有另一種非統一的賦值方式在else中,這里就不說了;繼續:

這里則是通過_unmap()函數實現將之前在所有圖像上產生的anchors都賦上label、bbox_targets、bbox_inside_weights、bbox_outside_weights屬性,見該函數:

之后會把這些屬性信息經過reshape封裝進該網絡層的輸出blob,即top[0]、top[1]、top[2]、top[3]中;之后:

由於該層不需要反向傳播,所以backward函數也不需要寫了,在前向傳播中已經reshape了,就不用再寫reshape函數了~

 好了,到此,AnchorTargetLayer層的定義就寫到這兒,若有錯誤請指出~

(轉載請注明出處)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM