ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

nuScenes数据集下载与解压避坑指南:完整流程与一键脚本

nuScenes数据集下载与解压避坑指南:完整流程与一键脚本 简介面向自动驾驶数据集使用者的nuScenes数据下载与解压流程源码包适合需要快速掌握数据集准备环节的研究人员或开发者。资源围绕数据集的完整获取链路提供了下载与解压环节的参考实现包含HTML格式的步骤说明、编辑器环境配置以及版本管理忽略规则示例可帮助读者理清Trainval、Test、Map expansion与CAN bus expansion的存放位置掌握unzip、tar及Shell脚本批量解压等更稳定的处理方式减少图形界面解压可能带来的问题。包体共3个文件以html配置说明与inscode工程配置为主压缩后仅6KB轻量易上手。源码包虽小但目录结构清晰适合作为项目初始化时的骨架参考。目前已有309人学习对刚接触nuScenes并希望规范数据集处理流程的开发者而言是一份能直接对照使用的实用补充材料。 直接给你结论nuScenes这个数据集下载和解压这件事坑比训练模型还多。文件大、分卷多、官网的下载方式又改了又改很多人在第一步就卡了两三天。这篇就把我实际处理这套数据集的完整流程、踩过的坑、以及一份可以直接用的项目源码下载解压校验加载整理出来照着做能省掉一大半的折腾时间。先说清楚这篇东西是给谁看的准备用nuScenes做自动驾驶感知、多模态融合、bev感知、端到端规划研究的同学以及那些在服务器上拉数据集拉了一半发现硬盘满了、解压出来发现文件损坏、或者装上nuscenes-devkit却找不到数据的倒霉蛋。全程基于我在Linux服务器上的实际操作记录Windows用户部分命令需要微调但思路完全一致。1. 数据集整体认知与下载前准备1.1 nuScenes到底有多大结构是怎样的很多人第一次下载nuScenes看到官网那堆链接就懵了。这个数据集不是单文件而是按传感器模态和数据用途拆成了很多部分。完整版trainval包含850个场景每个场景大约20秒传感器配置是6个摄像头CAM_FRONT、CAM_FRONT_LEFT、CAM_FRONT_RIGHT、CAM_BACK_LEFT、CAM_BACK、CAM_BACK_RIGHT、5个毫米波雷达、1个激光雷达还有高精地图。关键点在于官网把这些数据分成了几个大类trainval训练验证的完整传感器数据、test测试集、mini1个训练场景1个验证场景只有40个样本、map高精地图扩展包以及can_bus车辆CAN总线数据。其中trainval的lidar数据就接近100GB全部图像数据更大整套下来不含map就差不多300GB。我见过不少人在这一步就出问题只下载了图像的压缩包没下载lidar或者下载了trainval却忘了map包结果跑bevformer的时候找不到地图数据报错。下载之前务必对照官网的DATA PACKAGE表格列个清单确认自己研究需要哪些模态。1.2 硬件与网络准备别等下载到一半才后悔先说硬盘。tarinval的raw数据解压后目录结构是samples、sweeps、maps、v1.0-trainval这几个大目录。samples里是keyframe关键帧数据sweeps里是中间帧interpolated同一帧的6个摄像头图像加lidar点云全部解压后trainval大约占280GB到320GB这还不算你解压过程中的临时空间。我的建议是准备至少600GB的剩余空间。不要有侥幸心理我自己的服务器就是下载完发现分区只剩100GB解压到一半直接报No space left on device那叫一个痛。另外训练集数据由非常多的分卷zip构成比如lidar数据被切成了一堆2GB左右的分卷解压时需要分卷zip在同目录且文件名完整所以下载过程中不要中断、不要跳过任何分卷。网络方面官网下载需要使用官方提供的命令行工具或者AWSCLI访问S3存储桶大文件下载建议用screen或者tmux挂后台避免ssh断开导致下载中断。2. 下载方式详解与源码实现2.1 官方下载方式与账号配置nuScenes官网下载数据需要先注册账号然后在Downloads页面勾选需要的包之后会给你一个下载链接或者命令。需要说明的是官方页面提供的链接带有时效配合s3cmd或aws cli使用。比较推荐的方式是s3cmd因为官网文档就是按s3cmd写的。如果服务器上没有s3cmd先安装sudo apt update sudo apt install -y s3cmd然后配置访问密钥这个密钥在官网账号的个人页面里可以找到。配置过程中会让你输入Access Key和Secret Key其他项可以一路回车用默认值。s3cmd --configure这里有个实操细节s3cmd配置完后建议先测试一下连通性s3cmd ls s3://nuScenes/如果能看到数据集目录列表说明账号和网络都没问题。2.2 分卷下载脚本实现这才是今天的重头戏。官方下载链接的核心规律是每个数据包在S3桶里都有对应的路径你需要按需拼接。比如下载trainval的lidar数据路径类似s3://nuScenes/v1.0-trainval/v1.0-trainval_blobs_train_lidar.tar不对说错了这是旧版tar包年代的路径。现在官网的数据包已经改成new-style分卷zip包而且不同版本路径规律不同直接写死路径反而容易踩坑。我的做法是先把官网生成的下载命令保存下来然后用脚本去解析。这里我给一个更通用的脚本思路官网在你勾选完数据包之后会生成一段Shell命令命令里包含了完整的s3路径。你只需要把这段命令里的s3cmd ls换成s3cmd get就可以了。我自己用的下载脚本长这样#!/bin/bash # 下载脚本 download_nuscenes.sh # 用法bash download_nuscenes.sh 数据包前缀 PACKAGE_PREFIX$1 DEST_DIR./nuScenes mkdir -p ${DEST_DIR} cd ${DEST_DIR} export S3CMD_CONFIG$HOME/.s3cfg # 逐行读取官网生成的下载清单文件 urls.txt while read -r line; do echo Downloading: ${line} s3cmd get ${line} if [ $? -ne 0 ]; then echo Download failed: ${line} exit 1 fi done urls.txt echo All downloads done.官网生成的下载命令其实就是一长串s3cmd get命令把这些命令保存成一个urls.txt文件用上面的循环脚本批量执行比手动复制粘贴强得多。2.3 并行下载加速技巧单线程s3cmd下载速度受限于单文件带宽大文件动辄几十GB会非常慢。s3cmd自带--parallel和--multi参数可以多线程下载和分段下载s3cmd get --parallel --multi 8 s3://nuScenes/v1.0-trainval/v1.0-trainval_xxx.zip ./nuScenes/--multi后面跟的数字表示分片数实测在带宽充裕的服务器上可以把速度拉满。需要注意如果分片下载中断重新执行时要加--continue参数续传否则会从头开始。另外s3cmd在下载时会把分片文件先写到临时文件最后合并所以磁盘剩余空间至少要再预留一个压缩包的大小。3. 解压与目录结构搭建实操3.1 分卷zip的识别与合并逻辑下载完成后你会发现压缩包不是单个zip文件而是一堆按序号排列的分卷类似v1.0-trainval_blobs_train_cam_000.zip v1.0-trainval_blobs_train_cam_001.zip v1.0-trainval_blobs_train_cam_002.zip这种分卷压缩包在解压时unzip可以直接识别并自动跨卷读取前提是分卷文件名保持原始命名且都放在同一个目录下。指定第一个分卷即可unzip v1.0-trainval_blobs_train_cam_000.zip -d ./raw注意分卷zip依赖所有分卷文件的校验值任何一个分卷损坏unzip都会报错并中断。所以解压前可以先跑一遍校验脚本确认所有分卷的md5与官网给的md5一致。这个校验很重要下载过程网络抖动很容易造成某个分卷损坏。3.2 目录结构的最终要求解压完成后别急着高兴先检查目录结构。nuscenes-devkit加载数据时默认的目录结构是nuScenes/ ├── maps/ # 地图文件需另下map包 ├── samples/ # keyframeCAM_*、LIDAR_TOP、RADAR_*等 ├── sweeps/ # 非keyframe中间帧数据 ├── v1.0-trainval/ # 标注文件json、category、attribute等 ├── v1.0-mini/ # mini版本的标注如果下载了mini └── can_bus/ # CAN总线数据可选如果目录结构不对nuscenes-devkit加载时会报找不到samples目录但很多人收到这个报错后第一反应是去重装包其实只是目录没放对位置。我建议在解压阶段就把目录结构理顺不要图省事把压缩包直接解压在乱七八糟的路径里。3.3 一键解压项目源码这里分享一个我实际在用的解压加校验脚本可以直接复制用#!/bin/bash # 一键解压 nuScenes 分卷zip并校验extract_nuscenes.sh set -e ZIP_DIR$1 DEST_DIR$2 cd ${ZIP_DIR} # 遍历所有数据集分卷的000号文件逐个解压 for first_zip in *_000.zip; do echo Extracting ${first_zip} ... unzip -o ${first_zip} -d ${DEST_DIR} done echo Extraction completed. # 校验标注文件关键目录是否存在 if [ -d ${DEST_DIR}/samples ] [ -d ${DEST_DIR}/sweeps ]; then echo [OK] samples and sweeps directories exist. else echo [WARN] samples/sweeps directory missing, check extraction completeness. fi这段脚本会把当前目录下所有分卷zip按顺序解压到指定目标目录同时做最基本的完整性检查。它解决的一个核心痛点是分卷zip按_000、_001命名如果你手动一个个解压漏掉任何一个分卷后面加载数据时就会出现某个样本缺失报错排查起来非常恶心。4. 开发环境安装与第一个数据加载示例4.1 nuscenes-devkit安装与版本坑解压只是开始能加载和可视化数据才算真的“跑通”。官方的Python工具包是nuscenes-devkit直接pip安装pip install nuscenes-devkit这里有个非常关键的版本问题nuScenes的数据集分v1.0和v1.0-mini旧版devkit只支持v1.0的标注格式新版devkit1.1对mini版本做了更多支持。如果你的代码是从别人仓库里克隆的用了旧版api接口但你的环境装了新版devkit接口名称变了比如get_boxes改成get_boxes_with_attributes照样跑不通。我的建议是装完先验证一下版本import nuscenes print(nuscenes.__version__)如果项目对版本有要求建议直接按照项目的requirements.txt安装不要图省事装最新版。4.2 初始化Nuscenes对象并加载数据样例目录结构理顺后初始化Nuscenes对象官方推荐的加载方式如下from nuscenes.nuscenes import NuScenes DATAROOT ./nuScenes VERSION v1.0-trainval nusc NuScenes(versionVERSION, datarootDATAROOT, verboseTrue)verboseTrue会打印数据集样本数量、category种类、scene数量等信息如果这段信息正常输出基本上说明数据加载没问题。接下来随便取一个场景的keyframe看看传感器数据能不能正常读出来# 获取第一个场景 my_scene nusc.scene[0] first_sample_token my_scene[first_sample_token] first_sample nusc.get(sample, first_sample_token) # 查看该帧的传感器数据 for sensor in [CAM_FRONT, LIDAR_TOP, RADAR_FRONT]: sensor_token first_sample[data][sensor] sensor_data nusc.get(sample_data, sensor_token) print(f{sensor}: {sensor_data[filename]})如果能打印出对应的文件路径说明标注json和传感器数据对上了整个数据集已经可以正常使用了。4.3 数据可视化验证数据加载成功后建议做一次可视化验证确认图像和点云数据没有因为解压问题导致损坏。官方示例代码# 渲染某个sample的所有传感器数据 my_sample_token first_sample_token nusc.render_sample(my_sample_token, out_pathrender_sample.png)如果输出了一张6个摄像头图像加lidar点云俯视图拼成的图片说明解压出来的图像和点云都是可读取的数据链路已经通了。如果这里报错比如CV2读取不到文件、或者图像是黑屏优先检查解压完整性不要急着在代码层面对线。5. 常见问题与排查技巧实录5.1 分卷损坏与下载不全问题现象原因解决办法解压时报unzip: invalid compressed data某个分卷下载不完整或损坏检查md5重新下载对应分卷解压时报End-of-central-directory signature not found分卷缺失数一下分卷数量是否和官网一致解压后没有samples目录压缩包解压不完整用unzip -t检查压缩包完整性后重新解压这个表里的前两个坑我全踩过。尤其是md5校验强烈建议下载完就跑一遍别等到解压到99%才发现第37号分卷坏了前36个分卷的解压时间全白费。官网每个分卷旁边都有md5值在服务器上可以用md5sum批量比对。5.2 磁盘空间不足问题这个问题出现频率极高。很多人的服务器/home分区只有300GB下载trainval全套之前信誓旦旦解压到一半就爆盘。两个应对思路第一下载前用df -h确认磁盘剩余空间给解压后文件预留至少1.5倍空间。第二如果空间确实紧张可以下载tar格式的旧版数据包需要标注版本的完整包直接流式解压并删除压缩包减少临时空间占用。但tar包只能下载完整数据集没有按传感器模态分卷的选项灵活性差一些。5.3 加载数据时提示目录不存在报错信息原因[Errno 2] No such file or directory: ./nuScenes/samples/...dataroot路径没配对或目录结构不对KeyError: v1.0-trainvalversion参数和标注文件目录名不一致AssertionError: samples directory not found解压后的samples目录缺失这类问题九成以上是目录结构问题。我建议初始化Nuscenes对象之前先手动检查一遍ls ./nuScenes/v1.0-trainval/ ls ./nuScenes/samples/CAM_FRONT/ | head确认后再跑Python代码。不要一报错就重装环境浪费时间。5.4 devkit接口变更导致的坑我之前把一个老项目的代码从nuscenes-devkit 1.0迁移到1.2发现原来用的nusc.get_sample_data虽然还能用但很多属性名和返回结构已经变了。比如新版里get_sample_data返回的空闲标注框多了一个attribute_name字段如果你的处理代码没有适配很容易出现索引越界。排查这类问题最直接的方法是看官方docs里的API变更记录或者在Python里用dir()查看对象的所有属性和方法别靠记忆写代码。6. 把数据用起来几件下载解压之外值得做的事6.1 索引文件预处理数据解压完别急着开训先做一个轻量级的索引文件预处理。nuscenes-devkit每次加载NuScenes对象都会把v1.0-trainval下的所有json读进内存训练集场景850个json文件不算大但如果你频繁重启训练脚本这部分重复加载也有时间成本。我习惯在数据准备好后把scene、sample、sample_data、instance几个核心表抽出来转成parquet或者pickle存好后续做数据加载时直接读预处理文件省掉每次解析json的耗时。这个操作本身很简单但能明显加速数据加载阶段的调试循环。6.2 采样频率与传感器对齐nuScenes的数据频率是2Hz的keyframe和更高频率的sweeps摄像头和lidar时间戳不完全对齐。很多做BEV感知的框架会在数据加载阶段做时间戳匹配找到最近的lidar帧去匹配摄像头帧。如果你在下载解压后第一次写自己的数据加载器建议先把各传感器的时间戳分布可视化一下确认时间基准一致。这一步能提前暴露很多后续训练时的对齐问题。数据链路通了后面的事情就顺了。说实话nuScenes这套数据的下载解压流程本身不算复杂就是步骤多、坑多每一步都有看似不起眼的小问题等着你。我这里把流程和踩坑记录写出来就是希望大家不要在第一步浪费太多精力。真正的重头戏还是把数据加载进来之后怎么设计模型、怎么做预处理、怎么调参这些才是值得花时间的地方。本文还有配套的精品资源点击获取
返回列表