0. paper & code
DenseBox
paper: DenseBox: Unifying Landmark Localization with End to End Object Detection
code: Caffe 、PyTorch
FCOS
paper: FCOS: Fully Convolutional One-Stage Object Detection
code: FCOS
PolarMask
paper: PolarMask: Single Shot Instance Segmentation with Polar Representation
code: PolarMask
1. DenseBox
15 年的一篇論文,放當時並不驚艷,但如今由於 Anchor Free 倒是火了... 只能說作者的 Idea 太超前了
該論文出發點是為了解決的人臉、車輛這類單一類別目標檢測問題。可提取的關鍵信息包括 Anchor Free、one stage、FCN、特征融合、OHEM。
我們先來看看 GT 是怎么做的,作者采用 crop&resize 的方式,以目標為中心獲得 240x240 尺度的圖片,crop&resize 的原則是要保證目標在獲得的圖片中大致 50x50 大小。接下來需要制作一個 60x60x5 尺度的 GT map,將之前獲得的240x240 尺度的圖片中目標中心點映射到 GT map 中並以 $r_c$ 為半徑填充 GT map:GT map 第一個 channel 填充 1(正樣本),其他地方填充 0(負樣本),構成一個語義分割 map,為了提升模型性能采用類似 OHEM 的方法將正樣本周圍 2 個像素的樣本標記為忽略區域;GT map 隨后四個 channel 則代表距離 bbox 的左上、右下坐標的距離。
網絡設計上沒有多尺度預測但采用了特征融合。
為了提升檢測器的性能,加入了 landmark 這個任務(畢竟理論上來說相近的任務間可以互相提升的)。將 landmark 輸出 feature map 和 上一步檢測輸出 feature map 連接后在經過 pool->conv3->conv5->up_sample->conv1 再次判斷目標中心點位置。
2. FCOS
FCOS 可以理解為是 DenseBox 的改進版,提取到的關鍵信息包括 Anchor Free、one stage、FCN、center-ness、NMS。
FCOS 首先說明了下 DenseBox 的缺點,包括:1. 由於 DenseBox 訓練時是固定 crop&resize 到 224x224(保證圖片中心的目標大小約 50x50),因此需要圖像金字塔來完成多尺度,這和一拳超人任何敵人一拳搞定相違背。2. 它很難解決重疊目標的問題。
作者嘗試使用特征金字塔 FPN 結構可以避免上面的問題,達到和傳統基於 Anchor 的檢測器相當的性能。但是試驗中發現,會產生很多遠離目標中心的低質量的框。在此背景下,FCOS 提出一種 "center-ness" 分支任務(只有一層網絡)來預測檢測框和 GT 中心點之間的偏移程度。這樣的話在測試的時候就可以用它來降低偏遠檢測框的置信度了,以期在 NMS 中干掉這些低質量的檢測框。"center-ness" 使得 FCOS 超越了基於 Anchor 的檢測器。作者在優點中還強調了,RPNs 替換成 FCOS 可以使得兩階段檢測器性能更強。同時還可以經過小小的改動擴展到解決其他視覺任務,包括實例分割(后面要講的 PolarMask 就是)和關鍵點檢測。
1. feature map 上,所有落在 bbox 內的 (x,y) 都將被視為正樣本,回歸目標是該位置到 bbox 的四個邊框(映射到 feature map 上)的距離, 這就相當於是一個框級別的實例分割了:
\begin{equation}
\label{regression target}
\begin{split}
& l^* = x - x_0^{(i)}, \ t^* = y - y_0^{(i)} , \\
& r^* = x_1^{(i)} - x, \ b^* = y_1^{(i)} - y . \\
\end{split}
\end{equation}
2. 對於落在重疊框里的點 (x,y) 則簡單選擇面積最小的那個作為回歸目標/分類目標。
3. 網絡輸出預測一個 $N-D$ 的類別預測 $\textbf{p}$,一個 $4-D$ 的回歸預測 $\textbf{t}$ 以及上面所得 $1-D$ "center-ness" 。
4. 用訓練 $C$ 個 binary classifiers 代替訓練一個 multi-class classifier。
5. 每個預測 feature map 后用四個卷積層來分離分類和回歸特征分支。
6. 正常情況下分離出的位置特征則只需要經過一個 3x3 卷積來預測中心點到四邊的距離。但考慮到不同尺度的回歸范圍不同,模型中考慮利用 $exp(s_i*x)$ 操作來標准化,對回歸分支上$(0,+\infty)$的所有實數預測做映射,其中 $s_i$ 是學習出來的,這對提升模型性能很重要。
7. loss 上沒有什么特別的,$L_{cls}$ 是有 focal loss 加成的,$L_{reg}$ 是 IoU loss。$N_{pos}$ 代表正樣本的數量,$\lambda$ 是一個權重因子(論文中設為1)。$\textbf{1}_{c_i^*>0}$ 是一個指標函數,當 $c_i^*>0$ 值為1,否則為0:
\begin{equation}
\label{loss function}
L(\{p_{x,y}\},\{t_{x,y}\}) = \frac{1}{N_{pos}}\sum_{x,y}{L_{cls}(p_{x,y}, x_{x,y}^*)} + \frac{\lambda}{N_{pos}}\sum_{x,y}{\textbf{1}_{\{c_i^*>0\}} L_{reg}(t_{x,y}, t_{x,y}^*)}
\end{equation}
代碼中發現,回歸 Loss 不是用 $N_{pos}$ 作歸一化的,而是用 $\sum{centerness}$
8. 對於 Anchor based 的方法來說,如果該 feature map 的 stride 較大,可能會導致 low best possible recall(BPR)。而對於 FCOS 來說,乍一看可能會覺得 BPR 會更低,因為缺少先驗的位置信息。但我們的實驗表明, FCN based 的 FCOS 能有能力獲得較好的 BPR,甚至超越基於 Anchor 的檢測器。進一步來說,擁有多級 FCN based FCOS 有望超越 Anchor based 的檢測器。
9. 對於 GT 重疊框的問題,由於我們不知道要回歸到哪個 GT 最合適,這這模糊性是導致 FCN based 模型性能較差的一個原因。在本文中,我們展示了多層級預測可以很好的解決這個問題,使 FCN based 模型達到甚至超過 Anchor based 模型。
如上圖所示:FCOS 共 5 個尺度輸出 {$P_3, P_4, P_5, P_6, P_7$},其中 $P_3, P_4, P_5$ 由 backbone 中的 feature map $C_3, C_4, C_5$ 經過一個1x1卷積橫向連接得到。區別於 Anchor based 檢測器中,通過在不同尺度 feature map 中設置不同大小的 Anchor boxes 來完成多尺度,這里直接限制 bounding box regression。具體的,每個尺度分別限定它們的預測范圍為 $P_3$ [0, 64], $P_4$ [64, 128], $P_5$ [128, 256], $P_6$ [256, 512], $P_7$ [512,$+\infty$]。因為不同尺寸的目標被分配到不同特征層上,而大部分重疊都發生在尺寸差異比較大的目標之間,所以 multi-level prediction 可以緩解上文提到的二義性問題,提高 FCN based 檢測器的性能,使之接近 Anchor based 檢測器。特別的,如果還存在對應多個 GT 的實例,就簡單取面積最小的那個 GT 為目標就好了。
10. 同 FPN、RetinaNet 一樣,模型中共享 heads 部分的參數,這樣不僅可以使檢測器更參數高效,而且也可以提升檢測性能。同時這里還采用了 GroupNorm 層代替了 BatchNorm。
11. 由於這種類分割的檢測方式產生了很多原理 GT 中心點的低質量的檢測框,作者提出 "center-ness" 來抑制這些低質量的框。具體的,在分類分支上加上一個 $1D$ 的分類分支,分類目標是個 smooth 形式:
\begin{equation}
\label{centerness}
centerness^* = \sqrt{\frac{min(l^*, r^*)}{max(l^*, r^*)} \times \frac{min(t^*, b^*)}{max(t^*, b^*)}}
\end{equation}
采用 BCE Loss, 該 loss 加到上面的Eq.2上。測試的時候,最終的分類 score 由分類分支的分數和 "center-ness" 分支的分數相乘獲得。目的是為了降低那些遠離目標中心的檢測框的分數,隨后這些低質量檢測框可以通過 NMS 去除。當然中心化操作也可以通過限定 GT 中心的附近的點/Anchor 作為正樣本來達到。
3. PolarMask