Faster R-CNN中RPN的分析
摘要
Faster R-CNN是object detection的里程碑之作。它提出了RPN,即一種用CNN來提取proposal的網路。
為了更好地理解RPN的程式碼實現細節,充分理解它用到的SmoothL1Loss是很必要的。
本文簡述了RPN的作用,討論了RPN的loss以及SmoothL1Loss的語義及其作用,最後分析了RPN的程式碼實現。
RPN的原理
RPN簡介
RPN是一個輸入global feature map,輸出許多可能RoI的網路。 RoI就是所謂的感興趣區域,相當於是物體bbox的candidate。RPN輸出的RoI也被稱為proposal。
RPN的anchor
RPN的基本原理就是利用有一定stride(比如16畫素)的滑動視窗在原圖上列舉proposal中心,對每個中心產生多個不同長寬比(例如0.5,1,2三種),不同大小(比如大中小三種)的bbox。這些產生的bbox被叫做anchor。
如果對每個中心有三種長寬比、三種大小,我們就能得到9個anchor。
RPN的minibatch
下文中你會見到minibatch這種說法。 minibatch就是RPN每次輸出的proposal的數量。 如果RPN對每一張圖片輸出了256個proposal,那麼我們就說minibatch=256。
RPN的loss及其分析
RPN的loss如下。
-
loss的結構。 這個loss是一種multi-task loss。所謂多工loss。 這裡,它是cls(proposal的分類)和reg(proposal的bbox的位置迴歸、微調)兩個任務各自的loss之加權和。 之所以說是加權和,主要表現在reg項乘了一個,它一個靈活的超引數,需要人為設定。原文提到。
-
loss的符號。 是一個minibatch中所有anchor的索引。 是對anchor 的預測結果。是anchor 的ground truth。則是正樣本(物體,也就是前景),0則是負樣本(背景)。 是一個長度為4的向量,存的是anchor的四個引數。是對應的bbox的ground truth,也是存的四個引數。注意:這裡的四個引數不是。是。這四個引數在下文介紹。
-
分類項的分析。 的值是一個minibatch所產生的所有proposal的數量。乘上相當是對各個proposal產生的loss取了個平均值。 是一個物體/背景二分類的log loss。通常使用softmax。 本項語義:對所有的anchor計算loss並求和,再依照proposal數目取平均值以標準化。
-
迴歸項的分析。 是anchor的數量。與的作用相同:取平均值以標準化。 。其中是一個魯棒的loss函式。一般使用SmoothL1Loss,在下文詳述。 乘了一項意味著去掉背景bbox對迴歸loss的貢獻——畢竟背景bbox沒有必要回歸、也沒有ground truth可以計算loss。 本項語義:對所有含有物體的anchor計算魯棒loss並求和,再依照anchor數目取平均值以標準化。
這種multi-task loss的設計手法非常常見,實際上背後的思想和數學都非常簡單。
SmoothL1Loss的分析
迴歸中的引數化
。存的四個引數非常特殊,是為了更好地迴歸而設計的。
而對應的bbox的ground truth記作。
類似地, 其中,表示bbox的橫縱座標和寬高。帶*的則表示對應的ground truth.
SmoothL1Loss
下式就是SmoothL1Loss。 本質上來說,它基於L1 loss。L1 loss,是指用真實值和預測值之差的絕對值——也就是差值(或者差向量)的L1範數作為loss值。 L1 loss有一個問題,它在零點處不可微。 而SmoothL1Loss改善了這個問題:在的時候,用具有相同導數的代替L1範數,這讓loss更加smooth。
現在再看reg loss的式子: