| # WaveGen 训练可视化工具 |
|
|
| 独立的训练结果可视化工具,自动检索 `core_space` 目录并通过 Viser 进行 3D 可视化。 |
|
|
| ## 🚀 快速开始 |
|
|
| ### 1. 基本使用 |
|
|
| 在 `nano_WaveGen` 目录下运行: |
|
|
| ```bash |
| cd code/WaveGen/nano_WaveGen |
| python utils/visualize_training.py |
| ``` |
|
|
| ### 2. 指定 core_space 目录 |
| |
| ```bash |
| python utils/visualize_training.py --core-space ../WaveGen_Augustus_v1/core_space |
| ``` |
| |
| ### 3. 指定端口 |
| |
| ```bash |
| python utils/visualize_training.py --port 8888 |
| ``` |
| |
| ### 4. 禁用自动打开浏览器 |
| |
| ```bash |
| 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 格式 |
|
|
| ```python |
| 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 格式 |
|
|
| ```python |
| 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` - 深度图转点云工具 |
|
|
| ### 安装依赖 |
|
|
| ```bash |
| 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 项目保持一致 |
|
|