前言
繼在 陪你讀論文 - 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。