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
相关推荐
biter008816 分钟前
opencv(15) OpenCV背景减除器(Background Subtractors)学习
人工智能·opencv·学习
车轮滚滚__26 分钟前
uniapp对接unipush 1.0 ios/android
笔记
Code哈哈笑1 小时前
【Java 学习】深度剖析Java多态:从向上转型到向下转型,解锁动态绑定的奥秘,让代码更优雅灵活
java·开发语言·学习
QQ同步助手2 小时前
如何正确使用人工智能:开启智慧学习与创新之旅
人工智能·学习·百度
流浪的小新2 小时前
【AI】人工智能、LLM学习资源汇总
人工智能·学习
A懿轩A3 小时前
C/C++ 数据结构与算法【数组】 数组详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·数组
云边有个稻草人3 小时前
【优选算法】—复写零(双指针算法)
笔记·算法·双指针算法
南宫生11 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
sanguine__11 小时前
Web APIs学习 (操作DOM BOM)
学习
冷眼看人间恩怨11 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget