做机器人抓取和AR这两年,我读了不少6DoF位姿估计的论文,PVN3D是印象比较深的一篇。它的核心思路很简洁:让网络为每个三维点预测一个指向关键点的偏移向量,最后由所有点一起投票决定关键点坐标,再通过最小二乘解算刚体变换得到6DoF位姿。这套设计看起来不复杂,但它绕开了直接回归位姿的很多麻烦,在当时的基准测试里把精度推到了一个新台阶,也被后续不少工作当成对比基线。无论你是刚接触位姿估计的初学者,还是已经在做机器人抓取落地的工程师,这篇笔记都能给你一些可复用的理解,包括PVN3D为什么这样设计、网络内部到底做了什么、以及复现时容易被忽略的几个细节。
1. 先搞清楚它要解决什么问题:6DoF位姿估计的三种主流路线
1.1 位姿估计为什么难:从"能识别"到"能抓取"的鸿沟
物体检测解决的是"它在哪里、是什么",但机器人要真正抓起来,还得知道物体的摆放朝向和精确位置。6DoF位姿估计就是要输出三维空间里的平移量(x、y、z)和旋转量(绕三个轴的r、p、y),一共六个自由度。这个问题的难点在于:物体外观会随视角剧烈变化,深度传感器在边缘和反光表面会带来大量噪声,遮挡又让很多可见线索变得不可靠。
尤其是旋转量的估计,远比回归横坐标来得困难。同样是3D旋转,欧拉角存在万向锁,四元数虽然是紧致的,但优化过程中要保持单位范数约束。如果直接在网络输出端回归这些参数,网络本质上是在高维非欧空间里做拟合,很容易收敛到平均值或荒谬的外插值。这也是早期直接回归位姿方法不够稳的深层原因。
1.2 三条技术路线:直接回归、建立对应点、投票汇总
主流方法可以粗分成三类。第一类是直接回归,网络端到端地从图像或点云输出6DoF参数,简单粗暴,但精度和鲁棒性受限于旋转表达和遮挡情况。第二类是建立对应点,先在二维或三维空间找到若干物体点与模型点的匹配关系,再通过PnP或Kabsch这样的几何算法解算位姿,典型代表是各类关键点方法。第三类是投票范式,每个局部线索(像素、点云中的点、图像补丁)都对物体的某个属性投一票,最后汇总得到结果,这也是PVN3D采用的思路。
这三条路线背后有一个共同的权衡:深度学习负责哪些部分,几何算法负责哪些部分。直接回归把一切都交给网络,可解释性差、上限受限;纯几何匹配又难以应付真实世界的纹理缺失和遮挡。PVN3D选择的是中间路线——网络只负责逐点感知和局部推理,最终位姿交给成熟的最小二乘几何算法。
1.3 PVN3D的定位:网络做特征,几何做位姿
论文最值得品的地方,就是它对"学习和几何"分工的理解。网络要输出的是每个点对每个关键点的偏移量,这是一种局部、稠密、物理意义清晰的预测。关键点的最终位置则通过所有点的投票汇总得到,位姿通过两组关键点集合的最小二乘匹配求解。这样一来,网络的容错空间很大,少数点的预测偏离会被大量正常投票稀释;几何求解部分又足够严格,不会因为网络输出的中间表达出现非线性扭曲。
这种分工也让训练目标变得非常干净。网络不需要去"理解"六维空间里复杂的旋转结构,只需要学会"从当前点位置往物体关键点方向走多少偏移",这个任务在几何上是良定义的,在物理世界也有直观解释。实际复现时的感受是:这种设计比端到端回归位姿更容易收敛,对超参也不那么敏感。
2. 关键思想拆解:为什么"投票"比"直接回归"更适合
2.1 直接回归关键点的三个问题
有些人可能会问:既然最终都要回归关键点坐标,为什么不让网络直接输出关键点在相机坐标系下的位置?这里有几个被反复验证过的坑。
第一,直接回归坐标会让网络对全局上下文过于敏感。当物体被部分遮挡时,一个点很难定位到远在遮挡区域后面的关键点,回归出来的坐标往往偏向可见部分。第二,三维坐标的回归范围很大,物体离相机近和远时,坐标数值差好几倍,网络要同时覆盖大范围和小误差精度,难度很高。第三,直接回归本质上是让每个独立的点去预测一个全局属性,这违背了点云作为局部传感器的直觉——单个点的信息量根本不足以知道整个物体在哪儿。
投票机制天然缓解了这三个问题。每个点只输出自己与关键点的相对偏移,这是局部且稳定的;即使看不见被遮挡的关键点,可见的局部几何结构也能推断出大致方向;大量点参与投票后,随机误差通过平均效应被抑制,系统性偏差才可能保留下来。
2.2 Hough投票在三维视觉里的应用
投票思想其实不新鲜,经典Hough变换在二维图像检测里早就用得很成熟,后来也有不少工作将这种思路引入三维物体检测和位姿估计。把投票用在关键点预测上的核心优势,是它的"多源证据融合"能力:一个关键点周围可能有几十个可见点都在为它投票,每个投票者贡献一个独立的预测来源,最终结果是所有信息来源的折中。
在三维场景里,同一物体往往以不同大小、不同位置和朝向出现在视野中。直接对全局坐标做投票,几何范围大、投票空间离散化难度高;而PVN3D把投票对象定为关键点而非物体中心或位姿参数,在数学上仍然简洁,在物理上又保留了精细的空间信息,这个选择让投票的操作性大大增强。
2.3 为什么预测"偏移向量"而不是"关键点坐标"
逐点投票的具体形式也很有讲究。PVN3D让网络为每个三维点输出它在与每个关键点连线方向上的偏移量(dx, dy, dz)。这个偏移量定义在当前点的局部坐标系里,天然具有平移不变性——物体远近变化时,只要相对几何关系不变,网络学到的映射也基本不变。
同时,偏移向量的数值范围通常远小于全局坐标,网络输出层的回归压力小得多。关键点离当前点越近,偏移越小,预测越容易准确;反之,远处关键点的偏移会有更大的不确定性,但可以通过多个近处点的投票来补偿。这种"近处精确、远处补偿"的机制,是非常工程化的思路。
3. 网络结构细节:从点云到6DoF的完整Pipeline
3.1 输入表示与预处理:RGB-D到点云
PVN3D的输入是RGB-D数据。深度图结合相机内参可以投影出三维点云,每个点除了位置坐标,还可以把颜色信息作为额外特征拼接进来。这种做法很自然,因为纯几何信息在纹理缺失区域会遇到困难,颜色正好提供了互补线索。
训练时通常以物体实例为中心对点云进行裁剪,保证网络看到的是物体附近的稠密点,而不是整张图的冗余点。测试阶段配合检测框或类别分割结果,把输入裁剪到可能包含物体的区域。这里有个容易被忽略的细节:深度噪声在远距离和大倾斜平面上非常严重,直接使用原始坐标会在边缘产生大量离群点。实际处理时往往需要根据深度值做统计滤波,或者通过数据增强让网络对噪声更鲁棒。
3.2 骨干网络:三维稀疏卷积U-Net
特征提取部分采用编码器-解码器结构,逐层下采样获取更大感受野,再上采样恢复全分辨率。与普通2D网络不同,这里处理的点云是稀疏的,使用三维稀疏卷积在性能上要比稠密体素方法高效得多,因为空间中真正占据位置只是少数。
网络输出的是逐点特征,每个点都获得一个综合了局部几何和上下文信息的高维向量。说人话就是:经过多层卷积之后,原始的三维位置加上颜色,变成了一堆表达能力更强的特征,后面的任务头就在这些特征上做预测。由于使用了跳跃连接,浅层细节和深层语义能够融合,这对后面要做的语义分割和关键点投票都很关键。
3.3 输出头一:语义分割,把背景和物体分开
网络有两个输出分支。第一个分支是逐点语义分割,目的是区分当前点属于哪个物体或者是否属于目标物体。这个分支的作用是给后续投票提供一个可靠的参与集合——只有属于目标物体的点才有资格参与该物体的关键点投票。
语义分割的重要性在遮挡场景里更加凸显。如果背景点也参与了投票,它们对关键点位置的预估往往是错乱的,会严重污染最终的平均结果。所以论文设计了分割分支,测试时将语义得分超过阈值的点保留下来参与投票,其余点直接丢弃。这个设计看似简单,却是精度稳定的重要保障。
3.4 输出头二:逐点关键点偏移投票
第二个分支是核心,也是论文名字里"Point-wise 3D Keypoints Voting"的由来。对每个三维点,网络预测一个K行3列的张量,其中K是预先定义好的关键点数,每一行表示该点指向第k个关键点的偏移向量。
推理阶段,把每个点的坐标与它预测的偏移相加,就得到这个点对第k个关键点的"投票位置"。所有有效点对同一个关键点投票之后,采用加权平均的方式聚合,权值可以来自语义分割的分数或网络额外预测的置信度。加权平均的前提是各个投票源的误差近似零均值,这在很多真实场景下是成立的。理论上也可以用聚类、中值等更鲁棒的聚合手段,不过会增加额外计算量,论文在主流基准上验证了简单聚合已经足够有效。
3.5 关键点怎么选:最远点采样
关键点的定义直接影响位姿解算的条件数。PVN3D没有让网络去"寻找"关键点,而是在物体的三维模型表面用最远点采样(Farthest Point Sampling)预先取一组均匀分布的三维点。这个过程类似往球面上尽量均匀地撒几颗钉子,保证点之间的最小距离尽量大。
为什么不能用学习得到的关键点?因为关键点的物理意义要用于和模型关键点做匹配,如果场景关键点和模型关键点不是同一套坐标系定义,后面的最小二乘就没有意义。固定的均匀关键点可以让求解几何变换时具有较好的数值稳定性,也有利于形成紧凑的包围盒,减小回归偏移的方差。实践中K值取多少对精度有影响,通常8到9个已经能提供足够约束,再增加收益会递减。
3.6 位姿解算:Kabsch算法的数学内核
得到场景关键点估计和模型关键点真值之后,最后一步就是求一个刚体变换把它们对齐。这个问题可以用最小二乘框架描述:寻找旋转矩阵R和平移t,使得所有模型关键点经过变换后与对应的场景关键点距离平方和最小。
求解的核心步骤是先对各组点去中心化,然后计算两个点集之间的协方差矩阵,对该矩阵做SVD分解,从中恢复出旋转矩阵,最后利用中心点确定平移量。整个过程闭式可解,不需要迭代优化。值得一提的是,这个算法对关键点之间的对应关系是敏感的,如果某个关键点被严重遮挡导致预测偏差很大,整体位姿会被拉偏。这也是为什么前面语义分割分支和投票数量那么重要——它们本质上都是在保护这个最小二乘过程不被离群点干扰。
4. 实验设计与结果分析:ADD-S指标背后的真相
4.1 评估指标:ADD与ADD-S
要读懂实验结果,先得明白指标的口径。对非对称物体,常采用ADD指标:计算模型点经过预测位姿变换后的位置与真值位姿变换后的位置之间的平均最近邻距离。对对称物体,因为物体旋转之后表面看起来一样,直接用ADD会过大惩罚那些本质上等效的预测,于是改用ADD-S,对每个模型点取到真值位姿最近点的距离。
很多论文会同时报ADD/ADD-S的AUC(面积曲线)和特定阈值下的精度,比如距离小于物体直径的某个百分比算作成功。PVN3D在主流基准上的成绩相当亮眼,尤其是在YCB-Video这样的重遮挡、多物体场景里,相比当年的直接回归类方法提升很明显。在物体较孤立、背景干净的基准上,精度几乎逼近上限,这时候再看增量反而不太能说明方法差异。
4.2 消融实验在验证什么
论文做了多组消融实验,主要回答几个问题:语义分割分支要不要?投票聚合与直接回归相比优势有多大?关键点数量和采样方式会不会影响结果?这类实验的价值在于证明性能提升不是来自某个隐藏的trick,而是来自设计逻辑。
从消融结果来看,去掉语义分割后整体精度明显下降,这验证了筛选投票点的重要性;把预测偏移改为直接回归关键点坐标后性能也变差,验证了投票形式本身的优势。这种清晰的因果链条是论文值得学习的地方,很多工作在刷完数字之后并不确定自己每个组件的真实贡献,而PVN3D的每个关键设计都能在实验上找到对应证据。
4.3 与同期方法的本质差异
和同期方法对比时,需要注意它们之间的本质差异,而不是只比数字。直接回归位姿的方法把旋转和平移作为网络输出,思路直白,但在部分可见和复杂遮挡下容易失效;基于二维图像关键点的方法虽然也用了投票,但需要后续对二维到三维恢复,引入了额外的投影歧义。PVN3D直接把投票放在三维空间,天然避开了二维到三维的歧义问题。
换句话说,PVN3D的改进并不只是在网络结构上多加几层卷积,而是把"投票"这个操作放到了正确的空间维度。这个观察可以帮助我们理解后来各种位姿估计工作为什么普遍采用关键点加几何求解的范式。
5. 个人复现笔记:踩坑、思考与后续方向
5.1 训练中容易忽视的几个细节
复现PVN3D时,我踩过不少坑,挑几个最值得说的。
第一,训练数据增强一定要包含围绕物体中心的随机旋转和平移。位姿估计的最终目标是刚体不变性,如果训练时物体位置和姿态过于固定,网络很快过拟合到全局坐标上,测试集上一换场景精度就断崖下跌。这个增强的幅度需要摸索,旋转角度范围太小没效果,太大又会让初始偏移量分布过宽。
第二,语义分割分支的收敛速度对整体结果影响很大。如果分割分支训练不到位,训练初期参与投票的点大量是背景点,关键点分支接收到的梯度会有很强噪声。可以尝试让两个分支使用不同的学习率,或者先冻结关键点分支训练几个epoch的分割,再把整个网络联合训练。
第三,偏移量回归的损失尺度需要留意。不同物体的尺寸差异大,同一个物体在近距离和远距离时,偏移量的尺度也会差不少。如果直接对所有样本统一损失权重,大物体和近距离物体容易主导训练。一种有效的做法是对偏移量除以物体直径或者归一化因子,让损失尺度与物体物理尺寸解耦。
5.2 投票聚合在真实场景中的鲁棒性问题
论文里的加权平均在测试集上效果不错,但工程落地时还是要注意离群点。如果语义分割概率阈值设置过低,一些边缘背景点会被放进投票池,它们预测的偏移完全不靠谱,加权平均又不像聚类那样能自动剔除离群点,结果可能出现位姿轻微偏转。
我自己的做法是对投票集合做两遍过滤:第一遍用过低的置信度阈值筛掉明显不可靠的点;第二遍用卡方检验或简单统计剔除那些与中值投票位置偏差过大离群点。如果目标是制造高鲁棒性的系统,还可以进一步引入聚类方法,取最大簇作为有效投票簇,代价是推理时间增加,但对强遮挡场景的提升值得。
另外还要注意对称物体的特殊性。对于轴对称或镜像对称物体,即使关键点预测准确,Kabsch算法也可能找到两个等价的旋转解。训练时如果只提供单一真值位姿,网络在对称方向上会无所适从。常见做法是在损失计算阶段对关键点匹配关系做最近邻替换,或者在评估时使用ADD-S口径,但要做到物理层级一致,还得在推理后额外判断对称变换的整流。
5.3 关键点选择与位姿解算之间的相互作用
很多人只看网络不看解算,这里有一个比较容易忽略的关系:关键点的几何分布直接决定了最小二乘问题的条件数。若所有关键点几乎共线,SVD求旋转时会出现退化,微小噪声也可能导致巨大的旋转误差;如果关键点均匀分布在三维空间,求出的位姿通常更稳。
所以工程上不要机械地随机采样关键点,而应该针对物体的实际形状做优化。扁平物体和长条形物体的"最优关键点分布"很不一样,未来完全可以根据物体类别自适应地采样关键点,甚至让采样过程可微。这个方向其实比单纯提高网络特征能力更值得探索,因为它直接改善了几何求解的病态问题。
5.4 从PVN3D延伸出去:这个范式还能往哪走
这个思路后续被很多工作吸收,主要延展方向有几个。一是把关键点投票与策略梯度结合,在预测位姿的同时对不确定度建模,方便机器人根据置信度决定是否重试;二是把这种方法推广到类别级位姿估计,不再为每个物体实例单独定义关键点,而是为类别定义规范空间内的关键点;三是与抓取姿态规划结合,把位姿估计的方差信息直接传到机械臂运动规划里,避免在物体位姿不确定时盲目抓取。
另有一条实践上的心得:PVN3D这类"局部偏移投票"的方法,对传感器噪声和点云密度不均匀的鲁棒性比端到端回归要好,这使它很适合部署在实际机械臂系统上。我在自己搭视觉分拣小系统时,遇到过箱子中物体互相挤压导致位姿不确定的场景,把背景过滤和置信度聚合做扎实之后,成功率提升比换更大模型更明显。
作为一个论文笔记,PVN3D值得反复读的地方并不是某个花哨模块,而是它对"感知与几何如何分工"这个根本问题的处理方式。它证明了谨慎地设计输出表达,让网络做自己擅长的事情,其余交给可靠几何算法,往往比让网络自带所有能力更有效。如果你正在做机器人抓取、增强现实或者自动驾驶的三维感知,这篇论文中的设计思路是一个非常好用的参考坐标准绳。