告别龟速!用gsutil和aria2在Linux上5分钟搞定COCO/VOC数据集下载
告别龟速!用gsutil和aria2在Linux上5分钟搞定COCO/VOC数据集下载
在计算机视觉领域,COCO和VOC数据集是训练和评估模型的重要基准资源。然而,许多开发者和研究者都遇到过同样的痛点:官方下载速度慢如蜗牛,动辄数小时的等待时间严重拖慢了项目进度。本文将介绍一套在Linux环境下高效下载这些数据集的完整方案,结合gsutil官方工具与aria2多线程下载器的优势,让你在5分钟内完成准备工作,享受极速下载体验。
1. 环境准备与工具安装
1.1 安装gsutil工具
gsutil是Google Cloud Storage的命令行工具,官方推荐使用它来下载COCO数据集。安装过程非常简单:
# 安装Google Cloud SDK curl https://sdk.cloud.google.com | bash exec -l $SHELL gcloud init对于没有root权限的服务器环境,可以通过以下方式本地安装:
# 下载独立版本 wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-368.0.0-linux-x86_64.tar.gz tar -xzvf google-cloud-sdk-368.0.0-linux-x86_64.tar.gz ./google-cloud-sdk/install.sh1.2 安装aria2下载器
aria2是一个轻量级的多协议命令行下载工具,支持断点续传和多线程下载:
# Ubuntu/Debian系统 sudo apt-get update && sudo apt-get install -y aria2 # CentOS/RHEL系统 sudo yum install -y aria2 # 无root权限时源码编译安装 wget https://github.com/aria2/aria2/releases/download/release-1.36.0/aria2-1.36.0.tar.gz tar -xzvf aria2-1.36.0.tar.gz cd aria2-1.36.0 ./configure --prefix=$HOME/.local make && make install验证安装是否成功:
aria2c --version gsutil version -l2. 高效下载COCO数据集
2.1 获取数据集下载链接
首先使用gsutil列出COCO数据集的所有可用文件:
gsutil ls gs://images.cocodataset.org你会看到类似如下的输出结构:
gs://images.cocodataset.org/annotations/ gs://images.cocodataset.org/annotations_trainval2017.zip gs://images.cocodataset.org/train2017/ gs://images.cocodataset.org/train2017.zip2.2 使用aria2加速下载
获取到具体文件链接后,使用aria2进行多线程下载:
aria2c -x16 -s16 -c -k1M \ "https://storage.googleapis.com/images.cocodataset.org/annotations/annotations_trainval2017.zip" \ "https://storage.googleapis.com/images.cocodataset.org/zips/train2017.zip" \ "https://storage.googleapis.com/images.cocodataset.org/zips/val2017.zip"参数说明:
-x16:每个文件使用16个连接-s16:同时下载16个文件-c:启用断点续传-k1M:分块大小为1MB
2.3 下载进度监控
aria2提供了丰富的进度显示功能:
[#1 SIZE:1.2GiB/1.2GiB CN:16 DL:42.3MiB ETA:0s] [#2 SIZE:18.1GiB/18.1GiB CN:16 DL:38.7MiB ETA:7m12s]对于大文件下载,可以启用RPC接口进行远程监控:
aria2c --enable-rpc --rpc-listen-all --rpc-allow-origin-all \ -x16 -s16 -c -k1M <下载链接>然后在浏览器中访问http://<服务器IP>:6800/jsonrpc即可查看实时进度。
3. VOC数据集下载优化
3.1 获取VOC数据集链接
VOC数据集通常托管在多个镜像站点,以下是常用下载源:
| 数据集版本 | 主下载链接 | 备用镜像 |
|---|---|---|
| VOC2012 | http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar | http://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar |
| VOC2007 | http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar | http://pjreddie.com/media/files/VOCtrainval_06-Nov-2007.tar |
3.2 多镜像并行下载
利用aria2的镜像功能,可以同时从多个源下载同一文件:
aria2c -x16 -s16 -c -k1M --follow-torrent=false \ "http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar" \ "http://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar" \ -o VOC2012.tar3.3 下载完整性验证
下载完成后,务必验证文件的完整性:
# 计算MD5校验和 md5sum VOCtrainval_11-May-2012.tar # 对比官方校验值 echo "6cd6e144f989b92b3379bac3b3de84fd VOCtrainval_11-May-2012.tar" | md5sum -c4. 高级技巧与问题排查
4.1 参数调优指南
根据网络环境调整aria2参数:
| 网络环境 | 推荐参数组合 | 适用场景 |
|---|---|---|
| 高速局域网 | -x32 -s32 -k2M | 千兆内网环境 |
| 普通宽带 | -x16 -s16 -k1M | 家庭/办公室宽带 |
| 不稳定网络 | -x8 -s4 -k512K | 移动网络或高延迟环境 |
4.2 常见错误解决
问题1:证书验证失败
[ERROR] CUID#8 - Download aborted. URI=https://... SSL/TLS handshake failure: ...解决方案:
aria2c --check-certificate=false <下载链接>问题2:连接数过多被限制
[WARN] CUID#7 - Download aborted. URI=https://... Too many connections from this IP.解决方案:
# 减少连接数和并行下载数 aria2c -x4 -s2 -k512K <下载链接>4.3 无sudo权限环境下的配置
在受限服务器环境中,可以创建本地配置文件:
mkdir -p ~/.aria2 cat > ~/.aria2/aria2.conf <<EOF dir=~/datasets max-concurrent-downloads=5 max-connection-per-server=16 split=16 min-split-size=1M continue=true EOF使用时指定配置文件:
aria2c --conf-path=~/.aria2/aria2.conf <下载链接>4.4 自动化脚本示例
创建一个完整的下载脚本download_coco.sh:
#!/bin/bash set -e # 定义下载目录 DOWNLOAD_DIR="${HOME}/datasets/coco" mkdir -p "$DOWNLOAD_DIR" cd "$DOWNLOAD_DIR" # COCO数据集文件列表 FILES=( "annotations/annotations_trainval2017.zip" "zips/train2017.zip" "zips/val2017.zip" "zips/test2017.zip" ) # 构建完整URL列表 URLS=() for file in "${FILES[@]}"; do URLS+=("https://storage.googleapis.com/images.cocodataset.org/${file}") done # 开始下载 aria2c -x16 -s16 -c -k1M "${URLS[@]}" # 验证下载 echo "Verifying downloads..." for file in "${FILES[@]}"; do filename=$(basename "$file") if [ ! -f "$filename" ]; then echo "Error: $filename not found!" exit 1 fi done echo "All files downloaded successfully to $DOWNLOAD_DIR"