翻譯成中文方便查閱。
0. 介紹
此文件描述了KITTI 2D物體檢測,方向估計基準,3D物體檢測基準和鳥瞰視圖基準。
基準包括每項任務的7481個訓練圖像(和點雲)和7518個測試圖像(和點雲)。
儘管我們已經標記了8個不同的類,但在我們的基準測試中只評估了 Car
和 Pedestrian
類,因爲只有那些類已經標記了足夠的全面評估實例。標記過程分兩步進行:首先,我們使用了一組註釋器,在點雲中標記3D邊界框軌跡。由於對於行人軌跡,單個3D邊界框軌跡(尺寸已經固定)通常非常合適,我們還通過使用Mechanical Turk標記每個對象的左/右邊界。我們還收集了對象遮擋狀態的標籤,並通過將汽車/行人模型反投影到圖像平面來計算對象的截斷。
注意:當提交結果時,請將它們存儲爲和GT數據相同的數據格式(見下文),使用文件名稱 000000.txt 000001.txt ...
,創建一個ZIP存檔並存儲您的測試集結果在其根文件夾中。
注意2:如果您打算在訓練集上自行評估結果,請仔細閱讀本文件最後的內容。
注意3:當提交3D物體檢測基準或鳥瞰視圖基準(2017年)時,請仔細閱讀以下說明。特別是,請務必始終提交2D邊界框和3D邊界框以及過濾器框,這些框在圖像平面上不可見。
1. 數據格式
可以在相應的文件夾中找到用於訓練和測試的數據。子文件夾的結構如下:
image_02/
包含左邊彩色相機圖像(.png)
)。label_02
包含左邊彩色相機標籤文件(.txt
)。calib/
包含所以4個相機的校準文件(.txt
)。
label
文件包含以下信息,可以使用此devkit中提供的matlab工具(readLabels.m
,writeLabels.m
)讀取和寫入。
所有值(數字或字符串)通過空格分隔,每行對應一個對象。 總共15列,含義如下:
Values | Name | Description |
---|---|---|
1 | type | 對象的類別。‘Car’, ‘Van’, ‘Truck’,‘Pedestrian’, ‘Person_sitting’, ‘Cyclist’, ‘Tram’, ‘Misc’ ,‘DontCare’ |
1 | truncated | 0(無截斷)到 1(完全截斷)之間的浮點數,截斷是指對象超出圖像邊界 |
1 | occluded | (0,1,2,3) 表示遮擋的程度:0=完全可見,1=部分遮擋,2=大面積遮擋,3=未知 |
1 | alpha | 物體的觀察角度,範圍 [-pi, pi] |
4 | bbox | 圖像中對象的2D邊界框(基於0的索引):包含左,上,右,下像素座標 |
3 | dimensions | 3D對象尺寸:高度,寬度,長度(以米爲單位) |
3 | location | 相機座標中的3D物體位置 x, y, z (以米爲單位) |
1 | rotation_y | 在相機座標中圍繞Y軸旋轉的角度,範圍 [-pi, pi] |
1 | score | 只有測試集的結果才包含這個字段:浮點數,表明 p/r 曲線所需的檢測可信度,越高越好。 |
這裏,DontCare
標籤表示物體未被標記的區域,例如因爲它們離激光掃描儀太遠。爲防止此類對象被視爲誤報,我們的評估腳本將忽略在測試集的 DntCare
區域中檢測到的對象。如果您將訓練圖像中的非對象區域視爲反面示例,則可以使用訓練集中的 DntCare
標籤來避免對象檢測器從這些區域收集困難樣本。
可以使用校準文件夾中的 3x4
投影矩陣將攝像機座標系中的座標投影到圖像中,對於要爲其提供圖像的左側彩色攝像機,必須使用 P2。rotation_y
和 alpha
之間的區別在於,rotation_y
直接在攝像機座標中給出,而 alpha
也考慮從攝像機中心到對象中心的矢量,以計算對象相對於攝像機的相對方向。例如,面向相機座標系的X軸的汽車對應於 rotation_y = 0
,無論它位於 X / Z
平面的哪個位置(鳥瞰圖),當此對象位於攝像機的Z軸上時,alpha
才爲零。當車輛遠離Z軸移動時,觀察角度將改變。
要將一個點從Velodyne座標投影到左側彩色圖像,您可以使用以下公式:
對於右側的彩色圖像:
注意:所有矩陣都存儲爲行主序,即第一個值對應於第一行。R0_rect
包含一個3x3矩陣,你需要通過在右下角添加 1
和在其他地方添加 0
來擴展到4x4矩陣。Tr_xxx
是一個3x4矩陣 (R | t)
,您需要以相同的方式擴展到4x4矩陣!
請注意,雖然所有這些信息都可用於訓練數據,但只有特定基準所需的數據才能提供給評估服務器。但是,必須始終提供所有15個值,未使用的值設置爲 writeLabels.m
中指定的默認值(=invaild
)。另外,必須爲特定檢測提供第16個值,浮點數,值更高表示檢測的置信度更高。您的分數範圍將由我們的評估服務器自動確定,您不必將其標準化,但它應該是大致線性的。如果使用 writeLabels.m
來編寫結果,則此函數將負責正確存儲所有必需的數據。
2. 2D物體檢測基準
2D物體檢測任務的目標是爲 Car
,Pedestrian
和 Cyclist
訓練物體探測器。物體檢測器必須使用上面指定的格式提供圖像中的2D邊界框(0-based)作爲輸出,以及指示檢測的置信度的檢測分數。必須將所有其他值設置爲其默認值(=invalid
),請參見上文。每個圖像一個文本文件,存在一個zip存檔中,其中每個文件可以包含許多檢測,具體取決於每個圖像的對象數。在我們的評估中,我們僅評估圖像中大於25像素(高度)的檢測/對象,而且不將 Van
視爲 Car
的誤報或者 將Sitting Person
視爲 Pedestrain
的誤報,因爲他們在外觀上很相似(這句翻譯有點亂,大家隨便看看)。作爲評估標準,我們遵循PASCAL並要求邊界框的IoU大於50%,以便正確檢測對象。
3. 物體方向估計基準
此基準與前一個基準相似,不同之處在於您必須爲每次檢測另外提供最可能的相對物體觀察角度(= alpha
)。如我們的論文所述,我們的評分在此同時考慮了算法的檢測性能以及方向估計性能。
4. 3D物體檢測基準
3D物體檢測任務的目標是爲 Car
,Pedestrian
和 Cyclist
訓練物體探測器。物體檢測器必須同時提供圖像中的2D邊界框(0-based)以及3D邊界框(以上面指定的格式,即3D尺寸和3D位置)和檢測分數/置信度。請注意,2D邊界框應對應於3D邊界框的投影 ——這是過濾大於25像素(高度)的對象所必需的。我們還注意到並非點雲中的所有對象都已被標記。爲避免誤報,應過濾圖像平面上不可見的檢測(評估不會處理此問題,請參閱 cpp / evaluate_object.cpp
)。與2D物體檢測基準相似,我們不將 Van
視爲 Car
的誤報或者 將Sitting Person
視爲 Pedestrain
的誤報。評估標準遵循2D對象檢測基準(使用3D邊界框重疊)。
5. 鳥瞰視圖基準
鳥瞰視圖檢測任務的目標是爲 Car
,Pedestrian
和 Cyclist
訓練物體探測器,探測器必須同時提供圖像的2D邊界框(0-based)以及鳥瞰圖中的3D邊界框和檢測得分/置信度。這意味着3D邊界框不必包括關於高度軸的信息,即邊界框的高度和沿高度軸的邊界框位置。例如,當僅評估鳥瞰圖基準(沒有3D物體檢測基準)時,可以將邊界框的高度設置爲等於或小於零的值。類似地,邊界框的y軸位置可以設置爲-1000(請注意,任意負值都不起作用)。如上所述,我們注意到2D邊界框需要過濾大於25像素(高度)的對象,並且爲了避免誤報,應該過濾在圖像平面上看不到的檢測。與所有基準一樣,我們不將 Van
視爲 Car
的誤報或者 將Sitting Person
視爲 Pedestrain
的誤報。評估標準遵循上述基準,使用鳥瞰視圖邊界框重疊。
*6. 映射到原始數據
請注意,此部分是基準測試的附加部分,並不是解決對象檢測任務所必需的。
爲了允許使用激光點雲,gps數據,右攝像機圖像和TRAINING數據的灰度圖像,我們提供了訓練集到KITTI數據集的原始數據的映射。
此信息保存在 mapping/train_mapping.txt
和 train_rand.txt
中:
train_rand.txt
:隨機排列,爲來自對象檢測訓練集的每個圖像分配唯一索引。該索引是 1-based 的。
train_mapping.txt
:將每個唯一索引(= 1-based 的行號)映射到KITTI原始數據集文件的zip文件。請注意,這些文件在網站上分爲幾個類別!
7. 評估協議
爲了透明化,我們在本開發工具包的子文件夾 cpp
中包含了KITTI評估代碼。它可以通過以下方式編譯:
g++ -O3 -DNDEBUG -o evaluate_object evaluate_object.cpp
或使用 CMake
和提供的 CMakeLists.txt
。
重要的提示:
此代碼將生成41個值(41個調用離散化步驟)。但是,請注意,爲了計算平均精度,我們遵循PASCAL協議並通過累加10%的召回步驟進行平均。用於計算平均精度或方向相似度的僞代碼如下:
sum = 0;
for (i=0; i<=40; i+=4)
sum += vals[i];
average = sum/11.0;