WaveGen / nano_WaveGen /utils /README_visualize.md
FangSen9000's picture
Upload nano_WaveGen
8e263cf verified

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 浏览器。

📝 开发说明

添加新功能

  1. TrainingVisualizer 类中添加方法
  2. setup_gui() 中添加 GUI 控件
  3. 在对应的回调函数中实现逻辑

性能优化

  • 使用对象池避免重复创建 mesh
  • 预加载相邻帧数据
  • 调整网格分辨率平衡质量和性能

📄 许可

与 WaveGen 项目保持一致