HomeBot-WM 主线实验报告 · Diffusion Policy (image Push-T, 262M) → Jetson AGX Orin
任务 Push-T:一个质点 agent(蓝色圆点)把 T 形块(灰色)推去与目标轮廓(绿色)对齐。coverage(覆盖率)= T 块与目标区的重叠比例(0–1),即本任务的 score,≥0.95 记成功。
⚠ 画面里没有机械臂 / 机器人本体——Push-T 是 Diffusion Policy 的标准 2D 抽象基准,agent 是直接施力的质点。选它当载体是因为它轻量、能在 8GB 上从头训练,而本项目的交付物是任务无关的压缩方法链(ONNX→INT8→DDIM→TensorRT)。
在 Orin 实机上用 TensorRT 引擎跑闭环(eval_trt_pusht.py,ctypes 直驱、全程无 torch),左右分屏 = 同一 seed、同一初始噪声下的 FP16(左)与 TRT 原生 INT8(右)。DDIM-50,2× 速播放,画面取环境原生 512×512 渲染(不影响策略的 96×96 观测路径)。
三段对照(刻意选了双向摆动,不是只挑 INT8 失败的)
为什么单集看不出结论:Push-T 闭环是混沌系统,INT8 的 ~7–9% 动作发散被逐步放大,单集差异双向摆动达 ±0.5~1.0(这 16 个 seed 里 INT8 只在 6 个上更低、7 个上反而更高)。系统性代价 −0.12 只有多集聚合后才显现——报告表 5 用 6 噪声种子 × n=50 配对得 t=−6.97、p<0.001。
Orin 绝对分低于 pc-3070(这 16 seed 上 FP16 均值 0.54 vs 0.81):dog 的 pymunk 是 7.3.1、pc-3070 是 6.2.1,叠加混沌放大,故只有同平台 FP16-vs-INT8 配对有效,跨平台绝对分不可比。
下面 4 段是压缩后策略(Diffusion Policy → DDIM-50 + onnxruntime QDQ INT8,即报告表 2 中与 FP32 统计不可分的那条无损路线)在 4 个不同初始位姿上的闭环 rollout(2× 速播放)。
逐段说明(与视频内「片段 N/4」标识对应)
同一策略、同一压缩配置,仅初始位姿不同;4 段中 3 段 coverage ≥ 0.96。完整 n=50 统计见下方「评测结果」板块。
注:策略是反应式模仿(行为克隆),无「对齐即停」机制,整个回合持续输出动作;coverage 取回合内最大值,故个别片段末尾把块推出对齐位不会降低该段分数——这是 Push-T + 模仿策略的固有行为,非压缩引入。
测试数据集与协议:Push-T image 闭环基准(Diffusion Policy 文献标准 2D 仿真任务,pymunk 物理)——策略在 Push-T 标准训练划分上从头训练(DDPM-100,8GB 3070);精度为闭环 rollout mean_score(n=50 随机种子),Orin 延迟为实机 predict_action 全墙钟(batch=1 · TensorRT 10.7),TRT 原生 INT8 vs FP16 闭环对比在 Orin 上用 6 噪声种子 × n=50 配对。
完整报告(摘要 + 两张全局地图 + 报告表 1–5 + 诚实边界)见 docs/compression/README.md。下面是关键结果。
| 配置 | DDIM 步数 | 精度 (n50) | 墙钟 (ms) | 吞吐 (Hz) | 过 10Hz |
|---|---|---|---|---|---|
| 全 FP16 | 50 | 0.814 | 238 | 4.2 | ✗ |
| 全 FP16 | 16 | 0.738 | 83 | 12.0 | ✓ |
| unet-INT8 + enc-FP16 | 16 | 0.738 | 55 | 18.2 | ✓ |
| unet-INT8 + enc-FP16 | 5 | 0.725 | 30 | 33.5 | ✓ |
推荐部署:精度优先 DDIM-16 + FP16(83ms / 12Hz);速度/内存优先 DDIM-16 + INT8(55ms / 18Hz,牺牲 ~0.12 精度换 1.6× 提速 + ~4× 压缩)。两条 INT8 路线代价不同:onnxruntime QDQ INT8 在 n=50 与 FP32 统计不可分(报告表 2),但 TRT 原生熵校准 INT8 在 Orin 闭环掉 ~0.12(报告表 5)——「INT8 无损」只对 onnxruntime 路线成立、不能外推到 TRT。表中精度列为 onnxruntime 口径;DDIM-50 + INT8 仅 6.8Hz 不过 10Hz。完整五张表与诚实边界见报告。
图 3 · 压缩方法链:训练 → ONNX 导出 → INT8 PTQ → DDIM 减步 → TensorRT(Orin)
完整方法学(模型/权重来源、数据集、校准集、指标定义、确切命令、环境版本)见 METHODOLOGY.md;踩坑记录见 PROBLEMS.md。上图为方法总览。
载体模型 = Diffusion Policy(image Push-T 变体,262M = 251.5M 扩散 UNet + 11.2M 视觉编码器)。输入 2 帧观测(每帧 = 96×96 RGB 图像 [0,1] + agent 2D 像素坐标),输出 16 步 2D 动作序列(执行取前 8 步后重规划)。压缩方法链任务无关——换载体只需改 I/O shape 与校准数据。
| 环节 | 做法与理由 |
|---|---|
| 拆两组件导出 | 扩散采样循环(UNet×N)留在 runtime,只导出 encoder 与 UNet 单步前向——扩散模型部署标准做法,也让步数成为 runtime 旋钮 |
| normalizer 烘焙 | 烘焙进 encoder ONNX,导出图直接吃原始 obs(image [0,1] + agent_pos),动作反归一化留在 runtime |
| INT8 QDQ | onnxruntime 静态量化产出 QDQ 图,TensorRT 原生消费(无需单独校准缓存) |
| DDIM 减步 | DDPM 不能减步(抽稀即崩至 ~0.5),DDIM 可以且优雅退化——步数直接决定 UNet 调用次数(100×→50×→5×),Orin 墙钟随之近似线性变化 |