InfiniDepth 3DGS实现原理:单图高斯回归GSPixelAlignPredictor与三角形均匀采样算法拆解
发布时间:2026/10/15 18:21:26 锦皓数字建站

【免费下载链接】InfiniDepth[CVPR 2026] InfiniDepth: Arbitrary-Resolution and Fine-Grained Depth Estimation with Neural Implicit Fields项目地址https://gitcode.com/gh_mirrors/in/InfiniDepth点击查看免费下载CVPR 2026 开源项目 InfiniDepth 主打任意分辨率单目深度估计与单图 3D Gaussian Splatting3DGS重建。本文拆解它的两大核心模块单图高斯回归网络GSPixelAlignPredictor与三角形均匀采样算法make_3d_uniform_coord_triangle讲清楚 InfiniDepth 如何从一张 RGB 照片出发逐像素回归出高斯参数并通过深度网格上的三角形面积加权采样挑选出空间分布均匀的 3D 高斯集合最终导出.ply与新颖视角视频。 InfiniDepth 3DGS 功能单张照片到可交互 3D 场景InfiniDepth 的 3DGS 能力只需要一张 RGB 照片作为输入可选再给一张深度传感器图做增强输出物包括一份 3D 高斯.ply文件可导入 SuperSplat 等查看器交互浏览一段绕物体旋转的 orbit / 摆动 swing 轨迹渲染视频。推理入口是 inference_gs.py官方示例脚本如下bash example_scripts/infer_gs/fruit_infinidepth_gs.sh对应的 example_scripts/infer_gs/fruit_infinidepth_gs.sh 实际上只做了三件事指定输入图、指定深度模型infinidepth.ckpt和高斯模型infinidepth_gs.ckpt。下面这张水果静物图就是官方 3DGS 示例的输入素材它拥有丰富的曲面与反光细节很适合检验单图高斯回归的精度 推理全流程深度、采样、回归三段式管线inference_gs.py的main()函数见 inference_gs.py#L71-L260把整条 3DGS 管线拆成了清晰的四步准备深度与相机参数调用prepare_metric_depth_inputs得到度量深度无传感器时由 MoGe-2 恢复尺度再由build_camera_matrices构造内参/外参矩阵inference_for_gs两步查询见 InfiniDepth/model/model.py#L276-L333Step 1对整幅图做 2D 均匀密集查询得到密集深度图depthmap与 DINO 特征dino_tokensStep 2把深度图转成 3D 网格做三角形均匀采样得到sample_point_num默认 200 万个采样点再回查隐式场得到这些点的深度pred_depth_3dGSPixelAlignPredictor单图高斯回归对每个像素回归一份完整高斯参数透明度、亚像素偏移、scale、旋转、球谐系数得到与像素网格严格对齐的密集高斯稀疏化与导出_build_sparse_uniform_gaussians把密集高斯的属性插值到 200 万个 3D 均匀采样点上再经离群点过滤后export_ply写出。这条先密集回归、再稀疏挑选的设计是 InfiniDepth 3DGS 与直接逐像素建点云方案最大的区别——它既保留了像素级的高斯外观细节又获得了空间均匀、适合渲染新视角的几何分布。 拆解一GSPixelAlignPredictor 单图高斯回归核心实现在 InfiniDepth/gs/predictor.py#L23-L68。整个网络是一个轻量级卷积编码器 回归头输入三路特征逐像素回归出该像素位置上的完整 3D 高斯模块作用输出维度rgb_encoder3 层卷积编码 RGB 图像纹理rgb_feature_dim64depth_encoder编码密集深度图提供几何先验depth_feature_dim32dino_projector把 DINO 大模型的 patch token 投影压缩后上采样到像素级dino_reduced_dim128gaussian_regressorgaussian_head融合三路特征回归原始高斯参数num_gaussian_parameters回归头的输出raw被拆成三部分见 InfiniDepth/gs/predictor.py#L116-L125opacity经sigmoid压缩到 0~1 的透明度offset_xysigmoid后的亚像素偏移取值 0~1让每个高斯中心可以在本像素内微调位置这是 PixelAlign像素对齐的关键——高斯不再死板地钉在像素格点上raw_gaussians共7 3×d_sh维即 3 维 scale、4 维旋转四元数、球谐系数默认sh_degree2d_sh9即 27 维。拿到原始参数后GaussianAdapter见 InfiniDepth/gs/adapter.py#L24-L88负责把它们物理化scale 用softplus(x-4)做软激活并夹在[1e-10, 5.0]区间保证正数且尺度合理四元数旋转归一化为单位向量高阶球谐系数乘上一个衰减sh_mask0.1×0.25^degree抑制高频颜色噪声零阶球谐直接锚定输入图像的 RGBrgb_to_sh这相当于把原图颜色硬编码进高斯是单图重建不失真的一个重要技巧最后通过 get_world_rays见 InfiniDepth/gs/projection.py#L29-L45把像素坐标 深度反投影成世界系坐标means origins directions × depths。一句话总结GSPixelAlignPredictor 像素对齐的高斯回归器它为图中每一个像素生成一个中心落在该像素附近、颜色由原图像素锚定的 3D 高斯。 拆解二三角形均匀采样算法如果只保留像素反投影的点所有高斯都会贴在原图上新视角一偏就会出现贴皮薄壳效果。InfiniDepth 的解法是 InfiniDepth/utils/sampling_utils.py 中的 make_3d_uniform_coord_triangle它把深度图当成一张三角形网格按面积加权从中挑出 N 个体感均匀的采样点。算法分五步1️⃣ 深度图转 3D 顶点_depth_to_vertices用内参把每个像素反投影为(X, Y, Z)三维顶点得到H×W的点阵见 InfiniDepth/utils/sampling_utils.py#L59-L74。2️⃣ 构建三角形_build_faces对每个像素方格切两刀生成2×(H-1)×(W-1)个小三角形。3️⃣ 剔除坏三角形_prune_faces见 InfiniDepth/utils/sampling_utils.py#L103-L130会剔除两类问题三角形深度跳变三角形三个顶点深度比超过自适应阈值就丢弃。阈值随距离自适应——1 米内用1.05100 米时放宽到1.10用log10(zmean)/2平滑过渡避免物体边缘的横跨三角造成重建拉丝远距离三角形sample_filter_modemax_depth会直接删掉最远顶点 ≥ 90m 的三角形通常是天空、地面远端再配合天空掩码把天空彻底排挤出采样池。4️⃣ 面积加权分配剩余三角形按三维叉积算出真实面积probs areas / total_area。近处三角形又大又密、远处三角形又小又疏面积加权让每个采样点平均代表相等的一块表面这正是均匀二字的数学含义。5️⃣ 采样落点默认deterministicTrue若N ≤ 三角形数直接取面积最大的 N 个三角形的质心若N更大每个三角形先分 1 个质心剩余名额按sqrt(面积)比例分配比按面积分配更平滑再用一组预生成的重心坐标模板在三角形内部细分出额外落点保证分布规整、可复现采样坐标最后归一化到[-1, 1]的[y, x]格式正好是隐式深度场可直接查询的格式。这套采样跑完后inference_for_gs会把这些点送回深度隐式场再查一遍深度保证每个高斯中心都落在模型自己认为正确的深度上而不是被网格插值误差带偏。 密集高斯如何变成稀疏 3DGSInfiniDepth/utils/gs_utils.py 中的 _build_sparse_uniform_gaussians 完成最后的拼接把 200 万个归一化采样坐标转回像素坐标用pred_depth_3d反投影出每个点的世界系坐标作为稀疏高斯的means几何由 3D 均匀采样决定用grid_sample双线性插值从像素对齐的密集高斯上取回这些位置对应的harmonics、opacities、scales、rotations外观由 GSPixelAlignPredictor 决定四元数重新归一化随后 filter_gaussians_by_statistical_outlier 做统计离群点过滤清掉悬空的飞点。几何均匀 像素级外观两者各司其职这就是 InfiniDepth 单图 3DGS 效果稳定的工程秘密。下面这张庭院照片同样是官方 3DGS 示例输入石墙、拱门、植物等深度不连续区域正是上面深度跳变三角形剔除要处理的重灾区 上手一行命令跑通单图 3DGS以水果示例为例脚本见 example_scripts/infer_gs/fruit_infinidepth_gs.shpython inference_gs.py \ --input_image_pathexample_data/image/fruit.jpg \ --model_typeInfiniDepth \ --depth_model_pathcheckpoints/depth/infinidepth.ckpt \ --gs_model_pathcheckpoints/gs/infinidepth_gs.ckpt运行后会生成example_data/pred_gs/InfiniDepth_fruit_gaussians.ply和InfiniDepth_fruit_novel_orbit.mp4。把.ply拖进 SuperSplat 之类的查看器就能旋转观察整张照片的立体化效果仓库内 assets/supersplat-viewer/ 还内置了一份静态查看器页面️ 常用参数调优速查参数默认值影响--sample_point_num2000000最终 3D 高斯数量显存紧张可调到 50 万~100 万--coord_deterministic_samplingTrueTrue 得到规整可复现点云False 变为面积加权的随机采样--render_novel_video/--novel_trajectoryTrue / orbit控制是否渲染新视角视频及相机轨迹orbit 环绕 / swing 摆动--enable_skyseg_modelTrue开启天空分割掩码避免天空参与三角形采样--fx_org --fy_org --cx_org --cy_org可选已知真实内参时强烈建议提供会直接参与反投影与三角形构建✅ 小结InfiniDepth 的 3DGS 方案可以浓缩成三句话GSPixelAlignPredictor用RGB 深度 DINO 特征三路输入逐像素回归完整高斯参数并用原图 RGB 锚定零阶球谐保证外观保真三角形均匀采样在深度网格上按真实面积加权、剔除深度跳变与远端三角形产出空间均匀且可复现的采样点两者在_build_sparse_uniform_gaussians中汇合几何取自均匀采样外观取自像素级回归再经离群过滤导出.ply与渲染视频。理解了这条管线你既能读懂 InfiniDepth/gs/ 与 InfiniDepth/utils/sampling_utils.py 的全部源码也能针对自己的场景更多高斯、不同轨迹、传感器深度增强做有针对性的调整。赞分享【免费下载链接】InfiniDepth[CVPR 2026] InfiniDepth: Arbitrary-Resolution and Fine-Grained Depth Estimation with Neural Implicit Fields项目地址https://gitcode.com/gh_mirrors/in/InfiniDepth点击查看免费下载相关推荐如何使用std::sampleC17无放回均匀采样的终极指南如何使用std::sampleC17无放回均匀采样的终极指南 在现代C编程中高效的数据采样是处理随机数据的重要技能。 modern cpp feat文档教程numpy-ml 高斯过程回归指南GPRegression 完整实现、预测与采样原理numpy ml 高斯过程回归指南GPRegression 完整实现、预测与采样原理 高斯过程回归Gaussian Process RegressionG机器学习人工智能Open3D均匀采样技术从新手到专家的3D数据处理完整指南Open3D均匀采样技术从新手到专家的3D数据处理完整指南 Open3D作为现代3D数据处理的强大库其均匀采样技术是处理点云和网格数据的核心功能之一。 Op计算机视觉图形学3D渲染科学计算创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。