為什麼注意到這篇Object Detection的 paper呢?
如果查 CenterNet 其實可以得到兩篇
- CenterNet: Objects as points
- CenterNet: Keypoint Triplets for Object Detection — ICCV 2019
而我們今天要講的目標是前者 Objects as points
之所以會討論這篇, 是看到最近一個Kaggle的比賽 裡頭的public Kernel 有大量使用這篇的trick.
應該有數個因素:
- can estimate multiple object properties
- best speed-accuracy trade-off
- get rid of NMS/ post-processing
Training Rule
想像我們有一個 backbone model:
Input: X (W, H, 3), output: Y^{hat} (W/R, H/R, c)
R 代表 經過backbone 後 image map的縮減的倍數, c指的是目標的個數 (classes/ keypoints)
以Object detection 為例, training 由3 個loss組成
1. Object classification logistic regression focal loss
接著把ground truth Y 也 downscaling 且 align 至 (W/R, H/R, c) 上 並以Gaussian kernel 展為heat map 作為model 的 目標(如果同個classes兩個 kernel 重疊了 就取maximum 的value)
接著每個 downscaling 後的 pixel 都能算一葛loss (focal loss alpha=2, beta=4)
2. Center point 的 offset estimation:
這個 O^{hat} 也是pixel wise 的estimation 是 w, h 方向的 offset, shared by all classes
3. Object size 的 estimation
下方的 object size 則是 pixel-wise 的estimation 是 w, h 方向的 size estimation shared by all classes.
因上面這三個Loss 所需, Model 的 Output size 為 C + 2 (offset) + 2(object_size)
而最終這三葛loss 合起來 (λ_size = 0.1 and λ_off = 1), 就是training 的objective function
Testing Rule
至於最讓人感興趣的部份就是 testing phase 如何擺脫 NMS呢?
簡單粗暴的令人驚訝:
每個類別 Top 100 peak keypoint, 且每個 keypoint 的 value 要大於週邊8格.
在他們的實驗中 給出了有加沒加, 進步不了多少, 不過直覺上就是這應該相當受object size 的影響.