ARTICLE DETAIL

资讯详情

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

大重建模型LRM:人物交互场景3D重建新范式

大重建模型LRM:人物交互场景3D重建新范式 当我们需要从一段普通手机视频中重建出“人正握着一只马克杯喝水”或者“人坐在椅子上看书”这样的真实3D交互场景时传统流程往往需要多视角采集、密集匹配、网格修复还要额外标注人和物体的姿态整个过程以小时甚至天为单位。近两年Large Reconstruction Models大重建模型下文简称 LRM把“单图/少量图像到3D内容”的生成速度提升到了秒级也让“人和物体交互场景”的自动重建看到了新的可能性。本文会围绕 Reconstructing Humans and Objects in Interaction using Large Reconstruction Models 这个方向完整梳理三部分内容先讲LRM的核心原理和它为什么能解决传统重建的痛点再拆解“人物交互重建”真正的技术难点最后给出一条可落地的参考管线、最小实验代码和工程排查思路。无论你是3D视觉方向的学生、数字人相关开发者还是想了解前沿重建技术的工程师都可以按这篇文章的思路往下走。1. 背景与核心概念1.1 什么是“交互中的人和物体”重建3D重建本身并不新鲜。单物体重建、人体重建、场景重建都已经有大量成熟方案。但“交互中的人和物体重建”是一个更综合的问题它不仅要把人的几何结构重建出来还要把当前正在交互的物体重建出来最关键的是要恢复两者之间的相对位置、接触点、支撑关系等交互语义。举个例子一个人左手端着一杯咖啡右手正在点手机屏幕。这里至少包含三个重建对象人的身体姿态、咖啡杯的几何形状、手机的位置与朝向。这三个对象不是相互独立的。咖啡杯应该是被手握住的状态手机屏幕应该和指尖接触人和物之间不能出现明显穿透也不能出现悬浮。这类重建结果一旦用于AR/VR、虚实融合、机器人操作等场景对姿态和接触关系的要求会非常高。传统上我们也可以分步做先用人体姿态估计得到SMPL或SMPL-X参数再单独用物体检测和姿态估计恢复物体位姿最后手动对齐。但这种方式误差容易累积遇到遮挡、模糊、复杂动作时更是难以稳定。这也是为什么现在学界和工业界都在寻找更数据驱动、更端到端的重建方案。1.2 传统重建方案为什么不够用我们先回顾几类主流传统方案理解它们各自的瓶颈。第一类是多视图几何重建例如 Structure-from-MotionSfM加 Multi-View StereoMVS。这类方法依赖场景中有足够多的特征点、足够的视角差异。对于静态建筑、复杂场景效果不错但对于人物交互这种包含大量弱纹理区域、动态变化的场景很难直接套用。你不可能让一个人拿着一杯水保持静止然后绕着他拍几十张照片。第二类是基于参数化人体模型的方案例如 SMPL、SMPL-X、GHUM 等。这类方法把人体先验编码进参数算法只需要回归体型、姿态等少量参数稳定性好很多。但问题是参数化模型表达不了手部的精细形状也表达不了物体本身的几何细节。人和物一旦接触模型就不知道“手到底握在杯子的哪个位置”只能靠后处理去猜。第三类是神经辐射场NeRF和3D高斯泼溅3D Gaussian Splatting类的场景优化方法。它们能重建出非常高精度的静态场景但本质上是针对单个场景做逐场景优化。每个新场景都要重新训练一个模型训练时间从几分钟到几十分钟不等而且对新视角、新类别的泛化能力有限。对于视频中的人和物还需要先解决动态物体的拆分问题。总结下来传统方法的核心问题在于要么依赖大量视角要么依赖强先验要么需要逐场景重新拟合。这三条路在“真实世界交互场景”中都不够通用。1.3 Large Reconstruction Models 改变了什么LRM 的思路和传统方法完全不同。它把“3D重建”建模成一个大规模数据驱动的学习问题。模型在海量的图像-3D数据对上训练学习从一张或几张2D图像直接映射到3D表示的能力。推理时模型只需要前向一次不需要针对当前场景做任何优化就能直接输出3D结果。这种模式在人工智能里通常称为 amortized inference摊销推断。意思是模型把大量训练样本中学习到的3D先验“记忆”在参数里推理时“摊销”了逐场景优化的成本。有点像大语言模型你不再为每篇文章重新训练一个模型而是用一个已经学会世界知识的模型去生成答案。把这种能力用到交互场景重建中理论上可以做到给定一段单人视频抽几帧就能重建出人的3D网格给定一帧中出现的杯子、手机、椅子模型能直接输出对应物体的3D形状再通过接触优化和对齐模块恢复出人和物体之间的交互关系。当然实际落地并不会这么顺利。交互场景中的遮挡、接触、动态变化都是LRM这类方法需要专门处理的挑战。我们先把LRM的技术原理拆开看再回头看这些挑战。2. 大重建模型LRM核心原理拆解2.1 整体流程从图像到3D表示一个典型的LRM框架通常包含四个阶段图像编码用预训练视觉模型通常是ViT或DINOv2把输入图像编码成高维特征特征映射用一个重建Transformer或轻量级解码器把图像特征转换为结构化的3D特征最常见的是三平面triplane表示可微渲染把3D特征输入到NeRF或者3D高斯泼溅渲染器中渲染出多视角图像监督学习用真实照片的多视角一致性作为监督信号端到端训练整个模型。下面这张表可以帮你快速理解LRM和传统方案的区别维度传统多视图重建NeRF/3DGS逐场景优化LRM大重建模型输入几十到上百张图同一场景多视角图单图或少量图是否需要逐场景训练不需要需要不需要推理速度分钟到小时级分钟级秒级甚至毫秒级泛化能力受特征匹配限制基本不跨场景可泛化到未见类别输出点云/网格辐射场/高斯三平面渲染网络可提取网格需要强调的是不同实现版本细节差异很大但整体范式基本一致。我这里介绍的是最通用的结构适合作为入门理解框架。2.2 图像编码器把二维信息压缩成全局特征输入图像进入模型后第一件事是编码。LRM通常选择预训练视觉模型作为编码器最常见的是ViT系列和DINOv2。这些模型在海量图片上预训练过已经学会了很强的语义、结构和纹理表达能力。为什么不用简单卷积网络因为后续需要把图像特征和3D空间对应起来Transformer中的全局注意力更容易建模“图像不同区域之间的关系”。比如一个杯子的手柄和杯身虽然在图像上相隔很远但通过注意力机制模型能意识到它们是同一个物体的一部分。这种全局建模能力对重建复杂交互场景非常重要。编码器的输出一般是一个特征序列每个特征对应图像中的一个位置。接下来就要把这些二维特征“铺”到三维空间中去。2.3 三平面表示三维特征的折中方案三平面triplane是LRM中最核心的3D表示方式。它的思想非常直观用三个正交的2D特征平面分别表示XY平面、XZ平面、YZ平面上的信息。对于空间中的任意一个3D点我们把它投影到这三个平面上然后通过双线性插值采样出三个特征向量最后拼接在一起作为该点的3D特征。为什么选三平面而不是直接使用3D体素一个关键原因是内存。体素网格的复杂度是O(N³)分辨率稍微提高一点显存就爆炸。三平面的复杂度是O(3N²C)也就是用三张2D特征图近似表达3D空间显存开销低得多同时依然保留足够强的表达力。在实际重建“人物体”交互场景时三平面还有一个额外优势它可以容纳多个物体共享同一个空间。人的手和杯子接触的位置会在三个平面上同时留下特征痕迹。模型通过拼接三个平面的特征能比单一体素更好地编码接触区域的空间结构。2.4 可微渲染NeRF与3DGS的配合三平面只是3D特征还不是最终图像。要训练模型必须把特征“渲染”回2D图像和真实照片计算损失。这一步通常由两种可微渲染器承担。第一种是NeRF风格渲染。对于每条相机光线在光线上采样若干3D点从三平面查询特征再送入一个轻量级MLP预测密度和颜色最后通过体渲染公式累加得到像素颜色。NeRF渲染质量高几何比较稳定适合训练阶段使用。第二种是3D高斯泼溅。它不采用连续场表示而是把场景表达成大量3D高斯原语每个高斯有自己的位置、协方差、颜色和不透明度渲染时通过可微光栅化快速输出图像。3DGS的渲染速度远快于NeRF特别适合实时交互应用。一个比较常见的工程组合是训练阶段用NeRF渲染保证几何质量得到三平面或高斯参数后再转换为3DGS用于部署。如果你在论文或项目中看到“LRM 3DGS”这样的描述指的就是这条路线。2.5 为什么大规模训练能带来泛化能力LRM真正神奇的地方在于它在训练阶段看过成千上万个不同类别、不同风格的3D样本。模型学会了从“形状线索”直接联想“可能的3D结构”。比如训练数据里有大量马克杯、手机、椅子、鞋子的多视角图。推理时模型看到一张从未见过的马克杯照片虽然拍摄角度不同但它能从训练记忆中提取类似的形状规律重建出合理的三维几何。类似的如果训练数据中包含大量手部抓握物体的视频模型也能逐渐学会“手在抓杯子时手指分布应该是什么样的”。这种数据驱动能力正是LRM能成为交互重建基础设施的根本原因。与此同时它也意味着训练数据的分布决定了模型的能力上限。人-物交互数据缺失、遮挡严重、标注困难都会直接影响重建质量。3. 人-物交互重建的独特难点3.1 遮挡与自遮挡交互场景中最直接的问题是遮挡。当手握住杯子时杯子的一部分被手指挡住手掌也被杯体挡住。当人坐在椅子上时椅背可能挡住人体的下半部分。这些遮挡信息在单张图像里是不可见的模型必须靠“猜”来补全。自遮挡同样棘手。人的两只手互相交握时左手指尖和右手指尖的轮廓混在一起分割网络难以区分物体被抓在手里时物体的边界和手部皮肤颜色可能非常接近。对LRM而言输入图像中的遮挡区域越多重建不确定性越大。这也是为什么当前很多交互重建系统会先单独做人和物的分割再分别重建以降低干扰。3.2 接触关系与物理一致性交互重建不仅仅是“把人和物分别重建出来”更要恢复它们之间的接触关系。一颗放在桌面上的苹果它的底部应该贴在桌面上一只正在被手握住的杯子手指和杯壁之间既不能有缝隙也不能穿透。如果只单独重建人和物然后把它们强行放进同一个坐标系结果常常出现两种问题一是人和物之间悬浮看起来完全不自然二是人和物互相穿透手“陷入”杯体内部。要解决这个问题通常在重建之后增加一个后处理优化阶段引入接触损失contact loss和穿透惩罚penetration penalty让接触区域的几何保持一致性。接触关系还包含语义层。同样是手和杯子的接触握杯柄和握杯身是两种完全不同的交互方式对后续机器人操作、AR动画合成的意义完全不同。只靠几何约束很难区分这种语义差异还需要结合图像识别和动作分类的结果。3.3 数据稀缺与标注成本LRM的泛化能力高度依赖训练数据。但目前公开的人-物交互3D数据集非常有限。原因很现实真实交互数据采集困难动捕棚只能捕捉人体姿态很难同步重建物体几何视频数据标注成本高逐帧标注人的SMPL参数已经很难再标注物体位姿和接触区域更是昂贵合成数据存在域差距仿真器可以生成大量真实标注但渲染出来的材质、光照和真实世界有差距直接训练出的模型迁移到真实视频时可能退化。不少团队正在尝试用“弱监督”方式缓解这个问题比如从普通视频中借助大模型预测深度图、光流场隐式学习交互关系或者用生成模型自动合成“人拿物体”的图片对。这是一条很有潜力的方向但离成熟还有距离。3.4 评估指标尚未统一交互重建效果怎么衡量目前大家还在探索。对于人和物的形状可以使用Chamfer Distance、F-Score、PSNR、SSIM等几何和图像指标。但这些指标衡量的是“单物体重建质量”不关心人和物之间的接触对不对。对于交互质量研究者会看接触区域的重合度、相对位姿误差、穿透体积等但不同论文的实现和口径差别很大很难直接横向对比。如果你要在自己的项目里评估交互重建效果建议至少同时报告三组指标单物体几何指标、人体姿态误差、接触/穿透指标。只报其中一个维度很容易得出误导性结论。4. 基于LRM的交互场景重建参考管线4.1 整体流程总览虽然目前还没有一个公认的“标准方案”但业界和学术界的做法有很强的共性。我整理了一条比较完整的参考管线按步骤拆解如下输入准备从视频或图像中抽取关键帧做目标检测得到人和物体的包围框掩码提取用分割模型把“人”和“物体”分别从背景中分离出来减少背景干扰姿态估计用现成姿态估计模型估算人的SMPL-X参数以及物体的粗略6D位姿分体重建把人和物体的掩码图分别送入LRM模型得到各自的3D表示三平面/网格坐标对齐根据相机参数、姿态估计结果把人和物放到同一个世界坐标系接触优化引入接触损失和穿透惩罚在保持单物体几何不变的前提下微调相对位置和姿态渲染与输出根据应用需要输出带纹理网格、3DGS场景或直接渲染成新视角视频。4.2 输入准备分割人与物体掩码提取看似简单却是整个管线里最影响最终结果的一步。如果掩码把杯子的边缘擦掉了一部分后续LRM就会少一个重要形状线索如果掩码把人的手指和杯子分到了同一个类人和物又会变成一个整体。下面是一段伪代码帮助你理解掩码提取的逻辑。实际运行时要根据你选用的分割模型调整接口。# 文件路径prepare_masks.py # 说明伪代码示意实际分割模型返回结构需要按所用版本调整。 import numpy as np def extract_human_object_mask(frame, segment_model): frame: [H, W, 3] RGB 图像 segment_model: 任意返回 label 和 mask 的分割模型封装 返回human_mask, object_mask形状都是 [H, W]取值 0/1 result segment_model.infer(frame) human_mask np.zeros((frame.shape[0], frame.shape[1]), dtypenp.uint8) object_mask np.zeros_like(human_mask) for item in result: label item[label] mask item[mask] if label in (person, human): human_mask[mask 0.5] 1 elif label not in (background, sky, floor): object_mask[mask 0.5] 1 return human_mask, object_mask需要注意这里把背景标签外的所有类别都当成“物体”。在实际项目中你可能只关心某几个目标类比如杯子、手机、椅子。这时应根据检测结果筛出目标框再在框内做精细分割而不是全图分割。4.3 分别重建图像到三平面拿到干净的人和物掩码后就可以分别送入LRM。由于人和物体的形状差异很大一个常见的做法是训练两个独立的LRM一个针对人体一个针对通用物体。人体模型可以额外加入SMPL-X先验作为监督物体模型则更依赖纯几何重建。下面是一个简化到“可以理解原理”的模型结构示例。它用几个2D卷积替代真实的ViT编码器用一层卷积输出三平面特征。这样做的目的是看清楚维度的流动而不是复现论文中的完整模型。# 文件路径minimal_lrm.py import torch import torch.nn as nn class MiniLRM(nn.Module): def __init__(self, triplane_channels16, feature_grid32): super().__init__() # 简化版图像编码器用 2D 卷积替代论文中的预训练 ViT self.encoder nn.Sequential( nn.Conv2d(3, 64, 4, 2, 1), nn.ReLU(), nn.Conv2d(64, 128, 4, 2, 1), nn.ReLU(), nn.Conv2d(128, 256, 4, 2, 1), nn.ReLU(), ) # 将 2D 特征映射成“三个平面”特征 self.triplane_head nn.Conv2d( 256, triplane_channels * 3, kernel_size3, padding1 ) def forward(self, image): # image: [B, 3, 256, 256] x self.encoder(image) # [B, 256, 32, 32] t self.triplane_head(x) # [B, triplane_channels*3, 32, 32] B, C, H, W t.shape # 拆成 xy、xz、yz 三个平面 triplane t.view(B, 3, C // 3, H, W) return triplane if __name__ __main__: model MiniLRM() image torch.randn(1, 3, 256, 256) out model(image) print(triplane shape:, tuple(out.shape)) # 预期输出triplane shape: (1, 3, 16, 32, 32)在真实LRM中encoder会换成预训练ViT或DINOv2triplane_head会变成多头注意力或交叉注意力层分辨率也会高得多。但数据流是一样的图像特征最后被组织成三组平面特征分别对应三维空间中的三个正交方向。4.4 对齐与接触优化分体重建完成后人和物都在各自的三平面空间里。此时如果要合成一个交互场景需要把它们对齐到同一个坐标系。对齐的第一步是尺度对齐。LRM输出的物体尺寸往往是归一化到单位框内的我们需要利用深度估计或物体检测框的像素大小恢复出真实尺度。第二步是位置对齐利用相机参数和人体姿态估计结果把人和物体摆放到大致正确的位置。对齐之后是接触优化。这一步直接决定交互真实感。常见做法包括在人手和物体之间采样若干候选接触点计算双向最近邻距离作为接触损失对穿透区域加惩罚项例如对每个穿透的顶点计算一个推向表面的力在优化时固定人体姿态只微调物体的位置和旋转防止整个人体变形如果使用可微渲染器还可以直接对三平面特征做端到端微调让接触区域的几何更自然。接触优化的难点在于平衡“接触紧密”和“不穿透”两个目标。手和物体之间必须足够近但又不能真的相交。这个平衡通常靠权重系数控制需要针对不同交互类型调试。4.5 渲染输出与验证优化完成后可以导出多种格式带纹理的三角网格OBJ/GLB适合游戏引擎、建模软件3D高斯泼溅场景文件适合实时交互设备新视角渲染视频适合快速效果展示和论文对比。验证阶段建议同时做定性和定量检查。定性方面渲染一个环绕视频重点观察手部、物体接触区域是否自然定量方面如果数据集有真值计算Chamfer Distance和接触IoU。如果没有真值可以抽样让标注人员判断交互是否合理。5. 环境准备与最小实验工程篇5.1 推荐环境与依赖下面是一份比较稳妥的环境参考具体版本需要根据你手头的GPU驱动和CUDA版本调整# 创建虚拟环境 cond
返回列表