陪你玩論文 - AB3DMOT,一個 3D multi-object tracking 的 baseline


Posted by Po-Jen on 2021-03-14

前言

繼在 陪你讀論文 - 3D Multi-Object Tracking: A Baseline and New Evaluation Metrics (IROS 2020) 中介紹了 AB3DMOT 的概念,今天要來把他們的 code 跑起來,讓大家之後也能自己去改裡面的 code、甚至是延伸出自己的改良版。基本上作者已經在 README.md 把步驟寫得滿完整的了,不過抱持著可能會有一些要注意的地方,我還是寫了這篇記錄,供以後的自己或有興趣的讀者參考。

在跑起別人 code 的時候,有時可能會遇到一些問題,這時候就可以先想想最後會看到什麼樣的風景,然後就會因為想看到那風景,繼續嘗試了,放張風景圖:

環境安裝

雖然作者提供的步驟是使用 venv,但我個人偏好 conda,如果你對 venv 跟 conda 的定位不熟,可以參考這篇討論 - Does Conda replace the need for virtualenv?

直接放上 commands:

conda create --name ab3dmot python=3.6
conda activate ab3dmot

cd 到你想要儲存這些 code 的資料夾
git clone https://github.com/xinshuoweng/Xinshuo_PyToolbox
cd Xinshuo_PyToolbox
pip install -r requirements.txt

cd ..
https://github.com/xinshuoweng/AB3DMOT.git
cd AB3DMOT/
pip install -r requirements.txt

開始執行

先從 main.py 開始,main.py 會做的事情就是執行 tracking 的過程,並把 track 的結果記錄下來。

export PYTHONPATH=${PYTHONPATH}:/home/ricky/playground/AB3DMOT/AB3DMOT
export PYTHONPATH=${PYTHONPATH}:/home/ricky/playground/AB3DMOT/Xinshuo_PyToolbox
python main.py pointrcnn_Car_val

跑起來就會看到下面的輸出:

(ab3dmot) ricky@system76-pc:~/playground/AB3DMOT/AB3DMOT$ python main.py pointrcnn_Car_val
Total Tracking took: 40.092 for 8008 frames or 199.7 FPS

這時你可以跑跑看 evaluation,會產生一些 tracking metrics:

python evaluation/evaluate_kitti3dmot.py pointrcnn_Car_val

這一步會產生的 output 滿長的,總之最後是長這樣:

=================evaluation: best results with single threshold=================
Multiple Object Tracking Accuracy (MOTA)                                  0.8624
Multiple Object Tracking Precision (MOTP)                                 0.7843
Multiple Object Tracking Accuracy (MOTAL)                                 0.8624
Multiple Object Detection Accuracy (MODA)                                 0.8624
Multiple Object Detection Precision (MODP)                                0.8311

Recall                                                                    0.9217
Precision                                                                 0.9622
F1                                                                        0.9415
False Alarm Rate                                                          0.0931

Mostly Tracked                                                            0.7568
Partly Tracked                                                            0.2054
Mostly Lost                                                               0.0378

True Positives                                                              9279
Ignored True Positives                                                      1688
False Positives                                                              365
False Negatives                                                              788
Ignored False Negatives                                                      783
ID-switches                                                                    0
Fragmentations                                                                15

Ground Truth Objects (Total)                                               10850
Ignored Ground Truth Objects                                                2471
Ground Truth Trajectories                                                    210

Tracker Objects (Total)                                                    10222
Ignored Tracker Objects                                                      578
Tracker Trajectories                                                        1034
================================================================================
========================evaluation: average over recall=========================
 sAMOTA  AMOTA  AMOTP 
0.9328 0.4543 0.7741
================================================================================
Thank you for participating in our benchmark!

跑 Visualization 看看 3D bounding box

我最期待就是這一步,因為跑出 3D bounding box 實在太帥了,不過我發現還需要補裝個 terminaltables,不知道為什麼,在 Xinshuo_PyToolbox 的 requirements.txt 裡面被 comment 掉。

pip install terminaltables
python visualization.py pointrcnn_Car_val

跑起來會看到下面的輸出:

(ab3dmot) ricky@system76-pc:~/playground/AB3DMOT/AB3DMOT$ python visualization.py pointrcnn_Car_val
the input folder does not exist data/KITTI/resources/training/image_02/0000

number of images to visualize is 0
the input folder does not exist data/KITTI/resources/training/image_02/0003

那是因為沒有下載 KITTI 的 image,沒有 image 當然就無法畫囉,所以要去下載並把 image 檔放到對的位置。這時再執行就會看到:

(ab3dmot) ricky@system76-pc:~/playground/AB3DMOT/AB3DMOT$ python visualization.py pointrcnn_Car_val
number of images to visualize is 154
processing index: 0, 1/154, results from ./results/pointrcnn_Car_val/trk_withid/0000/000000.txt
number of objects to plot is 3
processing index: 1, 2/154, results from ./results/pointrcnn_Car_val/trk_withid/0000/000001.txt
number of objects to plot is 5
processing index: 2, 3/154, results from ./results/pointrcnn_Car_val/trk_withid/0000/000002.txt
number of objects to plot is 4
...

然後就可以去 results/ 看到畫出來的結果了!

使用自己的 3D detection module

上面的步驟讓我們可以很快速的把整個流程跑一遍,可是有一個微空虛的地方,就是我們是直接用現成的 3D detection results,像我們剛剛跑的是 pointrcnn_Car_val 這份,是直接從 ./data/KITTI/pointrcnn_Car_val 拿到資料。

如果我們今天想要用 AB3DMOT 的框架,但想要更換 3D object detection 的 module,要怎麼做呢?

我們可以嘗試把 PointRCNN 跑起來,然後產生出 AB3DMOT 需要吃的 txt 檔,關於這件事要怎麼做到,有機會我再寫一篇文章。

總結

今天用很簡短的篇幅紀錄了我把 AB3DMOT 跑起來的過程,有興趣做 3DMOT 研究的讀者,恭喜你,你已經獲得了一個隨時可以跑起來比較的 baseline 方法,你也可以基於現有的 code 去改良,寫出自己的 3D MOT。

延伸閱讀

  1. Github repo: awesome-3d-multi-object-tracking

#Multi-object tracker









Related Posts

CS50 TCP/IP DNS HTTP

CS50 TCP/IP DNS HTTP

[06] JavaScript 入門 - 拉升、嚴格模式

[06] JavaScript 入門 - 拉升、嚴格模式

字串回傳整數 parseInt(string, radix)

字串回傳整數 parseInt(string, radix)




Newsletter




Comments