File size: 6,389 Bytes
8e263cf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
# 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 项目保持一致