高斯泼溅技术-从入门到精通
自适应密度控制Adaptive Density Control训练从稀疏点云初始化经过几万步梯度下降最终得到数百万个高斯体。这中间高斯体的数量和位置是如何从初始状态演变到最终状态的答案就是本文的主题——自适应密度控制。对应原论文第5节Optimization中关于密度控制的部分这是3DGS区别于纯粹梯度下降的关键机制。目录1. 为什么单靠梯度下降不够2. 密度控制的三种操作2.1 克隆Clone2.2 分裂Split2.3 剪枝Prune3. 触发条件与阈值设置3.1 密度控制的触发时机3.2 各操作的判断阈值4. 密度控制对渲染质量的影响5. 超参数调优指南6. 参考资料1. 为什么单靠梯度下降不够纯粹的梯度下降只能移动和调整已有高斯体的参数不能凭空创造或删除高斯体。这在两种情况下会导致问题欠重建区域Under-Reconstruction场景中某些细节区域如树叶的纹理、窗框边缘初始点云太稀疏高斯体数量不够无论怎么调参也表示不好因为根本没有足够的高斯体来覆盖这些区域。梯度下降会把已有的高斯体拉向这些区域但一个太大的高斯体试图覆盖过大范围时精度必然下降。过重建区域Over-Reconstruction某些区域的高斯体不合理地变大一个高斯体试图表示太复杂的局部结构导致渲染模糊或出现伪影。自适应密度控制的作用让高斯体的分布进化——在需要的地方增殖在不需要的地方裁剪最终让高斯体的密度自然地匹配场景复杂度。2. 密度控制的三种操作2.1 克隆Clone触发条件高斯体的位置梯度∥ ∇ μ L ∥ \|\nabla_\mu \mathcal{L}\|∥∇μ​L∥超过阈值τ p o s \tau_{pos}τpos​且高斯体当前尺度较小max ⁡ ( s x , s y , s z ) ≤ τ s c a l e \max(s_x, s_y, s_z) \leq \tau_{scale}max(sx​,sy​,sz​)≤τscale​。操作在原高斯体旁边创建一个完全相同的复制体相同的μ \boldsymbol{\mu}μ,Σ \boldsymbol{\Sigma}Σ,α \alphaα, SH然后沿梯度方向轻微偏移其位置。直觉解释位置梯度大意味着这里渲染误差大需要调整尺度小意味着这个高斯体本身很小但还不够用来覆盖这个区域。克隆一个一样的放旁边用更多的高斯体覆盖同一区域增加局部密度。原始状态 克隆后 [Gs] ←大梯度 [Gs][Gs] 小高斯体复制一个放旁边一起覆盖细节区域2.2 分裂Split触发条件高斯体的位置梯度∥ ∇ μ L ∥ \|\nabla_\mu \mathcal{L}\|∥∇μ​L∥超过τ p o s \tau_{pos}τpos​且高斯体尺度较大max ⁡ ( s x , s y , s z ) τ s c a l e \max(s_x, s_y, s_z) \tau_{scale}max(sx​,sy​,sz​)τscale​。操作删除原高斯体用原协方差矩阵对应的概率分布采样两个新的中心位置生成两个尺度缩小各方向乘以1 / 1.6 1/1.61/1.6的系数的高斯体替代原高斯体。直觉解释位置梯度大 尺度大意味着一个大高斯体试图表示复杂的细节区域需要拆小。分裂后两个更小的高斯体可以各自聚焦于原来那个大高斯体覆盖范围内的不同子区域。分裂前 分裂后 [ Large Gs ] [Gs1] [Gs2] 大高斯体覆盖复杂区域 两个小高斯体各自负责子区域克隆 vs 分裂的判断逻辑高斯体小但不够密→克隆高斯体太大导致模糊→分裂。两者的判断依据都是梯度大小需要密度增加区别只在当前高斯体的尺度。2.3 剪枝Prune密度控制不只是增加高斯体还包括删除无用的高斯体条件1透明度剪枝α ϵ α \alpha \epsilon_\alphaαϵα​约0.005 0.0050.005。几乎透明的高斯体对渲染几乎没有贡献保留只会占用内存和计算资源。条件2尺度剪枝高斯体在世界坐标或图像坐标中的尺寸超过阈值。过大的高斯体通常出现在场景边界或空旷区域是浮云效应floaters的来源会在某些视角产生伪影。条件3定期不透明度重置每隔固定步数对所有高斯体的不透明度做一次强制重置乘以一个小于1的系数之后通过训练恢复。这个操作的目的是让那些位置不好的高斯体在重置后梯度大、透明度低最终在下一轮剪枝中被删除。不重置的话这些占位置的高斯体会在整个训练过程中一直存在。前瞻3DGS的密度控制是基于启发式规则的参数调整不当容易导致高斯体数量爆炸占满显存或不足欠拟合。后续工作 3DGS-MCMC2024提出用马尔可夫链蒙特卡洛方法替代这套启发式规则让密度控制变成一个有原则的概率推断过程。3. 触发条件与阈值设置3.1 密度控制的触发时机密度控制不是每一步训练都做而是按固定间隔执行操作频率克隆 / 分裂Densification每densification_interval 100步剪枝Pruning每次Densification时同时执行不透明度重置Opacity Reset每opacity_reset_interval 3000步停止Densification从第densify_until_iter 15000步之后停止这个节奏意味着前15000步是高斯体数量快速增长的阶段之后只有剪枝高斯体数量逐渐减少并稳定。3.2 各操作的判断阈值参数名默认值含义densify_grad_threshold0.0002触发克隆/分裂的位置梯度阈值percent_dense0.01区分克隆和分裂的尺度阈值相对于场景尺寸min_opacity0.005透明度剪枝阈值max_screen_size20像素图像空间尺寸超过该值的高斯体被剪枝梯度累积方式位置梯度不是单步梯度而是最近densification_interval步的梯度均值绝对值。累积后求平均能更稳定地判断哪些区域真正需要增加密度避免被单步的噪声梯度误触发。4. 密度控制对渲染质量的影响通过训练日志中高斯体数量的变化曲线可以看出密度控制的效果高斯体数量对数尺度 1M | ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙趋于稳定 | ∙∙∙∙ 500K| ∙∙∙∙ | ∙∙∙∙ 200K| ∙∙∙∙ | ∙初始点云 50K|___________________________________________▶ 训练步数 0 2k 4k 6k 8k 10k 12k 15k 30k ← 快速增长阶段 →|← 密度稳定阶段仍有微量剪枝→高斯体数量的快速增长阶段正是场景细节逐渐丰富的阶段——从远看轮廓正确但模糊到近看也能看清纹理和边缘细节。密度控制参数调得太激进densify_grad_threshold过小高斯体数量爆炸显存耗尽训练崩溃。密度控制参数调得太保守densify_grad_threshold过大高斯体不够细节丢失PSNR偏低。opacity_reset_interval的作用如果这个值太大重置频率太低“僵尸高斯体”位置不好但透明度已经学到较高值的高斯体会一直存在。适当频率的重置是避免高斯体数量虚高的保障。5. 超参数调优指南不同场景有不同的最优配置以下是一些经验规律室内近景场景如NeRF-Blender合成数据集# 场景规模小点云密可以适当提高梯度阈值python train.py-sdata/nerf_synthetic/lego\--densify_grad_threshold0.0002\# 默认值--densification_interval100# 默认值室外无约束场景如Mip-NeRF360数据集# 背景无限远高斯体数量多建议保守一些python train.py-sdata/360_v2/garden\--densify_grad_threshold0.0003\# 适当提高阈值减少高斯体数量--densify_until_iter20000# 可适当延长密度增长阶段高斯体数量过多显存不足的应对方案提高densify_grad_threshold减少密度增长触发频率降低densify_until_iter更早停止密度增长降低max_screen_size更积极地剪枝大高斯体降低训练分辨率减少图像空间计算量同时间接影响高斯体尺度阈值渲染结果有大量浮云场景边缘的噪声点降低max_screen_size或在训练后单独运行一次剪枝脚本。前瞻自适应密度控制的一个根本问题是它依赖梯度信号来判断哪里需要更多高斯体而梯度信号本身就有噪声。Gaussian Opacity Fields2024提出用不透明度场来驱动密度控制比纯梯度信号更稳定。另一个方向是 Compact3D2024通过在损失函数里加入高斯体数量的惩罚项让模型在训练过程中自动学习稀疏性而不依赖手动设定的阈值。6. 参考资料Kerbl, B. et al. (2023). 3D Gaussian Splatting.SIGGRAPH 2023. https://arxiv.org/abs/2308.04079 — 原论文第5节OptimizationKheradmand, A. et al. (2024). 3D Gaussian Splatting as Markov Chain Monte Carlo. https://arxiv.org/abs/2404.09591 — 用MCMC替代启发式密度控制Fan, Z. et al. (2023). LightGaussian: Unbounded 3D Gaussian Compression with 15x Reduction and 200 FPS. https://arxiv.org/abs/2311.17245 — 高斯体压缩与剪枝的后续工作Yu, Z. et al. (2024). Gaussian Opacity Fields: Efficient Adaptive Surface Reconstruction in Unbounded Scenes. https://arxiv.org/abs/2404.10772下一篇07 损失函数与优化策略

相关新闻

HarmonyOS7 启动优化:冷启动从 3 秒降到 1 秒的 5 个技巧

HarmonyOS7 启动优化:冷启动从 3 秒降到 1 秒的 5 个技巧

文章目录前言冷启动 vs 热启动优化 1:延迟加载优化 2:减少 onCreate 逻辑优化 3:预加载优化 4:布局优化优化 5:懒初始化效果对比写在最后前言 我们的 App 上线后第一周,用户反馈最多的不是功能 bug&#x…

2026/9/25 13:14:25 阅读更多 →
测试文章 001122 - 请忽略

测试文章 001122 - 请忽略

这是一篇测试文章,用于验证账号状态,将立即删除。

2026/9/25 7:24:32 阅读更多 →
800G/1.6T交换机时代:通信PCB打样挑战与应对

800G/1.6T交换机时代:通信PCB打样挑战与应对

800G/1.6T交换机时代:通信PCB打样挑战与应对随着AI算力需求的快速增长与数据中心规模的持续扩张,800G与1.6T高速交换机正从技术验证阶段走向规模化部署。这一速率跃升不仅对芯片架构和系统设计提出了更高要求,更对作为信号传输核心载体的**PC…

2026/9/23 16:49:27 阅读更多 →

最新新闻

高并发下缓存穿透与击穿的防御实践:基于Redis的封装方案

高并发下缓存穿透与击穿的防御实践:基于Redis的封装方案

做了这么多年后端,缓存穿透和缓存击穿这个问题我几乎在每个高并发项目里都要重新讲一遍。最近我把这两类问题的防御逻辑统一封装成了一个可复用的工具包,基于Redis实现,核心围绕布隆过滤器、分布式锁、本地缓存和空值缓存这套组合拳。这篇就是…

2026/9/25 13:14:41 阅读更多 →
ax:面向智能体的Kubernetes声明式调度原语

ax:面向智能体的Kubernetes声明式调度原语

1. 项目概述:从“ax”这个极简标题切入,我们到底在谈什么?“ax”——两个字母,没有空格,没有标点,没有上下文。放在搜索引擎里,它像一粒投入深水的石子,激起的不是涟漪,而…

2026/9/25 13:14:41 阅读更多 →
openEuler 上 Intel 虚拟化实战:KVM、VT-d 直通与性能调优

openEuler 上 Intel 虚拟化实战:KVM、VT-d 直通与性能调优

虚拟化这摊事儿,说简单也简单,说复杂能让人折腾一整天。openEuler 作为企业级服务器操作系统,在 Intel 平台上跑虚拟化,底子其实是现成的——Linux 内核自带 KVM,Intel 又贡献了 VT-x、VT-d、SR-IOV 这一整套硬件辅助虚…

2026/9/25 13:14:41 阅读更多 →
Meta主动记忆干预长程智能体:TaoToken统一Key下的配置骨架与验证

Meta主动记忆干预长程智能体:TaoToken统一Key下的配置骨架与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 13:14:41 阅读更多 →
Atlas 300V Pro 24GB部署YOLO实战:从硬件选型到推理调优完整记录

Atlas 300V Pro 24GB部署YOLO实战:从硬件选型到推理调优完整记录

Atlas 300V Pro 24GB部署YOLO实战:从硬件选型到推理调优的完整记录如果你最近在关注边缘端的AI推理部署,大概率刷到过Atlas这个系列的名号。但说实话,很多刚接触昇腾生态的朋友第一反应都是:Atlas 300V 24G到底是不是一张运算加速…

2026/9/25 13:14:41 阅读更多 →
OpenCode 与 OpenCLAW 的 AI 模型配置:用 TaoToken 统一 Key 打通多工具调用

OpenCode 与 OpenCLAW 的 AI 模型配置:用 TaoToken 统一 Key 打通多工具调用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 13:13:40 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →