很久没有写过工程类/小工具类的blog了,本人一直觉得这样的 dirty work 没什么记录的必要。但是想到如果是要分享的话,还是有必要写清楚我写的(我 Prompt)的工具怎么最快地使用并完成任务。 ## Download 不知道为什么之前的教程没有人提到,官方给的那个脚本如果遇到 0kb 的文件会卡死,很逆天。导致不得不下载上海AI Lab的完整数据集。链接:https://opendatalab.com/OpenDataLab/ScanNet_v2. 下载完了以后得到的是若干个分开的压缩包,需要一起解压。下面给出数据集目录树: ``` . ├── metafile.yaml ├── raw │ ├── scannetv2-labels.combined.tsv │ ├── scans │ │ ├── scene0000_00 │ │ │ ├── scene0000_00_2d-instance-filt.zip │ │ │ ├── scene0000_00_2d-instance.zip │ │ │ ├── scene0000_00_2d-label-filt.zip │ │ │ ├── scene0000_00_2d-label.zip │ │ │ ├── scene0000_00.aggregation.json │ │ │ ├── scene0000_00.sens │ │ │ ├── scene0000_00.txt │ │ │ ├── scene0000_00_vh_clean_2.0.010000.segs.json │ │ │ ├── scene0000_00_vh_clean_2.labels.ply │ │ │ ├── scene0000_00_vh_clean_2.ply │ │ │ ├── scene0000_00_vh_clean.aggregation.json │ │ │ ├── scene0000_00_vh_clean.ply │ │ │ └── scene0000_00_vh_clean.segs.json │ │ ├── scene0000_01 │ │ │ ├── scene0000_01_2d-instance-filt.zip │ │ │ ├── scene0000_01_2d-instance.zip │ │ │ ├── scene0000_01_2d-label-filt.zip │ │ │ ├── scene0000_01_2d-label.zip │ │ │ ├── scene0000_01.aggregation.json │ │ │ ├── scene0000_01.sens │ │ │ ├── scene0000_01.txt │ │ │ ├── scene0000_01_vh_clean_2.0.010000.segs.json │ │ │ ├── scene0000_01_vh_clean_2.labels.ply │ │ │ ├── scene0000_01_vh_clean_2.ply │ │ │ ├── scene0000_01_vh_clean.aggregation.json │ │ │ ├── scene0000_01_vh_clean.ply │ │ │ └── scene0000_01_vh_clean.segs.json ... │ ├── scans_test │ │ ├── scene0707_00 │ │ │ ├── scene0707_00.sens │ │ │ ├── scene0707_00.txt │ │ │ ├── scene0707_00_vh_clean_2.ply │ │ │ └── scene0707_00_vh_clean.ply │ │ ├── scene0708_00 │ │ │ ├── scene0708_00.sens │ │ │ ├── scene0708_00.txt │ │ │ ├── scene0708_00_vh_clean_2.ply │ │ │ └── scene0708_00_vh_clean.ply ... │ ├── tasks │ │ ├── limited-annotation-points.zip │ │ ├── limited-bboxes.zip │ │ ├── limited-reconstruction-scenes.zip │ │ └── scannet_frames_test.zip │ └── tasks.tar ├── README.md ├── sample │ └── image │ ├── 0.png │ ├── 1012.png │ ├── 1019.png ... ``` ## Process 以 FastVGGT 为例,需要得到 `pose` 相关参数。这个时候需要再次处理。但是官方的脚本是用 Python2 写的,很逆天。好像网上也有处理环境的,我的评价是不如重新写一遍。 [ScanNet-Process-Python3](https://github.com/Powertony102/ScanNet-Process-Python3) 这个里面的 `README.md` 有详细的说明文档。简单来说,如果你的原始数据集文件放在了:`./ScanNet/OpenDataLab___ScanNet_v2` 中,你只需要把 `run_bash.sh` 的 source/target 路径调好就可以了。 之后会得到这样的结果: ``` ├── process_scannet (自定义的一个输出路径) │ ├── scene0000_00 │ │ ├── pose │ │ ├── depth │ │ ├── intrinsic │ │ ├── color ``` 这个时候就发现,跟你原始的(包含 .ply)会在两个不同的目录下。 ## For FastVGGT FastVGGT 就很有水平了。首先在 `eval/eval_scannet` 看到: ```python parser = argparse.ArgumentParser() parser.add_argument( "--data_dir", type=Path, default="/home/jovyan/shared/xinzeli/scannetv2/scene0000_00/" ) parser.add_argument( "--gt_ply_dir", type=Path, default="/home/jovyan/shared/xinzeli/scannetv2/OpenDataLab___ScanNet_v2/raw/scans", ) ``` 这里的 **`--gt_ply_dir`** 需要填写的是 **原始数据的路径**,也就是包含 `.ply` 的路径。**``--data_dir``** 需要填写的是 **经过脚本处理后的包含内参、位姿、深度、RGB图像的数据** **由于 FastVGGT** 说自己用的是 **用这个脚本自动抽选50张得到的 ScanNet-50** 。然后其抽选的应该是(在 `eval_utils.py` 中): ```python def get_all_scenes(data_dir: Path, num_scenes: int) -> List[str]: all_scenes = sorted([d.name for d in data_dir.iterdir() if d.is_dir()]) if len(all_scenes) > num_scenes: sample_interval = max(1, len(all_scenes) // num_scenes) return all_scenes[::sample_interval][:num_scenes] return all_scenes ``` 因此,抽取的方式应该一模一样的构造。 Loading... 很久没有写过工程类/小工具类的blog了,本人一直觉得这样的 dirty work 没什么记录的必要。但是想到如果是要分享的话,还是有必要写清楚我写的(我 Prompt)的工具怎么最快地使用并完成任务。 ## Download 不知道为什么之前的教程没有人提到,官方给的那个脚本如果遇到 0kb 的文件会卡死,很逆天。导致不得不下载上海AI Lab的完整数据集。链接:https://opendatalab.com/OpenDataLab/ScanNet_v2. 下载完了以后得到的是若干个分开的压缩包,需要一起解压。下面给出数据集目录树: ``` . ├── metafile.yaml ├── raw │ ├── scannetv2-labels.combined.tsv │ ├── scans │ │ ├── scene0000_00 │ │ │ ├── scene0000_00_2d-instance-filt.zip │ │ │ ├── scene0000_00_2d-instance.zip │ │ │ ├── scene0000_00_2d-label-filt.zip │ │ │ ├── scene0000_00_2d-label.zip │ │ │ ├── scene0000_00.aggregation.json │ │ │ ├── scene0000_00.sens │ │ │ ├── scene0000_00.txt │ │ │ ├── scene0000_00_vh_clean_2.0.010000.segs.json │ │ │ ├── scene0000_00_vh_clean_2.labels.ply │ │ │ ├── scene0000_00_vh_clean_2.ply │ │ │ ├── scene0000_00_vh_clean.aggregation.json │ │ │ ├── scene0000_00_vh_clean.ply │ │ │ └── scene0000_00_vh_clean.segs.json │ │ ├── scene0000_01 │ │ │ ├── scene0000_01_2d-instance-filt.zip │ │ │ ├── scene0000_01_2d-instance.zip │ │ │ ├── scene0000_01_2d-label-filt.zip │ │ │ ├── scene0000_01_2d-label.zip │ │ │ ├── scene0000_01.aggregation.json │ │ │ ├── scene0000_01.sens │ │ │ ├── scene0000_01.txt │ │ │ ├── scene0000_01_vh_clean_2.0.010000.segs.json │ │ │ ├── scene0000_01_vh_clean_2.labels.ply │ │ │ ├── scene0000_01_vh_clean_2.ply │ │ │ ├── scene0000_01_vh_clean.aggregation.json │ │ │ ├── scene0000_01_vh_clean.ply │ │ │ └── scene0000_01_vh_clean.segs.json ... │ ├── scans_test │ │ ├── scene0707_00 │ │ │ ├── scene0707_00.sens │ │ │ ├── scene0707_00.txt │ │ │ ├── scene0707_00_vh_clean_2.ply │ │ │ └── scene0707_00_vh_clean.ply │ │ ├── scene0708_00 │ │ │ ├── scene0708_00.sens │ │ │ ├── scene0708_00.txt │ │ │ ├── scene0708_00_vh_clean_2.ply │ │ │ └── scene0708_00_vh_clean.ply ... │ ├── tasks │ │ ├── limited-annotation-points.zip │ │ ├── limited-bboxes.zip │ │ ├── limited-reconstruction-scenes.zip │ │ └── scannet_frames_test.zip │ └── tasks.tar ├── README.md ├── sample │ └── image │ ├── 0.png │ ├── 1012.png │ ├── 1019.png ... ``` ## Process 以 FastVGGT 为例,需要得到 `pose` 相关参数。这个时候需要再次处理。但是官方的脚本是用 Python2 写的,很逆天。好像网上也有处理环境的,我的评价是不如重新写一遍。 [ScanNet-Process-Python3](https://github.com/Powertony102/ScanNet-Process-Python3) 这个里面的 `README.md` 有详细的说明文档。简单来说,如果你的原始数据集文件放在了:`./ScanNet/OpenDataLab___ScanNet_v2` 中,你只需要把 `run_bash.sh` 的 source/target 路径调好就可以了。 之后会得到这样的结果: ``` ├── process_scannet (自定义的一个输出路径) │ ├── scene0000_00 │ │ ├── pose │ │ ├── depth │ │ ├── intrinsic │ │ ├── color ``` 这个时候就发现,跟你原始的(包含 .ply)会在两个不同的目录下。 ## For FastVGGT FastVGGT 就很有水平了。首先在 `eval/eval_scannet` 看到: ```python parser = argparse.ArgumentParser() parser.add_argument( "--data_dir", type=Path, default="/home/jovyan/shared/xinzeli/scannetv2/scene0000_00/" ) parser.add_argument( "--gt_ply_dir", type=Path, default="/home/jovyan/shared/xinzeli/scannetv2/OpenDataLab___ScanNet_v2/raw/scans", ) ``` 这里的 **`--gt_ply_dir`** 需要填写的是 **原始数据的路径**,也就是包含 `.ply` 的路径。**``--data_dir``** 需要填写的是 **经过脚本处理后的包含内参、位姿、深度、RGB图像的数据** **由于 FastVGGT** 说自己用的是 **用这个脚本自动抽选50张得到的 ScanNet-50** 。然后其抽选的应该是(在 `eval_utils.py` 中): ```python def get_all_scenes(data_dir: Path, num_scenes: int) -> List[str]: all_scenes = sorted([d.name for d in data_dir.iterdir() if d.is_dir()]) if len(all_scenes) > num_scenes: sample_interval = max(1, len(all_scenes) // num_scenes) return all_scenes[::sample_interval][:num_scenes] return all_scenes ``` 因此,抽取的方式应该一模一样的构造。 最后修改:2025 年 09 月 13 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏