【论文精读】Diffusion Policy: Visuomotor Policy Learning via Action Diffusion

1 背景

在具身智能领域,从专家示范中进行视觉运动策略学习(visuomotor policy learning,visual -> motor)较难。

  1. 多模态特性 multimodal distribution。执行一个任务有多种方式,执行多个任务有多种顺序,这些都是多模态。
  2. 序列关联性 sequential correlation。具身智能的动作是一条序列,前后互相关联,不能突变。
  3. 精度要求高 high precision 。否则多种行为无法完成,比如抓夹。

扩散模型的优势:

  1. 在理论情况下,可以通过增加网络容量和去噪步数,逼近任意复杂的分布,其中包括多模态的分布。
  2. 在高维空间具备可扩展性(scalability to high-dimension output spaces)。
  3. 同为基于能量的策略(energy-based policies),其他方法需要用负采样计算归一化系数(require negative sampling to estimate an intractable normalization constant),但是扩散模型直接学习能量函数的梯度,不需要用负采样,避免了训练不稳定。

2 实现

2.1 输入

  1. 视觉。其他方法会把视觉观测信息作为预测的输出之一(a part of the joint data distribution),但是该论文只做输入,因此称为visual conditioning。具体来看,包括多个视角(front camera x 1,writst camera x 2)的相机信息

该论文使用历史视觉信息2帧。

2.2 输出

2.2.1 输出空间

该论文探讨了2种输出空间,一种是位置空间,另一种是速度空间。

  1. 速度控制 velocity control。输出目标线速度和角速度。我理解是线性单元和旋转单元的速度,响应速度快,但是由于累计误差 compounding error 的影响,控制精度不高。但是目前大部分论文都使用速度控制。
  2. 位置控制 position control。输出目标线位置和角位置。控制精度高,响应速度慢。该论文实验表明,位置控制效果更优。

2.2.2 滚动时域控制

该论文使用滚动时域控制receding-horizon control,本质和MPC类似,预测较长的一段时域,但是只执行较短时域内的动作,然后进行重规划。

预测时域为16步,动作时域为8步。

经过消融实验,动作时域多于或者少于8步,都会导致性能下滑。

2.3 网络结构

2.3.1 视觉编码 visual encoder

输入多个视角多个时间戳的图片,其编码结果进行拼接concat,输出观测结果Ot。

模型选择:Resnet-18。
模型改动

  1. 全局平均池化 改成 空间softmax池化。全局平均池化(nn.AvgPool2d / nn.AdaptiveAvgPool2d)将一个通道的所有值算平均,丢失了细节信息;如果用空间softmax函数,会(1)对一个通道的所有值算softmax,(2)根据在特征图中的位置,进行位置加权求和。以[128,128,32]的特征图为例,全局平均池化的结果是[1,1,32],空间softmax的结果是[2,32]。
  2. BatchNorm换成GroupNorm,训练更稳定。因为Batchnorm依赖Batch大小,但是GroupNorm本质上是一种特殊的LayerNorm,在特征维度分组进行归一化,不依赖batch大小,更稳定。

该论文做了消融实验,对比了:

  1. 模型:ResNet18,ResNet34,ViT-base
  2. 训练方式:加载预训练模型,从头训,微调。

发现

  1. 如果加载预训练模型的话,表现都不行,成功率不超过70%
  2. 如果都从头训的话,ResNet18最好,成功率94%,ViT最差,22%
  3. 如果都微调的话,ViT最好,成功率98%,其他都差不多,92-94%

2.3.2 去噪模型

核心模型:去噪扩散概率模型(Denoising Diffusion Probablistic Models, DDPMs)
去噪原理:随机朗之万动力学(Stochastic Langevin Dynamics)

打一个不恰当的比方,强化学习的核心是马尔可夫模型,原理是状态转移方程。

如下所示,epsilon_theta为去噪模型

def apply_conditional_denoising_step(A_k, O_t, k, alpha, gamma, epsilon_theta, sigma):
    noise_pred = epsilon_theta(O_t, A_k, k)
    A_k_minus_1 = alpha * (A_k - gamma * noise_pred) + np.random.normal(0, sigma)
    return A_k_minus_1

注意:该去噪过程是条件分布——依赖观测条件,这样也就能够让模型根据观测数据,来生成相应的轨迹。

2.3.2.2 CNN-based

这里说的CNN,并非是输入图片要处理,而是用1D CNN进行特征提取。因为图片已经由visual encoder处理过了。
用Feature-wise Linear Modulation对Ot进行缩放和变换,这样有利于适应不同的context。

CNN-based的问题:不利于建模轨迹中的突变(高频信息),导致over-smoothing。因为时序卷积存在归纳偏置inductive bias,详细来说,时序卷积中,在卷积核内,数据都会被加权平均,失去其高频变化的信息,类似一层低频过滤。Temporal convolutions prefer low-frequency signals.

2.3.2.3 Transformer-based

观测Ot通过MLP,得到observation embedding
另外,当前去噪轮数k会通过正弦位置编码,作为输入的第一个token(sinusoidal embedding for diffusion iteration k prepends as the first token )

优势:采用transformer-based的模型,在基于状态的任务(state-based experiments)中表现最好。尤其是任务复杂程度较高,动作变化较剧烈的情况。

劣势:不好调参,sensitive to hyperparameters。

2.4 损失设计

采用均方差,计算【预测噪声】和【实际噪声】之差。The noise prediction network is asked to predict the noise from the data sample with noise added.

def conditional_denoising_loss(pred_noise, true_noise):
    loss = np.mean((pred_noise - true_noise) ** 2)
    return loss

2.5 (加噪过程的)噪声调度

Noise Schedule
噪声调度是用于前向扩散过程的噪声添加速度的调度策略。要求是噪声累计速率平滑,那么扩散过程就会平滑,有助于提升生成质量和训练稳定性。

常见的有:

  1. 现性调度Linear Schedule
  2. Cosine调度
  3. Square Cosine调度

该论文使用了平方余弦调度(Square Cosine Schedule),噪声累计比例a是cos2的函数,在[0, pi/2]上比cos更平滑。

2.6 训练超参数

Epochs

  1. state-based tasks:4500 epochs
  2. image-based tasks:3000 epochs

Iteration

  1. Training:100 iter
  2. Inference:10 iter。为了提高推理速度,最后在3080上能达到10Hz。

3 扩散模型优势分析

3.1 多模态

扩散模型之所以天然具备多模态,主要来源于:

  1. 随机初始化 stochastic initialization。At是高斯随机生成的,因此不同的分布最后收敛的不一样;
  2. 基础随机采样 underlying stochastic sampling。在每一步的去噪过程中,都引入了高斯噪声,这样收敛的最终效果也不同。

该论文提出了2种网络结构,一种CNN-based,一种Transformer-based。其中transformer-based方法最小化了CNN的过度平滑问题(over-smoothing effects,因为层数太多导致多种类别特征相似)

3.2 时序一致性

temporal action consistency

BC-RNN和BET等模型,在输出序列中的每一个动作时,都具备多模态(each action in the sequence is predicted as independent multimodal distribution),但是动作级别的多模态,会导致轨迹级别的抖动(jittery),失去时序一致性。

相反,扩散模型是轨迹级别的去噪,所以不同的去噪方式带来多模态,每条轨迹又具备时序一致性。

3.3 对于idle的鲁棒性

idle action指的是动作保持不变:

  1. 好行为:比如倒水的时候,需要保持水杯斜向下。
  2. 坏行为:在某个连续动作中卡住stuck。

但是对于BC-RNN和BET,由于是单步策略(single-step policies),容易对于遥操作 teleoperation 中不经意的暂停动作过拟合,导致卡住(BC-RNN and IBC often get stuck in real-world experiments when the idle actions are not explicitly removed from training)。而扩散模型输出整条轨迹,不会被卡住。

3.4 训练稳定性

其他基于能量的模型(Energy-based Models,EBM)需要使用负样本来估算归一化常数Z,但是负样本的采样会造成不稳定(the inaccuracy of negative sampling is known to cause training instability for EBMs)。

扩散模型通过建模得分函数,避免了估算Z,因此避免了不稳定(DDPMs sidestep the issue of estimating Z by modeling the score function of the same action distribution)

4 实验

4.1 仿真任务

仿真任务比较多,不赘述了,记录现实世界任务,更有趣一点。

4.2 现实世界任务

4.2.1 单臂操作

  1. Push-T。注意在仿真中,这是单阶段任务,但是现实中是多阶段(multi-stage)任务。因为需要:(1)把T推到合适的区域;(2)末端执行器要回到终止区域,否则会挡住camera,影响下一轮实验。实验成功率98%,吊打IBC(0%)和LSTM-GMM(20%),接近人类IoU(0.8 < 0.84)
  2. 翻转马克杯Mug Flipping Task。任务要让马克杯倒过来,且杯柄朝固定方向。这个是多模态任务,可以先翻转马克杯,也可以先调整杯柄的方向。实验成功率90%,吊打LSTM-GMM(0%)。
  3. 把番茄酱倒到披萨面团上,并且涂匀任务Sauce Pouring and Spreading。这是多阶段任务:(1)把番茄酱倒到披萨面团中间,难点是要保持倒番茄酱的动作(The idle actions of remaining stationary for a period of time are knwon to be challenging);(2)周期性旋转涂匀到整个面饼上,用覆盖率评价,难点是周期性旋转(Periodic motions are known to be difficult to learn)。实验结果接近人类,倒番茄酱0.74 < 0.79,涂匀0.77 < 0.79。反观LSTM-GNN,要么拿不起勺子,要么倒番茄酱不知道停,要么勺子不接触面饼就开始涂。

4.2.2 双臂操作

论文中开展了2个任务

  1. 用打蛋器打蛋 bimanual egg beater
  2. 铺毯子 bimanual mat unrolling
  3. 收拾T恤 bimanual Shirt Folding

5 结论

  1. 对于多种任务,成功率提高46.9%,吊打LSTM-GNN和IBC;
  2. 对于单个任务,具备多模态——一个任务有多种解决方法(Push-T可以从左,也可以从右)
  3. 对于多个任务,具备多模态——多种任务可以用不同顺序执行

6 局限性

  1. 数据不够。扩散模型本质上还是模仿学习方法,需要专家示范。但是目前不够,性能不一定最优(suboptimal performance with inadequate demonstration data)。
  2. 推理太耗时,延迟严重,不适合高频控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值