Learning to Push by Grasping: Using multiple tasks for effective learning
Abstract
目前end-to-end的学习框架在机器人控制的领域内变得流行起来,这些框架的直接输入是状态/图像,然后直接输出预测的扭矩和动作参数。但是由于其对于数据的大量需求而受到了批判,并兴起了对于其可扩展性的讨论,即end-to-end的学习方式是否需要为每一个任务都单独建立一个模型?从直觉上来说任务间的共享是有帮助的,因为其对环境都需要有一些共同的理解。在该论文中尝试了数据驱动的end-to-end学习框架的下一步,即从特定任务的模型到多机器人任务的联合模型,得到了令人惊讶的结果:在同样数据量下多任务学习的效果要优于单任务学习。比如说对于grasp任务,2.5k的grasp数据+2.5k的push数据训练下的模型的表现要优于5k的grasp数据训练下的模型。
1.Introduction
当机器人准备执行一个操作(比如抓取)的时候,需要完成以下几个步骤:(a)推断物体的属性,(b)对自己的构造有一定了解,(c)理解怎样是一个成功的抓取并且知道如何去实现。很多分析框架通过数学的方式来定义(c),而在感知部分则依赖于额外的感知模块,并且通常会做一定程度的简化,这种过度依赖导致其并没有获得很好的效果。end-to-end的模型通过数据驱动的方式来学习到(a)-(c)的联合模型,表现出了很好的效果。
尽管end-to-end的模型取得了很好的效果,但是也有很多批判的声音,主要在于其需要对每一个任务都单独建立一个模型,而每一个模型的训练都需要大量的数据。那么有没有一种在任务间进行共享的方式来减小数据量的需求?直觉上说是存在的,因为所有的任务都需要(a)和(b)两部分,比如push任务的数据对于训练grasp的感知模块也是有帮助的。
如前文提到的,在相同数据量下,不同任务的数据组合下的表现要优于单个任务的数据,猜测这可能是因为执行多个任务能够探索原任务中接触不到的目标属性与模式,这可以看作是一种正则化的手段,可以学得更多的泛化特征。
2.Related Work
对于grasp,这是一个比较老的问题了,以前的方法大多都是基于分析方法和3d推理,来预测抓取位置和配置,最近才开始兴起了数据驱动的学习方式。pushing是另一个机器人的基本任务,使得在不需要抓取的情况下就可以使目标物体移动。另外我们使用触觉感应预测(poking)来作为学习pushing和grasp的辅助任务。
前文提到了收集大量的数据可以被用于机器人任务,但是数据的收集是时间密集型的任务,multi task learning(MTL)利用一种共享的方式来探索这些任务之间的共性,即利用之前的任务来初始化当前的参数。本文专注于探索end-to-end的用于grasping和pushing的MTL模型。
对于机器人任务而言,之前的框架主要都是针对特定任务的,这是第一篇报道多任务间的共享能够改善任务表现的文章,并且发现原始任务的额外数据点的价值并不如交替任务的价值,大概是因为这样的共享增强了鲁棒性并且对于特征学习进行了正则化,对于多个任务都有改善作用。通过对MTL的探索我们发现即使只有少量的数据,通过利用其他任务的大量数据也能够得到高效的模型。
3.Overview
我们的目标是探索针对特定任务收集的数据是否可以用在其他任务上,现在的研究方向都在于针对每个任务都训练一个特定模型,然而我们觉得大多数这些问题都要学习这个世界是如何工作的,因此可以进行数据间的共享来加快学习速度。具体一点来说就是CNN中的某些参数对应视觉特征,某些对应底层结构和物理学,某些对应机器人的结构和控制信息,最后剩余的参数才是针对某个特定任务的,如果确实是这样的话,那么任务间的数据共享则是至关重要的。
本文调查了多任务学习对于grasping和pushing是否能够得到一个更好的控制模型,收集了grasping,pushing,poking三个任务的数据,最后探索了Grasp ConvNet在只利用grasping数据和利用grasping,pushing,poking融合数据下的对比表现,对于Push ConvNet也进行了同样的对比。
4.Approach
这里对三个任务进行了形式化描述,即planar grasping,planar pushing以及poking data在框架中的应用。
A. Planar Grasps
一次grasp可以用三个参数来定义,分别是抓取点和抓取坐标,训练数据有37k失败数据和3k成功数据,测试数据有2.8k失败数据和0.2k成功数据。一个抓取问题可以定义为通过输入图片来预测一个成功的抓取配置,然而这个问题是病态的,因为一个物体可以有多个可能的抓取位置,于是这里采样了一批图片,其位于图片的中心,仅仅需要预测抓取角度,将角度分类为,因此该问题可以转换为18个二分类问题,因为评价标准是二分类的,即抓取成功或者失败。
B. Planar Push
push的每个数据点包括三个部分,初始图像,结束图像和动作,整个数据集包括5k动作,70个对象
这个对于push的学习器的任务是给定初始和结束的图片,然后预测push动作,这里使用的是带有共享权重的siamese network,输入的一端是,另一端是,在两端处理之后concat到一起,然后使用fc层来输出,损失函数使用的是欧式距离
C. Planar Poke
这个数据集包括目标的图片和poking的时候感受到的反馈,学习器的任务就是通过输入图片来预测。
利用两个参数来表示,即电压增加的斜率和截距,这里采用了和grasp类似的结构,前面三层的网络参数与grasp进行共享,剩余的网络则是专门用于poking任务,这里的损失函数同样是欧式距离。
D. Network Architecture
这里的feature transfer有两种,一种是poking+pushing->grasping,另一种是poking+grasping->pushing。网络的机构如下图
前面三个conv中,上下两层是共享权重的,conv上的数字代表卷积核的大小和数量,每个conv层后面都紧接着BN和ReLU。对于grasp任务,前两层fc后面都紧接着p=0.5的dropout层和ReLU,对于poking也是同样的。而对于pushing任务由于需要输入两张图片,因此使用了如图的两个卷积过程,但是其中的参数都是共享的,后面经过concat然后同样的fc层,然后输出预测的5维向量。
E. Training
在这里主要介绍训练细节,对于损失函数,grasping使用的是交叉熵(cross-entropy),而pushing和poking都是用的欧式距离作为损失函数。
对于整个联合训练过程,取batch_size=128,可以得到针对三个任务的batch,对于全连接层的梯度计算和普通情况是相同的,对于共享的conv层,梯度的计算略有不同,其梯度计算公式为:
其中分别为grasping,pushing,poking任务的损失函数。在训练过程中使用RMSProp算法,这是一个基于梯度下降的算法,学习率取为0.002,momentum=0.9,decay=0.9,学习率每5000步以0.1的比例大小进行衰减。
5.Results
在进行验证的时候,对于grasping任务,使用的是分类误差,而对于pushing任务使用的均方误差。
A. Evaluating Multi-Task vs. Task-Specific
这里主要是对多任务训练和特定任务的性能进行对比,这里的multi-task忽略了poking的情况,训练数据中pushing和grasping各占一半,最后得到的结论为,在小数据量下,特定任务数据的表现更好,在大数据量下,多任务的表现更好,这可能是由于多任务数据提供了一种差异性,有一种正则化的效果,可以防止过拟合
B. Multitask: Data Ratio
这里对于数据占比的大小进行了实验,实验结果如下图,可以看出pushing要比grasping更易于进行迁移。
C. Multitask: 3-task performance
这里进行实验对是否加入poking进行了验证,并且对于不同的数据比例也进行了实验,说明poking还是有较大用处的,结果如下
6. Discussion
现在的研究趋势都在于特定任务的学习,很多地方的讨论也认为多任务学习是没有用处的,然而这样产生了一种问题,即针对end-to-end的学习方式,需要大量的训练数据。本文表明多任务训练不仅是可行的,而且在同样数据量的情况下能够获取更好的结果,我们假设这是因为数据的多样性起到了正则化的效果,本文开启了多任务学习在机器人方向的一个新的子领域,尤其在不同任务间的共享上。