# DIST-OCC
**Repository Path**: xupeng-fu/DIST-OCC
## Basic Information
- **Project Name**: DIST-OCC
- **Description**: 自蒸馏3D Occupancy,训练测试可视化已完成。
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-06-20
- **Last Updated**: 2025-07-06
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# GSDOCCDISS: 纯卷积自蒸馏OCC
结果说明
**为什么两段 GIF 的可视化效果比较粗糙?**
- 本示例模型使用的是 *mini* 训练集上快速验证的轻量级权重,仅供演示流程。
- 与完整 **trainval** 数据集训练得到的权重相比,*mini* 权重在语义分割和占用预测上都存在明显精度损失,因此展示出的 mIoU 和外观质量都要低不少。
## 项目简介
GSDOCCDISS是基于GSDOCC的占用预测方法。项目支持端到端的训练、推理和可视化,适用于OCC3D。
## 环境安装
建议使用 Conda 创建独立环境,参考 `create_env.bash`:
```bash
# 初始化 conda
conda create --name gsdocc python=3.8 -y
conda activate gsdocc
# 安装 PyTorch(CUDA 11.3)
pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 torchaudio==0.11.0 --extra-index-url https://download.pytorch.org/whl/cu113
# 安装 OpenMMLab 相关依赖
pip install -U openmim
pip install mmcv-full==1.5.3 -f https://download.openmmlab.com/mmcv/dist/cu113/torch1.11.0/index.html
pip install mmdet==2.25.1
pip install mmsegmentation==0.25.0
pip install mmengine
# 其他依赖
pip install numpy==1.23.4 yapf==0.40.1 setuptools==59.5.0 ninja einops open3d==0.16.0
# 安装本地包
pip install -v -e .
```
## 数据准备
- 原始数据集目录参考GSDOCC。
- tools/create_data_bevdet.py生成pkl,第48行默认VERSION= 'v1.0-mini'。
- tools/generate_depth_multi.py生成多帧depth,第50行默认version='v1.0-mini'
## 训练与测试
配置文件:
```
occupancy_configs/gsd_occ/gsdoccdiss_r50_256x704_16f_8x4_24.py
```
基本训练命令:
```bash
# 单机多卡训练
bash tools/dist_train.sh occupancy_configs/gsd_occ/gsdoccdiss_r50_256x704_16f_8x4_24.py
```
剩余训练时长会先变少再变多再变少,属于正常现象
评测命令:
```bash
bash tools/dist_test.sh occupancy_configs/gsd_occ/gsdoccdiss_r50_256x704_16f_8x4_24.py work_dirs/gsdoccdiss_r50_256x704_16f_8x4_24e.py/latest.pth 8
```
## 可视化说明
本项目支持3D Occupancy可视化,采用三步流程:测试生成结果 → 可视化单帧 → 生成GIF动图。
### 可视化流程
#### 第一步:测试生成结果
```bash
# 运行测试脚本生成pkl文件
python tools/test.py \
cfg \
path_of_ckpt \
--out path_of_vis.pkl
```
#### 第二步:可视化单帧
```bash
# 可视化指定场景的单帧图片
python tools/analysis_tools/vis_frame.py \
path_of_vis.pkl \
cfg \
--save-path where_picture_will_be_save \
--scene-idx 0916 \
--num-workers 4 \
--render-cameras all
```
#### 第三步:生成GIF动图
```bash
# 基于单帧图片生成GIF动图
python tools/analysis_tools/generate_gifs.py \
--scene-dir vis/scenes/scene-0916
```
### 参数说明
#### 测试脚本参数
| 参数 | 说明 | 示例值 |
|------|------|--------|
| 配置文件 | 模型配置文件路径 | `occupancy_configs/gsd_occ/gsdoccdiss_r50_256x704_16f_8x4_24.py` |
| 权重文件 | 训练好的模型权重 | `work_dirs/gsdoccdiss_r50_256x704_16f_8x4_24/latest.pth` |
| `--out` | 输出pkl文件路径 | `vis/vis.pkl` |
#### 可视化脚本参数
| 参数 | 说明 | 示例值 |
|------|------|--------|
| pkl文件 | 第一步生成的pkl文件 | `vis/vis.pkl` |
| 配置文件 | 模型配置文件路径 | `occupancy_configs/gsd_occ/gsdoccdiss_r50_256x704_16f_8x4_24.py` |
| `--save-path` | 单帧图片保存路径 | `vis/scenes` |
| `--scene-idx` | 要可视化的场景索引 | `0916` |
| `--num-workers` | 并行工作进程数 | `4` |
| `--render-cameras` | 渲染的相机视角 | `all` |
#### GIF生成脚本参数
| 参数 | 说明 | 示例值 |
|------|------|--------|
| `--scene-dir` | 单帧图片所在目录 | `vis/scenes/scene-0916` |
### 输出文件结构
```
vis/
├── vis.pkl # 第一步:测试结果pkl文件
├── scenes/
│ └── scene-0916/ # 第二步:单帧图片目录
│ ├── 0.png
│ ├── 1.png
│ ├── ...
│ └── scene-0916.gif # 第三步:生成的GIF动图
```
### 使用VSCode调试
项目提供了VSCode调试配置,可以在`.vscode/launch.json`中找到:
1. **1.test**:运行测试生成结果
2. **2.vis_frame**:可视化单帧图片
3. **3.generate_gifs**:生成GIF动图
### 注意事项
1. **文件路径**:确保所有路径正确,建议使用绝对路径
2. **场景索引**:`--scene-idx`参数指定要可视化的具体场景
3. **内存使用**:可视化大量场景时注意内存使用情况
4. **并行处理**:通过`--num-workers`参数控制并行度
5. **相机视角**:`--render-cameras all`渲染所有相机视角
### 效果展示
您可以在README顶部看到可视化效果的GIF动图示例,展示了模型在3D占用预测上的表现。
## 修改
- **GSDOCCDISS(gsdoccdiss.py)**:
基于GSDOCC框架,采用自蒸馏训练策略。
- **DecoupleOccHeadDISS(decouple_occ_headdiss.py)**:
采用Flashocc提出的C2H和卷积替代MLP的C2H进行BEV→Voxel。
## 预训练模型
算力有限,加急训练中
## Todo
- 对FlashOCC的C2H理解有偏差,导致lift BEV的效果不足,需要简化HEAD。
- 占用HEAD输入了前向投影得到的体素,但是蒸馏效果不好,需要改进体素蒸馏,而不是简单的Voxel-BEV蒸馏。
- TRT。
- 可视化class由stcocc迁移而来,class没对齐,需要根据FB-OCC的class修改。
## 许可协议
- 代码:Nvidia Source Code License-NC,详见 [LICENSE](https://github.com/NVlabs/FB-BEV/blob/main/LICENSE)
- 预训练模型:CC-BY-NC-SA-4.0
如需商业授权,请访问 [NVIDIA Research Licensing](https://www.nvidia.com/en-us/research/inquiries/)
## 致谢
感谢以下优秀开源项目的支持:
- [BEVFormer](https://github.com/fundamentalvision/BEVFormer)
- [BEVDet](https://github.com/HuangJunJie2017/BEVDet)
- [Occ3D](https://github.com/Tsinghua-MARS-Lab/Occ3D)
- [OpenOccupancy](https://github.com/JeffWang987/OpenOccupancy)
- [SoloFusion](https://github.com/Divadi/SOLOFusion)
- [GSDOCC](https://github.com/harrylin-hyl/GSD-OCC)