目录
[Data 传感器](#Data 传感器)
这个讲的比较细致:
NuSences 数据集解析以及 nuScenes devkit 的使用_nuscenes-devkit-CSDN博客
安装:
pip install nuscenes-devkit
数据信息类型:
Map & Camera(png), Lidar(激光雷达) & Radar(雷达)(pcd), Json
文件结构(以v1.0-mini为例):
- maps: 存放Map的png文件
- samples: 存放Camera, Lidar, Radar关键非结构化数据信息, 带标注
- sweeps: 存放Camera, Lidar, Radar 次要非结构化数据信息, 不带标注
- v1.0-mini: 存放结构化json数据
Data 传感器
`传感器类型 | 详细信息 | 采样频率 | 精度 |
---|---|---|---|
相机 | 6台彩色相机 | 12Hz | 1600×900 JPEG |
LiDAR | 1台32线旋转式激光雷达,360°水FOV,-30°-10°的垂直FOV,探测距离70m,每秒140万点云 | 20Hz | 2cm |
毫米波雷达 | 5个77GHz的毫米波雷达,FMCW调频,探测距离250m | 13Hz | 速度精度±0.1km/h |
读取数据:
python
from nuscenes.nuscenes import NuScenes
def get_dataset_info2(nusc):
sample_num = len(nusc.sample)
ann_num = 0
scene_tokens = set()
for sample in nusc.sample:
ann_num += len(sample['anns'])
scene = nusc.get('scene', sample['scene_token'])
scene_tokens.add(scene['token'])
scene_num = len(scene_tokens)
print('====== Start from sample')
print('Scene Num: %d\nSample Num: %d\nAnnotation Num: %d' % (scene_num, sample_num, ann_num))
def get_dataset_info3(nusc):
ann_num = len(nusc.sample_annotation)
scene_tokens = set()
sample_tokens = set()
for ann in nusc.sample_annotation:
sample = nusc.get('sample', ann['sample_token'])
sample_tokens.add(sample['token'])
scene = nusc.get('scene', sample['scene_token'])
scene_tokens.add(scene['token'])
scene_num = len(scene_tokens)
sample_num = len(sample_tokens)
print('====== Start from annotation')
print('Scene Num: %d\nSample Num: %d\nAnnotation Num: %d' % (scene_num, sample_num, ann_num))
if __name__ == '__main__':
nusc = NuScenes(version='v1.0-mini',
dataroot=r'E:\project\jijia\datasets\nuscenes_mini',
verbose=True)
get_dataset_info2(nusc)
get_dataset_info3(nusc)
boxes3d_to_corners3d
python
def boxes3d_to_corners3d(boxes3d, rot_axis):
"""
将3D框的表示转换为8个角点的表示。
参数:
- boxes3d: (N, 9) 的数组,每一行表示一个3D框,其包含中心点坐标、尺寸和旋转角度。
- rot_axis: 旋转轴(通常是 'x', 'y' 或 'z' 轴)。
返回:
- corners3d: (N, 8, 3) 的数组,每一行表示一个3D框的8个角点的坐标。
"""
# 提取中心点坐标、尺寸和旋转角度
centers3d, dims3d, angles3d = boxes3d[:, :3], boxes3d[:, 3:6], boxes3d[:, 6:9]
# 将尺寸转换为标准化的角点坐标
norm_corners3d = dims3d_to_norm_corners3d(dims3d) # (N, 8, 3)
# 获取旋转矩阵
rot_mat_t = points3d_utils.get_rot_mat_t(angles3d, rot_axis)
# 旋转标准化角点坐标
corners3d = points3d_utils.rotate_points3d(norm_corners3d, rot_mat_t) # (N, 8, 3)
# 将旋转后的角点坐标加上中心点坐标,得到最终的角点坐标
corners3d += centers3d.reshape((-1, 1, 3)) # (N, 8, 3)
return corners3d
3d转corners2d
python
def boxes3d_to_corners2d(boxes3d, rot_axis, cam_intrinsic):
# boxes3d: (N, 9)
corners3d = boxes3d_to_corners3d(boxes3d, rot_axis) # (N, 8, 3)
corners = corners3d_to_corners2d(corners3d, cam_intrinsic) # (N, 8, 2)
return corners