当前位置: 首页 > 编程日记 > 正文

LatentFusion:华盛顿大学与英伟达联合提出6D姿态估计新方法

作者 | Keunhong Park、Arsalan Mousavian、Yu Xiang、Dieter Fox

译者 | 刘畅

编辑 | Jane

出品 | AI科技大本营(ID:rgznai100)

【导读】在本文中,华盛顿大学和英伟达联合提出了一种新的用于未见过目标 6D姿态估计的框架。作者设计了一个端到端的神经网络,该网络使用少量目标的参考视角来重构目标的3D表示。使用学习到的3D表示,网络可以从任意视角对目标进行渲染。使用该神经网络渲染器,我们可以对输入图像的姿势直接进行优化。通过使用大量3D形状训练该网络进行重构和渲染,使该网络可以很好地推广到未见过的目标。作者还为未见的物体姿态估计提供了一个新的数据集-MOPED。并且最后在MOPED以及ModelNet数据集上评估了未见物体姿态估计方法的性能。

论文地址:https://arxiv.org/abs/1912.00416

目标姿态定义了它在空间中的位置以及方向。一个目标的姿态通常是由3D方向(旋转)和6个自由度(6D)定义的。了解目标的姿态对于涉及与现实世界对象交互的任务是至关重要的。例如,为了使机器人能够操纵目标,它必须能够推理出目标的姿态。在增强现实任务中,6D姿态估计可以实现虚拟交互和对现实目标的重新渲染。

为了估计目标的6D姿态,当前最新的方法需要为每个物体建立一个3D模型。尽管现在的3D重构和扫描技术可以生成目标的3D模型,但它们通常需要耗费大量的精力。很容易看出用这种方法为每个目标都去构建一个3D模型是不太现实的。

此外,现有的姿态估计方法在不同的光照和遮挡下,需要进行大量的训练。对于针对多目标训练一个网络的方法,姿态估计精度会随着目标的增加而显著下降。这是由于目标的外观与姿势变化很大。无论使用单个或多个网络,所有基于模型的方法都需要对训练集中没有的测试目标,进行额外的训练。

在本文中,作者研究了在没有3D模型的情况下,并且在测试时无需为未见目标进行额外训练的情况下,学习用于6D目标姿态估计的3D目标表示问题。本文方法的核心是根据已知的姿态获取目标的一些参考RGB图像,并在内部构建该目标的3D表示。使用内部的3D表示,网络可以渲染目标的任意视角。为了估计目标姿态,网络以梯度下降方式将输入图像与其渲染图像进行比较,以搜索渲染图像与输入图像匹配的最佳姿态。那如何将该网络应用于未见过的目标呢?我们仅需要使用传统方法来收集已经有的姿态视角图。并将这些视角图与相关的姿态一起提供给网络,它不需要花费时间和计算资源进行额外的训练。

为了重构和渲染未曾见过的目标,作者使用ShapeNet数据集(该数据集使用MS-COCO的图像,并在不同光照下进行纹理化)在随机的3D网格上训练。本文的实验表明,该模型可以推广到新的目标类别和实例上。从实际角度看,作者认为在缺少高保真纹理的3D模型情况下,从有限的视角图对未曾见过的目标进行姿态估计是一个十分重要的问题。为此,作者提出了一个新的评估数据集,称为MOPED(Model-free Object Pose Estimation Dataset)。本文的主要贡献如下:

  • 本文提出了一种新的神经网络,该神经网络可以在参考视图数量有限的情况下重构一个新对象的潜在表示,并且可以从任意角度对其进行渲染而无需额外的训练.

  • 本文演示了如何在没有额外训练时,对给定参考视图的未见目标进行姿态估计。

  • 本文介绍了一个数据集MOPED。并提供了在可控环境中拍摄的目标参考图像,以及在不可控环境中拍摄的测试图像。

方法

在方法部分,作者分了两部分来阐述。一个是重构和渲染,一个是目标姿态估计。        上图是本文方法的概况图。整个流程主要有两个组成部分:(1)通过预测每个视图的特征量并将其融合为单个潜在表示来对目标进行建模。(2)对潜在表示进行深度和颜色上的渲染。

本文的建模过程受到了space carving的启发,考虑从多个视图中来获得观察结果,并利用多视图的一致性来构建规范化的表示。但是作者并没有使用光学一致性,而是使用隐藏特征来表示每个视图。上图阐述了每个视图特征的生成过程。

使用通道平均池化可以产生较好的结果,但是本文发现使用RNN可以稍微提高重构的精度,作者在实验章节做了相应的消融实验来验证。具体的融合模块如上图所示。

在目标姿态估计的方法上,作者使用了两个损失函数,一个是标准的L1损失,另一个是作者提出的一种潜在损失,它根据重构网络的结果来评估姿态的合适度。如下公式所示

实验

本文在两个数据集上评估了提出的方法:一个是ModelNet,一个是MOPED。用于评估未见目标的姿态估计精度。

在实验细节方面,训练数据是来自ShapeNet,其中包含了近51300个shapes。采用Blender的UV映射生成了多个UV图。采用Beckmann模型进行渲染,其中渲染的概率是0.5。

网络输入大小是128*128。并对输入的目标进行了“放大”处理,使得每个目标的距离保持一致。在每轮训练中,会采样一个3D模型,然后采样16个随机的参考姿态和16个随机的目标姿态。作者使用Adam优化器,固定学习率为0.001等。

表格1展示了在ModelNet数据集上定量的结果。平均下来,本文的方法是最SOTA的。但是本文在有些目标上的表现却较差,原因之一可能是图像和空间分辨率。我们网络的输入和输出图像分辨率是128*128,立体表示的分辨率是16*16*16。这些可能会影响性能。

另外,本文介绍了MOPED数据集,它包含了11个目标,如下图所示,对于每个目标,作者拍摄了覆盖各个视角的RGB-D视频。

表2展示了在MOPED数据集上的定性比较。需要注意的是,本文的方法并未对测试目标进行额外的训练,而PoseRBPF方法对每个目标都单独训练了一个编码器。本文的方法在ADD和ADD-S两个指标上,都超越了之前的方法。

下图展示了对于不同测试图像的姿态估计结果。

作者做了一些消融实验,表格3显示了模型精度会随着参考视图数量的增加而增加。表格4展示了对两个View Fusion变量的量化评估。尽管目标的平均性能非常接近,但是ConvGRU的性能略优于平均池化。

总结

本文提供了一个新的框架,用于从参考视图中学习3D目标表示。本文的网络能够对该表示进行解码,以合成新的视图并估算物体的6D姿态。通过使用上千种3D形状来训练网络,我们的网络学会了在推理过程中重构和估计未见目标的姿态。与当前的6D目标姿态估计方法相比,本文的方法不需使用高质量的3D模型或对每个目标进行额外训练。因此,该方法具有处理大量目标并进行姿势估计的潜力。在未来的工作中,一个方向是可以研究在复杂场景中未见目标的姿态估计,在这些场景中目标可能会相互遮挡。另一个方向是使用网络优化技术来计算姿态估计过程。

(*本文为AI科技大本营编译文章,转载请微信联系 1092722531)

精彩公开课

相关文章:

Java前端控制器模式

前端控制器模式(Front Controller Pattern)是用来提供一个集中的请求处理机制,所有的请求都将由一个单一的处理程序处理。该处理程序可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。以下是这种…

提供第三种代码生成方式——通过自定义BuildProvider为ASP.NET提供代码生成

2019独角兽企业重金招聘Python工程师标准>>> 之前写了一些关于代码生成的文章,提供了两种不同方式的代码生成解决方案,即CodeDOMCustom Tool和T4。对于ASP.NET应用,你还有第三种选择——自定义BuildProvider。[文中涉及的源代码从…

Java拦截过滤器模式

拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应做一些预处理/后处理。定义过滤器,并在把请求传给实际目标应用程序之前应用在请求上。过滤器可以做认证/授权/记录日志,或者跟踪请求,然后把请…

1200亿次日均位置服务响应、20亿公里日均轨迹里程,百度地图发布新一代人工智能地图生态全景

12月10日,百度地图首次公布了“新一代人工智能地图”生态全景。目前,百度地图日均位置服务请求次数突破1200亿次,日均轨迹里程20亿公里,注册开发者数量达180万,服务超过50万个移动应用。 百度地图事业部总经理李莹称&…

Python3中global/nonlocal用法

全局变量(global variable)是那些未在任何函数内部定义并且具有全局作用域的变量,而局部变量(local variable)是那些在函数内部定义并且其作用域仅限于该函数的变量。换句话说,我们可以说局部变量只能在初始化它的函数内部访问,而全局变量在整…

客户端动态调用WCF服务中的方法

首先要写一个执行动态调用的方法&#xff1a;在里面实现反射调用。 public static object ExecuteMethod<T>(string pUrl,string pMethodName, params object[] pParams) { EndpointAddress address new EndpointAddress(pUrl); Binding bindinginstance null; NetTcpB…

Python3中闭包介绍

Python3中的闭包(closure)是一个函数对象&#xff0c;它记住封闭作用域(enclosing function)中的值&#xff0c;即使它们不存在于内存中。它是一个将函数与环境一起存储的记录。由于闭包用作回调函数&#xff0c;因此它们提供了某种数据隐藏&#xff0c;这有助于我们减少使用全…

Java服务定位器模式

服务定位器模式&#xff08;Service Locator Pattern&#xff09;用在我们想使用 JNDI 查询定位各种服务的时候。考虑到为某个服务查找 JNDI 的代价很高&#xff0c;服务定位器模式充分利用了缓存技术。在首次请求某个服务时&#xff0c;服务定位器在 JNDI 中查找服务&#xff…

用AI加速物联网落地,安富利的客户洞察和解决之道

作为一家全球IT解决方案分销商&#xff0c;成立于1921年的安富利也紧随AI浪潮&#xff0c;为区域和全球的终端客户提供AI解决方案。据了解&#xff0c;安富利已为全球超过1400家企业提供技术支持&#xff0c;电子产品年度出货量达1220亿片。 近日在媒体沟通会上&#xff0c;安富…

Linux运维工程师发展前景

随着IT产业的不断发展&#xff0c;尤其是Linux行业的发展&#xff0c;现在互联网企业服务器数量越来越多&#xff0c;当到达几百台&#xff0c;上千台服务器之后&#xff0c;服务器日常管理也逐渐繁杂&#xff0c;每天如果通过人工去频繁的更新或者部署及管理这些服务器&#x…

Python3中__init__.py文件介绍

Python中的模块是包含Python定义和语句的文件(A module is a file containing Python definitions and statements)&#xff0c;其文件名是模块名加后缀名.py。在模块内部&#xff0c;通过全局变量__name__可以获取模块名。 模块包含可执行语句及函数定义。这些语句用于初始化模…

赠书 | 熵的实际应用,赌场和金融圈最著名的一个数学公式

本文选自湛庐文化策划出版图书《模型思维》。作者斯科特佩奇&#xff0c;超过100万用户的“模型思维课”主讲人。密歇根大学复杂性研究中心“掌门人”。圣塔菲研究所外聘研究员。曾出版《多样性红利》一书。斯科特佩奇以对社会科学多样性和复杂性的研究和建模面闻名。具体研究方…

Java传输对象模式

传输对象模式&#xff08;Transfer Object Pattern&#xff09;用于从客户端向服务器一次性传递带有多个属性的数据。传输对象也被称为数值对象。传输对象是一个具有 getter/setter 方法的简单的 POJO 类&#xff0c;它是可序列化的&#xff0c;所以它可以通过网络传输。它没有…

图片下方出现几像素的空白间隙

1、如何定义高度很小的容器&#xff1f; 在IE6下无法定义小高度的容器&#xff0c;是因为有一个默认的行高。 列举2种解决方案&#xff1a;overflow:hidden | line-height:0 2、图片下方出现几像素的空白间隙&#xff1f; 这个也有多种解决方案&#xff0c;如将img定义为displa…

Python3中Pillow(PIL)介绍

PIL全称为Python Imaging Library&#xff0c;是Python中的免费开源图像处理库。PIL的最新版本为1.1.7&#xff0c;于2009年9月发布&#xff0c;支持Python的最高版本到2.7。原始的PIL开发于2011年停止。随后&#xff0c;一个名为Pillow的后续项目fork了PIL的repository并增加了…

GitHub有望在中国开设子公司?

作者 | Financial Times译者 | 弯月&#xff0c;编辑 | 郭芮出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;作为世界上最大的软件开发平台&#xff0c;GitHub 自去年被微软以 75 亿美元收购后&#xff0c;一直颇受外界的争议。虽然在交易完成后&#xff0c;GitHub…

OC指示符assign、atomic、nonatomic、copy、retain、strong、week的解释

在使用property定义property时可以在property与类型之间用括号添加一些额外的指示符&#xff0c;常用的指示符有assign、atomic、nonatomic、copy、retain、strong、week、等。详情如下&#xff1a; assign&#xff1a; 简单赋值&#xff0c;不更改索引计数&#xff08;Referen…

项目沟通管理计划

沟通计划包括决定项目涉及人的信息和沟通需求&#xff1a;谁需要什么信息&#xff1b;什么时候需要&#xff1b;怎么获得。虽然所有的项目都需要沟通项目信息&#xff0c;但信息需求和传播方式差别很大。确认涉及人的信息需求和决定满足需求的适当方式是项目获得成功的重要因素…

PyTorch中torchvision介绍

TorchVision包包含流行的数据集、模型架构和用于计算机视觉的图像转换&#xff0c;它是PyTorch项目的一部分。TorchVison最新发布版本为v0.11.1&#xff0c;发布较频繁&#xff0c;它的license为BSD-3-Clause。它的源码位于&#xff1a; https://github.com/pytorch/vision T…

百度ERNIE登顶GLUE榜单,得分首破90大关

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;12月10日&#xff0c;百度ERNIE在自然语言处理领域权威数据集GLUE中登顶榜首&#xff0c;以9个任务平均得分首次突破90大关刷新该榜单历史&#xff0c;其表现超越微软MT-DNN-SMART, 谷歌T5、ALBERT等一众顶级预训练模…

Java 重写(Override)与重载(Overload)

TestDog.java /* * 重写(Override) * 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变&#xff0c;核心重写&#xff01; * 重写的好处在于子类可以根据需要&#xff0c;定义特定于自己的行为。 也就是说子类能够根据需要实现…

Oracle常用查看表结构命令

2019独角兽企业重金招聘Python工程师标准>>> select user from dual; //查看当前的用户名 select table_name from all_tables; //所有用户的表 select table_name from dba_tables; //包括系统表 select table_name from dba_tables where owner用户名 user_tabl…

TorchVision中使用FasterRCNN+ResNet50+FPN进行目标检测

TorchVision中给出了使用ResNet-50-FPN主干(backbone)构建Faster R-CNN的pretrained模型&#xff0c;模型存放位置为https://download.pytorch.org/models/fasterrcnn_resnet50_fpn_coco-258fb6c6.pth&#xff0c;可通过fasterrcnn_resnet50_fpn函数下载&#xff0c;此函数实现…

iOS-UIButton防止重复点击(三种办法)

目录 使用场景方法一 设置enabled或userInteractionEnabled属性方法二 借助cancelPreviousPerformRequestsWithTarget:selector:object实现方法三 通过runtime交换方法实现注意事项一 使用场景 在实际应用场景中&#xff0c;有几个业务场景需要控制UIButton响应事件的时间间隔。…

华为诺亚方舟开源预训练模型“哪吒”,4项任务均达到SOTA

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;BERT之后&#xff0c;新的预训练语言模型XLnet、RoBERTa、ERNIE不断推出&#xff0c;这次&#xff0c;华为诺亚方舟实验室开源了基于BERT的中文预训练语言模型NEZHA&#xff08;哪吒&#xff09;&#xff0c;寓意模型能…

音量调节助手(转)

源&#xff1a;音量调节助手 软件名称&#xff1a;音量调节助手 软件功能&#xff1a;通过键盘快捷键快速调节系统主音量 软件版本&#xff1a;V2014 软件作者&#xff1a;易几网络 操作系统&#xff1a;所有WINDOWS版本 开发工具&#xff1a;DELPHI XE …

TorchVision中通过AlexNet网络进行图像分类

TorchVision中给出了AlexNet的pretrained模型&#xff0c;模型存放位置为https://download.pytorch.org/models/alexnet-owt-4df8aa71.pth &#xff0c;可通过models.alexnet函数下载&#xff0c;此函数实现在torchvision/models/alexnet.py中&#xff0c;下载后在Ubuntu上存放…

西湖龙井也上链?是的,以后你喝什么茶我都知道!

什么&#xff1f;区块链还可以帮忙法律取证&#xff1f;是的&#xff01;就是这么牛13&#xff01;区块链存证第一案12月9日&#xff0c;据《新华每日电讯》报道&#xff0c;杭州互联网法院用区块链提升审判效率。报道提到一个案例。2018年4月&#xff0c;杭州一家公司&#xf…

Java Enumeration接口

import java.util.Vector; import java.util.Enumeration; /* * Enumeration接口中定义了一些方法&#xff0c;通过这些方法可以枚举&#xff08;一次获得一个&#xff09;对象集合中的元素。 * 这种传统接口已被迭代器取代&#xff0c;虽然Enumeration 还未被遗弃&#xff0…

Windows Azure Pack与SCVMM标签解析分享

我在SCVMM上做了好CentOS6.5的VM模板镜像&#xff0c;自己部署也是成功的&#xff0c;现在配置WAP的VM云虚拟机角色配置&#xff0c;在SCVMM上我打好了CentOS6.5的标签&#xff0c;可是在创建虚拟机角色配置中&#xff0c;选择的CentOS却无法找到硬盘&#xff0c;这是怎么回事呢…