文章目录

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

数据集解析

数据集下载

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

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

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

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

数据集

下载完成后的数据集应当如下:

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

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

​nuscenes​

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

上传到服务器

cd nuscenes
# 传输
scp -P 22012 -r v1.0-trainval* root@10.10.230.12:/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数据_数据_03


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

获取未标注的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数据_数据集_05

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

如果想要获取未标注的前几帧数据,我们只需要使用关键帧中的​​prev​​对应的token即可访问得到未标注的数据,操作如下:

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

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

打印结果如下:(​​'is_key_frame': False,​​说明该帧为未标注帧)

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

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


参考文章: