3、环境搭建:Ubuntu + CUDA + PyTorch环境配置、MMDetection3D安装、nuScenes数据集准备、Occ3D数据集准备
说实话,环境搭建这事儿,看着琐碎,但真能卡住不少人。我见过太多同学代码写好了,结果环境配了三天还没跑通。嗯,咱们今天就把这事儿捋清楚。
3.1 Ubuntu + CUDA + PyTorch 环境配置
我个人习惯用 Ubuntu 20.04 或 22.04。为什么?因为大部分自动驾驶开源项目都在这两个版本上测试过,省心。
3.1.1 安装显卡驱动
先确认你的显卡型号。我建议用 nvidia-smi 检查驱动是否已装。如果没装,别去官网瞎找,直接用 Ubuntu 的「软件和更新」里的附加驱动,选个推荐版本就行。
# 查看显卡信息
lspci | grep -i nvidia
# 查看驱动版本
nvidia-smi
3.1.2 安装 CUDA
CUDA 版本我推荐 11.7 或 11.8。为什么?因为 PyTorch 1.13 和 2.0 对这两个版本支持最好。你想想看,如果选了 CUDA 12.x,很多旧版算子可能编译不过。
# 下载 CUDA 11.7
wget https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda_11.7.0_515.43.04_linux.run
# 安装(注意不要装驱动)
sudo sh cuda_11.7.0_515.43.04_linux.run --toolkit --silent --override
# 配置环境变量
echo 'export PATH=/usr/local/cuda-11.7/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.7/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
3.1.3 安装 PyTorch
我个人习惯用 conda 管理环境。说白了,conda 能帮你隔离不同项目的依赖,避免「装了这个包,那个包就崩了」的尴尬。
# 创建 conda 环境
conda create -n bev_occ python=3.8 -y
conda activate bev_occ
# 安装 PyTorch 1.13.1(CUDA 11.7)
pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117
python -c "import torch; print(torch.cuda.is_available())" 验证。如果返回 True,恭喜你,环境通了。
3.2 MMDetection3D 安装
MMDetection3D 是 OpenMMLab 家族的一员。说实话,它的安装比纯 PyTorch 要复杂一些,因为涉及很多 C++ 编译的算子。
3.2.1 安装 MMCV
MMCV 是基础库。版本一定要和 PyTorch 匹配。我建议用 mim 工具安装,它会自动帮你匹配版本。
# 安装 mim
pip install openmim
# 安装 mmcv-full(自动匹配 PyTorch 版本)
mim install mmcv-full
3.2.2 安装 MMDetection3D
从源码安装是最稳妥的方式。为什么?因为 pip 安装的版本可能缺少一些最新的特性。
# 克隆仓库
git clone https://github.com/open-mmlab/mmdetection3d.git
cd mmdetection3d
# 安装依赖
pip install -r requirements/build.txt
pip install -v -e .
nvcc fatal 错误,原因是 CUDA 路径没配好。检查一下 /usr/local/cuda 软链接是否指向了正确的版本。
3.2.3 验证安装
# 运行测试
python -c "from mmdet3d.apis import init_model; print('MMDetection3D installed successfully!')"
3.3 nuScenes 数据集准备
nuScenes 是自动驾驶领域最常用的数据集之一。它包含 1000 个场景,每个场景 20 秒,标注了 3D 边界框和雷达点云。
3.3.1 下载数据集
去 nuScenes 官网注册账号,下载完整数据集。注意,完整版大概 400GB,建议用 wget 或 aria2c 断点续传。
# 使用官方下载工具
pip install nuscenes-devkit
# 下载(需要替换 YOUR_TOKEN)
python -m nuscenes.scripts.download --token YOUR_TOKEN --version v1.0-trainval
3.3.2 数据目录结构
我个人习惯把数据放在 /data/nuscenes 下。目录结构如下:
/data/nuscenes/
├── v1.0-trainval/
│ ├── maps/
│ ├── samples/
│ ├── sweeps/
│ └── v1.0-trainval_meta/
└── can_bus/
3.3.3 生成数据索引
MMDetection3D 需要生成数据索引文件。说白了,就是把数据路径和标注信息整理成 .pkl 文件。
# 生成训练集索引
python tools/create_data.py nuscenes --root-path /data/nuscenes --out-dir /data/nuscenes --version v1.0-trainval
3.4 Occ3D 数据集准备
Occ3D 是 nuScenes 的语义占用网格标注版本。说白了,就是把 3D 空间划分成小格子,每个格子标注是什么物体(车、路、行人等)。
3.4.1 下载 Occ3D 标注
Occ3D 的标注文件可以从 GitHub 仓库下载。注意,它依赖 nuScenes 的原始数据。
# 克隆 Occ3D 仓库
git clone https://github.com/Tsinghua-MARS-Lab/Occ3D.git
cd Occ3D
# 下载标注文件(约 10GB)
wget https://occ3d.com/data/occ3d-nuscenes.tar.gz
tar -xzf occ3d-nuscenes.tar.gz -C /data/occ3d
3.4.2 数据目录结构
/data/occ3d/
├── occ3d-nuscenes/
│ ├── gts/
│ │ ├── scene-0001/
│ │ ├── scene-0002/
│ │ └── ...
│ └── meta/
└── nuscenes/ (软链接到 nuScenes 数据)
3.4.3 验证数据完整性
我建议用脚本检查一下数据是否完整。不然训练到一半发现缺文件,那才叫崩溃。
# 检查标注文件数量
ls /data/occ3d/occ3d-nuscenes/gts/ | wc -l
# 应该输出 850(训练集 700 + 验证集 150)
3.5 环境验证
最后,跑一个简单的测试脚本,确保所有组件都能正常工作。
# 测试 MMDetection3D 能否加载 nuScenes 数据
python tools/test.py configs/nuscenes/detection/pointpillars.py \
--checkpoint checkpoints/pointpillars.pth \
--show-dir results/
嗯,到这里环境就搭好了。下一章咱们开始讲数据加载和预处理,那才是真正有意思的部分。