nuScenes——数据集解析并获取未标注sweeps数据

文章目录

    • 数据集解析
    • 数据集下载
      • 数据集
      • 上传到服务器
        • 解压
    • 获取雷达数据
    • 获取未标注的sweeps数据

数据集解析

  • 手把手带你玩转Nusences数据集
  • nuScenes 数据集 介绍
  • nuScenes 数据集解析

数据集下载

我需要使用的Camera和Lidar的数据,因此,只下载这两个数据即可:

推荐使用迅雷下载,亲测非常快,否则需要科学上网。

  • mini数据集可以全部下载,用来进行测试;
  • trainval因为数据集体积较大,因此只下载自己需要的部分即可。

nuScenes——数据集解析并获取未标注sweeps数据_第1张图片

数据集

下载完成后的数据集应当如下:
nuScenes——数据集解析并获取未标注sweeps数据_第2张图片

nuscenes数据集正确的保存格式:

nuscenes

  • trainval
    • maps
    • samples
    • sweeps
    • v1.0-trainval

上传到服务器

cd nuscenes
# 传输
scp -P 22012 -r v1.0-trainval* [email protected]:/ai/AD2/dataset/nuscenes

解压

mkdir trainval
  • 解压摄像头数据:
tar -xvf v1.0-trainval01_blobs_camera.tar -C trainval/
tar -xvf v1.0-trainval02_blobs_camera.tar -C trainval/
tar -zvxf v1.0-trainval03_blobs_camera.tgz -C trainval/
tar -zvxf v1.0-trainval04_blobs_camera.tgz -C trainval/
tar -zvxf v1.0-trainval05_blobs_camera.tgz -C trainval/
tar -zvxf v1.0-trainval06_blobs_camera.tgz -C trainval/
tar -zvxf v1.0-trainval07_blobs_camera.tgz -C trainval/
tar -zvxf v1.0-trainval08_blobs_camera.tgz -C trainval/
tar -zvxf v1.0-trainval09_blobs_camera.tgz -C trainval/
tar -zvxf v1.0-trainval10_blobs_camera.tgz -C trainval/
# 因为摄像头10的数据超过20G,无法使用网盘保存,因此我把它拆解为了两个
# unzip -o v1.0-trainval10_blobs_camera_samples.zip -d trainval/
# cd trainval
# cp -r v1.0-trainval10_blobs_camera_samples/samples/ ./
# cp -r v1.0-trainval10_blobs_camera_samples/sweeps/ ./
# unzip -o v1.0-trainval10_blobs_camera_sweeps.zip -d trainval/
# cp -r v1.0-trainval10_blobs_camera_sweeps/sweeps/ ./
# 使用图形化界面合并文件夹即可。
  • 解压雷达数据:
tar -zvxf v1.0-trainval01_blobs_lidar.tgz -C trainval/
tar -zvxf v1.0-trainval02_blobs_lidar.tgz -C trainval/
tar -zvxf v1.0-trainval03_blobs_lidar.tgz -C trainval/
tar -zvxf v1.0-trainval04_blobs_lidar.tgz -C trainval/
tar -zvxf v1.0-trainval05_blobs_lidar.tgz -C trainval/
tar -zvxf v1.0-trainval06_blobs_lidar.tgz -C trainval/
tar -zvxf v1.0-trainval07_blobs_lidar.tgz -C trainval/
tar -zvxf v1.0-trainval08_blobs_lidar.tgz -C trainval/
tar -zvxf v1.0-trainval09_blobs_lidar.tgz -C trainval/
tar zxvf v1.0-trainval10_blobs_lidar.tgz -C trainval/
  • 解压地图数据和标注数据:
tar -zvxf v1.0-trainval_meta.tgz -C trainval/
unzip nuScenes-map-expansion-v1.3.zip -d trainval/maps
# cp trainval/maps/expansion/* trainval/maps/

获取雷达数据

import os
import numpy as np
from nuscenes.nuscenes import NuScenes
from nuscenes.utils.data_classes import LidarPointCloud

datasetroot = '/home/innox/Dataset/nuscense-mini/mini'

def get_lidar_from_nuscenes(nuscenes):
    max_f = 0
    min_f = 0
    
    my_scene = nuscenes.scene[0]
    first_sample_token = my_scene['first_sample_token']
    my_sample = nuscenes.get('sample', first_sample_token)
    sensor = 'LIDAR_TOP'
    lidar_top_data = nuscenes.get('sample_data', my_sample['data'][sensor])
    # 获取lidar数据路径
    lidar_file_path = os.path.join(datasetroot,lidar_top_data['filename'])
    # 从lidar的bin文件中读取数据
    pc = LidarPointCloud.from_file(lidar_file_path)
    print(pc.points[:, :])
    print(np.transpose(pc.points[:, :]))
    points = np.transpose(pc.points[:, :])
    for p in points:
        f = p[-1] # 检验I的范围
        if f > max_f:
            max_f = f
        elif f < min_f:
            min_f = f  
    print(f"max_f: {max_f}, min_f: {min_f}")
    
    # 渲染传感器数据可视化图
    sensor_radar = 'RADAR_FRONT'  
    sensor_lidar = 'LIDAR_TOP'
    radar_front_data = nusc.get('sample_data',my_sample['data'][sensor_radar])  
    lidar_front_data = nusc.get('sample_data',my_sample['data'][sensor_lidar])  
    
    nusc.render_sample_data(lidar_front_data['token'])



if __name__ == '__main__':
    
    nusc = NuScenes(version='v1.0-mini', dataroot=datasetroot, verbose=True)
    get_lidar_from_nuscenes(nusc)

nuScenes——数据集解析并获取未标注sweeps数据_第3张图片
nuScenes——数据集解析并获取未标注sweeps数据_第4张图片

获取未标注的sweeps数据

  • 首先我们获取标注的samples数据:
from nuscenes.nuscenes import NuScenes

dataroot = '/home/innox/Dataset/nuscenes-mini/mini'
nusc = NuScenes(version='v1.0-mini', dataroot=dataroot, verbose=False)

last_sample_token = my_scene['last_sample_token']  

sensor_lidar = 'LIDAR_TOP'  
my_sample = nusc.get('sample', last_sample_token)
sensor_lidar_data = nusc.get('sample_data',my_sample['data'][sensor_lidar])  
sensor_lidar_data

输出结果如下:('is_key_frame': True,说明该帧为标注的关键帧)
nuScenes——数据集解析并获取未标注sweeps数据_第5张图片

  • 获取关键帧前的几帧未标注数据:

如果想要获取未标注的前几帧数据,我们只需要使用关键帧中的prev对应的token即可访问得到未标注的数据,操作如下:
nuScenes——数据集解析并获取未标注sweeps数据_第6张图片

sensor_lidar_last = nusc.get('sample_data',sensor_lidar_data['prev'])  
sensor_lidar_last

打印结果如下:('is_key_frame': False,说明该帧为未标注帧)
nuScenes——数据集解析并获取未标注sweeps数据_第7张图片

如果需要获取多帧前几帧的信息,那么只需要循环读取即可。


参考文章:

  • linux中将tar压缩文件解压到指定目录
  • How to use the data in sweeps

你可能感兴趣的:(BEV,python)