MeshFormer论文解读


这是题主第一次写关于论文的博客,如果有误的地方请联系题主修改

MeshFormer 解读:用「显式 3D 偏置」重新思考稀疏视角 3D 重建

论文:MeshFormer: High-Quality Mesh Generation with 3D-Guided Reconstruction Model
arXiv: 2408.10198
项目主页:https://meshformer3d.github.io/

MeshFormer解决了什么样的问题

传统方法

传统方式在3D生成中训练成本高,并且无论是triplane还是volume rendering本质都是用2D来表示,论文认为这会有两个问题:
3D领域关系不天然,局部连续性要靠模型自己悟
3D与2D之间的交互不精确并且昂贵

MeshFormer

训练成本更低,并且使用sparse voxel进行训练推理,让3D之间的局部关系比较天然、直观
一句话概括就是“用3D方式解决3D问题”

MeshFormer做了什么

  • 输入:少量多视角的RGB + normal
  • 输出:高质量、可直接使用的mesh

MeshFormer怎么做到的

显式3D结构(Explicit 3D structure)

不转换为2D,而是直接使用3D voxel表示,每个特征都有明确的(x,y,z)坐标和邻域
靠投影几何进行交互,每个voxel会投影在每个相机视角上,得到“它在图像里对应哪里”
局部靠3D卷积, 整体靠transformer,算子分配合理

具体实现

一、用VoxelFormer预测一个低分辨率的occupancy volume(例子给的{64^3}),每个voxel是靠近表面与否的二值或者概率,以此来把表面所在的区域“圈出来”:
可以避免后续在{256^3}的空间里瞎算

二、把预测为occupied的voxel区域给subdivide,得到高分辨率(例子给的{256^3})的稀疏体素集合。因为不能算是{256^3}网格,只在表面附近有voxel,所以被称为“sparse voxel”:
不仅让内存算力可控,也使得分辨率可以更高、细节更容易被表达

三、SparseVoxelFormer在高分辨率上填细节(此刻才在几何意义上变清晰),使用3D Sparse Convolution预测这些sparse voxels的特征:

  • 输入:sparse voxels
  • 输出:sparse feature volume

3D与2D如何对齐:Projection-Aware Cross Attention

对每一个3D voxel的v,不是去看整张图所有token,而是用相机投影矩阵,把voxel v投影到m个视角。在每个视角上,插值取到对应位置的局部2D特征,同时也取原始的RGB/normal像素值。这些preview的局部证据拼起来做“以voxel为query的cross-attention”,自适应决定哪个视角更加可信和权重多少

  • 论文中有相关公式:
  • Q来自voxel feature
  • key/value来着每个视角的投影局部特征 + voxel自身 (m+1个)

对每个3D体素v:
1.投影矩阵把体素中心投到每个view的像素坐标
2.在每个view的2D特征图上双线性插值拿到该点对应的局部patch特征,再拼上投影点的RGB/normal数值,形成每个view都有一个2D token {p_v^i}
3.做一次cross-attn:Q来自当前体素v,key/value:{p_v^1..p_v^m} + {v}

结论

因为MeshFormer把3D中本来就存在的东西——空间坐标、邻域关系、投影几何、法线方向这些直接写进了表示和计算中,不需要让模型通过大量的token和参数取隐式的猜,所以被称为“显式3D结构”

强几何监督(SDF Supervision)

SDF是什么

SDF(Signed Distance Function):对空间中任意点x,输出x到物体表面的带距离符号:
当SDF<0时,点在物体内部
当SDF=0时,点在物体表面
当SDF>0时,点在物体外部

训练时,模型先得到高分辨率的3D sparse feature volume,然后对near-surface 3D点做trilinear插值取特征,再用3个小MLP分别预测SDF field({512^3}的GT SDF volume通过MSE Loss监督SDF MLP)、color texture、normal texture。
也就是说,SDF是一个MLP输出。之后在SDF field中抽取mesh(dual Marching Cubes)进行surface rendering计算渲染损失

论文把SDF监督项Loss直接加进了总loss里
{L_SDF}​=MSE({SDF_pred}​,{SDF_gt}​)
MSE是均方误差,SDF需要强、平滑、对大误差敏感的梯度,MSE对大误差很敏感

通过高分辨率 SDF 强监督,MeshFormer 将几何约束直接引入训练过程,使得 mesh 不再是渲染或 density 场的后处理结果,而是可以参与端到端训练。这也是其能够在单阶段中稳定生成高质量 mesh 的关键原因。

2D到3D的几何引导(Normal Guidance)

在做什么

用2D模型或数据给出的多视角法线图(normal maps),强行把3D重建这件事从“猜形状”变成“按方向拼形状”。
Normal Guidance 并不是替代几何学习,而是作为几何重建的辅助信号,用于降低稀疏视角下的歧义性。

具体表现

一.训练推理时,模型输入不仅有多视角RGB,还有多视角normal maps,可以来自数据真值,也可以来自生成/预测模型
二.SDF field里抽出mesh后会渲染出RGB图和normal图,对normal图也会计算损失,让网络不仅颜色像,表面方向也像
三.论文中还有一个重要设计,normal不仅从mesh几何法线中算出来,还会由一个小MLP从3D特征里直接预测normal texture并用渲染loss约束它,负责高频细节的方向信息

整体 Pipeline 概览

多视角RGB+多视角Normal (2D backbone提特征)
多视角2D features (投影对齐,再cross attention注入到3D,最后VoxelFormer)
低分辨率occupancy (对near-surface的occupancy voxel做subdivide)
Sparse voxels (SparseVoxelFormer)
高分辨率3D Sparse feature volume (trilinear插值取点特征)
SDF field + Color texture + Normal texture
SDF field(SDF = 0 + dual Marching Cubes)

训练:NVDiffRast渲染RGB/Normal -> 计算渲染损失
推理:直接输出mesh + 纹理 (可选再做几何增强)

Transformer + 3D Convolution

为什么不全Transformer

MeshFormer选择3D voxel表示,voxel很大,如果对高分辨率的3D token直接做全局self-attention,运算量和显存会直接炸
于是作者选择了一种折中的方案:
3D Convolution负责高分辨率体上的局部编码解码
Transformer只在压缩后的低分辨率体上做全局推理(调整3D表示让整体形状像一个正常的物体)与记忆先验(将Transformer在训练中的“东西通常长什么样”内化成了参数里的统计喜好)

论文的子网络中怎么具体实现

VoxelFormer

Unet 4个level:64³ → 32³ → 16³ → 16³
每层都有:ResNet + projection-aware cross-attn + downsample
bottleneck:6层Transformer,token channel 512

过程
  • 输入:m视角RGB+normal
  • 步骤:每张图先过一个2D feature extractor(文中举例DINOv2)得到 patch-level 特征,论文里在cross-attn的key/value里把“特征+像素值”一起拼。3D feature volume从一个“共享的可学习的token”开始,再加上体素坐标/位置编码。(一开始,3D空间里的每个体素都知道nothing,网络先给他们发同一张空白纸再告诉它们在空间的位置,后续靠2D证据和3D结构一点点把信息写进去)

SparseVoxelFormer

sparse Unet 6个level:256³ → 128³ → 64³ → 32³ → 16³ → 16³
bottleneck:16层Transformer,token channel 1024
该阶段更依赖先验与全局一致性,所以Transformer更深、更宽

过程

把粗细节的高分辨率Sparse voxels通过SparseVoxelFormer重新学习几何,通过高分辨率 sparse 体素上的 3D 卷积、跨视角证据融合和 SDF 强监督直接学习得到清晰的边界、锐利的边角、薄结构

一些相关概念补充

trilinear

trilinear插值会在查询点周围8个体素角点上取特征,并且按点到各角点的相对距离计算权重做加权和,从而把离散的3D sparse feature volume变成可在连续3D空间查询的特征场,供后续MLP预测用

MeshFormer与别的方式对照

triplane:token-friendly,但3D连续性是隐式的,看起来是3D实际上是在2D平面上绕
NeRF:渲染友好,但mesh提取是后处理,大概就是NeRF就不是专门弄mesh的,是拿来渲染用的,在乎的不是显式可用的mesh
MeshFormer:几何是主任务,mesh从训练到推理都是主输出


文章作者: Austin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Austin !
评论
  目录