文章目錄
- 3. Preliminaries
- 4. A probabilistic interpretation of two-stage detection
- 6、Results
論文連結:https://arxiv.org/abs/2103.07461
代碼連結:https: //github.com/xingyizhou/CenterNet2
其實一句話就可以概括本文的核心思想:用one-stage的檢測器來代替two stage中的RPN可以提升運作速度和檢測效果。
對于two-stage的RPN和one-stage的檢測器,我一直認為其實它們倆本質上就是同一個東西。但這隻是從網絡架構的形式上看。本文細節地分析了兩者的差別。
其中,3和4兩個section闡述了本文的核心思想,第5個section隻是描述實作細節。
3. Preliminaries
現有的檢測器分為兩類,一個是one-stage的,一個是two-stage的。
先說one-stage:使用 L i , c L_{i,c} Li,c表示對第i個candidate和c類别的檢測結果,其中candidate可以了解為feature map中的grid。那麼 L i , c = 1 L_{i,c}=1 Li,c=1代表第i個candidate檢測為c類别, L i , c = 0 L_{i,c}=0 Li,c=0代表第i個candidate檢測為背景。大多數的one-stage的檢測器parametrize the class likelihood為 s i ( c ) = P ( L i , c = 1 ) s_i(c)=P(L_{i,c}=1) si(c)=P(Li,c=1)。在訓練過程中,就是對gt box最大化這個的對數似然, l o g ( P ( L i , c ) ) log(P(L_{i,c})) log(P(Li,c))。
two-stage:two-stage的檢測器分為兩步,第一步使用RPN盡可能找出proposal,使用objectness P ( O j ) P(O_j) P(Oj)來描述。然後對每個proposal提取特征,在proposal上進行分類,預測 P ( C i ∣ O i = 1 ) P(C_i|O_i=1) P(Ci∣Oi=1), C i C_i Ci的取值是所有類别加上背景類。**但對于two-stage的檢測器來說,RPN的設計要求是高recall,進可能找到所有物體,所采取的方法則是與gt有IoU>0.3的就認為是前景類。**這種提取的proposal是有大量備援的,而且如果使用最終的檢測評價來看(比如IoU>0.7才是前景類),很多proposal其實屬于背景類。而且,two-stage的方法的最終檢測僅依賴 P ( C i ∣ O i = 1 ) P(C_i|O_i=1) P(Ci∣Oi=1),也就是最終檢測不依賴第一階段的機率分布(這一塊會在後面再說)。
4. A probabilistic interpretation of two-stage detection
最終輸出的機率理論上應該如下,o的選取是{0,1}:

對于前景類,要最大化的似然估計是:
對于背景類,要最大化的似然估計是
這裡先說一下以前的two-stage網絡(例如FasterRCNN)采用的方法是:分别在one-stage和two-stage最大化 l o g ( P ( O k = 0 ) ) log(P(O_k=0)) log(P(Ok=0))和 l o g ( P ( b g ∣ O k = 1 ) ) log(P(bg|O_k=1)) log(P(bg∣Ok=1))。那這麼一看,說是把最大化 l o g ( A + B ) log(A+B) log(A+B)變成最大化 l o g ( A ) log(A) log(A)和 l o g ( B ) log(B) log(B)也還能了解,但其中的 P ( O k = 1 ) P(O_k=1) P(Ok=1)這一項其實也丢了。之前的two-stage網絡是完全的解耦了兩個stage,在訓練第二個stage的時候,認為所提取的proposal的 P ( O k = 1 ) = 1 P(O_k=1)=1 P(Ok=1)=1。其實這也好了解,因為one-stage就是一個分類任務,分類就是前景類和背景類,那如果訓練的好,那可不就是 P ( O k = 1 ) = 1 P(O_k=1)=1 P(Ok=1)=1。
本文使用Jensen不等式,将 l o g ( P ( b g ) ) log(P(bg)) log(P(bg))轉成了兩個下界:
那麼在第二個和第一個stage分别最大化這兩個下界。第一個stage最大化公式(4)這其實沒變,但第2個stage最大化(3)則需要知道 P ( O k = 1 ) P(O_k=1) P(Ok=1)。這就引到了Detector design。這裡就直接放原文了:
就是說,根據公式(1),而且最大化公式(3)需要知道 P ( O k ) P(O_k) P(Ok),是以第一個stage不能說是隻是以高recall為目标,而應該是以準确預測objectness為目标,是以需要一個one-stage detector作為第一階段。
看到這裡,我有個疑問:
對于公式(2)的下界的求取用了Jensen不等式,但其實根據機率不為負數,而且log單調遞增,可以輕松将公式(2)找到兩個下界: l o g ( P ( O k = 0 ) ) log(P(O_k=0)) log(P(Ok=0))和 l o g ( P ( O k = 1 ) P ( b g ∣ O k = 1 ) ) log(P(O_k=1)P(bg|O_k=1)) log(P(Ok=1)P(bg∣Ok=1))。其實最大化這兩個下界和最大化(3)和(4)是沒差別的。但這涉及到如何設計loss,不知道把 P ( O k = 1 ) P(O_k=1) P(Ok=1)放入log裡面有沒有什麼影響。
soft label能提高檢測效果。我認為,其實将第一階段改為one-stage detector其實和在第一階段使用soft label想法非常相似。
6、Results
實驗效果很好,其中Ablation studies中的第一個實驗很有說服力:如果不把第一階段做改變,把輸出的機率直接乘到第二階段上,并沒有很好的提升。說明如果第一階段不是很strong的話,不能給出一個合适的objectness的預測。