bev-project/project/docs/INFERENCE_GUIDE.md

387 lines
8.3 KiB
Markdown
Raw Normal View History

# BEVFusion推理和可视化指南
**生成时间**2025-10-21
**基于Checkpoint**epoch_19.pth
**数据集**nuScenes Validation Set
---
## 📋 文件说明
### 1. inference_and_visualize.py
**功能**:完整的推理和可视化脚本
**特性**
- ✅ 加载epoch_19.pth权重
- ✅ 在nuScenes验证集上推理
- ✅ 生成BEV分割可视化
- ✅ 生成3D检测可视化
- ✅ 生成综合可视化(分割+检测)
- ✅ 支持自定义样本数量
- ✅ 支持置信度阈值设置
### 2. run_inference.sh
**功能**:一键运行推理脚本
**默认配置**
```bash
Checkpoint: epoch_19.pth
样本数: 10
置信度阈值: 0.3
输出目录: inference_results_epoch19
```
---
## 🚀 快速开始
### 方法1使用Shell脚本推荐
```bash
# 直接运行
bash run_inference.sh
```
### 方法2使用Python脚本
```bash
# 基本用法
python inference_and_visualize.py
# 自定义参数
python inference_and_visualize.py \
--checkpoint runs/run-326653dc-74184412/epoch_19.pth \
--samples 20 \
--output-dir my_results \
--show-score-thr 0.4 \
--device cuda:0
```
---
## 🎨 可视化输出
### 输出文件结构
```
inference_results_epoch19/
├── sample_0000_segmentation.png # BEV分割结果
├── sample_0000_detection.png # 3D检测结果
├── sample_0000_combined.png # 综合可视化
├── sample_0001_segmentation.png
├── sample_0001_detection.png
├── sample_0001_combined.png
...
```
### 可视化内容
#### 1. BEV分割*_segmentation.png
显示6个地图类别
- **紫色** - drivable_area可行驶区域
- **粉色** - ped_crossing人行横道
- **灰色** - walkway人行道
- **红色** - stop_line停止线
- **绿色** - carpark_area停车区
- **黄色** - divider分隔线
#### 2. 3D检测*_detection.png
显示检测到的3D目标框BEV视图
- 不同颜色表示不同类别
- 框内显示置信度分数
- 显示物体朝向
#### 3. 综合可视化(*_combined.png
左侧BEV分割
右侧3D检测
---
## ⚙️ 参数说明
### 命令行参数
| 参数 | 默认值 | 说明 |
|------|--------|------|
| `--config` | multitask.yaml | 模型配置文件路径 |
| `--checkpoint` | epoch_19.pth | Checkpoint文件路径 |
| `--samples` | 10 | 推理的样本数量 |
| `--output-dir` | inference_results | 输出目录 |
| `--show-score-thr` | 0.3 | 检测框显示的置信度阈值 |
| `--device` | cuda:0 | 推理设备 |
### 修改参数示例
#### 增加样本数
```bash
python inference_and_visualize.py --samples 50
```
#### 提高置信度阈值(只显示高置信度检测)
```bash
python inference_and_visualize.py --show-score-thr 0.5
```
#### 更换输出目录
```bash
python inference_and_visualize.py --output-dir results_highconf
```
#### 使用不同GPU
```bash
python inference_and_visualize.py --device cuda:1
```
---
## 📊 预期输出示例
### 运行日志
```
================================================================================
BEVFusion推理和可视化
================================================================================
配置文件: configs/.../multitask.yaml
Checkpoint: runs/.../epoch_19.pth
样本数量: 10
输出目录: inference_results_epoch19
置信度阈值: 0.3
================================================================================
================================================================================
加载模型配置和权重
================================================================================
1. 构建模型...
2. 加载checkpoint: runs/run-326653dc-74184412/epoch_19.pth
✅ 模型加载完成
- Device: cuda:0
- Checkpoint epoch: 19
================================================================================
构建数据加载器
================================================================================
✅ 数据加载器构建完成
- 样本数量: 10
- 数据集: nuScenes validation set
================================================================================
开始推理和可视化
================================================================================
推理中: 100%|████████████| 10/10 [00:45<00:00, 4.5s/it]
✅ 已保存: inference_results_epoch19/sample_0000_combined.png
✅ 已保存: inference_results_epoch19/sample_0001_combined.png
...
================================================================================
✅ 推理完成!
- 结果保存在: inference_results_epoch19
- 共处理样本: 10
================================================================================
```
### 性能指标
- **推理速度**约4-5秒/样本
- **显存占用**约8-10GB
- **输出文件大小**每个PNG约1-3MB
---
## 🔍 结果分析
### 查看结果
```bash
# 列出所有生成的文件
ls -lh inference_results_epoch19/
# 统计文件数量
ls inference_results_epoch19/*.png | wc -l
# 使用图像查看器
# Linux:
eog inference_results_epoch19/sample_0000_combined.png
# 或者复制到本地查看
```
### 预期性能基于epoch_19
**3D检测**
- NDS: ~0.70
- mAP: ~0.62
- 主要类别car, pedestrian等检测准确
**BEV分割**
- mIoU: ~40-45%
- drivable_area: 较高IoU (~70%)
- 小目标类别stop_line等: 较低IoU (~20-30%)
---
## 🛠️ 高级用法
### 1. 批量推理所有验证集
```bash
python inference_and_visualize.py --samples 6019
# nuScenes val set共6019个样本
```
### 2. 只推理特定类别
修改`inference_and_visualize.py`中的`score_thr`或后处理逻辑
### 3. 导出为视频
```bash
# 使用ffmpeg合成视频
cd inference_results_epoch19
ffmpeg -framerate 2 -pattern_type glob -i '*_combined.png' \
-c:v libx264 -pix_fmt yuv420p output_video.mp4
```
### 4. 评估指标计算
```bash
# 使用mmdetection3d的评估工具
python tools/test.py \
configs/.../multitask.yaml \
runs/.../epoch_19.pth \
--eval bbox segm
```
---
## 📈 可视化质量说明
### 分割可视化
- **分辨率**200×200BEV空间
- **覆盖范围**100m × 100m±50m
- **分辨率**0.5m/pixel
- **颜色编码**符合nuScenes标准
### 检测可视化
- **显示范围**±50mBEV
- **框表示**:矩形框表示物体边界
- **朝向表示**:框的开口方向表示物体朝向
- **置信度**:显示在框内
---
## ⚠️ 注意事项
### 1. 内存要求
- **GPU显存**建议至少10GB
- **系统内存**建议至少32GB
### 2. 数据路径
确保nuScenes数据集路径正确
```python
# 配置文件中应该有
data_root = 'data/nuscenes/'
ann_file = 'data/nuscenes/nuscenes_infos_val.pkl'
```
### 3. 依赖项
需要安装:
- torch
- mmcv
- mmdet3d
- matplotlib
- opencv-python
- tqdm
### 4. 已知限制
- 当前可视化为2D BEV视图
- 不包含相机图像叠加
- 不支持3D可视化如点云
---
## 🐛 故障排除
### 问题1找不到checkpoint
```bash
# 检查文件是否存在
ls -lh runs/run-326653dc-74184412/epoch_19.pth
# 如果不存在检查其他runs目录
ls -lh runs/*/epoch_*.pth
```
### 问题2CUDA OOM
```bash
# 减少batch size或使用CPU
python inference_and_visualize.py --device cpu
# 或者减少样本数
python inference_and_visualize.py --samples 5
```
### 问题3数据集路径错误
```bash
# 检查数据集
ls data/nuscenes/
ls data/nuscenes/nuscenes_infos_val.pkl
```
### 问题4可视化不显示
```bash
# 确保安装了matplotlib的backend
pip install matplotlib pillow
# 或者检查生成的PNG文件
file inference_results_epoch19/sample_0000_combined.png
```
---
## 📝 自定义修改
### 修改颜色方案
编辑`inference_and_visualize.py`中的`colors`字典:
```python
colors = {
'drivable_area': [128, 64, 128], # 修改为你想要的RGB值
'ped_crossing': [244, 35, 232],
...
}
```
### 修改可视化布局
调整`visualize_combined`函数中的`figsize`和subplot布局
### 添加额外信息
在可视化函数中添加:
- 时间戳
- 场景ID
- 性能指标
- 统计信息
---
## 📚 参考资料
- [nuScenes数据集](https://www.nuscenes.org/)
- [BEVFusion论文](https://arxiv.org/abs/2205.13542)
- [MMDetection3D文档](https://mmdetection3d.readthedocs.io/)
---
**创建时间**2025-10-21
**脚本版本**1.0
**适用Checkpoint**epoch_19.pth
**状态**:✅ 可用