# Benchmark100 中文快速入口

这份说明是给另一个 Codex 或研究同学快速接手用的。当前评估集已经在本机准备好，用于评测多视角非正交图片到 mesh 的重建效果。

## 一句话说明

Benchmark100 包含 100 个有 GT mesh 的对象：50 个 GSO 和 50 个 Toys4K。每个对象有 2、4、6、8 四组非正交输入视角，每组输入都用同一套 20 个保留测试视角评测。

## 直接打开

中文交互浏览器：

```text
http://38.94.129.6:8768/report/benchmark100_case_browser_zh.html
```

中文快速入口网页：

```text
http://38.94.129.6:8768/report/codex_benchmark100_quickstart_zh.html
```

如果网页能打开但 OBJ 加载不了，先看：

```text
http://38.94.129.6:8768/report/codex_benchmark100_loading_guide_zh.html
```

## 核心文件

主清单：

```text
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/benchmark_manifest_v0.json
```

输入图和 20 个测试视角：

```text
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/rendered_benchmark_v0
```

各方法输出 mesh：

```text
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/method_eval
```

完整 2/4/6/8 聚合指标：

```text
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/method_eval/benchmark100_full_matrix_aggregate.json
```

## 怎么读取清单

主清单里的对象字段叫 `objects`，不是 `cases`：

```python
import json
from pathlib import Path

manifest_path = Path("/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/benchmark_manifest_v0.json")
manifest = json.loads(manifest_path.read_text(encoding="utf-8"))
objects = manifest["objects"]
print(len(objects))  # 100
```

单个对象的关键字段：

- `benchmark_id`：例如 `gso_000`、`toys4k_034`。
- `dataset`：`GSO` 或 `Toys4K`。
- `input_protocols`：2/4/6/8 输入视角配置。
- `eval_views`：20 个保留测试视角配置。
- `gt_mesh`：GT mesh 来源路径，GSO 可能是 `zip://...!...`。

## 图片在哪里

单个 case 的目录：

```text
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/rendered_benchmark_v0/<benchmark_id>
```

例如：

```text
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/rendered_benchmark_v0/gso_000
```

里面包括：

- `input_2/*.png`：2 张输入图。
- `input_4/*.png`：4 张输入图。
- `input_6/*.png`：6 张输入图。
- `input_8/*.png`：8 张输入图。
- `eval_20/*.png`：20 张测试视角 GT 渲染图。
- 每个视角目录下的 `transforms.json` 保存相机参数。

## Mesh 在哪里

方法输出路径格式：

```text
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/method_eval/<method_dir>/<benchmark_id>_input<N>/mesh_raw.obj
```

例子：

```text
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/method_eval/trellis2_protocol4_all100/gso_000_input4/mesh_raw.obj
```

常用方法目录：

- `trellis_protocol2_all100`、`trellis_protocol4_all100`、`trellis_protocol6_all100`、`trellis_protocol8_all100`
- `trellis2_protocol2_all100`、`trellis2_protocol4_all100`、`trellis2_protocol6_all100`、`trellis2_protocol8_all100`
- `reconviagen_protocol2_all100`、`reconviagen_protocol4_all100`、`reconviagen_protocol6_all100`、`reconviagen_protocol8_all100`
- `tripo_direct_protocol2_all100`、`tripo_direct_protocol4_all100`、`tripo_direct_protocol6_all100`、`tripo_direct_protocol8_all100`
- `tripo_gpt_ortho_protocol2_all100`、`tripo_gpt_ortho_protocol4_all100`、`tripo_gpt_ortho_protocol6_all100`、`tripo_gpt_ortho_protocol8_all100`

## GT mesh 注意事项

不要把 `zip://...!...` 形式的 GSO 原始路径直接交给普通 OBJ loader。更稳的做法是读取：

```text
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/rendered_benchmark_v0/render_summary.json
```

这里记录了评测渲染实际使用的 `mesh_path`。GSO 解压后的 mesh 通常在：

```text
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/rendered_benchmark_v0/_extracted_gso/<object_id>/meshes/model.obj
```

## 常见加载失败原因

1. HTTP 服务根目录不对。当前网页假设服务根目录是：

```text
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs
```

2. 直接双击 HTML。请用 `http://38.94.129.6:8768/...` 打开。
3. 主清单字段写错。主清单是 `objects`，不是 `cases`。
4. `find -maxdepth 2` 找不到 mesh。实际 mesh 在三层路径：`method_eval/<method>/<case>/mesh_raw.obj`。
5. TRELLIS.2 raw OBJ 面片很多，浏览器加载慢。可以先加载 TRELLIS 或 ReconViaGen 确认 viewer 正常。
6. GT mesh 是 `zip://...!...`，普通加载器无法直接读取。

## 最小自检

```bash
test -f /home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/benchmark_manifest_v0.json
test -d /home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/rendered_benchmark_v0/gso_000/input_2
test -d /home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/rendered_benchmark_v0/gso_000/eval_20
test -f /home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/method_eval/trellis2_protocol4_all100/gso_000_input4/mesh_raw.obj
```

确认清单数量：

```bash
python3 - <<'PY'
import json
from pathlib import Path
p = Path("/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/benchmark_manifest_v0.json")
data = json.loads(p.read_text(encoding="utf-8"))
print("objects =", len(data["objects"]))
PY
```

确认网页和 OBJ URL：

```bash
python3 - <<'PY'
import urllib.request
urls = [
    "http://38.94.129.6:8768/report/benchmark100_case_browser_zh.html",
    "http://38.94.129.6:8768/data_survey/method_eval/trellis2_protocol4_all100/gso_000_input4/mesh_raw.obj",
]
for url in urls:
    with urllib.request.urlopen(url, timeout=10) as resp:
        print(resp.status, resp.getheader("content-type"), url)
PY
```

## 可以直接发给另一个 Codex 的提示词

```text
请使用本机已有的 Benchmark100 多视角非正交 mesh 评估集。

中文快速入口：
http://38.94.129.6:8768/report/codex_benchmark100_quickstart_zh.html

主清单：
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/benchmark_manifest_v0.json

注意：主清单对象列表字段是 objects，不是 cases。每个对象有 2/4/6/8 四组非正交输入视角：
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/rendered_benchmark_v0/<benchmark_id>/input_<N>

每个对象有 20 个测试视角：
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/rendered_benchmark_v0/<benchmark_id>/eval_20

各方法 mesh 输出：
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/method_eval/<method_dir>/<benchmark_id>_input<N>/mesh_raw.obj

完整聚合指标：
/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/method_eval/benchmark100_full_matrix_aggregate.json

请先自检 objects 是否为 100；gso_000 的 input_2 是否有 2 张图、eval_20 是否有 20 张图；trellis2_protocol4_all100/gso_000_input4/mesh_raw.obj 是否存在。

如果 OBJ 或网页加载失败，先检查 HTTP 服务是否从 outputs 目录启动，再检查 OBJ URL 是否 200。注意 mesh 在三层路径 method_eval/<method>/<case>/mesh_raw.obj，不是 maxdepth=2 能搜到的。
```
