
Differentiable Block Worlds 论文可视化走读用 Rerun 观察超二次曲面 3D 场景分解的优化过程【免费下载链接】rerunVisualize, query, and stream to train on multimodal robotics data.项目地址: https://gitcode.com/GitHub_Trending/re/rerun导读从一组带相机姿态的图片出发恢复出由若干可解释几何基元组成的带纹理 3D 场景是三维重建中极具挑战性的优化问题。本文以 Rerun 开源仓库中的differentiable_blocks_world示例README为主线逐层拆解论文Differentiable Block Worlds: Qualitative 3D Decomposition by Rendering Primitives的核心机制场景如何用背景球体、地面平面与超二次曲面superquadrics表示、优化为何只能删减基元而不能新增、透明度opacity如何被当作可优化参数来控制网格数量、以及三阶段优化策略如何稳定收敛。读完本文你将掌握该论文的方法脉络并理解 Rerun 的Mesh3D、Pinhole、Opacity等类型如何支撑这类优化过程可视化的落地。一、示例定位一份可视化走读而非普通 Demo在 examples/manifest.toml 中该示例被归入3d-reconstruction3D 重建与建模类别与structure_from_motion、instant_splat、glomap等示例并列标题为 Differentiable blocks world: qualitative 3D decomposition by rendering primitives标签为3D、Mesh、Pinhole camera、Paper walkthrough。与仓库内大多数运行即出图的示例不同这是一个典型的paper walkthrough论文可视化走读示例它本身不含独立可运行的示例代码而是由作者修改原始研究源码、在关键位置埋入 Rerun SDK 的日志调用后把优化过程中每一帧的场景状态记录下来形成一系列可交互回放的可视化README 中配有 overview 与多个阶段演示的动画/视频链接。从源码结构看该示例目录下仅有README.md一个文件见 examples/python/differentiable_blocks_world其元数据中的source字段指向外部研究仓库因此它在本仓库中的角色是方法讲解 可视化成果展示而非开箱即用的脚本。二、问题背景从多视图图像到可解释的 3D 分解Finding a textured mesh decomposition from a collection of posed images is a very challenging optimization problem.论文要解决的问题是给定一组带姿态posed的图像重建一个带纹理的网格分解textured mesh decomposition——即场景不是被表示成一整张网格而是被拆解为若干个语义上可解释的部分。这种分解比单纯的稠密重建更困难因为它同时要求几何拟合每个部分都要能解释观测图像中对应区域的几何形状纹理拟合每个部分的表面纹理要与多视角观测一致结构可解释性分解结果要由少量、清晰的基元组成而不是无结构的点云或单一 mesh。论文Differentiable Block Worlds由 Tom Monnier、Jake Austin、Angjoo Kanazawa、Alexei A. Efros、Mathieu Aubry 等人提出其核心思路是用可微分渲染differentiable rendering把场景表示 → 图像合成整条链路变成可反向传播的优化管线以几何参数为优化变量让渲染出来的图像尽可能接近真实观测从而同时求解形状与纹理。三、场景的几何表示icosphere 背景 地面 超二次曲面README 明确指出该优化场景由三部分构成背景 icosphere二十面体细分球用于表示场景中无法用前景基元解释的背景区域通常承载天空/远景的环境纹理地面平面ground plane承载地面区域的纹理为场景提供明确的支撑面结构多个超二次曲面superquadrics作为前景积木块blocks每个 block 是一类可由参数方程描述的柔性二次曲面族通过调整形状参数可以退化为球体、立方体、圆柱体等多种形态非常适合表达人造场景中的规则几何体。优化的最终目标是找到能够最好地解释所有观测图像的形状shape与纹理texture组合。论文之所以选用这类基元正是因为它们参数少、可微分、且天然具有可分解的语义结构。初始化与关键约束只减不增一个容易被忽略但至关重要的设计是初始化策略优化开始时算法会用一个初始的 block 集合即一组超二次曲面、一个地面平面和一个背景球体来覆盖整个场景。此后优化过程只能减少 block 的数量绝不能增加新的 blockthe optimization can only reduce the number of blocks, not add additional ones。这一只减不增的约束带来两个直接好处搜索空间可控优化始终在一个由初始覆盖决定的候选集合内收缩避免了在优化中途任意插入新基元导致的组合爆炸与不稳定分解趋向简洁由于系统倾向于删除解释力不足的基元最终得到的分解天然偏向最小化的基元集合符合定性分解qualitative decomposition的目标——不需要精确到像素级但结构上要干净、可读。四、透明度Opacity让网格数量变得可优化README 指出DBW 与其他可微分渲染器的一个关键区别在于对透明度的处理Each mesh has an opacity associated with it that is optimized. When the opacity becomes lower than a threshold the mesh is discarded in the visualization. This allows to optimize the number of meshes.也就是说每个 mesh 都关联一个可优化的 opacity 标量优化器通过梯度同时调整 mesh 的几何、纹理与 opacity当一个 mesh 的 opacity 降到某个阈值以下时它就在可视化中被丢弃discard从而在渲染结果不变差的前提下自动削减基元数量。这本质上是把结构选择该不该有这个 block这一离散问题松弛成了opacity 该多大这一连续可微问题从而让整套管线可以被梯度优化驱动。opacity 低于阈值即丢弃的机制正是只减不增约束在渲染层面的具体执行者。在 Rerun 中的对应语义在 Rerun 数据模型中透明度由Opacity组件表达。根据 docs/content/reference/types/components/opacity.mdDegree of transparency ranging from 0.0 (fully transparent) to 1.0 (fully opaque). The final opacity value may be a result of multiplication with alpha values as specified by other color sources. Unless otherwise specified, the default value is 1.即 opacity 取值在0.0完全透明到1.0完全不透明之间默认值为1且最终显示透明度可能是该值与颜色 alpha 通道相乘的结果。这与 DBW 的优化语义完全吻合在优化初期大量候选 mesh 带着接近1.0的 opacity 参与渲染随着优化推进冗余 mesh 的 opacity 被梯度压到阈值以下从而在可视化中消失。可以推断原示例正是通过在优化循环中不断用 Rerun SDK 记录每个 mesh 的顶点、纹理与 opacity 值来呈现透明 block 逐个消失的动态过程。五、三阶段优化策略稳定收敛的关键为了稳定优化、避免陷入局部极小local minima论文采用了一个三阶段3-stage优化流程README 对此有明确描述阶段优化内容目的第一阶段纹理分辨率降低 8 倍texture resolution reduced by a factor of 8先用低分辨率纹理快速探索几何形状减少参数空间规模、加速收敛第二阶段全分辨率纹理优化full resolution texture is optimized在几何结构基本定型后恢复完整纹理细节精细拟合观测图像第三阶段关闭基于透明度的优化只优化不透明 meshtransparency-based optimization is deactivated, only optimizing the opaque meshes from here冻结结构选择结果专注打磨已存活基元的几何与纹理避免结构反复横跳这一由粗到精coarse-to-fine的设计与纹理超分辨率、多分辨率渲染等经典优化技巧一脉相承低分辨率阶段负责找结构高分辨率阶段负责抠细节最后阶段负责锁结果。而第三阶段关闭透明度优化本质上是对结构选择已完成的显式声明——此后每个存活 mesh 都将以全不透明状态参与最终渲染可视化结果也更干净。六、在 Rerun 中呈现这类优化过程核心类型与字段虽然该示例的可视化代码位于外部研究仓库但我们可以从 Rerun 自身的类型定义中理解它是如何被可视化表达的。下面是与 DBW 场景表示一一对应的核心类型。Mesh3D承载 block / 地面 / 背景网格根据 docs/content/reference/types/archetypes/mesh3d.mdMesh3D是一个由逐网格与逐顶点属性指定的 3D 三角形网格其字段与 DBW 的需求高度吻合必需字段vertex_positions顶点位置Position3D推荐字段triangle_indices三角形索引TriangleIndices、vertex_normals顶点法线Vector3D——对应超二次曲面离散化后的三角网格纹理相关字段vertex_texcoords纹理坐标Texcoord2D、albedo_factor反照率系数、albedo_texture_buffer与albedo_texture_format纹理图像缓冲与格式——正好对应论文中被优化的纹理材质相关字段vertex_colors顶点颜色、class_ids类别 ID。文档还特别指出网格正面采用逆时针三角形绕序与 glTF 规范一致且默认关闭背面剔除back face culling。对 DBW 这类opacity 变化的半透明 mesh 叠放场景透明排序transparency ordering与绕序约定直接决定了可视化是否出现闪烁或错误遮挡这正是可视化走读中需要关注的细节。Pinhole表达带姿态的图像场景输入是一组带姿态的图像在 Rerun 中对应Pinhole相机投影内参。根据 docs/content/reference/types/archetypes/pinhole.md必需字段image_from_cameraPinholeProjection即相机内参矩阵推荐字段resolution图像分辨率可选字段camera_xyz相机坐标系约定、child_frame/parent_frame通过命名坐标帧表达相机外参、image_plane_distance、color、line_width。文档同时说明若同一父子关系上还记录了Transform3D如相机外参它会优先于Pinhole生效——这正是pose 图像在 Rerun 中的标准建模方式内参用Pinhole外参用Transform3D。Transform3D 与实体层级组织场景图从 docs/content/concepts/logging-and-ingestion/transforms.md 可以看到Rerun 支持两种空间关系建模实体路径层级每个实体通过路径表达相对父实体的变换变换沿实体树逐级传播与命名坐标帧类似 ROS tf2通过Transform3D(parent_frame…, child_frame…)显式建立帧间关系且约定每个帧在任意时刻有且只有一个父帧。对 DBW 而言可以推断其场景结构大致为相机实体Pinhole 外参挂在 world 下而每个 block/地面/背景球体作为带Transform3D的子实体挂在同一场景图中——这样优化器每更新一次参数Rerun 就能以稳定的空间坐标呈现所有基元。Opacity透明度驱动的基元裁剪如第四节所述opacity 在 Rerun 中由Opacity组件表达取值范围0.0–1.0、默认1、可与其他颜色源 alpha 相乘。DBW 走读中mesh 低于透明度阈值即被丢弃的动态效果正是通过逐帧记录各 mesh 的 opacity 值实现的。七、如何查看与复现这份走读该示例在本仓库中的形态是文档 可视化成果而非独立可运行的脚本查看讲解与成果直接阅读 examples/python/differentiable_blocks_world/README.md其中包含论文概述、overview 静态图以及多段阶段性演示视频优化初始化、透明度裁剪、三阶段优化各阶段并给出了完整的论文标题与作者信息了解示例在仓库中的定位见 examples/manifest.toml 的3d-reconstruction类别自行复现由于这是 external example其元数据source字段指向外部研究仓库复现方式与仓库中其他外部示例类似——克隆源仓库后运行其原始优化代码并在代码中接入 Rerun SDK 的日志调用可参考 mini_nvs_solver 这类外部示例的通用做法其 README 以pixi run app运行。接入时日志数据流的骨干通常包括rr.log记录每帧的Mesh3D含纹理、Pinhole相机内参、Transform3D外参与基元位姿以及各 mesh 的Opacity。八、总结differentiable_blocks_world示例展示了一条极具启发性的技术路径把3D 结构分解这一经典难题表示成可微渲染下的参数优化并用 Rerun 把优化过程本身变成可回放、可检查的视觉资产。其方法要点可归纳为场景表示背景 icosphere 地面平面 超二次曲面 blocks用少量参数化基元覆盖并解释多视图观测结构约束初始化完整覆盖场景后优化只允许削减 block 数量不允许新增透明度机制每个 mesh 的 opacity 作为可优化参数低于阈值即被丢弃使基元数量间接可微优化三阶段优化低分辨率纹理8 倍降采样→ 全分辨率纹理 → 关闭透明度优化由粗到精稳定收敛。而 Rerun 侧提供的Mesh3D、Pinhole、Transform3D、Opacity等类型恰好完整覆盖了该优化场景的表示与可视化需求——如果你正在从事可微渲染、神经重建或结构化 3D 分解相关研究这份走读示例既是理解论文的直观教材也是如何用 Rerun 观察优化过程的现成范式。【免费下载链接】rerunVisualize, query, and stream to train on multimodal robotics data.项目地址: https://gitcode.com/GitHub_Trending/re/rerun创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考