【论文笔记】—目标姿态估计—EPro-PnP—2022-CVPR

2023-05-16

论文介绍 

该论文被评为 CVPR 2022 最佳学生论文 。

将PnP位姿优化问题转变为预测位姿概率密度的问题。
对于一个基于PnP的物体位姿估计网络,可以通过反向传播位姿的概率密度从而学习物体的2D-3D关联,实现稳定的端到端训练。 

题目:EPro-PnP: Generalized End-to-End Probabilistic Perspective-n-Points for Monocular Object Pose Estimation

DOI:10.48550/arXiv.2203.13254

时间:2022-3-24上传于arxiv
会议:2022-CVPR
作者:陈涵晟(同济大学 & 阿里巴巴)

论文链接:https://arxiv.org/abs/2203.13254
代码链接:https://github.com/tjiiv-cprg/EPro-PnP
论文十问:https://readpaper.com/paper/4605324801770266625?channel=harryreadpaper

提出问题

对于单目物体位姿估计任务,基于PnP的几何优化方法需要通过深度网络提取图像中的2D-3D关联点,然后求解PnP问题得到物体的位姿。但因为PnP本质上不可导,难以通过反向传播PnP输出的位姿来训练网络。

1、什么是PnP问题?
PnP(全称Perspective-n-Points),指3D到2D点对的物体运动定位问题,即已知物体在世界坐标系下的坐标,以及物体在相机的图像平面的像素坐标,求解相机的位姿(六个自由度,位置坐标和三个方向角)。位姿估计之PnP算法 

从单张的RGB图片中去定位一个3D的物体:

给定物体的投影Image frame,求解物体的坐标系Object frame到相机坐标系Camera frame的刚体变换。
(刚体变换:物体到相机的一个相对位姿。包含两部分:1、朝向Orientation;2、位置Position。)

解决方案

在不知道物体形状的情况下,仅用端到端位姿损失就能训练网络去预测所有的2D/3D点及其关联权重。

本文将位姿优化问题转变为预测位姿概率密度的问题,提出了end-to-end probabilistic PnP(EPro-PnP),从而实现了通过监督位姿的概率分布来端到端地训练网络,使网络可以自主学习2D-3D关联点而不必强加代理损失。

2、什么是端到端学习?
端到端学习是一种解决问题的思路,与之对应的是多步骤解决问题,也就是将一个问题拆分为多个步骤分步解决,每个步骤是一个独立的任务,其结果的好坏会影响到下一步骤,从而影响整个训练的结果。
而端到端就是不经过复杂的中间建模过程,由输入端的数据直接得到输出端的结果(也就是一步搞定问题),预测结果与真实结果相比较会得到一个误差,然后我们采用比如梯度下降的方法使得误差结果减少,模型最终达到收敛,达到预期的结果。

3、端到端的好处
缩减人工的预处理、后续处理和特征提取步骤,减少了人为的工作量尽可能是模型从原始输入到最终输出。给模型更多可以根据数据自动调节的空间,增加模型的整体契合度。

创新点

将PnP位姿优化问题转变为预测位姿概率密度的问题。
对于一个基于PnP的物体位姿估计网络,可以通过反向传播位姿的概率密度从而学习物体的2D-3D关联,实现稳定的端到端训练。

基于几何的位姿估计PnP方法

在图像坐标系和3D物体坐标系分别找到n个相关联的2D和3D点,对应的这个2D的图像坐标和3D的物体坐标,从这些点中可以构建一个集合投影的约束,物体的位姿被隐式地去定为了优化问题的─个最优解(优化物体的位姿y:使得每一个3D点通过位姿变换投影到图像上后它与2D点之间的重投影的误差最小化,这样得到的最优位姿即PnP的位姿解)

问题的本质:想办法找到这些2D点和3D点。

一般方法:通过一个前馈网络输入一张RGB图像,去预测2D点和3D点。同时还可以预测每一个关联点的权重,构成一个加权问题。以往的方法需要直接监督这些2D点和3D点,构建一个所谓的surrogate loss(代理损失),但对于位姿来说它并非是最优的一个训练的目标。

以往方法举例

  1. 基于关键点Keypoints的方法:已知物体的形状可以首先定义一些3D点,网络的任务就是找到这些2D点的位置。
  2. Dense correspondence:把2D点固定在图像上的一个像素的中心位置,每个像素需要去预测对应的一个3D的坐标X、Y、Z。然后还要粑图像的前景也就是mask给导出来。

上两种方法都是相应的把问题进行了一个转化,直接去监督这些东西的变量,但是会有诸多的限制,比如说我们必须得知道它的形状。

而本论文不需要知道知道它的形状,只知道数据集中只标了物体的位姿的情况下,是否可以通过反向传播包括这个PnP这么一层来去学习这些中间变量。

实验原理

把PnP求解器变成一个可微分的一个Layer(层),或者说是一个模块,使得它在整个网络中可以实现一个端到端的训练。

以前的解决方法:lmmplicit differentiation(隐式微分),但是有一个问题arg min函数并不是真正完全可导的,在某些点是不连续的,所以会导致反向传播不稳定,就必须要依赖整个代理损失来做一个正则化,来保证整个PnP它优化的目标函数如果它是一个凸优化问题的话,然后用隐式微分就可以解决,但是如果没有前面这些东西,光靠端到端的一个损失函数,没有办法稳定的通过反向传播来学习所有的这些2D、3D点。 

本文试图把不可微分的—个最优解deterministic pose固定的一个单独位姿把它变成一个可微的东西。用了概率框架,把PnP视角转换一下,输出一个关于位姿的概率分布。输入Correspondence X是一个可导的东西,通过经典的贝叶斯公式推导得到一个概率密度。

  1. Define the likelihood function:定义一个似然函数,通过重授影误差的─个平方和,来取负号再取exp,可以得到关于位姿的一个likelihood似然。
  2. Prior:先验使用一个无信息的uninformative prior,其实是一个flat prior(扁平先验)的求码小模,可以直接粑整个likelihood做一个normalization归—化,就得到了最终的后验的─个概率密度,即图右上角的分布。

 

实质上是分类的Softmax在一个连续域上的推广,因为实际Softmax它就是用类似的一种方法Sumation(求和)在离散的类别上的求和,但本文是一个积分的情况,一个不可导的arg min问题来变成一个可导的问题。

这是因为优化层中的argmin函数不可导,因此最优位姿不可导,但将位姿视为概率分布后,位姿的概率密度是可导的。从本质上来说,这一做法等同于训练分类网络时,将argmax层替换为softargmax(即softmax)层,本文实际上是将离散softmax推广到了连续分布上。

损失函数

得到一个具体的分布后,损失函数的反向传播是基于KL Divergence来计算和真值之间的误差,和分类里面的cross entropy交叉嫡它本身是一回事,是一个连续的cross entropy。

实现具体分布的KL Divergence计算时用蒙特卡洛的方法对这个分布做一个近似,

启发1:【DSAC】

做一个可微分的RANSAC,解决思路是RANSAC本身需要很多的—个hypothesis(假设),我们要从中去选择一个比较好的hypothesis(假设),取arg max,但为了使其变成一个可学习的过程使用了softmax,来把hypothesis对应的一个score变成一个可学习的东西,有限的hypothesis的pool中去选择最优的一个解,其实也不是一个连续意义上的东西。

启发2:【Deep SDF】

预测一个物体的3D物体的表面得到他的一个几何结构。也是一个隐式的方法,需要去找到表面的一个位置,但是很难直接去预测表面的各个点,所以把它变成预测一个signed distance function(符号距离函数),输入x是3D空间的三维坐标,输出的s是各个点到物体表面的距离(外面SDF>0,里面的SDF<0),通过采样的方法来训练得到一个SDF。

EPro-PnP网络结构

【方案一】

6DoF Pose Estimation 的Benchmark上现有的网络CDPN,—个Surrograte loss(代理损失)来直接监督confidence map(置信图)和3D坐标,把它原始的这个PnP换成EPro-PnP,去做一个端到端的反向传播的训练。

【方案二】

更加激进一点的方案:验证EPro-PnP不需要3D坐标的回归损失,只用端到端的损失,把3D坐标2D坐标还有关联权重一起学出来。

参考Deformable DETR,首先用defformable samplling的一个模块去预测2D点,确定没一个物体的中心参照点,然后去预测各个2D点对于参照点的偏移,就可以得到这些2D点的位置。然后从一个特征中通过interpolation(插值)来得到各个点的特征,经过一些处理,用很小的Transformer做一些信息交互,然后就得到各个点对应的3D坐标和权重。整个框架是做3D物体检测的,还需要各个点的特征聚集起来得到一个物体的特征,来预测整个物体的一些属性。

实验结果

图6-EPRO-PNP的灵活性允许预测具有强大表达能力的多模态分布,成功捕获方向模糊性,而无需离散多箱分类或复杂的混合模型。

7-LineMOD 测试数据上推断的权重和坐标图的可视化。

当使用预训练的CDPN初始化时,EPro-PNP继承了详细的几何轮廓,因此将活动权重限制在前景区域内并实现整体最佳性能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【论文笔记】—目标姿态估计—EPro-PnP—2022-CVPR 的相关文章

随机推荐

  • 如何将Docker升级到最新版本

    CentOS7如何将Docker升级到最新版 如果我们docker的版本比较低的话 xff0c 要怎么才能更新自己docker的版本呢 xff1f 下面是具体的方法 1 查找主机上关于Docker的软件包 rpm qa grep docke
  • 编译Robust Stereo Visual Inertial Odometry for Fast Autonomous Flight

    宾夕法尼亚大学kumar实验室2018年发布 Robust Stereo Visual Inertial Odometry for Fast Autonomous Flight xff0c 基于MSCKF基础上实现双目视觉惯导里程计 刚好这
  • 公网k8s集群搭建史上超详细的教程!!!

    一 背景 xff1a 1 实验背景 x1f9ea 在学习k8s搭建中 xff0c 网上大部分教程都是用虚拟机做单机集群 xff0c 只有极少数是使用服务器搭建教程 xff1b 但是用云服务器搭建的教程中教程版本都比较老 随着时间的推移 xf
  • 【repo/git小技巧】repo sync时报错“The remote end hung up unexpectedly”解决办法

    像往常一样使用repo init gt repo sync 的形式进行代码仓库下载 xff0c 但每次下载repo sync都不能执行成功 xff0c 问题为 The remote end hung up unexpectedly xff0
  • 在 React 中实现记忆以提高性能小技巧

    React 如何渲染 UI 在详细了解 React 中的 memoization 之前 xff0c 让我们先看看 React 如何使用虚拟 DOM 呈现 UI 常规 DOM 基本上包含一组表示为树的节点 DOM 中的每个节点都是 UI 元素
  • 《Linux内核设计与实现》读书总结

    Linux内核设计与实现 进程管理 进程 xff1a 处于执行器的程序 xff0c 包含代码段 xff0c 打开的文件 xff0c 信号 xff0c 内核内部数据 xff0c 内存地址空间 xff0c 多个线程 xff0c 存放全局变量的数
  • python无报错但是主函数没有执行

    python无报错但是主函数没有执行 是不是遇到过python没有报错 xff0c 但是主函数没有执行 xff0c 完全没有结果的情况 遇到这种情况很有可能就是你没有添加if name 61 61 main 这个东西 xff0c 或者格式不
  • 2018.2.2PHPstrom破解版

    作者 xff1a 聽 雨 来源 xff1a CSDN 原文 xff1a https blog csdn net qq 39439751 article details 82758330 版权声明 xff1a 本文为博主原创文章 xff0c
  • python3中 print不加括号报错!

    python 3和python 2的print是有区别 xff0c python3需要加括号 xff0c 但python2不需要 span class token operator gt gt span span class token o
  • leetcode 772 基本计算器3 双栈解析表达式 单调栈

    此题是比较难的一个题 xff0c 不能简单的用递归来做 假设我们已经能把数字分离出来 xff0c 并且解决了其他无关细节 此时我们要考虑 xff0c 如何处理括号和运算优先级 此题最强的一点是 xff0c 当你看到一个符号时 xff0c 你
  • 自然场景OCR检测(YOLOv3+CRNN)

    自然场景OCR检测 YOLOv3 43 CRNN xff08 中文 43 英文模型 xff09 前言 最近对于自然场景下的OCR比较有兴趣 xff0c 所以总结了一些目前OCR现状 xff0c 并且找了一个自然场景OCR的项目练练手 本人新
  • Tx2刷机及安装Jetpack4.5教程

    描述 xff1a 由于项目需要在工控机上运行目标检测程序 xff0c 所需配置需要包括Cuda OpenCV等软件配置 目前Nvidia已经将cuda opencv等相关用于图像处理 深度学习 计算机视觉所需的软件及文件集成到Jetpack
  • ROS gazebo 模型加载报错

    我的ros装的是ros kinetic desktop full版本 xff0c 所以不用另装gazebo 但是用命令 roscore rosrun gazebo ros gazebo 启动后 xff0c 出现如下错误 xff1a Erro
  • excel对比两边数据去重

    需求 筛选重复数据 xff0c A列是1000条数据 xff0c C列是100条数据 xff0c 删除重复的数据 xff0c 只剩900条 首先 xff0c A列数据要分列 xff0c 因为数据格式不一样 xff0c 会导致后面的问题 xf
  • GVIM的配置/使用

    关于GVIM的配置 使用 以我个人喜好配置 配置文件在用户目录下的 vimrc里 配置完后 xff0c 保存并bash一下即可 一 配置 xff1a 根据自己的喜好配置了一点点 colorscheme darkblue span class
  • 小白科研笔记:简析PointRCNN的基于Bin的误差机制

    1 前言 PointRCNN是一篇做3D目标检测的CVPR2019的文章 目前位居KITTI目标检测榜首的是PV RCNN 这个算法的前身就是PointRCNN 它们的作者都是同一个人 考虑到PV RCNN算法有些复杂 xff0c 于是我想
  • ROS基础:获取全局与局部launch Parameter

    在launch 参数配置中 xff0c 分为有全局参数和局部参数 私有参数 xff0c 两者参数的获取是不同的 xff0c 参数示例如下 xff1a lt launch gt lt 全局参数 gt lt param name 61 34 p
  • Redis分布式锁系列

    1 压力测试出的内存泄漏及解决 xff08 可跳过 xff09 使用jmeter对查询产品分类列表接口进行压力测试 xff0c 出现了堆外内存溢出异常 我们设置的虚拟机堆内存100m xff0c 并不是堆外内存100m 产生堆外内存溢出 x
  • java核心技术卷1基础知识整理

    java核心技术卷1基础知识整理 1 java概述2 java程序设计3 对象与类4 继承5 接口 lambda 表达式与内部类6 并发 1 java概述 1 Java 剔除了 C 43 43 中许多很少使用 难以理解 易混淆的特性 xff
  • 【论文笔记】—目标姿态估计—EPro-PnP—2022-CVPR

    论文介绍 该论文被评为 CVPR 2022 最佳学生论文 将PnP位姿优化问题转变为预测位姿概率密度的问题 对于一个基于PnP的物体位姿估计网络 xff0c 可以通过反向传播位姿的概率密度从而学习物体的2D 3D关联 xff0c 实现稳定的