3Deditformer / scripts /edit3d_bench_refresh_metadata_status.py
zhaxie's picture
Upload 3DEditFormer source code
2274e38 verified
Raw
History Blame Contribute Delete
2.47 kB
#!/usr/bin/env python3
"""Refresh metadata.csv status columns for Edit3D-Bench TRELLIS preprocessing."""
import argparse
from pathlib import Path
import pandas as pd
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--output_dir", required=True)
parser.add_argument("--feat_model", default="dinov2_vitl14_reg")
parser.add_argument("--ss_latent_name", default="ss_enc_conv3d_16l8_fp16")
parser.add_argument("--latent_name", default="dinov2_vitl14_reg_slat_enc_swin8_B_64l8_fp16")
args = parser.parse_args()
output_dir = Path(args.output_dir)
metadata_path = output_dir / "metadata.csv"
df = pd.read_csv(metadata_path)
rendered = []
voxelized = []
num_voxels = []
feature_col = f"feature_{args.feat_model}"
ss_col = f"ss_latent_{args.ss_latent_name}"
latent_col = f"latent_{args.latent_name}"
feature_ok = []
ss_ok = []
latent_ok = []
for row in df.to_dict("records"):
sha = row["sha256"]
render_dir = output_dir / "renders" / sha
voxel_path = output_dir / "voxels" / f"{sha}.ply"
feature_path = output_dir / "features" / args.feat_model / f"{sha}.npz"
ss_path = output_dir / "ss_latents" / args.ss_latent_name / f"{sha}.npz"
latent_path = output_dir / "latents" / args.latent_name / f"{sha}.npz"
rendered.append((render_dir / "transforms.json").exists() and (render_dir / "mesh.ply").exists())
voxelized.append(voxel_path.exists())
feature_ok.append(feature_path.exists())
ss_ok.append(ss_path.exists())
latent_ok.append(latent_path.exists())
if voxel_path.exists():
try:
import utils3d
num_voxels.append(int(len(utils3d.io.read_ply(str(voxel_path))[0])))
except Exception:
num_voxels.append(0)
else:
num_voxels.append(0)
df["rendered"] = rendered
df["voxelized"] = voxelized
df["num_voxels"] = num_voxels
df[feature_col] = feature_ok
df[ss_col] = ss_ok
df[latent_col] = latent_ok
df.to_csv(metadata_path, index=False)
print(f"metadata: {metadata_path}")
print(f"rendered {sum(rendered)}/{len(df)}")
print(f"voxelized {sum(voxelized)}/{len(df)}")
print(f"{feature_col} {sum(feature_ok)}/{len(df)}")
print(f"{ss_col} {sum(ss_ok)}/{len(df)}")
print(f"{latent_col} {sum(latent_ok)}/{len(df)}")
if __name__ == "__main__":
main()