nuscenes 数据集学习笔记

目录

这个讲的比较细致:

安装:

数据信息类型:

[Data 传感器](#Data 传感器)

读取数据:

boxes3d_to_corners3d

3d转corners2d


这个讲的比较细致:

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
相关推荐
自强的小白1 小时前
vlan(局部虚拟网)
网络·学习
一只乔哇噻1 小时前
java后端工程师进修ing(研一版 || day41)
java·开发语言·学习·算法
知识分享小能手1 小时前
React学习教程,从入门到精通,React 使用属性(Props)创建组件语法知识点与案例详解(15)
前端·javascript·vue.js·学习·react.js·前端框架·vue
大筒木老辈子2 小时前
Linux笔记---协议定制与序列化/反序列化
网络·笔记
草莓熊Lotso2 小时前
【C++】递归与迭代:两种编程范式的对比与实践
c语言·开发语言·c++·经验分享·笔记·其他
我爱挣钱我也要早睡!5 小时前
Java 复习笔记
java·开发语言·笔记
知识分享小能手7 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
汇能感知10 小时前
摄像头模块在运动相机中的特殊应用
经验分享·笔记·科技
阿巴Jun10 小时前
【数学】线性代数知识点总结
笔记·线性代数·矩阵
茯苓gao10 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习