news 2026/9/11 23:38:10

NAVSIM数据集一键高速下载 | 国内镜像,不用梯子

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
NAVSIM数据集一键高速下载 | 国内镜像,不用梯子

一、 NAVSIM数据集介绍

NAVSIM 数据集覆盖感知→规划→控制的完整链路,适合端到端模型从开环训练到闭环落地的全流程评测。现在越来越多的端到端自动驾驶方法 (DiffusionDrive)都是基于这个数据集系统进行评估。相比 nuScenes,NAVSIM 数据集在数据规模、场景多样性和标注完整性上都有优势,相信未来会有更多的优秀工作是基于这个基准数据集。

官方 GitHub 网址:https://github.com/autonomousvision/navsim

二、数据集下载痛点问题

由于官方 GitHub中给的下载脚本都是从国外的一些网站 (amazonaws/huggingface)进行爬取下载,我们国内由于网络限制,无法直接下载。

如果挂梯子,下载也会经常不稳定,中断,十分令人头疼…

三、免翻墙高速并行下载方法

为了解决上述痛点问题,直接的思路是利用国内 huggingface 镜像网址进行 NAVSIM 下载。

HuggingFace国内镜像地址:https://hf-mirror.com/datasets/OpenDriveLab/OpenScene/tree/main

最简单的下载方式是直接从上面的镜像地址中逐个下载各个 .tgz 压缩包,然后再本地慢慢解压。当然,这种方式一是不够优雅,其次浏览器下载还是有中断可能,然后需要重新下载。所以,我们接着介绍推荐的高速并行下载方法(网络中断后,也可以保留进度,继续下载)。

NAVSIM数据集主要包含:

-map-trainval-test-mini-private_test_hard-navhard_two_stage-warmup_two_stage-private_test_hard_two_stage

其中前三个map/trainval/test为必须下载的部分,分别对应地图、训练集、测试集。map数据比较小,可以直接在上面的镜像地址中下载解压。而 trainval 400多GB,test 200多GB,浏览器直接下载会经常网络中断。这时,我们可以通过 tmux 和 aria2c 来进行并行高速下载。以 trainval为例,一键下载代码如下:

#!/bin/bash# 检测 tmux 是否安装if!command-vtmux&>/dev/null;thenecho"tmux could not be found. Please install tmux to continue."exit1fi# 创建临时下载目录mkdir-p./tmp_download# 创建新的 tmux 会话SESSION_NAME="download_session"tmux new-session-d-s"$SESSION_NAME"-n"main_window"# 定义函数:下载文件到 ./tmp_downloaddownload_file_in_pane(){url=$1filename=$2tmux send-keys-t"$SESSION_NAME""echo Downloading$urlas$filename...; aria2c -x 16 -s 16 -j 8 -d ./tmp_download -o '$filename' '$url'"C-m}# 定义函数:解压并同步数据extract_and_sync_in_pane(){tar_file=$1folder_name=$2# 当前逻辑:解压并保留 .tgztmux send-keys-t"$SESSION_NAME""echo 'Extracting$tar_file...'; tar -xzf '$tar_file' -C ./tmp_download"C-m# 同步解压后的文件到 trainval_sensor_blobs/trainvaltmux send-keys-t"$SESSION_NAME""echo Syncing files from$folder_nameto trainval_sensor_blobs/trainval...; rsync -rv ./tmp_download/$folder_name/ ./trainval_sensor_blobs/trainval"C-m# 清理临时解压目录tmux send-keys-t"$SESSION_NAME""echo Cleaning up$folder_name...; rm -rf ./tmp_download/$folder_name"C-m}# 定义函数:处理单个 split(下载 current 与 history)process_split_in_pane(){split=$1file_name_current="navtrain_current_${split}.tgz"file_name_history="navtrain_history_${split}.tgz"# 下载 current 包download_file_in_pane"https://hf-mirror.com/datasets/OpenDriveLab/OpenScene/resolve/main/navsim/navtrain_current_${split}.tgz""$file_name_current"# 解压并同步 current 包# extract_and_sync_in_pane "./tmp_download/$file_name_current" "navtrain_current_${split}"# 水平分屏,新面板处理 history 包tmux split-window-h-t"$SESSION_NAME"# 下载 history 包download_file_in_pane"https://hf-mirror.com/datasets/OpenDriveLab/OpenScene/resolve/main/navsim/navtrain_history_${split}.tgz""$file_name_history"# 解压并同步 history 包# extract_and_sync_in_pane "./tmp_download/$file_name_history" "navtrain_history_${split}"}# 新建窗口处理 OpenScene 元数据tmux new-window-t"$SESSION_NAME"-n"openscene"download_file_in_pane"https://hf-mirror.com/datasets/OpenDriveLab/OpenScene/resolve/main/openscene-v1.1/openscene_metadata_trainval.tgz""openscene_metadata_trainval.tgz"# 解压并保留 openscene_metadata_trainval.tgz# tmux send-keys -t "$SESSION_NAME" "echo 'Extracting OpenScene metadata...'; tar -xzf ./tmp_download/openscene_metadata_trainval.tgz -C ./tmp_download; mv ./tmp_download/openscene-v1.1/meta_datas trainval_navsim_logs; rm -rf ./tmp_download/openscene-v1.1" C-m# 创建目标目录mkdir-ptrainval_sensor_blobs/trainval# 循环创建窗口并处理 split 1..32,建议每次下载 8 个文件(4个current,4个history),太多可能容易崩掉# 手动替换{}中的内容 1..4/ 5..8/ ....../ 29..32forsplitin{1..4};dotmux new-window-t"$SESSION_NAME"-n"split_${split}"process_split_in_pane"$split"done# 附着到 tmux 会话,实时查看执行情况tmux attach-session-t"$SESSION_NAME"

新建一个down_trainval.sh文件,将上述代码复制进去,然后在终端运行:

sh./down_trainval.sh

即可开始快速下载!

注意上述代码的整个流程是先下载“openscene_metadata_trainval.tgz”,然后开始并行下载“navtrain_history_id.tgz" 和 “navtrain_history_id.tgz”,最后再分别解压。考虑到下载的过程中可能会多次中断,所以强烈建议大家先把所有 .tgz 压缩包下载完成后,再统一解压。

上述代码中,解压 .tgz 的相关代码被注释了。下载完所有压缩文件后,需要手动将下载部分代码注释掉,然后取消解压部分代码注释,再次重新运行程序即可实现自动解压。详情见代码注释内容。

四、常见问题:

Q1:在下载过程中网络不稳定,中断了怎么办?
A1:只需要关注 tmp_download文件夹中的 .tgz 和 .aria2文件,.aria2是 aria2c 下载时生成的控制文件,与目标文件同名并加 .aria2 后缀,记录分段、进度与校验信息,用于断点续传。下载成功会自动删除;如果它还在多半未完成或异常,重新执行代码继续下载即可。

Q2: 下载解压完成后,如何验证数据集是否完整?
A2:官方提供了完整数据名称列表的 .yaml文件,用下面的代码进行校验即可,记得修改相关路径:

importyamlimportglobimportosimportpickleimporttqdm# 路径换成官方指定的位置# 训练的yaml_path="navsim/planning/script/config/common/train_test_split/scene_filter/navtrain.yaml"# # 测试的# yaml_path = "navsim/planning/script/config/common/train_test_split/scene_filter/navtest.yaml"withopen(yaml_path,"r")asf:data=yaml.load(f,Loader=yaml.FullLoader)logs=data["log_names"]tokens=data["tokens"]#路径要改成自己的# # 训练的# log_path = "download/trainval_navsim_logs/trainval/"# sensor_data_path = "download/trainval_sensor_blobs/trainval/"# # 测试的# log_path = "/home/server/data1/navsim_workspace/navsim/download/test_navsim_logs/test/"# sensor_data_path = "/home/server/data1/navsim_workspace/navsim/download/test_sensor_blobs/test/"log_path="download/trainval_navsim_logs/meta_datas/trainval"sensor_data_path="download/trainval_sensor_blobs/trainval"log_data_base_name_list=set([os.path.basename(x).split('.pkl')[0]forxinglob.glob(f"{log_path}/*.pkl")])log_data_list=glob.glob(f"{log_path}/*.pkl")# check if all logs are in the log_data_listlog_miss_list=[]forloginlogs:iflognotinlog_data_base_name_list:print(f"Log{log}not found in{log_path}")log_miss_list.append(log)print("Miss log list: ",log_miss_list)# check if all tokens are in the log_data_listforpkl_pathintqdm.tqdm(log_data_list):withopen(pkl_path,"rb")asf:pkl_data=pickle.load(f)forframe_datainpkl_data:token=frame_data["token"]log_name=frame_data["log_name"]iftokennotintokens:continuelidar_path=os.path.join(sensor_data_path,frame_data['lidar_path'])# import pdb; pdb.set_trace()ifnotos.path.exists(lidar_path):print(f"{lidar_path}not found")forcam_name,cam_datainframe_data['cams'].items():curr_cam_path=os.path.join(sensor_data_path,cam_data['data_path'])ifnotos.path.exists(lidar_path):print(f"{curr_cam_path}not found")

如果没有校验成功,可能是前面哪个 .tgz没有下载完整,需要重新下载。

Q3:有 trainval部分的下载,那 test的呢?
A3: 有的,有的,兄弟有的。原理和用法和前面的 down_trainval.sh 一样:

#!/bin/bash# 检查是否安装 tmuxif!command-vtmux&>/dev/null;thenecho"tmux could not be found. Please install tmux to continue."exit1fi# 创建临时下载目录mkdir-p./tmp_download# 创建新的 tmux 会话SESSION_NAME="test_download_session"tmux new-session-d-s"$SESSION_NAME"-n"main_window"# 定义函数:下载文件到 ./tmp_downloaddownload_file_in_pane(){url=$1filename=$2tmux send-keys-t"$SESSION_NAME""echo Downloading$urlas$filename...; aria2c -x 16 -s 64 -j 8 -d ./tmp_download -o '$filename' '$url'"C-m}# 定义函数:解压并同步extract_and_sync_in_pane(){tar_file=$1folder_name=$2tmux send-keys-t"$SESSION_NAME""echo 'Extracting$tar_file...'; tar -xzf '$tar_file' -C ./tmp_download; rm '$tar_file'"C-m# 同步到目标目录tmux send-keys-t"$SESSION_NAME""echo Syncing files from$folder_nameto test_sensor_blobs...; rsync -rv ./tmp_download/$folder_name/ ./test_sensor_blobs"C-m# 清理解压目录tmux send-keys-t"$SESSION_NAME""echo Cleaning up$folder_name...; rm -rf ./tmp_download/$folder_name"C-m}# 定义函数:处理一个 split(包含 camera 和 lidar)process_split_in_pane(){split=$1file_name_camera="openscene_sensor_test_camera_${split}.tgz"file_name_lidar="openscene_sensor_test_lidar_${split}.tgz"# 当前面板下载 cameradownload_file_in_pane"https://hf-mirror.com/datasets/OpenDriveLab/OpenScene/resolve/main/openscene-v1.1/openscene_sensor_test_camera/$file_name_camera""$file_name_camera"# 解压时的代码,记得取消注释# extract_and_sync_in_pane "./tmp_download/$file_name_camera" "openscene_sensor_test_camera_${split}"# 新开分屏下载 lidartmux split-window-h-t"$SESSION_NAME"# 新面板下载 lidardownload_file_in_pane"https://hf-mirror.com/datasets/OpenDriveLab/OpenScene/resolve/main/openscene-v1.1/openscene_sensor_test_lidar/$file_name_lidar""$file_name_lidar"# 解压时的代码,记得取消注释# extract_and_sync_in_pane "./tmp_download/$file_name_lidar" "openscene_sensor_test_lidar_${split}"}# 第一步:下载 metadatatmux new-window-t"$SESSION_NAME"-n"metadata"download_file_in_pane"https://hf-mirror.com/datasets/OpenDriveLab/OpenScene/resolve/main/openscene-v1.1/openscene_metadata_test.tgz""openscene_metadata_test.tgz"# 解压时的代码,记得取消注释# tmux send-keys -t "$SESSION_NAME" "echo 'Extracting metadata...'; tar -xzf ./tmp_download/openscene_metadata_test.tgz -C ./tmp_download; rm ./tmp_download/openscene_metadata_test.tgz; mv ./tmp_download/openscene-v1.1/meta_datas test_navsim_logs; rm -rf ./tmp_download/openscene-v1.1" C-m# 创建目标目录mkdir-ptest_sensor_blobs# 第二步:并行下载 splits(每个 split = 新窗口 + 2 个面板)forsplitin{0..31};dotmux new-window-t"$SESSION_NAME"-n"split_${split}"process_split_in_pane"$split"done# 附着到 tmux 会话tmux attach-session-t"$SESSION_NAME"
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 23:36:10

多智能体强化学习环境仓库解析:从接口设计到训练接入

简介:一份专为多智能体强化学习(MARL)设计的环境工具包,面向强化学习研究者、算法工程师与学生,用于在统一平台中开发、训练和对比多智能体协作与竞争策略。环境覆盖灭火、找宝藏、抓猪、足球、移动箱子、无人机、清洁…

作者头像 李华
网站建设 2026/9/11 23:33:51

Android内存泄漏:Handler与Context的static陷阱解析

1. Android内存泄漏的双子星:Handler与Context的static陷阱在Android开发中,内存泄漏就像房间里悄悄堆积的灰尘,看似无害却会逐渐拖慢系统运行。而Handler和Context的static使用问题,堪称Android内存泄漏的"双子星"——…

作者头像 李华
网站建设 2026/9/11 23:32:02

ComfyUI中Supir语义超分节点实战指南

简介:本资源是一份面向ComfyUI图像处理初学者与AIGC开发者的轻量级Supir图像缩放工作流配置文件,聚焦于高质量图像放大与细节增强场景,适用于需快速集成Supir节点的本地化AI绘图工作流搭建。压缩包仅含1个核心JSON文件(4KB&#x…

作者头像 李华
网站建设 2026/9/11 23:28:29

OpenCV 3.1轻量级多目标跟踪实战:MOG2+KCF架构

简介:本资源是一套基于OpenCV 3.1实现视频多目标检测与跟踪的完整C工程实践项目,面向计算机视觉初学者及图像处理进阶开发者,解决动态场景下多个运动目标的实时定位、初始化与持续追踪问题,适用于智能监控、行为分析等实际应用。压…

作者头像 李华