Nerfstudio 集成指南:Feature Splatting——基于 3DGS 的开放词汇分割与场景编辑方法
【免费下载链接】nerfstudioA collaboration friendly studio for NeRFs项目地址: https://gitcode.com/GitHub_Trending/ne/nerfstudio
Feature Splatting 是一种将 CLIP 视觉语言特征蒸馏进 3D 高斯泼溅(3DGS)表示的方法,使三维场景具备开放词汇的 2D/3D 分割能力,并能直接操纵高斯实现场景编辑。在 Nerfstudio 中,它作为一个外部方法(external method)注册,安装后即可通过ns-train feature-splatting一行命令启动训练。读完本文,你将掌握该方法的安装与运行方式、其与 LERF 等方法在参考特征计算上的本质差异、底层 3DGS 主干的工作原理,以及支持哪些刚体/非刚体编辑原语。
方法概览:把语言特征"泼"进三维高斯
Feature Splatting 的核心思想是将 CLIP 特征蒸馏进 3D 高斯泼溅(3DGS)表示,从而同时获得开放词汇的 2D 分割与 3D 分割能力。与体积渲染(volume rendering)不同,该方法采用视图无关(view-independent)的光栅化方式将特征与高斯绑定:每个高斯不仅携带颜色(球谐系数)与不透明度,还携带蒸馏得到的语义特征;渲染时这些特征被"泼溅"到 2D 图像上,因此可以在三维空间中直接对高斯进行语义查询与分割,而无需依赖区域提议(region proposals)或掩码。
从源码结构看,Feature Splatting 的底层主干正是 Nerfstudio 自带的 3DGS 实现 Splatfacto(见 splatfacto.py)。Splatfacto 将辐射场表示为一组显式的三维体积高斯,通过 GPU 光栅化快速得到逐像素颜色(相关背景可参考 splat.md 文档)。Feature Splatting 在此显式表示之上附加一路语义特征通道,并利用高斯的显式可操作性(显式存储位置、旋转、尺度、不透明度)实现编辑。
与之对比,先前的 LERF(lerf.md)是在 NeRF 体积内蒸馏多尺度 CLIP 向量,查询需要经过体积渲染管线;Feature Splatting 则直接在三维高斯上进行特征存储与查询,分割与编辑都更为直接、快速。
参考特征计算与联合监督
SAM 增强的 CLIP 特征
粗糙的 CLIP 特征(例如 LERF 中所用)在物体边界处往往不准确。Feature Splatting 的做法是计算高质量的 SAM 增强 CLIP 特征作为参考特征:对 CLIP 特征执行物体级别的掩码平均池化(object-level masked average pooling),以细化物体的边界。
原始 ECCV'24 论文(Qiu et al.)使用 SAM 生成部件级掩码,而本仓库集成的实现出于实时性考虑改用MobileSAMv2,参考特征计算速度显著更快,但精度略有下降——这一取舍旨在鼓励需要实时性能的下游应用。
此外,与论文版本的另一处差异是:本实现中CLIP 特征仅在图像级别(image-level)计算,并未做像素级(patch-level)特征提取。这两点差异意味着本实现的参考特征与论文版本并不完全一致(详见下文"与论文版本的差异")。
DINOv2 联合监督
在 SAM 增强的 CLIP 特征之外,该实现还引入DINOv2 特征作为联合监督信号。已有研究表明 DINO 类自监督特征有助于规整物体的内部结构,Feature Splatting 采用 DINOv2(ViT-S/14)同样是为了规整物体内部结构、改善分割质量。
安装
Feature Splatting 以独立 pip 包的形式发布,需要先完成 Nerfstudio 本体及其依赖的安装,然后执行:
pip install git+https://github.com/vuer-ai/feature-splatting安装完成后,feature-splatting方法即可被ns-train命令发现。
运行与配置变体
安装完成后,可直接查看该方法的全部可配置参数:
ns-train feature-splatting --help当前仓库集成的变体如下:
| 方法 | 描述 | 显存占用 | 质量 |
|---|---|---|---|
feature-splatting | 基于 MaskCLIP ViT-L/14@336px 与 MobileSAMv2 的 Feature Splatting | ~8 GB | 良好 |
关于训练数据,与所有高斯泼溅方法一致,Feature Splatting 在全尺寸图像上训练而非光线束(ray bundle),因此数据管线复用 Nerfstudio 中为高斯泼溅设计的全图像数据管理器(full_images_datamanager.py)。该数据管理器会对输入图像进行去畸变、缓存,并在每个训练步提供单张完整图像;若使用 COLMAP 或ns-process-data处理的数据集,还会自动加载 SfM 三维点用于高斯初始化,显著提升重建质量。
底层主干的可调参数(Splatfacto 配置)
尽管 Feature Splatting 的方法级参数由其外部包提供,其底层的 3DGS 主干参数与 Nerfstudio 内置的 Splatfacto 共享同一套配置体系(见 splatfacto.py),常用的有:
warmup_length(默认 500):关闭细化(refine)的初始步数;refine_every(默认 100):每隔多少步对高斯执行剔除(cull)与稠密化(densify);cull_alpha_thresh(默认 0.1):剔除半透明高斯的透明度阈值,调低(如 0.005)可获得更高质量;densify_grad_thresh(默认 0.0008):触发高斯稠密化的位置梯度范数阈值;sh_degree(默认 3):球谐最高阶数,控制颜色表示的精细度;background_color(默认random):训练时背景色的随机化策略;rasterize_mode(默认classic):classic使用 EWA 体积泼溅加 [0.3, 0.3] 屏幕空间模糊核,antialiased模式则在分辨率变化时更稳健。
在渲染路径上,get_outputs(splatfacto.py)会依次完成相机位姿优化、包围盒裁剪、球谐颜色组合与 gsplat 光栅化调用,其中高斯的位置(means)、旋转四元数(quats)、尺度(scales,经指数映射)、不透明度(opacities,经 sigmoid)与颜色(features_dc/features_rest,球谐系数)被直接送入光栅化器——Feature Splatting 的语义特征正是沿这一渲染管线并行蒸馏的。
在 Nerfstudio 中的注册机制
Feature Splatting 并未内置在 Nerfstudio 源码中,而是通过外部方法(External Method)机制注册。在 external_methods.py 中可以看到它的注册条目:slug 为feature-splatting,描述为"Feature Splatting with MaskCLIP ViT-L/14@336px, DINOv2 ViT-S/14, and MobileSAMv2",并绑定了对应的 pip 安装包。
其工作流程如下:
- 启动时,method_configs.py 调用
discover_methods()扫描已安装的外部插件,并调用get_external_methods()注册所有未安装的外部方法; - 未安装的外部方法会以
ExternalMethodDummyTrainerConfig(external_methods.py)占位,出现在ns-train --help列表中并标注[External, run 'ns-train feature-splatting' to install]; - 用户直接运行
ns-train feature-splatting时,控制台会打印安装指引,并交互式询问是否立即执行pip install,确认后自动安装并退出; - 安装完成后再次运行,即进入正常的训练流程。
因此在实践中有两种等效的启动方式:先手动pip install再训练,或直接ns-train feature-splatting并在交互提示中确认安装。这一机制同样适用于 LERF、Instruct-NeRF2NeRF、K-Planes、Zip-NeRF 等其它外部方法。
场景编辑:直接操纵高斯
得益于 3DGS 的显式表示,分组后的高斯可以被直接操纵,从而支持简单直观的编辑应用。原始 ECCV'24 论文提出了一系列编辑原语;为避免引入过多依赖或实现层面的 hack,本实现有选择地支持其中一部分:
刚体(Rigid)操作
- 地面估计(Floor estimation):为直观的旋转与重力方向估计提供基准;
- 平移(Translation):移动被分割的物体;
- 透明化(Transparent):高亮被分割物体,并将背景高斯设为透明;
- 旋转(Rotation):仅支持绕估计地面的偏航角(yaw)旋转。
非刚体(Non-rigid)操作
- 沙状熔化(Sand-like melting):基于 Taichi MPM(物质点法)的物理模拟编辑。
这些编辑操作的对象是被分割出来的高斯分组,与前述开放词汇分割能力天然衔接:先用语言查询分割出物体,再对其施加刚体或非刚体变换,从而实现"语言驱动"的编辑流程——这也是论文标题"Language-Driven Physics-Based Scene Synthesis and Editing"的由来。
与论文版本的差异
需要注意,本实现使用的参考特征与 ECCV'24 论文版本有两处不同:
- SAM 增强的 CLIP 特征改用 MobileSAMv2 计算:比原始 SAM 快得多,但精度略低;
- CLIP 特征仅在图像级别计算:未采用论文中的部件级(part-level)掩码与更细粒度的特征提取。
因此,在引用对比实验或复现论文数据时,应以论文原始实现为准;本实现的定位是提供更快、更适合实时下游应用的参考实现。
引用
如果你认为该工作对研究有帮助,请引用:
@inproceedings{qiu-2024-featuresplatting, title={Language-Driven Physics-Based Scene Synthesis and Editing via Feature Splatting}, author={Ri-Zhao Qiu and Ge Yang and Weijia Zeng and Xiaolong Wang}, booktitle={European Conference on Computer Vision (ECCV)}, year={2024} }相关阅读
- LERF:语言嵌入辐射场——Feature Splatting 对比的基线方法,同样将 CLIP 特征引入三维表示;
- Splatfacto:Nerfstudio 的高斯泼溅实现——本方法的 3DGS 底层主干,涵盖数据要求、导出与 FAQ;
- 方法总览——Nerfstudio 全部内置与外部方法的索引,以及如何为仓库贡献新方法文档;
- 外部方法注册源码与方法配置聚合源码——理解
feature-splatting等外部方法如何接入ns-train命令行。
【免费下载链接】nerfstudioA collaboration friendly studio for NeRFs项目地址: https://gitcode.com/GitHub_Trending/ne/nerfstudio
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考