diff --git a/docs/Transformer轨迹拟合训练方案.html b/docs/Transformer轨迹拟合训练方案.html index 6dfb0a0..3e794e8 100644 --- a/docs/Transformer轨迹拟合训练方案.html +++ b/docs/Transformer轨迹拟合训练方案.html @@ -261,7 +261,12 @@ id="toc-transformer-避障运动策略最终方案">Transformer 避障运动策略:最终方案
关于"风险": 论文证据只能说明"别人在相近条件下做成过",没有一篇论文的条件(低维状态、单根固定立柱、约 4M -参数、浏览器推理、30/30)与本项目完全一致。因此本方案中只有安全层是硬保证(碰撞与否不依赖模型好坏);其余每一项都配有证据等级、本仓库可测的门禁(不过不进下一步)和回退(§10)。
+参数、浏览器推理、30/30)与本项目完全一致。因此本方案中只有安全层是硬保证;每个设计点都已定为唯一选择(§1.1),只有 +MeanFlow +头带一个预先写定触发条件的回退(碰撞与否不依赖模型好坏);其余每一项都配有证据等级、本仓库可测的门禁(不过不进下一步)和回退(§10)。| 数据 | -采样式规划器离线造 5 万条任务 → 约 200 万"状态→动作块"样本 | +规划器离线造 5 万条任务 → 约 200 万"状态→动作块"样本 | B | MπNets、DRP、ELMP 均用规划器老师 | DRP;Diffusion Policy(位置式优于速度式) | |
| 动作头(默认) | -一步生成头:MeanFlow 或 Shortcut + 条件 OT -配对,每次并行采 8 个噪声 → 8 条候选 | +动作头 | +MeanFlow 一步生成头,每次并行采 8 个噪声 → 8 +条候选 | B | -沙箱双模态实验(§2.4);COT 双峰实证;MP1 约 6.8 ms | +沙箱双模态实验(§2.4);MP1 约 6.8 ms |
| 动作头(基线) | -K=4 模式 WTA 头,与默认头 A/B,择优 | -A | -多模态轨迹预测通用做法;沙箱实验同样通过 | -|||
| 块间连续 | 训练时前缀条件化:输入已提交未执行的步 | B | 2512.05964:推理零开销,d≥2 时优于推理时 RTC | |||
| 碰撞修正 | -输出后 1–2 步解析胶囊距离梯度投影(仅 d < 余量时) | +输出后 1 步解析胶囊距离梯度投影(每轴 ≤ 0.5°,仅 d < +余量时) | B | DiffusionSeeder:少步生成下在环引导收益很小;投影在已知环境下够用 | ||
| 候选排序 | 与已提交块重叠步的一致性打分 + 价值头 | B | BID:一致性打分 + 多样本相对提升 32% | |||
| 预训练 | 行为克隆 + FK 胶囊端点损失 | B | ELMP 式 FK 损失 | |||
| 后训练(主) | APG:可微运动学展开 + 胶囊距离代价反传 | A | ELMP:碰撞率 31.3%→8.9%;1 万示范 + APG 胜 60 万纯 BC | |||
| 后训练(辅) | -无老师挖错循环 + 门禁;可选 ReinFlow | -B | -DRP 迭代微调 +45%;ReinFlow +40% | -|||
| 后训练(辅) | +无老师挖错循环 + 门禁 | +B | +DRP 迭代微调 +45% | +|||
| 安全层 | 距离下界认证 + 可刹停不变式 | A | Schwarzer 2005 连续认证;Thumm & Althoff 2022 failsafe | |||
| 30/30 手段 | -子目标头、价值头、短前瞻、卡死换向 | +子目标头、价值头、冷启动/卡死时短前瞻、卡死换向 | B / C | AWE、SHAC、BID | ||
| 老师 | +PRM 路网 A* + 捷径平滑(确定性);A* 失败才用
+solveDyn |
+B | +MπNets:老师不一致碰撞率 13.78%,一致老师 0.94% | +|||
| 推理后端 | +onnxruntime-web wasm-SIMD 多线程 | +C | +小模型下 WebGPU 调度开销占主导 | +
| 选项 | +利 | +弊 | +决定 | +
|---|---|---|---|
| 动作头:MeanFlow 一步头 vs WTA K=4 | +MeanFlow:连续多模态,能同时表达左/右绕行与位姿目标的多个 IK +分支;沙箱 1 步达到 10 步流匹配质量。WTA:训练稳、实现简单 | +MeanFlow:训练需 JVP(训练慢约 1.5–2 +倍)、原生版本在部分任务失败(K-MF 表 1)。WTA:只有 4 个固定模式,左右 +× 肘/腕分支可能超过 4 个;沙箱分不出两者高下 | +上 MeanFlow。WTA 不实现;只有 M5 +门禁不过(near_column 穿柱率高于 2% 或训练发散)才换成 WTA +K=8,二者共用骨干,切换约 1 天 | +
| Shortcut + 条件 OT 配对 | +无需 JVP | +本项目无任何实测,组合无论文先例 | +不上 | +
| B 样条动作表示 | +平滑由表示保证;输出维度小 | +贴柱时拐角被抹圆、局部精度下降;只有间接证据;平滑已由梯形时间律 + +平滑损失保证 | +不上,固定 16 步 Δq | +
| 输出后梯度投影 | +修掉 1–2 mm 的轻微侵入,成本约 0.1 ms,减少刹停 | +推离数据分布、改变块间一致性;修不了"绕错侧" | +上,限 1 步、每轴修正量 ≤ 0.5°,仅 d < +余量时触发 | +
| 短前瞻(多推一块打分) | +避开"走两步就撞墙"的分支 | +推理次数翻倍,加剧最大不确定项(浏览器延迟) | +只在冷启动和卡死换向时上,平时不做 | +
| 拒绝采样自蒸馏 | +进一步缩短行程 | +偏向贴柱、余量变小、多样性塌缩;APG 行程项已覆盖同一目标 | +不上 | +
| ReinFlow 强化学习微调 | +能直接优化到达/卡死/刹停等离散目标 | +RL +会重塑左右模式比例;奖励调参与训练多出数天;这些离散目标已由卡死换向规则 ++ APG 覆盖 | +不上 | +
| 挖错循环中 E2 错题请老师补路径 | +解决可微代价绕不出的局部极小 | +量小、离线 | +上 | +
老师:PRM 路网 A* vs solveDyn |
+A*:确定性,同类任务左右选择一致,且是路网上的最短;solveDyn
+覆盖更全 |
+A*:受路网分辨率限制,个别任务失败 | +A 为主老师*,失败的任务用
+solveDyn(固定种子)补 |
+
| 推理后端:WebGPU vs wasm | +WebGPU 大模型快 | +本模型约 4M 参数,WebGPU 每次调度 33–67 μs × 150–300 +次,调度开销反而大 | +wasm-SIMD 多线程;M4 实测若 WebGPU P99 +更低再换 | +
| 训练余量 | +越大越不易被认证拒绝 | +越大行程越长、贴柱越难 | +5 mm | +
| 关节噪声增广 σ | +覆盖偏离状态 | +过大产生无意义状态 | +1° | +
| 局部牛顿精修 | +末端精度到 < 1 mm | +无 | +上,同样过安全层 | +
证据等级:A 有直接先例与数字 · B @@ -630,9 +748,9 @@ ms;消除现有拖拽重规划 P99 约 321 ms 的长尾
4.6 耗时与存储
-solveDyn 约 0.7 s/条:沙箱 2 进程约 5 小时;8 核机器约
-1.5 小时。
+- 路网 A* 每条数十毫秒,耗时主要在过滤认证;按
solveDyn
+0.7 s/条上限估算,沙箱 2 进程不超过 5 小时。
- 200 万样本原始约 1 GB;Parquet 约 200 MB。
4.7 检查点
-
+
@@ -956,19 +1080,13 @@ type="checkbox" />ml/data/stats.json:类别、到达率、行程
8
臂各段到立柱的胶囊距离
-
-上一次所选模式 k_prev
-5
-one-hot(含"无"),仅 WTA 基线头使用
-
5.2 输出
-- 默认一步生成头:每条候选 16 步 × 6 轴
+
- MeanFlow 一步头:每条候选 16 步 × 6 轴
Δq(按每轴最大步长归一化)。
-- WTA 基线头:K=4 条 16 步 Δq + 4 类模式 logits。
-- 两种头共用:价值头(剩余时间/代价)、子目标头(2 个关节途经点 +
+
- 附加头:价值头(剩余时间/代价)、子目标头(2 个关节途经点 +
是否需要)。
5.3 连续轴
@@ -981,11 +1099,10 @@ type="checkbox" />ml/data/stats.json:类别、到达率、行程
│
4 层 Transformer encoder
│ (memory)
-16 个动作 token(一步头:注入噪声 + 时间嵌入;WTA:K×16 个可学习 token)
+16 个动作 token(注入噪声 z + 时间嵌入 (r, t))
▼
4 层 Transformer decoder(非自回归,一次前向)
├─ 动作输出:每 token 6 维 Δq
- ├─ (WTA)模式分类头:4
├─ 价值头:1
└─ 子目标头:2 个关节途经点 + 是否需要
子目标触发:新目标或目标跳变 > 50 mm 时输出;到达当前子目标 < 5° 后切下一个。
-| - | 一步生成头(默认) | -WTA 头(基线) | +项 | +做法 |
|---|---|---|---|---|
| 多模态 | -连续分布;每次并行采 8 个噪声 → 8 条候选 | -固定 4 个模式 | +连续分布;每次推理并行采 8 个噪声 → 8 条候选 | |
| 训练 | -MeanFlow 损失,或 Shortcut 自一致 + FM 锚定损失(配合条件 OT -配对) | -WTA-L1 + 模式 CE | +MeanFlow 平均速度场损失(MP1 配方:25% 样本
+r≠t,自适应损失加权),JVP 用 torch.func.jvp |
|
| 推理 | -1 次批量前向 | -1 次前向 | +1 次批量前向(r=0, t=1) | |
| 后处理 | -1–2 步解析胶囊距离梯度投影(JS 实现,仅 d < 余量时) | -同左 | +1 步解析胶囊距离梯度投影,每轴修正 ≤ 0.5°,仅 d < 余量时(JS +实现,不走 ONNX) | |
| APG 兼容 | 固定噪声后为确定性可微映射 | -模式选择用 Gumbel-Softmax 或对 4 个模式各展开取最小代价 | +||
| 预定回退 | +M5 门禁不过(near_column 穿柱率 > 2% 或训练发散)→ 同骨干换 WTA +K=8 头(WTA-L1 + 模式 CE),约 1 天 |
M4 同时实现两种头,M5 预训练后在 near_column 与门禁集上 -A/B(穿柱率、到达率、摇摆率),择优部署。
一步生成头:
-L = MeanFlow 损失(或 Shortcut 自一致 + FM 锚定) 1.0
+L = MeanFlow 损失 1.0
+ FK 损失:一步输出(固定噪声)的各连杆胶囊端点位置差 0.5
+ 平滑:二阶差分 0.05
+ 价值头 L1 + 子目标头 L1 0.1 / 0.1
-WTA 头:
-L = WTA-L1(动作块, 最近模式) 1.0
- + CE(模式分类) 0.5
- + FK 损失 0.5
- + 平滑:二阶差分 0.05
- + 价值头 L1 + 子目标头 L1 0.1 / 0.1
6.4 训练配置
@@ -1116,7 +1224,7 @@ s),统计到达率、用时 ≤ 老师 × 1.3
for 每个 batch(随机采样 q0 和目标,不需要老师):
q = q0
for t in 0..H-1 (H = 60 次推理 × 3 步 = 180 步 ≈ 3.6 s;长任务分段截断反传):
- chunk = π(obs(q, 目标, 前缀)) # 一步头固定噪声;WTA 见 §6.2
+ chunk = π(obs(q, 目标, 前缀), z) # 每条展开固定一个噪声 z
Δq = chunk[0:3] # 与部署一致
q = clamp(q + Δq)
累计 L_col(q), L_smooth(Δq)
@@ -1124,8 +1232,8 @@ s),统计到达率、用时 ≤ 老师 × 1.3
反传,梯度裁剪 ≤ 1.0,lr 1e-4
- 碰撞项 L_col = Σ ReLU(margin − 胶囊距离),margin =
-
margin_mm + 训练余量(3–6
-mm,覆盖安全层认证的保守量);含臂×立柱、臂×台架、臂×臂(非相邻段)。
+margin_mm + 训练余量 5
+mm(覆盖安全层认证的保守量);含臂×立柱、臂×台架、臂×臂(非相邻段)。
- 到达项:位置误差² + λ_rot·‖R − R*‖_F²。
- 平滑项:速度² + 加速度²。
- BC 锚定项:保留预训练损失,防止多模态被压缩;每轮监控左右比例。
@@ -1145,21 +1253,14 @@ mm,覆盖安全层认证的保守量);含臂×立柱、臂×台架、臂×
个百分点、上一轮修好的错题 95% 仍对;否则回滚。
- 停止:连续 2 轮提升 < 0.5 个百分点,或满 6 轮。
-7.3 可选:拒绝采样自蒸馏
-每个任务采样多条闭环轨迹,在"验算通过且最小间隙 ≥
-阈值"的样本中取最短的一条做行为克隆标签。门禁:C
-类间隙中位数不低于自蒸馏前的 80%,刹停率不升。
-7.4 可选:ReinFlow 微调
-奖励 = 到达 − 刹停次数 − 卡死 −
-用时,按左/右绕行分组平衡奖励,防止模式分布被重塑。
8. 部署
8.1 执行循环
执行:50 Hz,每步 20 ms,按已提交步走
每 60 ms:
1. 读当前 q、当前速度、已提交未执行前缀、最新目标
- 2. 推理:一步头 8 条候选(WTA 为 4 条)16 步动作块
- 3. 每条候选做 1–2 步胶囊距离梯度投影(仅 d < 余量时)
+ 2. 推理:8 个噪声 → 8 条 16 步动作块(冷启动或卡死换向时,再各推一块做短前瞻)
+ 3. 每条候选做 1 步胶囊距离梯度投影(每轴 ≤ 0.5°,仅 d < 余量时)
4. 排序(§8.2)
5. 安全层依次认证候选前 3 步 + 刹停段(§8.3),第一个通过的提交给执行器
6. 全部不通过 → 沿上一次已认证的刹停段停下,下次继续推理
@@ -1169,12 +1270,8 @@ mm,覆盖安全层认证的保守量);含臂×立柱、臂×台架、臂×
Worker、按实际 dt 推进,避免 requestAnimationFrame(60
Hz)与 20 ms 不整除及后台节流造成的抖动。
8.2 候选排序(防左右摇摆)
-
-- 一步头:分数 = −Σ w_k‖候选第 k 步 − 已提交块第 k 步‖²(重叠步加权)−
-λ·价值头剩余代价。
-- WTA 头:分数 = log p(k) − c·[k ≠ k_prev] − λ·价值头剩余代价,c 初值
-2.0。
-
+分数 = −Σ w_k‖候选第 k 步 − 已提交块第 k 步‖²(重叠步加权)−
+λ·价值头剩余代价。冷启动时无已提交块,只用价值头 + 短前瞻打分。
8.3 安全层(唯一的硬保证)
- 距离下界认证:对一段运动 q_a →
@@ -1227,12 +1324,12 @@ ms,否则放 Web Worker 与推理流水线并行。
个关节途经点作为绕柱方向锚点,标签取老师路径拐点(离线)。
- 价值头:预测剩余时间/代价,用于候选打分与进展判断;APG
中用 TD 自举监督。
-- 短前瞻:对每条候选再推一块,用胶囊认证 + 价值头给
-32 步后终态打分。
+- 短前瞻(仅冷启动和卡死换向时):对每条候选再推一块,用胶囊认证
++ 价值头给 32 步后终态打分。
- 卡死检测 + 强制换向:0.3 s 内价值不降或连续 2
次刹停 → 切到另一绕行方向并锁定 1 s。
- 训练侧加强:贴柱类占 APG 采样
-40%;展开覆盖整段绕行;贴柱任务做拒绝采样自蒸馏。
+40%;展开覆盖整段绕行。
8.6 控制周期
伺服层(参考):Franka FCI 1 ms;UR e-Series 2 ms、CB3 8 ms;ABB EGM
@@ -1372,9 +1469,9 @@ rt)
R1
-老师左右绕行不一致,标签自相矛盾
-同任务 5 种子同伦类一致率 ≥ 90%
-固定"最短同伦类"偏好,或改用 PRM 路网 A* 作老师
+老师在相邻任务上左右绕行跳变,标签自相矛盾
+起终点扰动 ±5 mm 的邻居任务同伦类一致率 ≥ 90%
+对 A* 边代价加左右偏好项,强制同区域选同侧
M1
@@ -1393,17 +1490,16 @@ rt)
R4
-浏览器推理延迟:WebGPU 每次调度 33–67 μs,8 层 Transformer 约
-150–300 次调度
-M4 后立即导出 ONNX,在目标浏览器测 batch=8(含前瞻 16)P99
-wasm-SIMD 多线程;去掉前瞻;减小模型
+浏览器推理延迟
+M4 后立即导出 ONNX,wasm-SIMD 多线程测 batch=8 P99 < 15 ms
+减小模型(d=128,约 1.8M 参数);同时测 WebGPU,更快则换
M4(最大不确定项)
R5
-一步生成头在 6 轴、位姿目标下不如 WTA,或训练不稳
-M5 A/B:穿柱率、到达率、摇摆率
-部署 WTA 头
+MeanFlow 头在 6 轴、位姿目标下穿柱或训练不稳
+near_column 穿柱率(关安全层)≤ 2%;损失不发散
+同骨干换 WTA K=8 头
M5
@@ -1464,7 +1560,7 @@ a_max、插补频率与提交步数。
gen/ gen_dataset.cjs sampler.cjs run_parallel.sh
data/ (不入库)shard_*.jsonl stats.json *.parquet norm.json
prep/ build_dataset.py
- model/ policy_transformer.py # 一步生成头 + WTA 头
+ model/ policy_transformer.py # MeanFlow 一步头
sim/ closed_loop.py # 闭环仿真(验证、挖错、APG 共用)
eval/ collide_torch.py # 可微胶囊距离,与 JS 对拍
apg/ apg_finetune.py
@@ -1506,15 +1602,15 @@ tests/policy_bench.cjs
M4
-模型(两种头)+ 训练工程 + 闭环仿真;小数据过拟合;导出 ONNX
+模型 + 训练工程 + 闭环仿真;小数据过拟合;导出 ONNX
测浏览器延迟
train.py、closed_loop.py、延迟报告
沙箱 + 浏览器
M5
-预训练;一步头 vs WTA A/B
-checkpoint、A/B 报告
+预训练 + MeanFlow 头门禁
+checkpoint、门禁报告
用户 GPU
@@ -1524,19 +1620,13 @@ tests/policy_bench.cjs
用户 GPU
-M6b
-(可选)ReinFlow 微调
-对比 M6
-用户 GPU
-
-
M7
ik-policy.js 闭环部署 + 安全层实测 +
policy_bench + 一次性验收
对比表
沙箱 + 浏览器
-
+
M8
移除查看器对
solveDyn/routeRT/路网的运行时依赖(保留在
diff --git a/docs/Transformer轨迹拟合训练方案.md b/docs/Transformer轨迹拟合训练方案.md
index a4aabdd..15e64c3 100644
--- a/docs/Transformer轨迹拟合训练方案.md
+++ b/docs/Transformer轨迹拟合训练方案.md
@@ -17,7 +17,7 @@
| 收益目标 | 冷启动(新目标到第一个动作)< 10 ms;每次推理 + 安全认证 < 20 ms;消除现有拖拽重规划 P99 约 321 ms 的长尾 |
| 底线 | 实时拖拽**碰撞帧 = 0**(由安全层距离认证保证);到达率、行程在 §9 指标上不低于现有规划器 |
-**关于"风险":** 论文证据只能说明"别人在相近条件下做成过",没有一篇论文的条件(低维状态、单根固定立柱、约 4M 参数、浏览器推理、30/30)与本项目完全一致。因此本方案中只有安全层是**硬保证**(碰撞与否不依赖模型好坏);其余每一项都配有证据等级、本仓库可测的**门禁**(不过不进下一步)和**回退**(§10)。
+**关于"风险":** 论文证据只能说明"别人在相近条件下做成过",没有一篇论文的条件(低维状态、单根固定立柱、约 4M 参数、浏览器推理、30/30)与本项目完全一致。因此本方案中只有安全层是**硬保证**;每个设计点都已定为唯一选择(§1.1),只有 MeanFlow 头带一个预先写定触发条件的回退(碰撞与否不依赖模型好坏);其余每一项都配有证据等级、本仓库可测的**门禁**(不过不进下一步)和**回退**(§10)。
---
@@ -26,19 +26,38 @@
| 模块 | 最终选择 | 证据等级 | 关键依据 |
|---|---|---|---|
| 模型规模 | 约 4.1M 参数编码器-解码器 Transformer,不用 VLA 大模型 | A | IMPACT 4.67M、300 Hz;π0 3B 单次预填充 46 ms(4090) |
-| 数据 | 采样式规划器离线造 5 万条任务 → 约 200 万"状态→动作块"样本 | B | MπNets、DRP、ELMP 均用规划器老师 |
+| 数据 | 规划器离线造 5 万条任务 → 约 200 万"状态→动作块"样本 | B | MπNets、DRP、ELMP 均用规划器老师 |
| 时间律 | 匀速巡航 + 梯形加减速,只依赖"当前速度 + 剩余路程";当前速度作输入 | B | MπNets 将老师路径重定时为匀速 |
| 动作表示 | 16 步 × 6 轴关节增量 Δq | A | DRP;Diffusion Policy(位置式优于速度式) |
-| 动作头(默认) | **一步生成头**:MeanFlow 或 Shortcut + 条件 OT 配对,每次并行采 8 个噪声 → 8 条候选 | B | 沙箱双模态实验(§2.4);COT 双峰实证;MP1 约 6.8 ms |
-| 动作头(基线) | K=4 模式 WTA 头,与默认头 A/B,择优 | A | 多模态轨迹预测通用做法;沙箱实验同样通过 |
+| 动作头 | **MeanFlow 一步生成头**,每次并行采 8 个噪声 → 8 条候选 | B | 沙箱双模态实验(§2.4);MP1 约 6.8 ms |
| 块间连续 | 训练时前缀条件化:输入已提交未执行的步 | B | 2512.05964:推理零开销,d≥2 时优于推理时 RTC |
-| 碰撞修正 | 输出后 1–2 步解析胶囊距离梯度投影(仅 d < 余量时) | B | DiffusionSeeder:少步生成下在环引导收益很小;投影在已知环境下够用 |
+| 碰撞修正 | 输出后 1 步解析胶囊距离梯度投影(每轴 ≤ 0.5°,仅 d < 余量时) | B | DiffusionSeeder:少步生成下在环引导收益很小;投影在已知环境下够用 |
| 候选排序 | 与已提交块重叠步的一致性打分 + 价值头 | B | BID:一致性打分 + 多样本相对提升 32% |
| 预训练 | 行为克隆 + FK 胶囊端点损失 | B | ELMP 式 FK 损失 |
| 后训练(主) | APG:可微运动学展开 + 胶囊距离代价反传 | A | ELMP:碰撞率 31.3%→8.9%;1 万示范 + APG 胜 60 万纯 BC |
-| 后训练(辅) | 无老师挖错循环 + 门禁;可选 ReinFlow | B | DRP 迭代微调 +45%;ReinFlow +40% |
+| 后训练(辅) | 无老师挖错循环 + 门禁 | B | DRP 迭代微调 +45% |
| 安全层 | 距离下界认证 + 可刹停不变式 | A | Schwarzer 2005 连续认证;Thumm & Althoff 2022 failsafe |
-| 30/30 手段 | 子目标头、价值头、短前瞻、卡死换向 | B / C | AWE、SHAC、BID |
+| 30/30 手段 | 子目标头、价值头、冷启动/卡死时短前瞻、卡死换向 | B / C | AWE、SHAC、BID |
+| 老师 | PRM 路网 A* + 捷径平滑(确定性);A* 失败才用 `solveDyn` | B | MπNets:老师不一致碰撞率 13.78%,一致老师 0.94% |
+| 推理后端 | onnxruntime-web wasm-SIMD 多线程 | C | 小模型下 WebGPU 调度开销占主导 |
+
+### 1.1 取舍决定(每项只有一个答案)
+
+| 选项 | 利 | 弊 | 决定 |
+|---|---|---|---|
+| 动作头:MeanFlow 一步头 vs WTA K=4 | MeanFlow:连续多模态,能同时表达左/右绕行与位姿目标的多个 IK 分支;沙箱 1 步达到 10 步流匹配质量。WTA:训练稳、实现简单 | MeanFlow:训练需 JVP(训练慢约 1.5–2 倍)、原生版本在部分任务失败(K-MF 表 1)。WTA:只有 4 个固定模式,左右 × 肘/腕分支可能超过 4 个;沙箱分不出两者高下 | **上 MeanFlow**。WTA 不实现;只有 M5 门禁不过(near_column 穿柱率高于 2% 或训练发散)才换成 WTA K=8,二者共用骨干,切换约 1 天 |
+| Shortcut + 条件 OT 配对 | 无需 JVP | 本项目无任何实测,组合无论文先例 | **不上** |
+| B 样条动作表示 | 平滑由表示保证;输出维度小 | 贴柱时拐角被抹圆、局部精度下降;只有间接证据;平滑已由梯形时间律 + 平滑损失保证 | **不上**,固定 16 步 Δq |
+| 输出后梯度投影 | 修掉 1–2 mm 的轻微侵入,成本约 0.1 ms,减少刹停 | 推离数据分布、改变块间一致性;修不了"绕错侧" | **上**,限 1 步、每轴修正量 ≤ 0.5°,仅 d < 余量时触发 |
+| 短前瞻(多推一块打分) | 避开"走两步就撞墙"的分支 | 推理次数翻倍,加剧最大不确定项(浏览器延迟) | **只在冷启动和卡死换向时上**,平时不做 |
+| 拒绝采样自蒸馏 | 进一步缩短行程 | 偏向贴柱、余量变小、多样性塌缩;APG 行程项已覆盖同一目标 | **不上** |
+| ReinFlow 强化学习微调 | 能直接优化到达/卡死/刹停等离散目标 | RL 会重塑左右模式比例;奖励调参与训练多出数天;这些离散目标已由卡死换向规则 + APG 覆盖 | **不上** |
+| 挖错循环中 E2 错题请老师补路径 | 解决可微代价绕不出的局部极小 | 量小、离线 | **上** |
+| 老师:PRM 路网 A* vs `solveDyn` | A*:确定性,同类任务左右选择一致,且是路网上的最短;`solveDyn` 覆盖更全 | A*:受路网分辨率限制,个别任务失败 | **A* 为主老师**,失败的任务用 `solveDyn`(固定种子)补 |
+| 推理后端:WebGPU vs wasm | WebGPU 大模型快 | 本模型约 4M 参数,WebGPU 每次调度 33–67 μs × 150–300 次,调度开销反而大 | **wasm-SIMD 多线程**;M4 实测若 WebGPU P99 更低再换 |
+| 训练余量 | 越大越不易被认证拒绝 | 越大行程越长、贴柱越难 | **5 mm** |
+| 关节噪声增广 σ | 覆盖偏离状态 | 过大产生无意义状态 | **1°** |
+| 局部牛顿精修 | 末端精度到 < 1 mm | 无 | **上**,同样过安全层 |
证据等级:**A** 有直接先例与数字 · **B** 有相近先例,需本仓库验证 · **C** 仅推断。
@@ -75,15 +94,16 @@
| 技术 | 结论 | 理由 |
|---|---|---|
| VLA 大模型(π0/π0.5、GR00T、OpenVLA) | 不采用 | 无图像、无语言指令;3B 参数更慢不更准 |
-| 一步生成:MeanFlow(MP1)、Shortcut、条件 OT 配对 | **采用**(默认头候选) | 1 次前向;COT 有双峰实证;Shortcut 无需 JVP |
+| 一步生成:MeanFlow(MP1) | **采用** | 1 次前向;沙箱双模态实验通过 |
| Consistency Policy、OneDP、朴素 1 步流匹配 | 不采用 | CP 原文承认偏向一侧;OneDP 有意取单模态;朴素 1 步 FM 等于条件均值,会穿柱 |
-| OFP 自蒸馏 | 不作首选 | 未找到公开代码;自引导 λ=0.5 时出现模态塌缩 |
+| Shortcut / 条件 OT 配对 | 不采用 | 见 §1.1 |
+| OFP 自蒸馏 | 不采用 | 未找到公开代码;自引导 λ=0.5 时出现模态塌缩 |
| 生成过程中代价引导(MPD/EDMP/GPD) | 不采用 | 无论文在 1–2 步下验证;改用输出后投影 |
| 推理时 RTC | 不采用 | 原文只验证 5 步去噪且需反向传播;改用训练时前缀条件化 |
| 时间集成 / 交叉淡入 | 不采用 | 执行的是未认证的混合块;左右两块平均可能穿柱;π0 弃用 |
| FAST 动作分词 | 不采用 | 服务于语言骨干,自回归推理慢 |
-| B 样条动作表示 | 可选 | 仅间接证据;须 near_column 消融不掉点才启用 |
-| ReinFlow / DPPO | 可选第三阶段 | 适合到达/卡死/刹停等离散目标;须按左右分组平衡奖励 |
+| B 样条动作表示 | 不采用 | 见 §1.1 |
+| ReinFlow / DPPO | 不采用 | 见 §1.1 |
### 2.4 沙箱双模态对照实验
@@ -99,7 +119,7 @@
- 朴素 1 步流匹配会把模态平均进柱子;MeanFlow 1 步达到 10 步流匹配的质量,推理快约 8 倍。
- 安全层在所有方法上把穿柱降为 0,代价是刹停。
-- 该任务过于简单(闭环中状态一偏离中轴即打破对称),**分不出一步头与 WTA 谁更好**,需在真实数据上 A/B(M5)。
+- 该任务过于简单(闭环中状态一偏离中轴即打破对称),**分不出一步头与 WTA 谁更好**;因此 WTA 只作为 M5 门禁不过时的预定回退(§1.1)。
- 训练仅 300 步的 MSE 在同一难例上 100% 穿柱、加安全层后 0% 到达,说明欠拟合时平均模态的风险真实存在。
---
@@ -110,7 +130,7 @@
|---|---|---|
| 数据生成 | Hark 沙箱(2 vCPU / 7 GB,Node)或用户机器 | 纯 JS,无需 GPU |
| 预训练 + 后训练 | 用户 RTX 3090 24 GB | batch 1024–2048 |
-| 部署推理 | 浏览器 onnxruntime-web(WebGPU / wasm-SIMD,按实测选);后续真机控制器 | 与现有查看器同页 |
+| 部署推理 | 浏览器 onnxruntime-web wasm-SIMD 多线程;后续真机控制器 | 与现有查看器同页 |
```bash
conda create -n armtf python=3.11 -y && conda activate armtf
@@ -159,7 +179,7 @@ pip install numpy pyarrow tqdm tensorboard onnx onnxruntime
| C 贴立柱 | 15% | b 满足 `nearColumn`,q0 在立柱另一侧 |
| D 目标不可达 | 10% | 目标在立柱内/所有分支都撞/工作空间外;标签为停靠 |
-- pos / pose 各半;老师用 `solveDyn`,固定种子;同类任务优先取行程最短的绕行同伦类,保证左右选择一致。
+- pos / pose 各半;老师为 PRM 路网 A* + 捷径平滑(确定性;复用 `routeRT` 的路网图搜索,放宽时间预算);A* 失败的任务用 `solveDyn`(固定种子)补。
- 另造三个互不重叠的集合:**门禁集** 2000 条(挖错循环每轮用)、**held-out 验收集** 2000 条、**near_column 扩展验收集** ≥1000 条;两个验收集只在最终验收时用一次。现有三个基准不进训练集。
### 4.4 过滤
@@ -175,17 +195,17 @@ pip install numpy pyarrow tqdm tensorboard onnx onnxruntime
- 输入:§5.1 全部字段(含当前速度、已提交前缀)
- 标签:未来 16 步 Δq_{t+k} = q_{t+k} − q_t(到终点后补零)
3. 每条路径约 40–50 个样本 → 约 200 万样本(以 `stats.json` 为准)。
-4. 协变量偏移对策:关节噪声增广(σ 0.5–1°,噪声状态由老师离线重标);偏离状态的进一步覆盖靠 §7。
+4. 协变量偏移对策:关节噪声增广(σ = 1°,噪声状态由老师离线重标);偏离状态的进一步覆盖靠 §7。
### 4.6 耗时与存储
-- `solveDyn` 约 0.7 s/条:沙箱 2 进程约 5 小时;8 核机器约 1.5 小时。
+- 路网 A* 每条数十毫秒,耗时主要在过滤认证;按 `solveDyn` 0.7 s/条上限估算,沙箱 2 进程不超过 5 小时。
- 200 万样本原始约 1 GB;Parquet 约 200 MB。
### 4.7 检查点
- [ ] `ml/data/stats.json`:类别、到达率、行程、样本数、补零样本占比
-- [ ] 老师一致性:同任务 5 个种子,同伦类一致率 ≥ 90%,行程变异系数 < 10%
+- [ ] 老师一致性:起终点扰动 ±5 mm 的邻居任务同伦类一致率 ≥ 90%
- [ ] 抽 20 条在查看器回放(新增 `?replay=` 参数)
- [ ] 各集合与训练集无重叠
@@ -209,13 +229,11 @@ pip install numpy pyarrow tqdm tensorboard onnx onnxruntime
| 已提交未执行前缀 | 3×6 + 3 | 前缀 Δq + 有效长度掩码;训练时随机遮盖 0–3 步 |
| 当前子目标 | 6 | 子目标头输出的关节途经点(归一化);无子目标时填当前 q |
| 关键胶囊对最小距离 | 8 | 臂各段到立柱的胶囊距离 |
-| 上一次所选模式 k_prev | 5 | one-hot(含"无"),仅 WTA 基线头使用 |
### 5.2 输出
-- 默认一步生成头:每条候选 16 步 × 6 轴 Δq(按每轴最大步长归一化)。
-- WTA 基线头:K=4 条 16 步 Δq + 4 类模式 logits。
-- 两种头共用:价值头(剩余时间/代价)、子目标头(2 个关节途经点 + 是否需要)。
+- MeanFlow 一步头:每条候选 16 步 × 6 轴 Δq(按每轴最大步长归一化)。
+- 附加头:价值头(剩余时间/代价)、子目标头(2 个关节途经点 + 是否需要)。
### 5.3 连续轴
@@ -232,11 +250,10 @@ J1/J3/J6 统一用 `unwrapTo` 展开后再做增量;预处理与部署共用
│
4 层 Transformer encoder
│ (memory)
-16 个动作 token(一步头:注入噪声 + 时间嵌入;WTA:K×16 个可学习 token)
+16 个动作 token(注入噪声 z + 时间嵌入 (r, t))
▼
4 层 Transformer decoder(非自回归,一次前向)
├─ 动作输出:每 token 6 维 Δq
- ├─ (WTA)模式分类头:4
├─ 价值头:1
└─ 子目标头:2 个关节途经点 + 是否需要
```
@@ -249,39 +266,26 @@ J1/J3/J6 统一用 `unwrapTo` 展开后再做增量;预处理与部署共用
子目标触发:新目标或目标跳变 > 50 mm 时输出;到达当前子目标 < 5° 后切下一个。
-### 6.2 动作头
+### 6.2 动作头:MeanFlow 一步生成
-| | 一步生成头(默认) | WTA 头(基线) |
-|---|---|---|
-| 多模态 | 连续分布;每次并行采 8 个噪声 → 8 条候选 | 固定 4 个模式 |
-| 训练 | MeanFlow 损失,或 Shortcut 自一致 + FM 锚定损失(配合条件 OT 配对) | WTA-L1 + 模式 CE |
-| 推理 | 1 次批量前向 | 1 次前向 |
-| 后处理 | 1–2 步解析胶囊距离梯度投影(JS 实现,仅 d < 余量时) | 同左 |
-| APG 兼容 | 固定噪声后为确定性可微映射 | 模式选择用 Gumbel-Softmax 或对 4 个模式各展开取最小代价 |
-
-M4 同时实现两种头,M5 预训练后在 near_column 与门禁集上 A/B(穿柱率、到达率、摇摆率),择优部署。
+| 项 | 做法 |
+|---|---|
+| 多模态 | 连续分布;每次推理并行采 8 个噪声 → 8 条候选 |
+| 训练 | MeanFlow 平均速度场损失(MP1 配方:25% 样本 r≠t,自适应损失加权),JVP 用 `torch.func.jvp` |
+| 推理 | 1 次批量前向(r=0, t=1) |
+| 后处理 | 1 步解析胶囊距离梯度投影,每轴修正 ≤ 0.5°,仅 d < 余量时(JS 实现,不走 ONNX) |
+| APG 兼容 | 固定噪声后为确定性可微映射 |
+| 预定回退 | M5 门禁不过(near_column 穿柱率 > 2% 或训练发散)→ 同骨干换 WTA K=8 头(WTA-L1 + 模式 CE),约 1 天 |
### 6.3 损失
-一步生成头:
-
```
-L = MeanFlow 损失(或 Shortcut 自一致 + FM 锚定) 1.0
+L = MeanFlow 损失 1.0
+ FK 损失:一步输出(固定噪声)的各连杆胶囊端点位置差 0.5
+ 平滑:二阶差分 0.05
+ 价值头 L1 + 子目标头 L1 0.1 / 0.1
```
-WTA 头:
-
-```
-L = WTA-L1(动作块, 最近模式) 1.0
- + CE(模式分类) 0.5
- + FK 损失 0.5
- + 平滑:二阶差分 0.05
- + 价值头 L1 + 子目标头 L1 0.1 / 0.1
-```
-
### 6.4 训练配置
| 项 | 值 |
@@ -308,7 +312,7 @@ L = WTA-L1(动作块, 最近模式) 1.0
for 每个 batch(随机采样 q0 和目标,不需要老师):
q = q0
for t in 0..H-1 (H = 60 次推理 × 3 步 = 180 步 ≈ 3.6 s;长任务分段截断反传):
- chunk = π(obs(q, 目标, 前缀)) # 一步头固定噪声;WTA 见 §6.2
+ chunk = π(obs(q, 目标, 前缀), z) # 每条展开固定一个噪声 z
Δq = chunk[0:3] # 与部署一致
q = clamp(q + Δq)
累计 L_col(q), L_smooth(Δq)
@@ -316,7 +320,7 @@ for 每个 batch(随机采样 q0 和目标,不需要老师):
反传,梯度裁剪 ≤ 1.0,lr 1e-4
```
-- 碰撞项 L_col = Σ ReLU(margin − 胶囊距离),margin = `margin_mm` + 训练余量(3–6 mm,覆盖安全层认证的保守量);含臂×立柱、臂×台架、臂×臂(非相邻段)。
+- 碰撞项 L_col = Σ ReLU(margin − 胶囊距离),margin = `margin_mm` + 训练余量 5 mm(覆盖安全层认证的保守量);含臂×立柱、臂×台架、臂×臂(非相邻段)。
- 到达项:位置误差² + λ_rot·‖R − R*‖_F²。
- 平滑项:速度² + 加速度²。
- BC 锚定项:保留预训练损失,防止多模态被压缩;每轮监控左右比例。
@@ -333,14 +337,6 @@ for 每个 batch(随机采样 q0 和目标,不需要老师):
6. 门禁(用门禁集,不用验收集):到达率上升、A 类每轮降幅 ≤ 0.5 个百分点、上一轮修好的错题 95% 仍对;否则回滚。
7. 停止:连续 2 轮提升 < 0.5 个百分点,或满 6 轮。
-### 7.3 可选:拒绝采样自蒸馏
-
-每个任务采样多条闭环轨迹,在"验算通过且最小间隙 ≥ 阈值"的样本中取最短的一条做行为克隆标签。门禁:C 类间隙中位数不低于自蒸馏前的 80%,刹停率不升。
-
-### 7.4 可选:ReinFlow 微调
-
-奖励 = 到达 − 刹停次数 − 卡死 − 用时,按左/右绕行分组平衡奖励,防止模式分布被重塑。
-
---
## 8. 部署
@@ -351,8 +347,8 @@ for 每个 batch(随机采样 q0 和目标,不需要老师):
执行:50 Hz,每步 20 ms,按已提交步走
每 60 ms:
1. 读当前 q、当前速度、已提交未执行前缀、最新目标
- 2. 推理:一步头 8 条候选(WTA 为 4 条)16 步动作块
- 3. 每条候选做 1–2 步胶囊距离梯度投影(仅 d < 余量时)
+ 2. 推理:8 个噪声 → 8 条 16 步动作块(冷启动或卡死换向时,再各推一块做短前瞻)
+ 3. 每条候选做 1 步胶囊距离梯度投影(每轴 ≤ 0.5°,仅 d < 余量时)
4. 排序(§8.2)
5. 安全层依次认证候选前 3 步 + 刹停段(§8.3),第一个通过的提交给执行器
6. 全部不通过 → 沿上一次已认证的刹停段停下,下次继续推理
@@ -364,8 +360,7 @@ for 每个 batch(随机采样 q0 和目标,不需要老师):
### 8.2 候选排序(防左右摇摆)
-- 一步头:分数 = −Σ w_k‖候选第 k 步 − 已提交块第 k 步‖²(重叠步加权)− λ·价值头剩余代价。
-- WTA 头:分数 = log p(k) − c·[k ≠ k_prev] − λ·价值头剩余代价,c 初值 2.0。
+分数 = −Σ w_k‖候选第 k 步 − 已提交块第 k 步‖²(重叠步加权)− λ·价值头剩余代价。冷启动时无已提交块,只用价值头 + 短前瞻打分。
### 8.3 安全层(唯一的硬保证)
@@ -391,9 +386,9 @@ for 每个 batch(随机采样 q0 和目标,不需要老师):
1. **子目标头**:给出 1–2 个关节途经点作为绕柱方向锚点,标签取老师路径拐点(离线)。
2. **价值头**:预测剩余时间/代价,用于候选打分与进展判断;APG 中用 TD 自举监督。
-3. **短前瞻**:对每条候选再推一块,用胶囊认证 + 价值头给 32 步后终态打分。
+3. **短前瞻**(仅冷启动和卡死换向时):对每条候选再推一块,用胶囊认证 + 价值头给 32 步后终态打分。
4. **卡死检测 + 强制换向**:0.3 s 内价值不降或连续 2 次刹停 → 切到另一绕行方向并锁定 1 s。
-5. **训练侧加强**:贴柱类占 APG 采样 40%;展开覆盖整段绕行;贴柱任务做拒绝采样自蒸馏。
+5. **训练侧加强**:贴柱类占 APG 采样 40%;展开覆盖整段绕行。
### 8.6 控制周期
@@ -444,11 +439,11 @@ for 每个 batch(随机采样 q0 和目标,不需要老师):
| # | 风险 | 门禁(不过不进下一步) | 回退 | 何时测 |
|---|---|---|---|---|
-| R1 | 老师左右绕行不一致,标签自相矛盾 | 同任务 5 种子同伦类一致率 ≥ 90% | 固定"最短同伦类"偏好,或改用 PRM 路网 A* 作老师 | M1 |
+| R1 | 老师在相邻任务上左右绕行跳变,标签自相矛盾 | 起终点扰动 ±5 mm 的邻居任务同伦类一致率 ≥ 90% | 对 A* 边代价加左右偏好项,强制同区域选同侧 | M1 |
| R2 | 时间律仍有不可观测成分,闭环起不了步 | 近邻样本标签方差 < 10% 步长;起步失败率 = 0 | 进一步把剩余路程估计加入输入 | M1 / M5 |
| R3 | 距离认证过于保守,贴柱处拒绝率高,影响 30/30 | near_column 上认证拒绝率统计;离线 10⁵ 段 0.01° 审计漏检 = 0 | 训练余量提高到 3–6 mm,接受行程变长;收紧杠杆界(按位形分区) | M2 / M7 |
-| R4 | 浏览器推理延迟:WebGPU 每次调度 33–67 μs,8 层 Transformer 约 150–300 次调度 | M4 后立即导出 ONNX,在目标浏览器测 batch=8(含前瞻 16)P99 | wasm-SIMD 多线程;去掉前瞻;减小模型 | **M4(最大不确定项)** |
-| R5 | 一步生成头在 6 轴、位姿目标下不如 WTA,或训练不稳 | M5 A/B:穿柱率、到达率、摇摆率 | 部署 WTA 头 | M5 |
+| R4 | 浏览器推理延迟 | M4 后立即导出 ONNX,wasm-SIMD 多线程测 batch=8 P99 < 15 ms | 减小模型(d=128,约 1.8M 参数);同时测 WebGPU,更快则换 | **M4(最大不确定项)** |
+| R5 | MeanFlow 头在 6 轴、位姿目标下穿柱或训练不稳 | near_column 穿柱率(关安全层)≤ 2%;损失不发散 | 同骨干换 WTA K=8 头 | M5 |
| R6 | 位姿目标的多 IK 分支带来额外多峰 | 不同肘/腕分支子集到达率 ≥ 主集 − 2 个百分点 | 加目标分支标志 | M5 |
| R7 | APG 压缩多模态或拉长路径(ELMP 中路径 +23%) | 每轮左右比例与行程门禁 | 加大 BC 锚定权重;行程项 | M6 |
| R8 | 卡死换向活锁 | 50 个"两侧都要绕远"对抗用例 3 s 内恢复 ≥ 95%,活锁 = 0 | 子目标改为离散绕行锚点分类 | M6 / M7 |
@@ -475,7 +470,7 @@ ml/
gen/ gen_dataset.cjs sampler.cjs run_parallel.sh
data/ (不入库)shard_*.jsonl stats.json *.parquet norm.json
prep/ build_dataset.py
- model/ policy_transformer.py # 一步生成头 + WTA 头
+ model/ policy_transformer.py # MeanFlow 一步头
sim/ closed_loop.py # 闭环仿真(验证、挖错、APG 共用)
eval/ collide_torch.py # 可微胶囊距离,与 JS 对拍
apg/ apg_finetune.py
@@ -495,10 +490,9 @@ tests/policy_bench.cjs
| M1 | 数据生成器 + 时间律 + 1000 条试跑;老师一致性门禁 | `ml/gen/*`、stats.json | 沙箱 |
| M2 | 可微胶囊距离(PyTorch)与 JS 对拍;距离认证实现与 10⁵ 段审计 | `collide_torch.py`、认证模块 | 沙箱 |
| M3 | 5 万条老师数据 → 约 200 万样本 | Parquet | 沙箱约 5 h 或用户机器 |
-| M4 | 模型(两种头)+ 训练工程 + 闭环仿真;小数据过拟合;**导出 ONNX 测浏览器延迟** | `train.py`、`closed_loop.py`、延迟报告 | 沙箱 + 浏览器 |
-| M5 | 预训练;一步头 vs WTA A/B | checkpoint、A/B 报告 | 用户 GPU |
+| M4 | 模型 + 训练工程 + 闭环仿真;小数据过拟合;**导出 ONNX 测浏览器延迟** | `train.py`、`closed_loop.py`、延迟报告 | 沙箱 + 浏览器 |
+| M5 | 预训练 + MeanFlow 头门禁 | checkpoint、门禁报告 | 用户 GPU |
| M6 | APG 微调 + 挖错循环 3–6 轮 | 每轮 report.md | 用户 GPU |
-| M6b | (可选)ReinFlow 微调 | 对比 M6 | 用户 GPU |
| M7 | `ik-policy.js` 闭环部署 + 安全层实测 + `policy_bench` + 一次性验收 | 对比表 | 沙箱 + 浏览器 |
| M8 | 移除查看器对 `solveDyn`/`routeRT`/路网的运行时依赖(保留在 `ml/gen` 离线使用) | 部署包瘦身 | 沙箱 |