ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

基于Per-View Gaussian Predictions的3DGS干扰物过滤方法解析

基于Per-View Gaussian Predictions的3DGS干扰物过滤方法解析 早期拿到一批多视角图像时最让人头疼的不是重建本身而是画面里那些“不该出现”的东西路人、车辆、飘动的旗帜、光影里晃动的树叶。这些东西在单张照片里无伤大雅但在 3D Gaussian Splatting3DGS重建流程里会直接污染场景表示让渲染结果出现拖影、浮动噪点和所谓的“鬼影”。本文要聊的就是一种名为 Per-View Gaussian Predictions 的思路它试图在不重新训练、不依赖人工标注 mask 的前提下解决 3DGS 新视角合成中的 Distractor Filtering干扰物过滤问题。如果你已经接触过 3DGS但对“干扰物如何影响重建”“为什么免训练方案有吸引力”“逐视角高斯基元预测到底在预测什么”这些问题还比较模糊那这篇文章会比较适合你。我会先补充 3DGS 的背景知识再拆解干扰物问题的本质然后给出 Per-View Gaussian Predictions 这类方案的设计思路、训练与推理流程、评估方式以及工程落地时需要注意的细节。1. 背景与核心概念1.1 3DGS 是什么3D Gaussian Splatting中文常译为“三维高斯泼溅”是近年来在神经渲染领域非常受关注的一种场景表示方法。与 NeRF神经辐射场把场景隐式编码进 MLP 权重不同3DGS 把场景显式表示为一组三维空间中的高斯分布每个高斯基元携带位置、形状、颜色和不透明度等信息。渲染时这些高斯基元被投影到图像平面再按照深度从近到远进行排序和混合最终生成一张完整的图像。相比 NeRF3DGS 的显著优势在于渲染速度快能够达到实时帧率训练时间明显缩短通常几十分钟到一两小时即可完成一个场景显式表示便于编辑、裁剪和后期处理可以借助 GPU 的硬件混合能力提升光栅化效率。正因为这些特性3DGS 在三维重建、SLAM、自动驾驶仿真、数字人、影视特效等领域都得到了大量关注。不过它也不是没有短板其中“对动态干扰物敏感”就是一个非常现实的工程问题。1.2 什么是 DistractorDistractor 翻译过来是“干扰物”在 3D 重建语境下指的是场景中出现但并不是我们希望重建的物体。常见类型包括类型示例影响动态物体行人、车辆、宠物多视角下位置不一致导致重建出现拖影临时物体施工围挡、停靠车辆在部分视角存在重建时污染背景光影变化移动阴影、水面反光颜色不一致优化时难以收敛传感器伪影镜头光晕、运动模糊产生异常梯度影响高斯基元分布在拍摄多视角图像时这些干扰物往往只出现在部分视角中。例如30 张照片里只有 5 张拍到路人。理想情况下重建算法应该忽略这 5 张中的路人只利用干净信息。但 3DGS 的优化目标是让所有视角的重建损失最小化于是它会在“把所有视角都尽量拟合好”的压力下把路人的信息也编码进场景表示最终在渲染时产生“半透明的人影”或“漂浮的碎片”。1.3 Training-Free 意味着什么所谓 Training-Free中文可以叫“免训练”或“无需额外训练”。在 Distractor Filtering 这个任务里它有两层含义不需要针对每个新场景重新训练一个去噪或分割网络不需要像部分 NeRF 修复方案那样在优化场景时反复迭代一个 mask 或权重场。传统的做法通常是在 NeRF/3DGS 优化过程中同时学习一个 Mask或者先跑一遍语义分割模型把干扰物区域手动剔除。但这些方案都有明显的附加成本要么需要额外的训练时间要么依赖预训练分割模型的泛化能力要么在动态场景中因为 mask 不稳定而失效。Per-View Gaussian Predictions 所代表的思路是如果我能在“每个视角”层面先预测出哪些高斯基元属于干扰物而不是反复地通过全场景优化来猜那么过滤过程会更快甚至可以直接迁移到没有训练过的新场景。这就是“Training-Free”在效率上的核心价值。2. 3DGS 原理速通要理解 Per-View Gaussian Predictions必须先把 3DGS 的基本流程说清楚。这里我们跳过复杂的数学推导聚焦在理解和实验最相关的几部分。2.1 场景表示的三个核心元素3DGS 场景是一个高斯基元集合。每一个基元本质上是一个三维高斯分布表达为位置Mean三维坐标表示该高斯在空间中的中心位置协方差矩阵Covariance表示该高斯的形状、朝向和尺度不透明度Opacity表示该高斯对光线的遮挡程度球谐系数Spherical Harmonics用于表达视角相关的颜色。初始时这些高斯基元可以通过 SfMStructure from Motion生成的点云来初始化也可以从随机位置开始优化。优化的核心是让渲染出的图像与真实拍摄图像尽可能接近。2.2 渲染流程投影、排序、混合3DGS 渲染一个像素的流程可以拆成三个步骤投影把三维高斯基元投影到二维图像平面。这一步会计算每个高斯基元在图像上的椭圆形状和覆盖范围。排序把覆盖当前像素的所有高斯基元按照深度从近到远排序。这个顺序决定了后续混合的先后关系。项目里常说的“远→近绘制”或“近→远排序”指的都是这一步。混合Alpha Blending从最近的高斯开始按照不透明度做加权混合。每个高斯基元对像素颜色的贡献不仅取决于自身颜色还取决于前面遮挡物的不透明度。渲染公式简化表达 C Σ_i (T_i * α_i * c_i) 其中 C 表示最终像素颜色 i 表示按深度排序后的高斯基元索引 α_i 表示第 i 个高斯基元的不透明度 c_i 表示第 i 个高斯基元的视角相关颜色 T_i 表示前 i-1 个高斯基元的累积透射率即该基元能“透过”多少光。在工程实现中这一步可以借助 GPU 的硬件混合单元来加速。不同于传统光栅化中每个片段只能有一个颜色3DGS 需要对同一像素的多个高斯进行“透明混合”所以 3DGS 的渲染管线会针对排序和混合做大量优化。2.3 优化目标与关键参数3DGS 的训练过程是一个典型的可微渲染优化。目标是让渲染图像与真实图像之间的差异尽可能小。常用损失函数包括L1 颜色损失衡量像素颜色差异SSIM 损失衡量结构相似性可选的感知损失进一步提升视觉质量。优化过程会不断调整高斯基元的位置、协方差、不透明度、颜色等参数还会动态进行“分裂”和“克隆”操作当一个高斯覆盖范围过大时就把它分裂成多个小的当一个高斯信息量不足时就把它克隆或移动。这套机制使得 3DGS 能够逐渐适应当前场景的几何和外观细节。2.4 迭代参数与渲染质量的关系在实际操作中3DGS 的迭代步数、学习率、高斯数量上限都会明显影响渲染质量。常见经验是迭代次数太少高斯还没来得及分裂重建会比较粗糙学习率过高高斯基元位置震荡场景容易出现漂浮物高斯数量上限设置过低复杂几何难以表达不透明度初始化不合理会导致部分高斯被过早剪枝。这些参数本身不是本文重点但在后续讨论“干扰物为什么会破坏优化过程”时它们是重要的背景。3. Distractor Filtering 的常见思路与痛点在 3DGS 里做 Distractor Filtering核心目标只有一个让干扰物不影响场景表示。但这个目标实现起来并不容易。3.1 传统方案语义分割 剔除最直观的思路是先用语义分割模型如 Mask R-CNN、SAM识别出图像中的人、车等干扰物生成二值 mask然后在训练 3DGS 时忽略 mask 区域的像素损失。改进后的损失函数 Loss Σ 不被 mask 遮挡的像素 * (渲染颜色 - 真实颜色)^2这个方案的问题也很明显如果某张照片中干扰物占据面积太大剩余有效像素太少重建质量会明显下降mask 边界不准确时会把背景细节一并抹掉语义分割模型不认识的新物体无法被过滤在不同场景中分割模型的泛化效果不稳定。3.2 更进阶的方案在优化中学习 MaskNeRF 时代有大量工作尝试在优化场景的同时学习一个动态 mask 场或权重场。这类方法会在损失函数中加入一个可学习的 mask 项让网络自己判断哪些区域是“不可靠”的从而降低它们的影响。这类方法比“先分割后剔除”更灵活但代价是需要额外训练参数训练时间变长在出现大面积遮挡时mask 可能收敛到局部最优无法泛化到新场景换一个场景就要重新训练。3.3 为什么我们需要 Training-Free在真实工程场景中我们往往希望用一个已经训练好的模型或一段固定的流程来处理不同场景而不是每换一组数据就重新训练一个遮罩网络。这就引出了 Per-View Gaussian Predictions 这类方案的定位。它希望做到在没有针对新场景做额外训练的情况下直接预测哪些高斯基元属于干扰物利用逐视角预测来替代全场景优化中的 mask 猜测保持 3DGS 的核心渲染流程不变只增加一个前置或并行的过滤模块。“Training-Free”并不等于“完全没有训练”。它指的是训练过程集中在某个通用模块上这个模块训练完成后应用在新场景时不需要再训练。换句话说训练开销被前置到“构建预测器”阶段场景重建阶段则保持轻量、快速。4. Per-View Gaussian Predictions 方法拆解4.1 核心思想Per-View Gaussian Predictions 的核心思想可以概括为在单个视角图像/特征的基础上直接预测出该视角下高斯基元的属性或置信度并用这些置信度来过滤干扰物。传统 3DGS 优化是在多视角约束下不断调整全局高斯基元。而 Per-View 预测则试图从“每个视图所见”出发判断哪些信息是稳定可信的。如果某个高斯基元只在少数视角被预测为可信那么它很可能来自干扰物应该在渲染时被抑制。这个思路和“多视角一致性”紧密相关。真实场景中的静态结构会在多个视角下保持一致的外观和位置而干扰物往往只在少数视角中可见。于是通过对比不同视角的预测结果就能发现哪些基元是“孤立”的从而完成过滤。4.2 技术流程概览整个流程可以分成训练与推理两个阶段训练阶段 1. 收集多组多视角图像序列 2. 对每个视角提取视觉特征 3. 以视角特征为输入预测该视角下的高斯基元分布 4. 用多视角一致性约束训练预测器。 推理阶段 1. 输入新场景的多视角图像 2. 对每个视角运行预测器得到逐视角的高斯基元预测 3. 将所有视角的预测结果融合或比较 4. 标记出只在少数视角出现的高斯基元为干扰物 5. 在渲染时剔除或降低这些基元的不透明度。这里的关键是第 4 步的“多视角一致性约束”。因为单独一个视角无法判断某样东西是静态结构还是干扰物只有把多个视角放在一起看才能识别出“不一致”的部分。4.3 关键设计点4.3.1 预测什么Per-View Gaussian Predictions 中“预测”的对象可以有多种形式具体取决于论文设计预测每个高斯基元是否属于静态场景预测每个高斯基元的置信度权重预测每个像素对应的高斯属性再投影到三维空间预测每个视角中的动态区域 mask再结合高斯渲染结果过滤。无论哪种形式最终目标都是给每个高斯基元一个“可信度”标签。4.3.2 如何处理多视角信息一个常见的做法是把多视角特征投影到共享的三维空间然后判断每个三维位置上的特征一致性。如果不同视角投影到同一位置的特征差异很大说明该位置处于一个“不一致”的区域很可能就是干扰物所在。另一种做法是直接在逐视角预测的置信图上做融合。比如融合策略 - 统计某个高斯基元在哪些视角中被预测为“静态” - 如果“静态视角数 / 总可见视角数”低于阈值则判定为干扰物 - 阈值可以通过验证集确定也可以按场景动态调整。4.3.3 训练目标如果采用监督训练需要构造带有干扰物标注的数据集。例如先拍摄一组干净场景再在部分视角中合成或真实加入行人、车辆训练预测器识别哪些部分在视角间不一致。如果采用自监督训练则可以利用 3DGS 重建过程中的渲染与真实图像差异来构造伪标签。渲染差异大的区域有可能是干扰物也有可能是重建失败需要结合多视角一致性来判断。4.4 为什么“免训练”能成立关键原因在于预测器学到的是“视角间一致性”这个通用规律而不是“行人长什么样”这种特定语义。一旦模型学会通过多视角一致性来判断干扰物那么即使新场景出现了一个从未见过的物体只要它在部分视角中出现、在其它视角中缺失模型就有机会识别它。这比依赖语义分割的方法泛化范围更广也比每场景训练一个 mask 网络的方法更高效。5. 思路实现与实验验证由于 Per-View Gaussian Predictions 是一个相对前沿的研究方向公开的统一代码库不像 3DGS 本身那么成熟因此本节给出的是一个“可复现的思路原型”如何把核心思想落地成一个可运行的 PyTorch 流程。你可以根据你拿到的具体论文或开源实现来替换其中的模块。5.1 环境准备建议使用以下环境Python 3.8 或更高版本PyTorch 1.10 或更高版本CUDA 11.x 或更高版本3DGS 官方代码或 gsplat、diff-gaussian-rasterization 这类可微渲染库可选OpenCV、tqdm、tensorboard。如果你之前已经跑通过 3DGS 的官方仓库那么环境基本是现成的。需要注意的坑是不同 3DGS 实现版本之间高斯基元的参数存储方式和渲染接口可能不同。示例中我尽量以通用的 PyTorch 风格来表达。5.2 构建逐视角预测器的训练数据为了让预测器学到“多视角一致性”我们需要构造这样的训练样本一个样本包含 - 同一个静态场景的多个视角图像 - 其中一部分视角被注入了干扰物或者直接拍摄有行人的真实数据 - 需要给出每个视角的“干扰物 mask”作为监督信号。如果没有现成标注可以采用“合成 真实混合”的策略先拍摄一组干净场景图像随机从另一个数据集中截取行人/车辆区域将干扰物粘贴到随机视角的随机位置记录粘贴区域作为 mask。# 文件路径data_preprocess.py # 说明将干扰物粘贴到部分视角生成训练数据。 import cv2 import numpy as np import random def paste_distractor(clean_image, distractor_image, mask): # 随机选择一个粘贴位置 h, w, _ clean_image.shape dh, dw, _ distractor_image.shape x random.randint(0, max(0, w - dw)) y random.randint(0, max(0, h - dh)) # 根据 mask 将干扰物融合到干净图像 roi clean_image[y:ydh, x:xdw] mask_3ch cv2.merge([mask, mask, mask]) / 255.0 merged roi * (1 - mask_3ch) distractor_image * mask_3ch clean_image[y:ydh, x:xdw] merged # 生成该视角的干扰物 mask image_mask np.zeros((h, w), dtypenp.uint8) image_mask[y:ydh, x:xdw] mask return clean_image, image_mask这段代码的核心作用是用“剪切粘贴”的方式快速制造带标注的训练数据。虽然真实场景中干扰物的光影、遮挡关系更复杂但作为预训练数据生成器是足够的。5.3 预测器模型设计预测器的输入可以是一张图像也可以是一组经过 SfM 对齐后的视角特征。为了简单起见这里用一个基于卷积网络的 U-Net 结构来预测逐像素的“静态场景置信度”。# 文件路径model.py # 说明定义一个简单的逐视角预测器。 import torch import torch.nn as nn class SimplePredictor(nn.Module): def __init__(self): super(SimplePredictor, self).__init__() # 编码器逐步下采样 self.enc1 self._block(3, 32) self.enc2 self._block(32, 64) self.enc3 self._block(64, 128) # 解码器逐步上采样 self.up1 self._up(128, 64) self.up2 self._up(64, 32) self.up3 self._up(32, 16) self.out nn.Conv2d(16, 1, kernel_size1) def _block(self, in_ch, out_ch): return nn.Sequential( nn.Conv2d(in_ch, out_ch, 3, padding1), nn.ReLU(inplaceTrue), nn.Conv2d(out_ch, out_ch, 3, padding1), nn.ReLU(inplaceTrue), nn.MaxPool2d(2), ) def _up(self, in_ch, out_ch): return nn.Sequential( nn.ConvTranspose2d(in_ch, out_ch, 4, stride2, padding1), nn.ReLU(inplaceTrue), ) def forward(self, x): x1 self.enc1(x) x2 self.enc2(x1) x3 self.enc3(x2) x self.up1(x3) x self.up2(x) x self.up3(x) x self.out(x) return torch.sigmoid(x)这里的输出是一个与输入图像同分辨率的概率图每个像素的值表示该位置属于静态场景的可信度。值越接近 1说明该像素越可能是静态结构。5.4 训练预测器训练时输入是带有干扰物的视角图像监督信号是干扰物 mask。损失函数可以使用二值交叉熵。# 文件路径train_predictor.py # 说明训练逐视角预测器的核心循环。 import torch import torch.nn as nn from torch.utils.data import DataLoader def train_one_epoch(model, dataloader, optimizer, device): model.train() criterion nn.BCELoss() total_loss 0.0 for batch in dataloader: # batch[image] 是带干扰物的图像 # batch[mask] 是干扰物为 0、静态场景为 1 的 mask image batch[image].to(device) mask batch[mask].to(device) pred model(image) loss criterion(pred, mask) optimizer.zero_grad() loss.backward() optimizer.step() total_loss loss.item() return total_loss / len(dataloader)这里可以注意到一个细节我们的预测器本质上是在学习“区分本视角中哪些部分是静态场景”。单看一个视角它很难判断一个行人是不是干扰物但因为有数据构造阶段“把行人物体粘贴到随机位置”这一操作模型会学习到这些干扰物的外观通常与周边环境不一致并且边界比较清晰。真正的多视角一致性判断是在推理阶段的融合环节完成的。5.5 推理阶段过滤干扰物在推理阶段先把每个视角输入预测器得到“静态置信图”。然后把这个置信图与 3DGS 的渲染过程结合起来。一个简单实现思路是先对场景执行正常的 3DGS 优化渲染每个训练视角的图像对每个视角的渲染结果计算遮挡关系找出每个像素对应的主要高斯基元结合预测器的置信图把置信度低的像素对应的高斯基元标记为候选干扰物统计候选干扰物在多少视角中被标记如果某个高斯基元在大多数可见视角中都被标记为低置信则直接在三维空间中删除它。# 文件路径filter_gaussians.py # 说明根据逐视角置信图过滤高斯基元。 import numpy as np def filter_gaussians_by_confidence(gaussians, per_view_confidence, visibility, threshold0.5): gaussians: 高斯基元列表 per_view_confidence: list每个元素是某视角下的置信图预测 visibility: list每个元素是该视角可见的高斯基元索引集合 vote {} count {} for view_idx, conf_map in enumerate(per_view_confidence): visible_ids visibility[view_idx] for gid in visible_ids: # 这里需要将置信图上的值聚合到高斯基元上 # 例如取该高斯基元在图像上投影区域的置信度均值 conf aggregate_confidence(gid, conf_map) vote[gid] vote.get(gid, 0) (1 if conf threshold else 0) count[gid] count.get(gid, 0) 1 # 判断干扰物低置信投票比例过高 distractor_ids [] for gid in count: low_conf_ratio vote.get(gid, 0) / count[gid] if low_conf_ratio 0.6: distractor_ids.append(gid) return distractor_ids需要注意这里aggregate_confidence函数需要结合 3DGS 的可微渲染实现。更严谨的做法是在渲染阶段把每个高斯基元的权重和置信度相乘而不是先渲染完再做后处理。5.6 评估指标评估 Distractor Filtering 效果时可以从两个维度衡量5.6.1 渲染质量PSNR峰值信噪比越高表示与原图越接近SSIM结构相似性越高表示结构保持越好LPIPS感知相似度越低表示感知上越像。在过滤掉干扰物后重新渲染训练视角PSNR 和 SSIM 应该比不过滤时更高尤其在包含干扰物的视角上。5.6.2 过滤准确性Precision识别为干扰物的高斯基元中真正属于干扰物的比例Recall真正的干扰物高斯基元中被成功识别的比例IoU预测干扰物 mask 与真实 mask 的交并比。为了计算这些指标需要有一个“真值场景”。通常的做法是先拍摄一组完全没有干扰物的干净场景再拍摄一组带干扰物的场景用干净场景重建的高斯基元作为 ground truth 参考。6. 常见问题与排查思路在实际复现或应用这类方法时会遇到一些比较典型的问题这里单独列出来。问题现象常见原因解决思路预测器在真实场景中效果差训练数据只有合成粘贴分布不一致增加真实拍摄的干扰物数据使用域随机化增强过滤后静态场景也被删掉置信阈值设置过严降低阈值或在融合步骤中增加平滑行人附近背景出现空洞干扰物遮挡了太多背景置信图把背景也标成低置信对置信图做边界腐蚀或使用更精细的基元级过滤多个视角预测结果不一致预测器对光照、遮挡敏感在训练时加入多视角一致性损失训练过程不收敛置信图与高斯基元之间的投影关系没有对齐检查相机位姿、投影公式、聚合逻辑6.1 为什么不能只用语义分割语义分割在区分“人”和“建筑”上很有效但它无法解决“这个物体在这个场景里应不应该出现”的问题。例如一个场景中有一辆属于这个环境的展示车却在某几张照片中停在了不同位置。语义分割会把它标为“车”但它确实是干扰物。相反一个街头雕塑虽然在语义上也是“物体”但它属于静态场景不应该被过滤。Per-View 预测的核心优势在于它不依赖物体类别而是依赖“视角间是否一致”。6.2 预测器训练数据不足怎么办在没有大量标注数据的情况下可以退而求其次用合成数据预训练然后在少量真实数据上微调在 3DGS 优化过程中动态生成伪 mask利用自监督方式让预测器输出与 3DGS 重建损失的梯度相关联。这些策略都指向同一个原则预测器需要一个“判断不一致性的能力”而不是记住某些物体类别。6.3 如何在训练时加入多视角一致性约束这里所说的多视角一致性更多是指“特征的匹配与对比”。一个简化做法是对同一 3D 点在多个视角的预测置信度做方差惩罚。额外损失项 L_mv mean( variance( conf_1, conf_2, ..., conf_N ) ) 其中 conf_i 表示同一个 3D 点在第 i 个视角中被预测为静态的置信度。如果某个点在不同视角下置信度差异很大就会产生较大的损失促使预测器学会输出“在多个视角下都稳定”的置信结果。7. 工程实践与落地建议把 Per-View Gaussian Predictions 用到实际项目时不只是“把模型跑起来”那么简单下面这几个方向值得多花时间。7.1 数据采集规范尽量保证每个静态区域至少被 3 个以上视角覆盖否则多视角一致性判断会很困难拍摄时尽量避免大面积遮挡的视角集中在同一侧如果有条件单独采集一组无干扰物的参考帧用于验证过滤效果多视角图像的时间戳要尽量接近减少光照变化带来的干扰。7.2 与 3DGS 优化流程的配合在工程中并不是一定要训练一个独立的预测器。也可以把置信图作为 3DGS 优化过程中的软权重来使用。改进后的 3DGS 损失 Loss Σ 置信图权重 * (渲染颜色 - 真实颜色)^2这样可以避免直接删除高斯基元带来的信息丢失而是让低置信区域的优化权重降低保留一个“可恢复”的余地。7.3 性能与显存优化逐视角预测模块如果在 RGB 图像分辨率上直接运行显存和推理开销都比较高。建议先在低分辨率上运行预测器得到粗略的干扰物区域再在干扰物边界附近做高分辨率 refine把预测器和 3DGS 渲染串成异步流水线避免阻塞渲染主流程。7.4 安全与生产环境注意事项在真实项目中使用任何自动过滤方案前先在测试场景上验证效果不要直接在生产数据上批量删除高斯基元删除操作是不可逆的建议先导出高斯基元备份再执行过滤如果场景涉及隐私保护如自动去除行人需要确保数据处理流程符合相关法律法规数据来源合法、用途合规涉及商业场景时要确认模型权重和训练数据的授权。7.5 从 NeRF 到 3DGS 的迁移思考如果你之前接触过 NeRF 中的动态物体过滤方法会发现很多思路是可以迁移的但要注意差异NeRF 的隐式表示没有“高斯基元”这个实体删除操作很麻烦3DGS 的显式基元让过滤变得更自然NeRF 适合做全局优化3DGS 更适合与预测、检测这类前置模块结合3DGS 的渲染速度优势意味着我们可以多次渲染、多次过滤而不必过分担心时间开销。这也是为什么 Per-View Gaussian Predictions 这类思路在 3DGS 上更有想象空间显式表示让“逐像素置信图”和“三维基元”之间可以建立可靠的映射关系。8. 总结这篇文章围绕 3DGS 中的 Distractor Filtering 问题梳理了 Per-View Gaussian Predictions 的核心设计思路不是直接在全场景上学习 mask而是在单个视角上预测高斯基元的可信度然后通过多视角一致性判断来实现免训练的干扰物过滤。和传统的“语义分割 剔除”“场景内 Mask 学习”相比这类方法更依赖视角间的一致性规律而不是物体类别因此在未知物体和新场景上具备更好的泛化潜力。不过它也有自己的成本预测器的数据构造、置信图与高斯基元之间的对齐、阈值调整都是需要认真处理的工程细节。如果你准备自己复现或应用类似方法我建议从两条线入手一条线是先把 3DGS 渲染流程和可微渲染接口吃透搞清楚高斯基元如何投影到图像、如何参与混合这是后续一切过滤操作的基础另一条线是搭建一个简单的合成数据实验先把“逐视角预测 多视角投票过滤”这个闭环跑通再逐步换成真实场景数据。3DGS 本身还在快速迭代中渲染库、优化策略和硬件兼容性都在变化。所以本文给出的代码更偏向思路验证具体接入时一定要依据你使用的 3DGS 版本来调整接口和参数。如果本文对你有帮助可以收藏备用也欢迎在评论区聊聊你在干扰物过滤上踩过的坑。
返回列表