R8 细化:预训练→监督微调→离线 RL 流水线定稿;IQL/CQL/DT 选型对比; IMU 奖励工程四分量(姿态稳定/抖动/平滑/任务进度);三阶段落地路径。 新增样本级验证集划分实验报告(整集 60 样本噪声大 → 样本级 142 样本 更稳,F2b 在更难验证集上取得更低 val)。实现:val_split_mode 默认 sample,dataset sample_indices 过滤 + zscore 统计口径保持训练集专属。
213 lines
12 KiB
Markdown
213 lines
12 KiB
Markdown
# actpred × pybot 研究方向报告:循环神经网络思想与机器人学习演进路线
|
||
|
||
日期:2026-08-14(Asia/Shanghai)
|
||
范围:`actpred/`(动作预测,大脑)与 `pybot/`(机器人运行时,身体)
|
||
类型:技术研究方向调研(`advisory`;涉及部署可行性的判断标注 `verify_pending`,需 Hailo 实测确认)
|
||
|
||
## 0. 报告说明
|
||
|
||
本报告源于两个递进的调研问题:(1)动作预测能否引入更多循环神经网络(RNN)思想;(2)在此之上的整体研究方向。报告先剖析 actpred 当前建模范式的本质与痛点,再给出 RNN 思想的四个切入点,最后组织成分层的演进路线图。所有判断基于当日代码基线(进程内闭环已落地、Hailo NPU 部署链已实机验证)与项目现实约束。
|
||
|
||
## 1. 现状建模范式与核心痛点
|
||
|
||
### 1.1 当前是"单步窗口预测",模型无跨步隐状态
|
||
|
||
actpred 的 `ActionPredictor`([model.py:89-147](../../actpred/model.py#L89-L147))每步独立地用
|
||
`[F帧图像, H步动作, PRED]` token 序列做一次性 Transformer 注意力融合,取 PRED 位置回归下一动作。
|
||
关键事实:**模型本身没有任何跨步隐状态**,跨步记忆完全由 H 步(默认 5)原始动作向量窗口承载。
|
||
|
||
训练侧是 teacher forcing([dataset.py:112-117](../../actpred/dataset.py#L112-L117)):
|
||
`action_history` 取真实历史,`target` 取下一真实动作,单步监督。
|
||
|
||
### 1.2 由此产生的三个真实痛点
|
||
|
||
| 痛点 | 根因 | 后果 |
|
||
|------|------|------|
|
||
| 长程依赖被截断 | 记忆容量 = H 步原始动作 | 超过 5 步的运动模式(起步→加速→匀速的长惯性)在窗口外丢失 |
|
||
| 动作不平滑 | 每步独立回归,无惯性先验 | 预测抖动,对物理舵机是磨损/损坏风险 |
|
||
| exposure bias | 训练用真实历史、闭环推理用自预测历史 | 分布失配,误差随步数累积,闭环易发散 |
|
||
|
||
### 1.3 决定性约束:Hailo NPU 部署链
|
||
|
||
[model.py:94](../../actpred/model.py#L94) 明确"除 batch 外全部维度静态,保证 ONNX/NPU 部署友好";
|
||
[export_deploy.py](../../actpred/export_deploy.py) 整套 DFC 改造(图像输入拆帧、AvgPool 替换、
|
||
注意力手工展开)都围绕**静态图**。因此**循环算子(GRU/LSTM)是可行性的分水岭**——
|
||
DFC 对循环算子的支持通常弱于静态卷积。这一约束直接决定下文各方案的取舍。
|
||
|
||
## 2. RNN 思想的四个切入点(按部署链冲击排序)
|
||
|
||
### 方案 C · 残差/惯性先验:预测 Δaction(零参数,立即见效)⭐
|
||
|
||
把预测目标从绝对动作改为增量:`â_t = a_{t-1} + Δ`,模型只学 `Δ`。
|
||
|
||
- **本质**:等价于对角权重固定为 1 的线性 RNN(积分器),是 RNN 思想的极简形式。
|
||
- **收益**:输出被惯性锚定,天然平滑;训练更易收敛;舵机抖动大减。
|
||
- **部署影响**:零(只改 dataset 的 target 构造 + predict 逆变换时加回 `a_{t-1}`)。
|
||
- **代价**:极小。**强烈建议无论选哪条路线都先做这条**。
|
||
|
||
### 方案 B · 训练目标:多步展开 + scheduled sampling(治 exposure bias)
|
||
|
||
不改模型,只改训练:
|
||
- dataset 一次取 K 步连续样本而非单步;
|
||
- 第 1 步用真实历史,第 2 步起用模型自己的预测回传(scheduled sampling),loss 对 K 步累加。
|
||
|
||
- **收益**:直接消除训练/推理分布失配,闭环稳定性大幅提升。
|
||
- **部署影响**:零(模型结构不变,已部署 Hailo 推理链不动)。
|
||
- **代价**:只改 train.py 训练循环 + dataset 采样逻辑,风险最低。
|
||
|
||
### 方案 A · 混合架构:动作历史用 GRU 压缩(进阶)
|
||
|
||
`act_proj` 后不接 H 个独立 token,而是过一层 GRU,取最终隐状态压成 **1 个"动作记忆 token"**,
|
||
与 F 个图像 token + PRED 一起进 Transformer:
|
||
|
||
```
|
||
现状: H 个动作 token ──────────────────┐
|
||
改进: H 步动作 → GRU → h_final (1 token) ├→ [img×F, mem×1, PRED] → Transformer
|
||
```
|
||
|
||
- **收益**:跨步记忆容量与 H 解耦(GRU 隐状态压缩全部历史),长程惯性可建模。
|
||
- **部署影响**:token 序列从 `F+H+1` 变 `F+2`,更短更静态;唯一新增算子是 GRU——
|
||
**关键风险点**,需先验证 Hailo DFC 对 GRU 的支持(可用固定 H 步展开的 cell 堆叠规避真循环)。
|
||
- **代价**:中等改动(model.py + export_deploy.py 的 GRU 展开)。
|
||
|
||
### 方案 D · 全 recurrent 编码器(表达力最强,部署风险最高)
|
||
|
||
图像帧也过 ConvGRU,跨步隐状态贯穿视觉与动作。**但这打破"除 batch 外全静态 shape"的
|
||
NPU 部署前提**,需重新设计部署图。不推荐在当前 Hailo 目标下做。
|
||
|
||
### 切入点评审结论
|
||
|
||
```
|
||
第 1 步(零风险): C 残差预测 ──→ 立即改善平滑性,验证收益
|
||
第 2 步(零部署影响): B 多步展开训练 ──→ 治 exposure bias
|
||
第 3 步(需验证): A GRU 记忆 token ──→ 先做 Hailo GRU 支持单测
|
||
├─ 支持 → 展开 GRU 进部署链
|
||
└─ 不支持 → 保持 Transformer,仅用 B+C
|
||
```
|
||
|
||
**C+B 组合是性价比最高的第一步**:不改部署链、不增参数,直接解决"抖动 + exposure bias"
|
||
两个最痛的问题。A 留作需要更强长程记忆时的进阶项。
|
||
|
||
## 3. 整体研究方向:分层演进路线
|
||
|
||
在 RNN 思想之外,从机器人学习前沿看,两模块的演进空间组织为四层。现实约束:
|
||
**纯模仿学习(无奖励信号)、MPU6050 已装未用、数据靠实机 `--record`(稀缺)、Hailo NPU 部署硬约束**。
|
||
|
||
### Tier 0 · 立足现状(零部署风险,先做)
|
||
|
||
| 编号 | 方向 | 价值 | 改动 |
|
||
|------|------|------|------|
|
||
| R1 | 残差预测 + 多步展开训练(C+B) | 治抖动+失配,所有后续工作的地基 | dataset + train |
|
||
| R2 | **MPU6050 姿态回流** ⭐ | 给模型"本体感觉",是机器人标准状态量 | pybot 读 IMU + actpred 加输入维 |
|
||
| R3 | 数据增强扩充 | 稀缺数据的低成本放大 | dataset 增方法 |
|
||
| R4 | **离线评估基准** | 没有基准,后续改进全是盲改 | 新增评估脚本 |
|
||
|
||
**R2 被低估**:pybot 已有 [mpu6050.py](../../pybot/pybot/hd/mpu6050.py) Kalman 姿态解算,但完全没进
|
||
actpred 的状态表征——模型对自身俯仰/横滚/角速度是盲的。接入 IMU 6 轴作为额外 token 或并入
|
||
动作向量,既补本体感觉,又为 R9 奖励设计提供信号源。
|
||
|
||
**R4 是基础设施**:现在只有开环 MSE。需要闭环代理指标——留出 episode 上开环滚动预测,
|
||
测多步累积误差、动作平滑度(相邻动作差分方差)、物理可行性(越界率)。
|
||
|
||
**R3**:当前仅亮度/对比度/饱和度/色调增强([dataset.py:99-102](../../actpred/dataset.py#L99-L102)),
|
||
可加时间扭曲(帧率扰动)、动作镜像(左右对称对)、episode 混合拼接。
|
||
|
||
### Tier 1 · 模型能力(需验证部署兼容)
|
||
|
||
| 编号 | 方向 | 说明 |
|
||
|------|------|------|
|
||
| R5 | GRU 记忆 token(方案 A) | 先验 Hailo DFC 循环算子支持 |
|
||
| R6 | 多模态状态融合 | 视觉+IMU+本体感觉统一表征(R2 完整版) |
|
||
| R7 | 世界模型雏形 | 学"动作→下一帧"预测头,支撑 MPC 规划与 model-based RL |
|
||
|
||
### Tier 2 · 学习范式跃迁(数据/奖励是瓶颈)
|
||
|
||
| 编号 | 方向 | 说明 |
|
||
|------|------|------|
|
||
| R8 | **离线强化学习(CQL/IQL)** | 关键契合点:已有大量录制 episode、无法实机安全探索(舵机会坏),离线 RL 从固定数据集学策略、无需在线交互 |
|
||
| R9 | 奖励设计(MPU6050) | 姿态稳定性(姿态角方差小=奖励高)、能耗(动作差分平滑=省能)、任务进度 → 标量奖励;从"模仿"走向"优化"的关键一跃 |
|
||
| R10 | 自监督视觉预训练 | MAE/对比学习在相机图像上预训练编码器,缓解数据稀缺(ImageNet 预训练与机器人第一视角差异大) |
|
||
|
||
**R8 的洞察**:离线 RL 正好契合"数据已有 + 不能实机探索"的现状。但前提是 R9 的奖励信号。
|
||
|
||
### R8 细化:预训练 → 监督微调 → 离线 RL 三层流水线
|
||
|
||
**流水线形态**(基于 2026-08 实验进展的定稿):
|
||
|
||
```
|
||
阶段 0 预训练(.mt 动作动力学) → 已有(pretrain_mt)
|
||
阶段 1 监督微调(录制 episode,MSE/CE)→ 已有(train.py)
|
||
阶段 2 离线 RL(录制数据 + IMU 奖励) → 待建(本细化)
|
||
```
|
||
|
||
**为什么离线而非在线**:在线探索在真机上有物理风险(舵机乱动、碰撞),且 R4 已证明闭环
|
||
反馈敏感——RL 探索的随机扰动会放大不稳定。离线 RL 从固定数据集学策略,零硬件风险。
|
||
|
||
**算法选型**:
|
||
|
||
| 算法 | 形态 | 适配度 |
|
||
|------|------|--------|
|
||
| IQL | 隐式 Q 学习,数据高效 | 首选:单策略、录制数据规模小 |
|
||
| CQL | 保守 Q 惩罚,抗分布外 | 备选:数据质量差时更稳 |
|
||
| 决策 Transformer(DT) | 回报条件化,无价值网络 | 简替:实现最简,但回报需已知 |
|
||
|
||
**IMU 奖励工程(R9 落地)**——传感器从"输入"变"监督信号":
|
||
|
||
| 奖励分量 | 公式(示意) | 物理意义 |
|
||
|---------|-------------|---------|
|
||
| 姿态稳定 | r₁ = -α·(|roll| + |pitch|) | 越正越接近站直 |
|
||
| 抖动惩罚 | r₂ = -β·var(角加速度) | 平滑运动,节能 |
|
||
| 动作平滑 | r₃ = -γ·Σ‖aₜ - aₜ₋₁‖ | 与 R4 平滑度指标同源 |
|
||
| 任务进度 | r₄ = 姿态变化率(完成检测) | 驱动任务完成 |
|
||
|
||
奖励为标量加权和:R = Σwᵢrᵢ。设计难点在于权重标定——需实机 IMU 统计
|
||
(静止 vs 动作时的量级差)确定 α/β/γ。
|
||
|
||
**落地路径**:
|
||
|
||
```
|
||
阶段 A(数据前提): 实机 --record 采集 + IMU 统计标定奖励权重
|
||
阶段 B(离线 RL): IQL 在录制数据上训练,R4 闭环对比监督基线
|
||
阶段 C(安全在线): 小幅度动作扰动微调 + 动作界/速率保护
|
||
```
|
||
|
||
**与当前实验的衔接**:one-hot 方案(F 系列)的固定列机制与有界输出天然
|
||
兼容 RL 的动作扰动保护;样本级验证集划分(20260815)为 RL 的价值函数
|
||
评估提供更稳的口径。R8 的前提不变:奖励信号(R9)与真实数据缺一不可——
|
||
当前 dry-run 数据(噪声帧 + 零 IMU)对 RL 无意义。
|
||
|
||
### Tier 3 · 远景(与 aibox 联动)
|
||
|
||
- **R11 语言条件策略**:aibox 高层语言指令("向前走""左转")作为条件,actpred 出低层动作——
|
||
分层控制,打通项目"AI 智能体"与"机器人"两大域。
|
||
- **R12 sim2real / 数字孪生**:pybot 的 dry_run 已具备合成帧 + Mock 总线,可演进为轻量仿真环境,
|
||
先仿真预训练再迁移真机,解决数据稀缺与安全探索。
|
||
- **R13 持续学习**:闭环运行中不断回流新 episode 增量微调,机器人越用越聪明。
|
||
|
||
## 4. 推荐切入点与关键决策点
|
||
|
||
**短期(本月)**:**R1 + R4**。先落地"残差+多步训练",同时建评估基准——没有基准,后续改进无法量化对比。
|
||
|
||
**中期**:**R2(MPU6050 回流)性价比之王**——硬件已装、代码已在、收益明确(本体感觉 + 奖励信号源),
|
||
只缺"接一根线"。
|
||
|
||
**关键决策点**:R5 GRU 是否值得做,取决于先做 **"Hailo DFC 循环算子支持验证"** 这个小实验:
|
||
|
||
- 支持 → R5/R7 可行,循环路线打开;
|
||
- 不支持 → Tier 1 循环类方案全部绕行(用更长静态窗口替代隐状态),精力转向
|
||
**R2 多模态 + R8 离线 RL** 这条不依赖循环算子的路线。
|
||
|
||
## 5. 与本季其他工作的衔接
|
||
|
||
- 进程内闭环已落地(pybot `run_loop`/`--loop`),P1-2 帧源(守护线程队列)与 P1-1 overrun 告警已修复
|
||
——见 [pybot_actpred_AUDIT_20260814.md](../reviews/pybot_actpred_AUDIT_20260814.md)。
|
||
- 数据飞轮已通:`--record` 录制 → 训练 → 推理 → `--loop` 闭环,为 R8 离线 RL 与 R13 持续学习
|
||
提供数据回路。
|
||
- `--record` 微动作与录制设计见 [pybot_micro_action_and_recording_20260813.md](pybot_micro_action_and_recording_20260813.md);
|
||
Hailo 部署链详见 [actpred_hailo_hat2_inference_research_20260813.md](actpred_hailo_hat2_inference_research_20260813.md)。
|
||
|
||
---
|
||
|
||
*本报告为研究方向调研(advisory),方案 A/R5/R7 的部署可行性标 verify_pending,
|
||
落地前需做 Hailo DFC 循环算子支持实测。*
|