8.3 KiB
8.3 KiB
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
功能:一键运行推理脚本
默认配置:
Checkpoint: epoch_19.pth
样本数: 10
置信度阈值: 0.3
输出目录: inference_results_epoch19
🚀 快速开始
方法1:使用Shell脚本(推荐)
# 直接运行
bash run_inference.sh
方法2:使用Python脚本
# 基本用法
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 | 推理设备 |
修改参数示例
增加样本数
python inference_and_visualize.py --samples 50
提高置信度阈值(只显示高置信度检测)
python inference_and_visualize.py --show-score-thr 0.5
更换输出目录
python inference_and_visualize.py --output-dir results_highconf
使用不同GPU
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
🔍 结果分析
查看结果
# 列出所有生成的文件
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. 批量推理所有验证集
python inference_and_visualize.py --samples 6019
# nuScenes val set共6019个样本
2. 只推理特定类别
修改inference_and_visualize.py中的score_thr或后处理逻辑
3. 导出为视频
# 使用ffmpeg合成视频
cd inference_results_epoch19
ffmpeg -framerate 2 -pattern_type glob -i '*_combined.png' \
-c:v libx264 -pix_fmt yuv420p output_video.mp4
4. 评估指标计算
# 使用mmdetection3d的评估工具
python tools/test.py \
configs/.../multitask.yaml \
runs/.../epoch_19.pth \
--eval bbox segm
📈 可视化质量说明
分割可视化
- 分辨率:200×200(BEV空间)
- 覆盖范围:100m × 100m(±50m)
- 分辨率:0.5m/pixel
- 颜色编码:符合nuScenes标准
检测可视化
- 显示范围:±50m(BEV)
- 框表示:矩形框表示物体边界
- 朝向表示:框的开口方向表示物体朝向
- 置信度:显示在框内
⚠️ 注意事项
1. 内存要求
- GPU显存:建议至少10GB
- 系统内存:建议至少32GB
2. 数据路径
确保nuScenes数据集路径正确:
# 配置文件中应该有
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
# 检查文件是否存在
ls -lh runs/run-326653dc-74184412/epoch_19.pth
# 如果不存在,检查其他runs目录
ls -lh runs/*/epoch_*.pth
问题2:CUDA OOM
# 减少batch size或使用CPU
python inference_and_visualize.py --device cpu
# 或者减少样本数
python inference_and_visualize.py --samples 5
问题3:数据集路径错误
# 检查数据集
ls data/nuscenes/
ls data/nuscenes/nuscenes_infos_val.pkl
问题4:可视化不显示
# 确保安装了matplotlib的backend
pip install matplotlib pillow
# 或者检查生成的PNG文件
file inference_results_epoch19/sample_0000_combined.png
📝 自定义修改
修改颜色方案
编辑inference_and_visualize.py中的colors字典:
colors = {
'drivable_area': [128, 64, 128], # 修改为你想要的RGB值
'ped_crossing': [244, 35, 232],
...
}
修改可视化布局
调整visualize_combined函数中的figsize和subplot布局
添加额外信息
在可视化函数中添加:
- 时间戳
- 场景ID
- 性能指标
- 统计信息
📚 参考资料
创建时间:2025-10-21
脚本版本:1.0
适用Checkpoint:epoch_19.pth
状态:✅ 可用