WaveGen 训练可视化工具
独立的训练结果可视化工具,自动检索 core_space 目录并通过 Viser 进行 3D 可视化。
🚀 快速开始
1. 基本使用
在 nano_WaveGen 目录下运行:
cd code/WaveGen/nano_WaveGen
python utils/visualize_training.py
2. 指定 core_space 目录
python utils/visualize_training.py --core-space ../WaveGen_Augustus_v1/core_space
3. 指定端口
python utils/visualize_training.py --port 8888
4. 禁用自动打开浏览器
python utils/visualize_training.py --no-browser
📋 功能特性
✅ 自动端口分配
- 默认尝试使用 8080 端口
- 如果端口被占用,自动尝试下一个端口 (8081, 8082, ...)
- 最多尝试 10 个端口
- 自动在浏览器中打开正确的URL
✅ 自动扫描训练输出
- 自动检测
core_space/下的所有训练输出目录 - 格式:
YYYYMMDD_HHMMSS_stepN_text2wave - 统计每个输出的样本数量
🎨 3D 可视化
- 超二次曲面渲染: 生成的预测结果(蓝色)和 Ground Truth(红色)
- 点云显示: 从深度图重建的原始点云
- 相机可视化: GT 相机位置和朝向
- 坐标系显示: 世界坐标系参考
🎮 交互控制
- 训练输出选择: 下拉菜单选择不同的训练输出
- 样本选择: 滑块选择样本索引
- 帧控制: 滑块切换帧,播放/暂停动画
- 颜色和透明度: 实时调整渲染参数
- 网格分辨率: 调整超二次曲面的网格质量
⚡ 性能优化
- 对象池机制: 复用 mesh 对象,减少内存分配
- 惰性加载: 按需加载帧数据
- 缓存策略: 预加载相邻帧数据
🎛️ GUI 控制说明
训练输出面板
- 选择训练输出: 选择要查看的训练输出
- 样本索引: 选择样本(0 到 N-1)
- 加载样本: 点击加载选中的样本
帧控制面板
- 当前帧: 滑块切换帧(0-23)
- ▶ 播放: 开始自动播放动画
- ⏸ 暂停: 暂停动画播放
- 播放FPS: 设置播放帧率(1-30)
生成结果面板
- 显示生成的超二次曲面: 开关预测结果显示
- 生成结果透明度: 调整蓝色 mesh 的透明度
- 生成结果颜色: 自定义预测结果颜色(默认蓝色)
Ground Truth 面板
- 显示GT超二次曲面: 开关 GT 显示
- GT透明度: 调整红色 mesh 的透明度
- GT颜色: 自定义 GT 颜色(默认红色)
点云显示面板
- 显示点云: 开关点云显示
- 点大小: 调整点云渲染大小(0.001-0.02)
渲染设置面板
- 网格分辨率: 调整超二次曲面的网格精度(10-50)
- 显示坐标系: 开关世界坐标系显示
相机控制面板
- 重置视角: 恢复默认观察视角
- 匹配GT相机: 将视角设置为 GT 相机视角
📦 数据格式支持
支持的文件结构
core_space/
├── 20251204_212328_step5_text2wave/
│ ├── sample_0/
│ │ ├── predictions.npz # 模型预测结果
│ │ ├── targets.npz # Ground Truth
│ │ ├── info.txt # 样本信息
│ │ └── original_data/ # 原始数据
│ │ ├── Full_Sample_Data_for_Learning_Target.npz
│ │ ├── depth/
│ │ │ └── depth_merge.npz # 或 frame_*.npy
│ │ ├── rgb/
│ │ │ └── frame_*.png
│ │ ├── segmentation/
│ │ ├── metadata.json
│ │ └── camera_trajectory.npz
│ ├── sample_1/
│ └── ...
└── 20251128_124329_step5_text2wave/
└── ...
predictions.npz 格式
frames = [
{
'objects': [max_objects, 15], # 每个对象15个参数
'world': [8], # 世界参数
'physics': [max_objects, 3] # 物理属性(可选)
},
... # 24帧
]
# objects 参数 [15]:
# [0]: exists 存在标志 (0/1)
# [1:3]: shape ε1, ε2
# [3:6]: scale a, b, c
# [6:9]: translation x, y, z
# [9:12]: rotation rx, ry, rz (欧拉角)
# [12:15]: velocity vx, vy, vz
targets.npz 格式
objects = [num_frames, max_objects, 16] # 16参数(多了inlier_ratio)
world = [num_frames, 11] # 11参数(包含scene_center)
physics = [max_objects, 3] # 物理属性(可选)
🔧 依赖项
Python 包
viser- 3D 可视化服务器numpy- 数值计算scipy- 旋转矩阵计算opencv-python- 图像处理pillow- 图像加载
本地模块
depth_to_pointcloud.py- 深度图转点云工具
安装依赖
pip install viser numpy scipy opencv-python pillow
🎯 使用场景
1. 检查训练质量
对比蓝色(预测)和红色(GT)mesh 的重合程度
2. 调试模型
实时查看每一帧的生成结果
3. 制作演示
通过播放功能展示训练效果
4. 数据分析
结合点云查看模型对原始数据的拟合质量
🐛 常见问题
Q: 找不到训练输出?
A: 确保 core_space 目录存在且包含 *_text2wave 格式的文件夹。
Q: 无法显示点云?
A: 检查 original_data/depth/ 目录是否存在深度文件。
Q: Mesh 显示不正确?
A: 尝试调整"网格分辨率"或检查 superquadric 参数是否正确。
Q: 端口被占用?
A: 脚本会自动检测并使用下一个可用端口(8080→8081→8082...),无需手动干预。也可以用 --port 参数指定起始端口。
Q: 浏览器没有自动打开?
A: 检查系统的默认浏览器设置。或者使用 --no-browser 参数禁用自动打开,然后手动访问终端显示的URL。
Q: 页面一直显示空白?
A: 尝试刷新浏览器(Ctrl+Shift+R)或切换到 Chrome/Firefox 浏览器。
📝 开发说明
添加新功能
- 在
TrainingVisualizer类中添加方法 - 在
setup_gui()中添加 GUI 控件 - 在对应的回调函数中实现逻辑
性能优化
- 使用对象池避免重复创建 mesh
- 预加载相邻帧数据
- 调整网格分辨率平衡质量和性能
📄 许可
与 WaveGen 项目保持一致