KITTI 3D目标检测数据集解析(完整版)
1. KITTI數據集概述
1.1 傳感器配置
??由于彩色相機成像過程中的拜耳陣列(Bayer Pattern)插值處理過程,彩色圖像分辨率較低,而且對于光照敏感性不高,所以采集車配備了兩組雙目相機,一組灰度的,一組彩色的。個人猜測為了增加相機的水平視場角,每個相機鏡頭前又各安裝了一個光學鏡頭。
| 灰度相機 | 2臺140像素的PointGray Flea2灰度相機, FL2-14S3M-C | ||
| 彩色相機 | 2臺140萬像素PointGray Flea2彩色相機, FL2-14S3C-C | ||
| 光學鏡頭 | 4個Edmund光學鏡頭,焦距4mm,90°水平孔徑,35°垂直孔徑角 | ||
| 激光雷達 | 1臺Velodyne HDL-64E激光,掃描頻率10Hz,64線,0.09°角度分辨率,2cm探測精度,每秒130萬點數,探測距離120m | ||
| GPS/IMU慣導系統 | 1個OXTS TR3003慣導,6軸,采集頻率100Hz,L1/L2信號波段,0.02m和0.1°的精度 | ||
??傳感器車身排布如下圖所示。
1.2 數據采集
??KITTI整個數據集是在德國卡爾斯魯厄采集的,采集時長6小時。KITTI官網放出的數據大約占采集全部的25%,去除了測試集中相關的數據片段,按場景可以分為“道路”、“城市”、“住宅區”、“校園”和“行人”5類。
??采集車形式路徑如下圖所示,用紅藍黑區分GPS信號的質量,紅色是精度最高的,有RTK矯正;藍色無矯正信號;黑色缺失GPS信號,該部分數據已從數據集中剔除。
1.3 數據標注
??對于相機視野內的每個動態目標,KITTI都提供了基于激光坐標系的3D標注信息,定義了小車、面包車、 卡車、行人、坐著的人、自行車、有軌電車7種目標類型,其他比如拖車、代步車的小眾類型目標統一歸為“Misc”類別。3D標注信息包括目標尺寸、世界坐標以及偏航角(翻滾角和俯仰角默認等于0)。
1.4 傳感器標定
??為了盡可能降低時間來帶的系統偏差,KITTI每天采集完數據后,都會對所有傳感器重新進行一次標定。
傳感器同步
??使用激光雷達的時間戳作為基準類同步其他傳感器。對于相機,通過激光雷達觸發相機快門的方式來最小化動態目標帶來的偏差。GPS/IMU無法進行同步,但是由于采集頻率較高,最大的時間誤差也只有5ms。所有傳感器的時間戳使用系統時鐘記錄。
相機標定
??4個相機光心均對齊到同一平面上。由于成像存在枕形畸變,畸變矯正圖像均從1392×5121392\times5121392×512裁剪到1224×3701224\times3701224×370像素大小。
激光標定
??首先根據左側灰度相機的位置安裝激光雷達,然后基于選擇50個手工選點的標定誤差進行最優化,并根據KITTI立體視覺榜單Top3方法的性能變化來保證標定的魯棒性。
2. 3D目標檢測數據集概述
2.1 數據下載
??3D目標檢測數據集包含7481張訓練圖片,7518張測試圖片,以及相應的點云數據,共包含80256個標注目標。對應的官方下載路徑如下(建議復制鏈接用迅雷下載):
圖片、激光點云、標注真值、標定參數通過圖片序號一一對應。
2.2 數據解析
2.2.1 3D框標注
| Type | 1 | - | 目標類型 |
| Truncated | 1 | - | 目標截斷程度:0~1之間的浮點數 表示目標距離圖像邊界的程度 |
| Occluded | 1 | - | 目標遮擋程度:0~3之間的整數 0:完全可見 1:部分遮擋 2:大部分遮擋 3:未知 |
| Alpha | 1 | 弧度 | 目標觀測角:[?pi,pi][-pi, pi][?pi,pi] |
| Bbox | 4 | 像素 | 目標2D檢測框位置:左上頂點和右下頂點的像素坐標 |
| Dimensions | 3 | 米 | 3D目標尺寸:高、寬、長 |
| Location | 3 | 米 | 目標3D框底面中心坐標:(x,y,z)(x, y,z)(x,y,z),相機坐標系, |
| Rotation_y | 1 | 弧度 | 目標朝向角:[?pi,pi][-pi, pi][?pi,pi] |
??3D框標注信息格式如下,這里說明一下Alpha和Rotaion_y的區別和聯系:
- Rotation_y是目標的朝向角,即車頭方向和相機xxx軸正方向的夾角(順時針方向為正),描述的是目標在現實世界中的朝向,不隨目標位置的變化而變化,如圖∠BOC\angle BOC∠BOC所示。
- Alpha是目標觀測角,描述的是目標相對于相機視角的朝向,隨目標方位角theta變化而變化,如圖∠BOD\angle BOD∠BOD所示。
- Rotation_y和Alpha之間可以相互轉換。因為∠AOC=90°?theta\angle AOC=90°-theta∠AOC=90°?theta,所以有∠AOB=∠AOC?∠BOC=90°?theta?rotaion_y\angle AOB=\angle AOC-\angle BOC=90°-theta-rotaion\_y∠AOB=∠AOC?∠BOC=90°?theta?rotaion_y又因為∠AOB+∠BOD=90°\angle AOB+ \angle BOD=90°∠AOB+∠BOD=90°可得alpha=∠BOD=90°?∠AOB=theta+rotation_yalpha=\angle BOD=90°-\angle AOB=theta + rotation\_yalpha=∠BOD=90°?∠AOB=theta+rotation_y考慮到rotation_y和alpha都是逆時針方向為負,所以有?alpha=theta?rotation_y-alpha=theta-rotation\_y?alpha=theta?rotation_y即alpha=rotation_y?thetaalpha=rotation\_y-thetaalpha=rotation_y?theta有興趣的同學也可以自己用KITTI標簽數據驗證一下,會發現總是會有零點幾度的偏差,估計是KITTI保存有效位數造成的數據損失。
2.2.2 激光點云
??激光點云數據采用二進制存儲,逐點保存,每個激光點對應4個float數據(x,y,z,r)(x,y,z,r)(x,y,z,r),依次解析即可,python解析代碼如下:
import numpy as np import structdef read_lidar_info(file_path):size = os.path.getsize(file_path)point_num = int(size / 16)assert point_num * 16 == sizelidar_pt_list = np.zeros((point_num, 4), np.float)with open(file_path, 'rb') as f:for i in range(point_num * 4):data = f.read(4)val = struct.unpack('f', data)row = int(i / 4)col = i % 4lidar_pt_list[row][col] = val[0]lidar_pt_list = lidar_pt_list.transpose()return lidar_pt_list2.2.3 標定數據
??為了盡可能減少標定的系統誤差,KITTI每天都會重新對傳感器進行一次標定,因此每張圖片都有一個對應的txt標定參數文件,如下圖所示。
| P0~P3 | 3×43 \times 43×4的相機投影矩陣,0~3分別對應左側灰度相機、右側灰度相機、左側彩色相機、右側彩色相機 |
| R0_rect | 3×33 \times 33×3的旋轉修正矩陣 |
| Tr_velo_to_cam | 3×43 \times 43×4的激光坐標系到Cam 0坐標系的變換矩陣 |
| Tr_imu_to_velo | 3×43 \times 43×4的IMU坐標系到激光坐標系的變換矩陣 |
目標3D框到圖像的投影
??目標在相機坐標系下的坐標X=(x,y,z,1)TX=(x,y,z,1)^TX=(x,y,z,1)T到圖像像素坐標系Y=(u,v,1)TY=(u,v,1)^TY=(u,v,1)T的投影遵循:Y=Prect(i)XY=P^{(i)}_{rect}XY=Prect(i)?X激光點云到圖像的投影
??目標在激光坐標系下的坐標X=(x,y,z,1)TX=(x,y,z,1)^TX=(x,y,z,1)T到圖像像素坐標系Y=(u,v,1)TY=(u,v,1)^TY=(u,v,1)T的投影遵循:Y=Prect(i)Rrect(0)TvelocamXY=P^{(i)}_{rect}R^{(0)}_{rect}T^{cam}_{velo}XY=Prect(i)?Rrect(0)?Tvelocam?X其中Prect(i)P^{(i)}_{rect}Prect(i)?對應標定參數的P0~P3,因為這里使用的左側彩色相機,所以用的是P2投影矩陣。另外,Rrect(0)R^{(0)}_{rect}Rrect(0)?和TvelocamT^{cam}_{velo}Tvelocam?在標定文件中是3×33\times 33×3的矩陣,實際使用時需要用0擴充到4×44\times44×4大小,并賦值Rrect(0)(3,3)=1R^{(0)}_{rect}(3, 3)=1Rrect(0)?(3,3)=1,Tvelocam(3,3)=1T^{cam}_{velo}(3,3)=1Tvelocam?(3,3)=1。
??最終效果如下:
總結
以上是生活随笔為你收集整理的KITTI 3D目标检测数据集解析(完整版)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【windows】Windows电脑怎么
- 下一篇: Win10常用命令:定时关机(shutd