Downloads · 30 days
32
12% of all-time downloads
JiHyuk-Byun/3D-PAQA-evaluator
3D-PAQA-evaluator is a other model from JiHyuk-Byun. Use it for the other task on the model card, and read the license before you ship it in a product. It is set up for pytorch. The card lists the license as cc-by-4.0.
A lightweight preference-aligned 3D quality assessment model. Given a textured 3D mesh, it predicts six perceptual quality scores aligned with human preference:
Downloads · 30 days
32
12% of all-time downloads
All-time downloads
278
Public
Parameters
38.9M
466 MB on disk
Likes
1
Public
Click a slice to open those files.
.safetensors155 MB · 100%
From the Hugging Face model README
A lightweight preference-aligned 3D quality assessment model. Given a textured 3D mesh, it predicts six perceptual quality scores aligned with human preference:
geometry, texture, material, plausibility, artifact, preference
Each score is on roughly a 1–5 scale (higher = better). The model is trained on the 3D-PAQA dataset and predicts perceptual quality directly from point-cloud features, without rendering or MLLM inference at test time.
cls_mode, global-pooled regression head)[xyz(3), rgb(3), normal(3), metallic(1), roughness(1)], voxelized at grid_size=0.02v1.0)The training targets are not raw human ratings. They are preference-aligned annotations produced by an MLLM (Qwen2-VL-72B) using an exemplar-anchored relative- ranking scheme, where human preference is injected via 100 human-labeled anchor objects (see the dataset card for the full procedure). Alignment with people is measured against a held-out human user study (~12k human responses on an Objaverse subset). On that human benchmark the evaluator correlates strongly across all six criteria and exceeds its teacher MLLM on every criterion — i.e. the large but noisy MLLM supervision distills into a smaller, more stable predictor.
| file | description |
|---|---|
model.safetensors | bare PointTransformerV3 weights (fp32) |
config.json | architecture hyper-parameters + metadata |
inference_example.py | end-to-end glb → 6 scores example |
The model code (PointTransformerV3 + the 6-head regressor) lives in the training repo JiHyuk-Byun/3D-PAQA. Clone it and load these weights:
git clone --branch v1.0 https://github.com/JiHyuk-Byun/3D-PAQA # tag matching this checkpoint
# environment: torch 2.1 + cu118, spconv, flash-attn, torch-scatter/sparse/cluster
# (see 3D-PAQA/requirements.txt and the PointTransformerV3 environment notes)
pip install huggingface_hub safetensors trimesh
import json, torch, numpy as np
from safetensors.torch import load_file
from huggingface_hub import hf_hub_download
# 1. build the architecture (from the 3D-PAQA training repo)
from qt.models import PointTransformerV3
cfg = json.load(open(hf_hub_download("JiHyuk-Byun/3D-PAQA-evaluator", "config.json")))
model = PointTransformerV3(**cfg["model_args"]).cuda().eval()
# 2. load weights
sd = load_file(hf_hub_download("JiHyuk-Byun/3D-PAQA-evaluator", "model.safetensors"))
model.load_state_dict(sd, strict=True)
# 3. sample a mesh into the 11-ch point cloud (see inference_example.py / mesh2pc.py),
# build the batch with the ObjaverseDataset collate (grid_size=0.02), forward.
# scores = model(batch) # -> [1, 6] in the criteria order above
See inference_example.py for the full pipeline (mesh → point-cloud features →
voxelize → forward → 6 scores), including the exact preprocessing contract the model
was trained on.
Scores drift if preprocessing differs. Sample surface points and attach, per point:
coord (xyz), color (base-color RGB in [0,1], 255/white if untextured), normal,
metallic, roughness (1.0 if no material). Voxelize with grid_size=0.02, FNV hash.
The reference sampler is mesh2pc.py in the
dataset repo.
@misc{byun2026_3dpaqa,
title = {3D-PAQA: Towards Preference-Aligned 3D Quality Assessment},
author = {Byun, JiHyuk},
year = {2026},
note = {https://huggingface.co/JiHyuk-Byun/3D-PAQA-evaluator}
}