资讯动态

双路图补全:让机器人理解物体如何合理放置

发布时间:2026/10/14 1:14:15 来源:尧图企业网站定制
给机器人下达把马克杯放到茶几上这种指令很多人第一反应是抓取难。真正跑过感知规划全流程之后你会发现更难的是后半句中的放杯子应该放在茶几的哪个区域杯把手朝哪个方向旁边放着一摞书和遥控器对放置位置有没有影响物体放置Object Placement任务就是在解决这类问题。《基于双路图补全的物体放置》这篇 ECCV 2022 的工作用一个图补全的思路把这件事做了重新定义——不是直接回归一个坐标点而是先把场景中物体之间的关系建模成图再把待放置物体当作图上缺失的节点补进去。这篇文章值得做具身智能、场景理解、机器人操作方向的同学反复读几遍它把关系推理和几何预测衔接得很自然很多思路可以直接迁移到自己的项目里。1. 物体放置为什么不是找到一块空地那么简单1.1 任务定义输入、输出与评估口径先把这个任务的基本盘说清楚。物体放置的输入通常有两部分一是当前场景的观测一般是 RGB-D 图像或者重建出来的点云二是待放置物体的模型或者单视角点云。输出则是一个 6 自由度的放置位姿——位置三个自由度和旋转三个自由度也就是把物体放在哪、以什么姿态放。看起来像一个纯几何问题但评估时真正卡人的是语义合理性物体不能穿透支撑面、不能悬空、不能互相重叠同时还要符合人类对场景布置的直觉。举个例子同一个茶几把杯子放在桌沿和把杯子放在桌面中央在几何上都成立但人类会觉得前者是不安全的摆放。把马克杯放在一本书上面几何上也成立杯子底部能接触书封面但语义上很奇怪。更复杂的情况是场景里有电水壶、手机、眼镜、零食袋杯子放得离电水壶近一点是合理的放在手机正上方就很不合理。这些约束叠加在一起问题就从找一个不碰撞的位姿变成了找一个既满足物理约束又满足场景上下文约束的位姿。1.2 几何约束、语义约束和上下文约束要同时满足很多人第一次接触这个任务时会低估难度觉得不就是找个平面然后把物体放上去吗真正实现过一遍就会发现三类约束必须同时满足缺一个都会让结果变得不可用。第一类是几何约束。物体底部需要与支撑面充分接触不能有穿透也不能悬空太多。第二类是语义约束。不同类别物体有自己的功能支撑面偏好杯子偏好桌面、台面、托盘书偏好书架层板、桌面上而拖把则偏好立放在墙边或地面上。第三类是上下文约束。物体之间的关系会影响放置位置的合理性比如咖啡杯要放在咖啡机旁边而不是三米外的墙角。论文里通常把这三类约束统一建模成物体之间的关系——这些关系包括支撑、靠近、遮挡、避让等等。一旦关系定了几何位置也就跟着被约束住了。1.3 和场景生成的本质区别补全而非生成这里特别想强调一点物体放置和从无到有生成一个房间布局是两码事。场景生成需要设计整个房间的物件布局目标是把所有物体的摆放位置一次性规划出来。而物体放置更像是补全——场景中大部分物体已经摆好了目标物体是后来插入进来的模型要做的是理解已有物体之间的关系然后把新物体插入到一个合理的空缺位置。这个差异直接决定了方法设计的走向。生成类方法关注全局分布而放置类方法必须关注局部上下文尤其是目标物体周围邻居的类别、位置和支撑关系。这篇文章用图补全而不用图生成正是抓到了这个任务的内核。2. 从直接回归到双路图补全三个动机与一个关键选择2.1 直接回归位置为什么总是差一口气早期的物体放置方法典型的做法是把场景点云编码成一个全局特征向量然后回归目标物体的位置和朝向。这种思路实现简单但我在实际测试中发现它有很明显的天花板。第一全局特征压缩之后会把局部细节抹平模型很难知道目标物体旁边有哪些具体物体、各自是什么关系导致输出的位置经常落在大面积平面附近但和周围物体的关系完全不对劲。第二直接回归天然有取平均的倾向。训练数据里杯子可能出现在桌面的十几个不同位置回归头学到的往往是这些位置的均值点而不是某一个语义上最合理的位置。第三直接回归的结果几乎不可解释。模型说杯子应该放在某个坐标但没人知道为什么排查错误时只能靠肉眼一帧一帧看。如果把关系作为中间产物显式建模出来问题就被拆解成了一个可解释的推理过程杯子应该被某张桌子支撑、应该靠近咖啡机、应该避开显示器——这些关系都有了位置就是水到渠成的事。方法思路局部关系感知全局一致性可解释性数据效率直接回归弱中差低场景图引导强强好中双路图补全强强好高2.2 为什么选择图结构来表达物体间关系把关系建模出来这件事用图结构是自然的选择。图里的节点对应场景中的物体也可以包含支撑面节点节点特征可以编码类别、外观、几何尺寸、位置等信息图里的边对应物体之间的关系例如杯子在桌子上面杯子在咖啡机旁边。图结构最大的优势是消息传递。设计上每个节点可以通过消息传递聚合邻居的信息也就是说目标物体节点可以逐步感知周围物体的类别和位置分布这个过程非常接近人类判断我应该把杯子放在哪里时的推理习惯先看周围有哪些东西再根据功能关系确定候选区域最后落到一个具体的几何位姿。相比之下全局特征编码丢失了这种邻域结构而栅格化的场景表示比如体素又过于刚性很难把类别、关系这类符号信息嵌入进去。图示化建模做法的另一个好处是可以在图上做关系补全——检测器漏检了某个物体、某条关系没有被显式提取出来图模型可以通过邻居推断把它补上这正好契合了真实视觉系统中感知不完美的场景。2.3 双路到底是什么意思场景内部关系与目标-场景关系从题目可以看出这篇文章强调双路图补全这可以理解为两条信息通路一条是场景内部关系补全一条是目标物体与场景之间的关系补全。两者共享底层特征提取和图编码结构但承担的任务不同。前一条路负责把场景里原有物体之间缺失的关系补齐。现实场景中传感器会漏检、遮挡会造成物体看不到直接从观测构建的场景图必然是不完整的如果不做内部补全后面所有推理都会建立在一个残图上。后一条路负责处理目标物体目标物体作为一个待插入的新节点一开始和场景中的所有节点之间都没有边补全模块要做的是预测这个新节点与每个场景节点之间可能存在的关系尤其是支撑关系放到哪个物体上和邻近关系放在哪个物体旁边。把这两条路分开而不是塞进同一个编码器好处是内部关系补全和外部关系补全的对象、数据分布都不一样分开训练更容易收敛也方便单独调试和评估。双路结构的设计动机就来源于这里。3. 双路图补全的整体流程从场景图构建到 6 自由度位姿输出3.1 场景图的构建从原始点云到节点与边的表达整个方法的第一步是把原始观测转成图结构。流程大致分为三步先对场景做实例分割拿到每个物体的区域掩码或点云子集然后为每个物体实例提取节点特征特征一般包括类别语义嵌入、点云几何描述子、归一化尺寸和中心位置最后根据物体之间的空间关系初始化图的边。这一步在实现时非常考验工程功底。实例分割的网络如果质量不高漏检的物体直接变成图中不存在的节点补全模块再强也无济于事。节点特征里类别信息可以通过类别名称的词向量或可学习嵌入得到几何信息可以直接对物体点云做一个小型编码器输出特征向量。边的初始化则通常依赖类别先验和空间重叠/距离判断——如果两个实例在空间中靠近且一个的包围盒顶面接近另一个的底面就会触发候选支撑关系。我在自己的复现经历中体会到这一步宁可多初始化一些候选边也不要漏边因为后端的补全模块擅长去伪存真但对完全缺失的边无能为力。3.2 图补全模块两类关系预测任务在常见的公开实现和论文表述中图补全模块是一个消息传递网络输入是初始化的图输出是更新后的节点特征和边特征。对边特征做分类就能得到关系类型对候选边的置信度进行排序就能得到目标物体与场景中每个物体之间可能的放置关系。场景内部关系补全这条路上边分类的目标是该物体对之间的关系是什么训练时用场景中真实关系标注做监督。目标-场景关系补全这条路上目标物体节点以零初始化或特殊编码初始化加入图中它与所有场景节点之间生成候选边网络在消息传递过程中让目标节点和周围节点反复交换信息最终输出每条候选边的关系类型得分与几何偏移量。这两条路的本质差别在于前者是边的属性分类后者是边的存在性与属性联合推断。在实际操作中后者的难度更高因为目标节点初始时没有可靠的邻居上下文需要多轮消息传递才能慢慢定位自己在场景中的位置。复现时建议把图网络的层数调大一些至少四到六层单层或两层很难让信息流动到位。3.3 从关系预测到 6 自由度放置位姿有了目标物体与每个场景物体的关系得分之后接下来要得到具体的位姿。一个稳健的做法是先生成候选放置位置再做细化回归。候选位置可以从场景的可支撑面采样比如检测到的桌面、地面、层板、托盘等平面区域也可以从图网络的边预测中产生通过关系得分选出最有可能的支撑物体然后在该物体表面采样若干个候选位置和朝向。这样做的好处是把连续空间的回归问题变成了有限的离散候选 局部的连续细化大幅降低网络的学习难度。细化阶段通常输入局部场景点云以候选位置为中心裁剪和目标物体点云输出位置偏移和旋转。旋转部分的表示很关键直接回归欧拉角或四元数在训练中容易不稳定我见过不少工作改用连续 6D 旋转表示也有工作直接预测归一化的坐标轴朝向。论文中大概率也是在这一步做了类似的工程处理让网络在离散候选附近做小范围调整比从头回归一个大范围位姿要可靠得多。3.4 训练目标关系分类与位姿回归的多任务设计这个方法框架的损失函数大致由三部分组成边关系分类损失、放置候选选择损失和位姿回归损失。边关系分类损失可以用标准的交叉熵对场景内部关系边和目标-场景关系边分别计算候选选择损失通常是一个点到最优点位姿的距离度量让网络学会挑选接近真值的候选位置位姿回归损失则用位置误差加上旋转误差旋转误差一般用角度差值计算。整个训练过程最容易出问题的是多任务之间的权重平衡。关系分类任务和位姿回归任务的损失量级不一致如果权重设置不当会出现分类收敛得不错、位姿一团糟或者反过来。我的经验是先固定关系分类的权重把位姿部分做成不确定性加权损失让网络自动调节两部分权重。下面给出一段我复现类似框架时常用的伪代码流程可以帮助理解整体前向逻辑def forward(scene_pcds, target_pcd, target_cls): # 1. 构建场景图 nodes encode_nodes(scene_pcds) # [N, d_node] candidate_edges init_candidate_edges(nodes) graph build_graph(nodes, candidate_edges) # 2. 双路图补全 # 场景内部关系补全 graph message_pass_blocks(graph, maskscene_internal) scene_rel_logits classify_edge(graph, subsetscene_internal) # 目标-场景关系补全 target_node encode_target(target_pcd, target_cls) # [1, d_node] graph add_target_node(graph, target_node) graph message_pass_blocks(graph, masktarget_scene) place_rel_logits classify_edge(graph, subsettarget_scene) # 3. 候选位姿生成与细化 candidates sample_candidates(scene_pcds, place_rel_logits) place_scores score_candidates(candidates, graph) refined_poses refine_on_local_pcd(candidates, target_pcd) # [N_cand, 6] return place_rel_logits, place_scores, refined_poses4. 实验对比与消融结果里最值得关注的几个信号4.1 数据与指标看放置任务到底用哪些细粒度指标这类工作一般会先在公开的三维室内场景数据集上做验证再辅以合成数据和真实扫描数据的对比实验来考察模型的泛化能力。评估指标方面除了常见的放置成功率预测位姿与标注位姿的误差小于某个阈值、且满足碰撞检测细分下来还有位置误差、旋转角度误差、关系预测准确率等等。只看成功率容易忽略旋转问题——有时候位置对了杯子却歪着放这在实际机器人操作中完全不可接受所以角度误差这个指标对物体放置来说尤其重要。从论文常见实验设置来看训练时用大量场景配置合成的带标注数据测试则同时覆盖合成场景和真实场景扫描有的还专门做一些未见过场景布局的泛化测试。对于放置关系这个任务细粒度指标比分桶成功率更值得关注因为关系预测对了而位姿差一点和位姿准了但关系错乱在错误模式上完全不同对应的后续处理手段也不同。4.2 关键对比双路图补全能带来多少提升这类论文中最常见的对比是和无图结构基线和单路图补全做比较。无图结构基线通常直接把场景点云编码后回归位姿单路图补全则只做目标-场景关系补全不做场景内部关系的补全。实验结论上双路图补全在关系预测准确率和放置成功率上都会领先尤其是在场景中有漏检或遮挡的情况下场景内部关系补全带来的增益会很显著。一个有意思的细节是在不同类别的物体上增益幅度并不均衡。对功能属性非常明确的物体比如杯子、鼠标双路图补全的优势巨大因为这些物体的放置位置与周围物体的关系高度耦合而对放置自由度很高的物体比如抱枕、装饰品增益相对有限——因为这类物体怎么摆都有合理性关系约束不足模型难以学到明确规律。看实验结果时建议把分物体类别的结果表完整看一遍平均指标的提升往往掩盖了这种非常有意思的类别异质性。4.3 消融实验里藏着哪些设计学问消融实验通常围绕这几个维度展开去掉场景内部补全、去掉目标-场景关系监督、换成直接回归位姿、修改消息传递层数。我自己看这类消融最关注两个结论一是场景内部关系补全是否真的对最终放置有效二是关系预测误差是否会传导到位姿误差。更值得玩味的是关于目标节点初始化方式的消融。如果用场景中其他物体的平均特征来初始化目标节点效果会明显差于使用目标物体自身的点云编码。这说明目标物体的外观语义信息对整个推理过程非常关键——节点不能只是等待被补全的空壳它自身携带的类别和外观特征同样参与了消息传递的每一轮聚合。消融里如果发现这一项对性能影响巨大刚好印证了模型是靠特征引导关系推理而不是靠场景平均完成一个公式化填空这两者在泛化到新场景时的表现完全不一样。5. 复现和部署时容易踩的坑几何细节、数据质量与工程权衡5.1 点云质量和实例分割是上游瓶颈这个方法框架对上游感知质量的要求相当高。如果你用现成的实例分割模型去跑会发现很多物体在图中是缺失的尤其是小物体、透明物体和被遮挡严重的物体。场景内部补全虽然可以补关系但补不回节点本身。在实际部署时可以考虑给上游加一个物体提议模块把置信度较低但覆盖率较高的区域也纳入候选节点把节点遗留给补全网络去处理。另一个经常被忽视的问题是支撑面的提取质量如果点云法线估计不准可支撑平面检测就会出错候选位置采样直接全部偏移。建议在预处理阶段对点云计算法线时增大邻域半径并做多帧融合尽量避免单帧深度图的噪声。5.2 训练稳定性的三个老问题复现时最容易让人反复折腾的是训练过程不稳定。第一个问题是类别不平衡场景中支撑类物体桌面、地面、托盘很多而被支撑类物体杯子、书、手机相对少关系分类的正负样本比例悬殊轻则收敛慢重则完全偏向多数类。建议对关系边做采样平衡保证每个批次里支撑关系的比例在一个合理范围。第二个问题是图网络过平滑消息传递层数过多时所有节点特征趋向一致目标节点和场景节点难分彼此关系预测退化。可以给消息传递加残差连接或者在实验中直接对比不同层数选一个最优折中。第三个问题是旋转回归的稳定性这是几乎所有位姿预测任务都会遇到的问题用连续旋转表示配合角度余弦损失通常比直接回归四元数更稳定。5.3 从论文模型到机器人系统的真正落地论文里的精度指标和真机上的可用性之间还有一道很长的工程沟。真机执行时图补全模型输出的位姿只是一个语义合理的预期位置但机械臂要从当前姿态运动过去路径规划还需要做避碰检查。这里我的建议是把模型输出的位姿当作一个高先验候选再配合一个碰撞约束的优化步骤比如把候选位姿投影到最近的无碰撞位姿空间而不是直接送运动规划器。部署时还有一个容易被忽视的点深度相机放置高度和角度会影响场景点云覆盖率桌面上层的物体可能被下层遮挡直接影响场景图的构建。我的习惯是在机器人到达目标区域前先做一次多视角扫描融合让场景点云尽量完整之后再跑图补全模型。如果执行时间预算紧张可以对双路中的场景内部补全做加速处理因为这个模块在不同步骤之间变化不大可以按一定频率复用结果只有目标-场景关系补全需要实时运行。6. 我对这项工作和后续方向的几点体会把这篇论文的思路完整走一遍之后我最大的感受是物体放置问题真正难的不是几何回归而是把看不见的关系显式地建模出来。人之所以能在一张乱糟糟的桌子上快速找到放杯子的位置靠的不是对平面几何的精确计算而是对物体功能、空间关系和场景习惯的综合判断。图补全恰好把这个过程拆成了机器能学习的步骤这让它的可解释性和后续扩展性都远好于端到端直接回归类方法。从实用角度看这套双路思想也不局限于杯子放桌面这类简单场景。它可以迁移到工业场景的零件摆放、按语义整理房间、甚至虚拟现实中的自动场景布置凡是需要在已有布局中插入一个新实体的任务都可以考虑用图补全来建模。我自己在实际项目里做过一次小型验证用类似的思路处理在仓库货架上放置新入库商品的问题把货架已摆放商品建模成场景图把新商品当作待补全节点效果比纯规则方法灵活得多。如果后面沿着这篇论文的方向继续做我自己会优先关注两个切入点一是动态场景中的增量放置物体之间的关系会随移动而改变图结构要能持续更新二是轻量化部署目前图补全加上位姿细化在嵌入式设备上的实时性还不理想需要做结构剪枝和推理加速。对于刚入门这个方向的同学我也建议不要急着马上堆模型先把自己的问题定义清楚你要解决的是几何合理性、语义合理性还是两者都要不同的侧重点会把你引向完全不同的技术路线。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑