# 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 项目保持一致