Pointcept/Utonia

[ICML'26] Official repository of Utonia: Toward One Encoder for All Point Clouds

📦 项目:Utonia – 适用于所有点云的一个编码器

TL;DR – Utonia 为 3D 点云任务提供跨领域、预训练的 Point Transformer V3 模型。它提供即用型权重(tiny、small、full)、推理代码和一系列可视化演示。该仓库可以作为快速入门环境安装,也可以作为 Python 包安装,以便将编码器嵌入到您自己的流程中。


🎯 它是什么?

  • 领域: 3D 点云表示学习(自监督预训练、下游推理)。
  • 核心思想: 一个单一的编码器 – Point Transformer V3 – 在多个 3D 数据集上训练,旨在无需针对特定任务进行微调即可在室内、室外和物体级点云上表现良好。
  • 输出: 分层点特征,可以可视化、馈送到下游头(例如,分割)或导出用于下游任务。

✨ 亮点(来自 README)

  • 预训练权重(tiny、small、full)托管在 Hugging Face 上(2026 年 10 月)。
  • 演示套件 重现了 Sonata 和 Concerto 论文中的可视化 – PCA、相似性热图、语义分割、批量转发、视频到点云演示。
  • 两种安装模式 – 独立 Conda 环境(包括 CUDA 12.4、PyTorch 2.5、FlashAttention)用于快速演示运行,以及包模式用于集成到其他代码库。
  • Docker 镜像 适用于 RTX 4090 级硬件(CUDA 12.8),由社区提供。

🛠️ 安装

1️⃣ 独立(快速演示)

conda env create -f environment.yml   # 创建包含 CUDA 12.4、PyTorch 2.5、FlashAttention 的 "utonia" 环境
conda activate utonia

(如果您已经安装了 CUDA,请先执行 unset CUDA_PATH。)

2️⃣ 包模式(嵌入到您的项目中)

# 先决条件:已安装匹配的 CUDA 和 PyTorch 版本
pip install spconv-cu${CUDA_VERSION}
pip install torch-scatter -f https://data.pyg.org/whl/torch-${TORCH_VERSION}+cu${CUDA_VERSION}.html
pip install git+https://github.com/Dao-AILab/flash-attention.git
pip install huggingface_hub timm
python setup.py install   # 可选 – 将 utonia 包复制到您的 site-packages 中

演示脚本的额外运行时依赖项:

pip install open3d fast_pytorch_kmeans psutil addict scipy camtools natsort opencv-python trimesh gradio numpy==1.26.4

(Open3D 目前需要 NumPy 1.x。)


🚀 快速入门(演示和推理)

可视化演示

export PYTHONPATH=./
python demo/0_pca_indoor.py            # 室内扫描的 PCA
python demo/1_similarity.py           # 相似性热图
python demo/2_sem_seg.py              # ScanNet 上的线性探针分割(仅完整编码器)
python demo/3_batch_forward.py         # 批量处理示例
python demo/4_pca_hk.py                # HK 数据集的 PCA
python demo/5_pca_manipulation.py     # 交互式操作演示
python demo/6_pca_object.py           # 物体级 PCA
python demo/7_pca_outdoor.py           # 室外场景 PCA

使用 --model utonia_small 或 --model utonia_tiny 切换编码器大小(大多数演示支持,ScanNet 头除外)。

视频到点云演示(需要 VGGT)

git clone https://github.com/facebookresearch/vggt.git && cd vggt && pip install -e . && cd ..
python demo/8_pca_video.py \
  --input_video YOUR_VIDEO.mp4 \
  --conf_thres 0 \
  --prediction_mode "Depthmap and Camera Branch" \
  --if_TSDF \
  --pca_start 1 \
  --pca_brightness 1.2

对您自己的数据进行推理

import utonia, torch, numpy as np

# 1️⃣ 准备一个符合预期模式的字典
point = {
    "coord": np.random.rand(10000, 3).astype(np.float32),   # XYZ
    "color": np.random.rand(10000, 3).astype(np.float32),   # RGB(可选)
    "normal": np.random.rand(10000, 3).astype(np.float32),  # 法线(可选)
}

# 2️⃣ 构建变换流程(与预训练模型使用的相同)
transform = utonia.transform.default(scale=1.0, apply_z_positive=True, normalize_coord=False)
point = transform(point)

# 3️⃣ 将张量移动到 GPU
for k, v in point.items():
    if isinstance(v, torch.Tensor):
        point[k] = v.cuda(non_blocking=True)

# 4️⃣ 加载编码器(full、small 或 tiny)
model = utonia.model.load("utonia", repo_id="Pointcept/Utonia").cuda()
# model = utonia.model.load("utonia_small").cuda()   # 替代方案

# 5️⃣ 前向传播 – 输出是分层点特征字典
out = model(point)

# 6️⃣ (可选)将分层特征折叠回原始点数
for _ in range(2):
    parent = out.pop("pooling_parent")
    inv = out.pop("pooling_inverse")
    parent.feat = torch.cat([parent.feat, out.feat[inv]], dim=-1)
    out = parent
while "pooling_parent" in out:
    parent = out.pop("pooling_parent")
    inv = out.pop("pooling_inverse")
    parent.feat = out.feat[inv]
    out = parent
feat_original = out.feat[out.inverse]   # (N, C) 与输入点云对齐

生成的 feat_original 可以馈送到下游头(例如,线性分类器)或使用提供的演示脚本进行可视化。


📄 许可证

  • 代码: Apache 2.0(继承自 Meta 的 Sonata 代码)。
  • 预训练权重: CC-BY-NC 4.0(仅限非商业用途,由于数据集限制,如 HM3D、ARKitScenes)。

📚 引用

如果您在研究中使用 Utonia,请引用 ICML 2026 论文:

@inproceedings{zhang2026utonia,
  title={Utonia: Toward One Encoder for All Point Clouds},
  author={Yujia Zhang and Xiaoyang Wu and Yunhan Yang and Xianzhe Fan and Han Li and Yuechen Zhang and Zehao Huang and Naiyan Wang and Hengshuang Zhao},
  booktitle={International Conference on Machine Learning (ICML)},
  year={2026}
}

底层 Point Transformer V3、Sonata、Concerto 和相关工作的其他参考资料列在 README 中以供参考。


底线: Utonia 为您提供即用型、高性能的 3D 点云编码器,带有预训练权重和一系列视觉演示,以及一个用于集成到自定义流程中的简洁 Python 包。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目