KITTI數據集:一種流行的自動駕駛視覺數據集

一、簡介

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-hant/n/369147.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
IHAJW的頭像IHAJW
上一篇 2025-04-12 13:00
下一篇 2025-04-12 13:00

相關推薦

  • Python讀取CSV數據畫散點圖

    本文將從以下方面詳細闡述Python讀取CSV文件並畫出散點圖的方法: 一、CSV文件介紹 CSV(Comma-Separated Values)即逗號分隔值,是一種存儲表格數據的…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • 如何用Python統計列表中各數據的方差和標準差

    本文將從多個方面闡述如何使用Python統計列表中各數據的方差和標準差, 並給出詳細的代碼示例。 一、什麼是方差和標準差 方差是衡量數據變異程度的統計指標,它是每個數據值和該數據值…

    編程 2025-04-29
  • Python多線程讀取數據

    本文將詳細介紹多線程讀取數據在Python中的實現方法以及相關知識點。 一、線程和多線程 線程是操作系統調度的最小單位。單線程程序只有一個線程,按照程序從上到下的順序逐行執行。而多…

    編程 2025-04-29
  • Python兩張表數據匹配

    本篇文章將詳細闡述如何使用Python將兩張表格中的數據匹配。以下是具體的解決方法。 一、數據匹配的概念 在生活和工作中,我們常常需要對多組數據進行比對和匹配。在數據量較小的情況下…

    編程 2025-04-29
  • Python爬取公交數據

    本文將從以下幾個方面詳細闡述python爬取公交數據的方法: 一、準備工作 1、安裝相關庫 import requests from bs4 import BeautifulSou…

    編程 2025-04-29
  • Python數據標準差標準化

    本文將為大家詳細講述Python中的數據標準差標準化,以及涉及到的相關知識。 一、什麼是數據標準差標準化 數據標準差標準化是數據處理中的一種方法,通過對數據進行標準差標準化可以將不…

    編程 2025-04-29
  • 如何使用Python讀取CSV數據

    在數據分析、數據挖掘和機器學習等領域,CSV文件是一種非常常見的文件格式。Python作為一種廣泛使用的編程語言,也提供了方便易用的CSV讀取庫。本文將介紹如何使用Python讀取…

    編程 2025-04-29
  • Python如何打亂數據集

    本文將從多個方面詳細闡述Python打亂數據集的方法。 一、shuffle函數原理 shuffle函數是Python中的一個內置函數,主要作用是將一個可迭代對象的元素隨機排序。 在…

    編程 2025-04-29
  • Python根據表格數據生成折線圖

    本文將介紹如何使用Python根據表格數據生成折線圖。折線圖是一種常見的數據可視化圖表形式,可以用來展示數據的趨勢和變化。Python是一種流行的編程語言,其強大的數據分析和可視化…

    編程 2025-04-29

發表回復

登錄後才能評論