目录
- [1 问题背景](#1 问题背景)
- [2 具体更新过程](#2 具体更新过程)
1 问题背景
RTC的ActionQueue是怎么更新的呢?
比如现在ActionQueue中剩余20个action,我启动了推理,生成了50步action,推理的delay步数是9,execution_horizon是15。
2 具体更新过程
剩余20个action中的前15个用来约束推理生成50步action,效果是前9步为剩余action的前9步,9~15步是新旧action的加权,15~50是新action。这50个action,先丢弃掉前9步,然后直接替换ActionQueue。是这样的。
融合,
txt
0 ~ 9 权重 = 1
9 ~ 15 指数衰减,从较大逐渐到接近 0
15 ~ 50 权重 = 0
这会让ONNX图在生成当前chunk时,
txt
new[0:9] 强烈贴近 old[0:9]
new[9:15] 逐渐减少旧动作影响
new[15:50] 基本自由生成新动作
注意这里不是在python中直接做加权。而是把prev_chunk_left_over和prefix_weights喂进onnx图,图内部在denoise过程中做RTC guidance。所以最终生成的前9步通常会接近旧动作,但不一定数学上完全等于旧动作。
所以完整的过程是:
txt
推理开始时:
ActionQueue 剩余 old[0:20]
构造 RTC 输入:
old[0:20] 作为 prev_chunk_left_over
weights: [1...1, exp decay..., 0...]
ONNX 生成:
new[0:9] 受 old[0:9] 强约束
new[9:15] 受 old[9:15] 衰减约束
new[15:50] 基本自由生成
推理结束合并:
丢掉 new[0:9]
ActionQueue = new[9:50]