一、簡介
KITTI數據集是一個免費的自動駕駛視覺數據集,用於估計車輛和行人的深度,運動或感知物體的姿態。KITTI數據集是由德國卡爾斯魯厄理工學院和丹麥技術大學聯合提供的,其中包括關於城市駕駛場景的圖像、深度、激光雷達以及相機和IMU的本地化和定位信息。數據集包括22個序列,具有23個不同的城市場景,並提供基本的平面和3D注釋。
二、數據集構成
該數據集由以下組件組成:
- Color images: 依Webp格式存儲。每個序列有大約1000-4000張圖像。Kitti Raw 數據集提供了原始圖像,kitti Velodyne 數據集提供了激光雷達數據,這些數據可以用於製作多種圖像和感測器模擬。
- Lidar scans: 基於Velodyne HDL-64激光雷達數據進行製作。Velodyne 64線激光雷達是一種流行工具,因為它顯示三維場景的高解析度360度信息。它包括每個掃描線的垂直角度,並且在掃描中以一個特定排列的次序存儲。
- Velodyne scans: 用於定位對象並標記其位置。Kitti Velodyne 數據集存儲Laserscan.cpp中在幾個點雲上進行格式化的激光雷達數據。
- Calibration files: 存儲相機和激光雷達校準所需的元數據。本地化和地圖製作經常使用相機和雷達校準來計算物體在三維世界中的位置。Kitti 數據集包含針對每個相機的六個參數,以及相機和車輛坐標系原點之間的平移模量。
- Raw data sequences:包括激光雷達掃描,GPS/IMU數據以及完全基於視頻的運動形式。 Raw 數據的每個時間戳都記錄了在該特定時間戳分別測量的軸向、角度速度和加速度值。
- Calibration and Sync Data: 存儲相機和 Velodyne 激光雷達之間的同步信息。
- Annotations: 標有車、行人和 Cyclist。一些注釋數據可能需要進行轉換以進行各種標註操作。
三、數據集使用
1. 存儲格式
KITTI 數據集基於Unix文件夾結構,其中每個序列有8個不同格式化的文件夾。文件夾之間管理相機、雷達和標註數據之間的同步和對齊。每個文件夾都包含標記和時間戳,時間戳是數據處理中非常重要的部分,可以幫助在多個感測器之間同步數據。下面是感測器數據存儲的文件夾:
- image_00:左彩色相機灰度圖像
- image_01:右彩色相機灰度圖像
- image_02:左針孔相機色彩圖像
- image_03:右針孔相機色彩圖像
- velodyne:Velodyne 點雲
- calib:相機和激光雷達的校準文件
- oxts:GPS/IMU數據
- label_02:行人、車輛和 Cyclist 目標的標註
2. 解釋數據
要使用KITTI數據集,必須了解各個組件。下面是對每個組件的詳細說明。
2.1 圖像數據
要訪問KITTI數據集的彩色圖像,數據集中的圖像文件夾分別包含了左、右、彩色以及灰度圖像。數據集中的黑白圖像為PNG格式,而彩色圖像為WebP 格式。
2.2 激光雷達數據
Velodyne的64線點雲數據格式通常用於 KITTI 數據集。小數據集包括 22 個序列(大約 39GByte)和一些用於校準和同步的元數據文件。激光雷達文件以二進位格式存儲,且包含一個頂層目錄和一個名為velodyne的子文件夾。文件夾中的文件名按照幀號來進行編排。對於每個測量值(每條線有1225個點),激光雷達的掃描角度輸出64個激光束數據。
2.3 校準信息
校準信息存儲在calib文件夾中。其中, .txt 類型的文件包含描述各種物理感測器和攝像機相對於參考幀的校準數據。
2.4 GPS/IMU數據
GPS/IMU文件存儲在data文件夾下的oxts文件夾中。 這些文件以相機時間戳命名,以映射時間戳和 IMU 數據之間的對齊。文件包含在本地參考系下的位置、方向等信息。
2.5 標註數據
標註文件包含車輛、行人和 Cyclist 的位置。每個標籤文件都以 .txt 格式存儲,且包含有關具有 2D 邊界框的每個對象的位置和尺寸以及其在序列中的起始和結束幀號。
四、代碼示例
1.下載數據集
import urllib.request
url = 'https://s3.eu-central-1.amazonaws.com/avg-kitti/raw_data/2011_09_26_drive_0001/2011_09_26_drive_0001_sync.zip'
urllib.request.urlretrieve(url, '../data/kitti_data.zip')
2.讀取圖像數據
from PIL import Image
import numpy as np
import os
def read_images(path):
filenames = os.listdir(path)
filenames.sort()
images = []
for filename in filenames:
img_path = os.path.join(path, filename)
image = np.asarray(Image.open(img_path))
images.append(image)
return np.array(images)
3.讀取標籤數據
import pandas as pd
def read_labels(path):
df_label = pd.read_csv(path, sep=' ', header=None, names=['type', 'truncated', 'occluded', \
'alpha', 'b_box_l', 'b_box_t', \
'b_box_r', 'b_box_b', 'h', 'w', \
'l', 'x', 'y', 'z', 'rot_y'])
return df_label
4.讀取激光雷達數據
import struct
def read_velodyne(path):
with open(path, 'rb') as f:
velodyne_data = f.read()
velodyne_data = np.frombuffer(velodyne_data, dtype = np.float32).reshape(-1,4)
return velodyne_data
5.讀取GPS/IMU數據
import pandas as pd
def read_gps_imu(path):
with open(path) as f:
gps_imu_data = f.read().splitlines()
gps_imu_data = np.array([gps_imu.split(' ') for gps_imu in gps_imu_data]).astype('float32')
return pd.DataFrame(data=gps_imu_data,columns=['lat', 'lon', 'alt', 'roll', 'pitch', 'yaw', 'vn', 've', 'vf', 'vl', 'vu', \
'ax', 'ay', 'ar', 'af', 'al', 'au', 'wx', 'wy', 'wz', 'wf', 'wl', 'wu', \
'pos_accuracy', 'vel_accuracy', 'navstat', 'numsats', 'posmode', 'velmode', \
'orimode'])
五、總結
KITTI 數據集是自動駕駛視覺領域中最受歡迎的數據集之一。通過對KITTI數據集的分析,我們可以看出它是一個豐富的數據集,能夠提供多種格式數據和標註信息。在使用該數據集時,需要了解各個組件的含義,方便進行進一步的數據處理和分析。
原創文章,作者:IHAJW,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/369147.html