ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

OnePose++:无CAD模型、无关键点的单张图像位姿估计新范式

2026/9/17 18:02:46 拓冰建站 浏览量
OnePose++:无CAD模型、无关键点的单张图像位姿估计新范式 做机械臂抓取和增强现实位姿估计的同学大概率都碰到过同一个灵魂拷问手里只有一台RGB相机、几张现场拍的照片没有CAD模型也没有物体表面的纹理细节到底能不能在一条新物体上快速做一次位姿估计传统答案通常很残酷——特征点匹配在无纹理物体上一塌糊涂PnP又绕不开稳定的2D-3D对应。OnePose这篇工作想解决的正是没有CAD模型 单张查询图 不依赖关键点这一整套组合问题。它是OnePose系列的第二代核心理念从找特征点然后匹配彻底转向了稠密对应 渲染比较。这篇内容适合正在做机器人操作、AR识别、开集物体位姿估计的工程师和研究生尤其是那些被没有模型文件和物体太光滑折磨过的人。我严格按照自己复现这个项目的经验来拆解它不打算只复述摘要而是把它的设计逻辑、实操细节和我踩过的坑铺开聊清楚。1. 一个没有CAD也没有关键点的位姿估计值不值得折腾1.1 拆题OnePose标题里的三个反常识关键词先把标题拆开看它有三个关键词几乎每个都跟主流的位姿估计范式对着干。第一个是One-Shot。意思是查询阶段只输入一张RGB图像没有视频序列可以做多视角融合也不允许用户围着物体转一圈采集数据。这种设置对工业视觉很有吸引力因为很多场景里物体是突然出现在传送带或者料筐里的你没法提前设计一场环绕拍摄。第二个是Keypoint-Free。过去十年基于特征点的匹配一直占据主导地位SIFT、ORB、SuperPoint、LoFTR这些名字大家都很熟。OnePose直接把这个层级干掉了不做关键点检测不做稀疏匹配而是预测逐像素的稠密对应。这不是简单的换了一个特征提取器而是整个位姿估计的中间表示都变了。第三个是without CAD Models。经典方法通常从已知CAD模型出发渲染模板或者提取3D特征用于PnP。OnePose斩断了这个依赖只用一组参考图像reference images就能完成物体身份绑定。对实际工程来说这意味着换产线的时候只需要拍几十张照片而不是去翻产品模型库或者重新做三维扫描。这三个词叠在一起实际上释放了一个非常重要的信号作者想把物体位姿估计从受控环境 模型资产 人工标注的束缚中解放出来做成一件可以快速迁移的事情。1.2 传统位姿估计到底卡在哪传统方法在逻辑上是自洽的先通过CAD模型得到物体的3D几何离线提取3D关键点和描述子在线阶段从查询图像中提取2D关键点在2D-3D之间做匹配然后用PnP求解相机位姿RANSAC筛掉外点最后用ICP或者局部优化精修。这套流程在纹理丰富、几何明显的工业零件上效果不错但真实世界不会每次都这么配合。卡壳的地方基本是这三处第一纹理。塑料外壳、纯色杯子、磨砂金属件这类表面在相机里几乎是信息荒漠提取出来的特征点又少又容易串。特征点的本质检测的是图像梯度结构无纹理物体在梯度层面就没有多少可检测的独特标记。第二关键点的可重复性。同一个物体换个视角再拍一遍关键点位置会发生偏移尤其是弱纹理区域检测器经常在相邻几帧里输出完全不同的关键点集合。第三对称和重复结构。圆形法兰、饮料罐、圆柱形瓶子这些物体的表面在不同角度下长得非常接近稀疏特征匹配很难区分这个视角和那个绕轴转了30度的视角。我把关键点匹配比作看书时只靠每页的红色标记来定位内容弱纹理物体就像一本没有标记的书阅卷人能力再强也无从下手。OnePose的思路则是不给标记直接把整页文字做成图像比对换一条完全不同的路。1.3 这套方法最适合哪类落地场景从我个人的观察来看OnePose最合适的落地场景有三类。第一类是机械臂无序抓取。工厂里新工件往往没有CAD模型或者模型与实际注塑批次有公差偏差传统的基于模型位姿估计很难快速上架。如果能在几分钟内拍摄一组参考图让系统学会这个工件的长相和几何关系抓取系统就能立刻投入工作。第二类是AR内容摆放与电商视觉。很多消费品没有全尺寸三维模型但商家可以提供几张多角度商品图。OnePose可以帮助AR应用在真实桌面上识别并摆放一个虚拟商品不需要预先的工程建模。第三类是服务机器人在开放环境中的感知。用户随手从柜子里拿出一个杯子或遥控器机器人之前从未见过它也没有对应模型库。这种开集场景下参考图集很快就位它比逐个物体维护CAD库要现实得多。当然它也不是万能的对于完全无纹理且没有任何几何轮廓的物体单目RGB做one-shot位姿估计仍然有天花板这一点后面我会专门展开。2. 先用参考图集搭出物体身份再谈位姿2.1 用SfM把参考图变成粗3D点云CAD就退场了OnePose的整套流程里第一阶段是物体身份构建准备一组覆盖物体各个视角的参考图像然后通过运动恢复结构SfM算出每张参考图的相机位姿同时生成物体的三维稀疏点云。实际做的时候参考图像来源一般是两种。一种是用RGB相机围着物体转一圈录一段视频然后均匀抽帧另一种是直接用多张相机从不同角度拍摄的静态图。无论哪种SfM都能在大部分场景下解出相机位姿和稀疏三维点。工具方面大家用得最多的是COLMAP增量式SfM已经是社区里的标准选择。配置不需要太激进默认的SIFT特征检测配合sequential matching或者exhaustive matching都可以。需要注意的一个坑是参考图的视角覆盖必须充足最好覆盖一个半球而不是只在正面拍。否则SfM重建出来的点云只覆盖物体正面一小块后面的稠密对应和SDF都跟着崩。在这一步之后CAD模型已经退场了。物体的几何信息由参考图集和其重建出的点云来表征新物体上线的成本就从建模需要几天变成了拍图加重建需要几分钟。2.2 物体级SDF比纯点云更适合做可微优化拿到SfM点云之后直接拿点云做位姿优化行不行行但在可微渲染和render-and-compare的框架里并不方便。点云是离散的没有连续表面的概念梯度在点与点之间会断裂。OnePose在参考阶段会进一步把物体几何拟合成为一个SDFSigned Distance Function符号距离函数也就是在三维空间里建立一个标量场物体表面所在的位置函数值为0物体外部为正内部为负。为什么要绕这一步因为SDF天然适合做可微渲染和位姿精修。你可以在表面附近对SDF求梯度从而把渲染图与查询图不一致的误差逐步反传回6自由度位姿参数。这就像在山上通过测量海拔高度来定位等高线一样比单纯依赖一棵一棵树的离散坐标要稳定得多。实际拟合SDF的方式有很多常见做法是从SfM得到的稠密点云出发用体素网格或轻量神经场去逼近一个有符号距离场。有RGB-D相机的情况下可以把深度图直接融合进SDF构建这样得到的几何会更厚实只有单目相机的话就用SfM点云加单目深度估计来补。作者团队在论文里用的是物体级SDF这一点很关键。它不是在整张场景上建场而是把目标物体从背景中分离出来只对物体占据的空间做建模。好处是后续渲染时的遮挡关系更清晰优化时也不会被背景拖累。2.3 单目深度估计如何补上最后一公里只靠SfM稀疏点云是远远不够的因为后续想在查询图像的每个像素上都建立2D-3D对应必须知道参考图像中每个像素对应的3D位置。稀疏点云只在少数特征点上有深度无法支撑逐像素的映射。所以OnePose这类方法往往会引入单目深度估计网络来补完参考图的像素级深度。用DPT这类预训练模型为每张参考图生成一个稠密深度图但单目深度估计有一个老问题它预测出来的深度尺度和真实物理尺度不一致。好在SfM已经给出了相机位姿和真实尺度信息所以可以把单目深度做一次全局对齐缩放和平移SfM点云尺度让深度图在尺度上逼近真实值。这样每个参考图像素有了深度再配合对应相机位姿就能把每个像素背投到三维空间中去形成一个稠密的三维点云。如果手头有条件直接用RGB-D相机采集参考图是最省心的方式深度误差远小于单目估计。但纯单目的方案也让这套方法在没有深度传感器的老产线上具备了可落地性这是它很加分的地方。3. DenseCorrespondenceNet把匹配问题变成学习问题3.1 为什么稀疏关键点在真实物体上不够用OnePose里最核心的模块是DenseCorrespondenceNet一个专门用来预测稠密对应的网络。要理解它为什么是Keypoint-Free的得先想明白另一个问题既然SuperPoint、LoFTR已经这么强了为什么还要另起炉灶这些先进匹配器本质上仍然在寻找图像中足够独特的局部结构。所谓独特就是可以被稳定检测、被准确描述的东西。但真实的物体表面经常缺乏这种结构。一个纯色杯子、一个磨砂圆管、一块没有任何刻字的金属盖板它们的图像梯度非常微弱关键点检测器找不到足够多、足够稳定的点。即便LoFTR这种基于Transformer全局匹配的方法能给出相对稠密的匹配它在本质上还是以找到可区分位置为导向的面对极度弱纹理或重复纹理时匹配结果会产生大量歧义。OnePose的取舍是不要关键点这个中间人。它让网络直接回答一个更原始的问题——查询图里的每一个像素到底对应参考图里的哪个像素这是一个逐像素的稠密对应场预测本质上已经超越了特征点检测 描述子匹配的经典管线。3.2 稠密相关体与soft-argmax核心数学直觉DenseCorrespondenceNet的输入是查询图和参考图输出是两张图之间的稠密对应关系。这一步背后的实现思路在视觉社区里已经比较成熟可以拆成三个步骤理解。第一步把查询图和参考图分别输入一个共享编码器得到两张高分辨率特征图。编码器的选择可以是卷积网络带FPN也可以是视觉Transformer目标都是把语义和局部纹理信息编码成逐像素的特征向量。第二步计算两个特征图之间的相关性矩阵也就是相关体correlation volume。简单来说对于查询图上任意一个位置它和参考图上每个位置都可以算一个特征向量内积形成一个二维的响应热图。这个热图表达了查询图这一像素在参考图各个位置上的相似度分布。第三步使用soft-argmax把热图转化为连续的亚像素坐标。对响应图做softmax再对坐标位置求期望得到的就是一个可微的、能输出浮点精度的对应坐标。soft-argmax的好处是它可导这让整条梯度通路从位姿参数一直连到网络权重都是畅通的。最终得到的结果是一张稠密的2D-2D对应图再结合参考图的深度图就能把查询图像的每个有效像素映射到物体三维坐标。这种设计等于把原来检测关键点 描述 匹配的离散流程换成了一个端到端可学习的连续回归问题相关性构建得非常自然。3.3 训练数据与一致性约束不止是有监督这么简单训练DenseCorrespondenceNet的时候最理想的情况是拿到大量带真实对应关系的数据对。但真实场景中逐像素标注对应关系非常昂贵所以实际训练通常采用合成数据加真实数据混合、再辅以多种自监督约束的方案。合成数据很容易生成渲染物体在不同视角下的图像利用已知相机位姿和深度图可以直接算出每一对像素之间的真实对应关系。用这种方式做预训练让网络先具备一个原始的相关性感知能力。真实数据阶段常见做法是利用已有的粗匹配器比如LoFTR或SuperPoint生成的匹配作为伪标签或者引入循环一致性约束。循环一致性的意思是查询图某个像素对应参考图某个位置那么参考图那个位置再反查查询图应该回到原来的像素附近。这个约束可以显著抑制错误对应尤其是在对称物体和重复纹理区域。对称物体还有一个特别的问题绕轴旋转后的外观几乎不变网络可能会在多个等价位姿之间犹豫。应对方法通常是采用对称感知的对应损失在损失函数里考虑物体本身的对称群允许同一外观的多个对称对应共享损失下降路径而不是强制网络硬拟合一个其实并不唯一的目标。4. Render-and-Compare从假设-验证到梯度下降4.1 为什么PNPRANSAC在无关键点下会失效看到这里你可能已经发现DenseCorrespondenceNet输出的是一堆稠密对应但OnePose并没有走我们熟悉的用对应关系 PnP RANSAC求解位姿老路。为什么不走PnP的输入是若干组可靠的2D-3D对应它本身的数值解法很成熟RANSAC又能在一定比例外点存在时保持鲁棒。但这一切成立的前提是匹配质量足够好外点比例足够低。在无纹理或重复纹理物体上稠密对应虽然比稀疏关键点多了很多但里面也夹杂着不少噪声和错误对应如果把这些带噪对应直接塞给PnPRANSAC的迭代次数会暴涨解出来的位姿也容易在某些半对半错的对应分布下落入局部最小值。OnePose换了一个思路先产生一个粗位姿假设然后把这个假设放到渲染-比较回路里做非线性优化。这个思想有点像Lucas-Kanade光流里的图像配准把位姿估计当成让模板渲染结果与观测图像尽可能一致的图像对齐问题而不是找到几个点然后解方程的代数问题。4.2 可微渲染的比较回路怎么设计Render-and-Compare的回路可以分四步走。第一步给定当前位姿假设利用物体级SDF做渲染生成物体在该位姿下对应的图像。这一步要用到可微渲染器典型做法是光线步进ray marching从相机光心出发发射大量光线用SDF的连续场求出光线与物体表面交点再获取对应特征或颜色。第二步把渲染结果与查询图像的特征图放到同一个特征空间里比较。直接比较RGB值对光照太敏感工程上更常比较的是由特征提取网络输出的高层特征或者在多个分辨率尺度上同时比较。这样既保留了几何轮廓信息又降低了对绝对颜色和光照的依赖。第三步把渲染-比较的误差比如逐像素特征距离的加权和通过可微渲染器反向传播到位姿参数上用梯度下降更新位姿。因为SDF是连续的渲染过程是可微的所以这条梯度通路是完整的位姿参数会朝渲染结果更像观测的方向移动。第四步重复多轮迭代直到收敛。实际实现中通常会从低分辨率渲染开始粗对齐再逐步提高渲染分辨率和特征尺度做精修这样既能避免陷入局部极值又能兼顾运行速度。4.3 从粗到细的位姿精修与多视图约束粗位姿从哪里来OnePose不是完全放弃对应关系它在初始阶段仍然会利用DenseCorrespondenceNet的输出做一次轻量求解得到一个大致差不多的位姿初值。区别在于这里不再指望初值一步到位只要它落在正确的收敛域内就行后续交给render-and-compare精修。这个过程很像先把拼图大致拼到一起再盯着拼图细节一块块压实。粗阶段容忍一定的对应噪声细阶段用全局几何一致性把噪声逐步磨掉。如果实际应用中有连续的视频流而不是单张图还可以进一步把多帧位姿放在一起做联合优化利用时间一致性约束抑制每一帧单独估计时的抖动。这也是OnePose系列在动态场景下能保持稳定跟踪的一个隐藏技巧。5. 实测踩坑复现OnePose最容易翻车的四个环节5.1 参考图像的拍摄质量比你想的更敏感我在自己项目里第一次跑通OnePose时以为参考图随便拍一拍就行结果栽了个大跟头。因为我用手机围着物体转了一圈但转得太快、画面模糊加上镜头曝光在亮背景和暗背景之间跳变SfM重建出来的点云稀疏得可怜后面的SDF拟合出来一块豆腐渣几何位姿估计自然半天调不回去。参考图的采集是有讲究的第一是视角覆盖争取让物体表面每个可见部分至少在两张图里出现最好覆盖一个半球范围第二是光照尽量均匀避免高光、过曝、大面积阴影第三是帧与帧之间的运动不要太大如果录视频抽帧间隔几帧抽一帧比连续帧抽更合理。采集完之后我还会用COLMAP重建时输出的重投影误差做一次帧过滤误差高的帧直接丢弃再重建一轮。这步对后续精度提升非常明显。5.2 对称物体的表面匹配陷阱对称物体是位姿估计领域的老大难OnePose也没能彻底绕开它。一个圆柱形杯子的参考图绕轴旋转30度之后外观几乎一模一样DenseCorrespondenceNet输出的对应关系在多个等价位姿之间摇摆render-and-compare也容易收敛到其中一个合法解上。针对这个问题我建议在做评测和部署时都使用对称感知指标也就是允许位姿误差在物体的对称群下做归一化。对于机械臂抓取实际的判断标准往往是夹爪能不能成功抓取而不是角度误差是不是小于5度所以只要渲染出来的视觉外观接近真实观测对称歧义是可以接受的。在训练时用对称感知损失比后期硬约束要有效得多。5.3 深度估计误差如何被SDF放大如果你没有RGB-D相机只能靠单目深度估计补参考图深度那一定要小心这个坑单目深度估计算法在物体边缘和薄壁结构上经常出现深度突变或弥散经SfM尺度对齐后仍然存在非刚性的误差。这些误差进入SDF拟合之后会被平滑成一个看起来不太对劲的几何体进一步影响渲染比较的梯度。我的经验处理办法有三个。第一在SfM点云上做离群点剔除比如依据重投影误差和三角化角度过滤。第二深度图与SfM对齐时不要只做全局缩放最好按局部区域做一次细粒度对齐。第三SDF拟合时给远离点云的区域施加平滑正则防止它出现不必要的几何漂移。5.4 显存与batch size量化速度的取舍OnePose最大的工程痛点是显存占用。稠密相关体的计算量随特征图分辨率呈二次增长如果你在1080P原图上直接构建查询图和参考图之间的相关体显存会瞬间爆掉。我实际操作下来常用的配置是把输入分辨率缩放到480p左右或者对参考图做一次检索筛选——先用全局描述子找到最相似的几张参考图再对这几张图分别计算相关体。这样既能把显存控制在单卡可承受范围内也能提升匹配质量因为全局检索本身已经排除了大量明显不相关的参考图。推理速度方面用一块中高端GPU粗位姿加精细优化整体大概在几十到两百毫秒之间具体数值取决于迭代次数和渲染分辨率。实时性要求特别高的场合可以降低精修迭代次数或者把精修放到跟踪阶段再做查询阶段先要一个够用的粗位姿。6. 和主流方案横向对比什么时候选择OnePose什么时候别选6.1 OnePose 对比传统特征匹配位姿估计直接拆开对比的话OnePose和传统方法之间有几条明显分界线我放在下面这张表里。维度传统特征匹配位姿估计OnePoseCAD模型依赖通常需要不需要输入要求单张或多张RGB/RGB-D单张RGB查询图 参考图集关键点依赖注册阶段要稳定检测不需要弱纹理表现差关键点数量不足较好靠稠密对应兜底对称物体容易产生歧义失效需要对称感知的损失和评估工程准备时间建模/扫描周期长几分钟拍一组参考图推理阶段费用较低相对更高包含渲染迭代这张表最大的信息量在于工程准备时间这一行。传统方案在精度稳定时确实强悍但前期模型资产准备非常重OnePose把这个代价削到了极低这对快速换型生产场景来说价值巨大。6.2 OnePose 对比CAD-based的RGB-D方法CAD-based的RGB-D方法在机器人抓取中也非常流行比如PVN3D、FFB6D这一系它们利用RGB-D点云做特征提取通过投票/匹配直接回归物体位姿精度在已知物体上相当能打。但它们的共同前提是每个待抓取物体都有一个精确的三维模型参与训练或注册。差异在于CAD-based方法把几何先验透支得很彻底换来的是高精度和高稳定性OnePose不依赖精确几何换来的是快速迁移新物体的能力。一个典型的场景对比产线上有一千个不同的工件每个都有CAD模型用CAD-based方法可以做到很高精度但如果每周都有几个新工件进来且没有设计数据那OnePose这类参考图方案就明显更合适。实际项目里也可以做一个混合架构已知物体走CAD-based未知或新工件走OnePose的参考图流程两条线互补。6.3 我的选型建议基于我测试的结果和社区里已有的反馈我的选型建议是这样的如果物体表面极度光滑、完全没有纹理并且你只有单目RGB相机OnePose只能说能用但不一定稳这种情况我更建议上结构光或RGB-D传感器或者用偏振相机补充几何线索。如果场景允许你快速拍摄参考图但物体种类变化频繁OnePose几乎是目前最值得先试跑的方法。先把参考图拍好再跑通SfM与DenseCorrespondenceNet通常能很快判断这个物体适不适合这条路。如果你追求的是已知物体上的极致位姿精度手里又有CAD模型那CAD-based的RGB-D方法依然是第一选择OnePose的强项不在榨干最后一个毫米级精度。我实际跑下来的最大感受是OnePose更大的贡献不是把精度刷到某个榜单第一而是重新定义了一条工作流——它把给一个物体做位姿估计的门槛从建模和标注降到了拍一组照片。这套思想在机器人抓取和AR应用里是能直接产生价值的东西。最后分享一个对我帮助很大的小技巧在SfM重建阶段不要做一个一次性流程先粗跑一遍把重投影误差高的参考帧删掉或重拍然后基于过滤后的帧再跑一遍完整重建。这一步多花十分钟换来的是后面整个SDF精度的质变特别是对弱纹理物体效果肉眼可见。