前言
今天的陪你讀論文系列,要來讀一篇 2020 年的 3D Multi-Objet Tracking 文章 - Center-based 3D Object Detection and Tracking,這一篇除了在 nuScenes dataset 上面的表現很好之外,也提供了 程式碼 給想要 reproduce 論文結果的人使用,相當佛心。
這一篇的重點就是將物體用一個點來表示,並用這個點來 track。
今天我不想 follow "簡介 -> 方法 -> 結果" 這個常見的說明順序,而是根據我自己的理解順序來寫,廢話不多說,就讓我們繼續看下去。
實驗結果
首先,我們來看看這篇論文到底值不值得精讀,就從他的表現來決定。因為這篇論文提出的方法包含了 3D object detection 跟 3D object tracking,所以有兩大比較的領域,我們先看 3D object detection:
從結果中可以看出這篇論文的方法的表現很好,比 CVPR 2019 nuScenes 3D Detection Challenge 的贏家 CBGS 還要厲害,而且是完勝等級。看起來是一篇很值得看的 paper 呢!
如果你不了解這些 metrics 是怎麼計算的,可以直接看 code:
nuScenes uses the following detection metrics:
- Mean Average Precision (mAP): Uses center-distance as matching criterion; averaged over distance thresholds.
- True Positive (TP) metrics: Average of translation, velocity, scale, orientation and attribute errors.
- nuScenes Detection Score (NDS): The weighted sum of the above.
接著讓我們來看看 3D tracking 的表現:
跟 AB3DMOT(這裡面也有說明 AMOTA 是什麼) 還有 [6](NeurIPS 2019 nuScenes Tracking challenge 的贏家) 比起來,除了 FP(False Positive,指明明沒有 object,演算法卻認為有 object 的情況)較多,其他指標也都樂勝,而且這個方法不需要用到額外的 motion model(例如 Kalman filter),所以 tracking 的運算時間很短。
看到這邊已經覺得這篇頗猛,不好好讀完是說不過去了。
這篇論文的核心 innovation
下一個很直覺的問題就是,這篇論文為什麼這麼厲害呢?我們直接看看他的架構:
這篇的方法只拿 lidar point cloud 當作 input,首先通過一個 3D encoder 得到 2D 的 feature map,然後使用 center-based detection head 來偵測物體。
在 3D encoder 的選擇上,他們使用兩種現成的演算法:
- VoxelNet
- PointPillar:速度較 VoxelNet 快,但最後出來的 accuracy 低一點。(然後因為 PointPillars 只需要用到 2D CNN,所以上圖架構中的 3D backbone 跟 flatten 都是虛線,因為只有 VoxelNet 需要。)
嗯,看到這邊還是不知道為什麼效果會這麼好,先跳去看一下 ablation study(一種研究方法,指一次改變一個 module 或是設定,看哪個變因對表現影響最大),看能不能大概知道,是哪一個部分對 accuracy 增加的貢獻度最高。
Ablation studies
這個 table 分成 VoxelNet、PointPillars 兩種 3D encoder 來比較,兩個 section 的第一列分別是 VoxelNet 和 PointPillars 的原始表現。
如果仔細看的話,會發現有兩個地方是 mAP 跳升的原因:
- CenterPoint:VoxelNet 跟 PointPillars 原本都是用 anchor-based 的 detection head,這邊換成用 center-based 的 detection head 之後,分別跳升了 3.7 跟 2.8 mAP,所以等一下我們就把重點放在看懂 center-based detection head 是怎麼設計的。
- Flip-test:這一項是單純為了克服 rotation 問題(point cloud 可能從不同角度送進系統),所以會把 point cloud 分別做水平跟垂直翻轉,得到 4 種 input point cloud,然後從 4 張輸出的 heatmap 再去取平均,等我們讀完 center-based detection head 會更了解這邊的意思,我就先放個原文當參考。
2D CenterNet
這篇最重要的核心演算法就是使用了 Objects as Points 裡面的 CenterNet,推薦大家可以去看看這篇文章 - CenterNet: Objects as Points — A Comprehensive Guide。裡面的圖跟說明都寫得非常讚,建議好好讀完,再回來看這篇,因為 CenterNet 是最重要的核心,基本上可以說只要懂 CenterNet 的概念(包含 network 架構、loss 的設計以及 inference 時如何 work),這篇就懂了 70%。
如果想檢驗自己有沒有懂,那就看看下面這段,看得懂的話就 OK 了:
CenterPoint
基本上,CenterPoint 的架構跟 CenterNet 一樣,只有輸出的結果都擴展到 3D,這段就說明得很清楚:
為了擴展到 3D,這邊還有做幾個小調整:
- 放大 Gaussian kernel,因為 3D lidar data 比較 sparse,尤其從 top-down view 看下去,物體普遍都不會佔太多空間,所以放大 Gaussian kernel 才會讓 heatmap 的結果比較好。
- 使用 deformable convolution layer 來幫助處理 rotational invariance 跟 equivariance 的問題。
- 在從 heatmap 中取得 peak 的時候,跟 CenterNet 不同,CenterNet 把 heatmap 中比 8 相鄰位置都大的點當做可能的物體中心,而 CenterPoint 是會把比某個半徑內位置都大的點當做可能的物體中心。
Tracking 的方法
這篇的 tracking 方法很簡單,就是先預測出 object velocity,然後從這個 frame 的 object 中心點扣掉 velocity 得到前一個 frame 應該在的位置,這時再看跟前一個 frame 的哪個物體最接近,就算 match 到了。
不過這個方法有一個潛在的問題,就是如果 velocity 預測偶爾不準,就會產生不連續的錯誤,所以他們這個方法為什麼會表現得這麼好其實滿有趣的,似乎可以更深入研究看看。
實作細節與實驗結果
這邊有很多細節,不過我覺得沒有需要特別說明的地方,有興趣的人可以自己去讀一下。
總結
今天介紹了一個在 nuScenes dataset 超越 SOTA 不少 percentage 的強大方法,它的概念簡單、也有程式碼,如果很多讀者有興趣的話,我也可以再開文章介紹這篇論文的實作細節,歡迎在下方留言許願!下次再陪你讀論文!