0)先把背景钉牢:这个模型训练时到底在学什么?
模型每次输入:现在的场景点云(很多点)机器人未来 H 步动作(机器人点流)
模型输出:未来 H 步里,场景里每个点的 3D 位置(或位移)
所以训练最朴素的想法是:对每个点、每个未来时间步,把'预测位置'和'真实位置'做差,然后用 L2(平方误差)去最小化。但他们说:这样会出两个大问题。这一段就是在解决这两个问题。
Step 1:在 t 帧 RGB-D 中'选好一批点'
这一步是训练数据构建阶段做的,不是网络做的。
典型做法(完全符合论文精神):拿 t 时刻的 RGB-D mask 掉机器人像素在剩余像素里 采样 N_S 个像素(比如 500~2000 个)对每个像素 (u_i,v_i)t:用深度反投影得到 3D 点 p{t,i} 记录这个点的 索引 i
到这里你已经有了:点集合:{p_{t,i}}_{i=1}^{N_S} 每个点在 RGB 中的原始像素位置 (u_i,v_i)_t 🔑 这一步就已经'锁死'了点的身份 以后所有监督、预测、损失,都是围绕这同一批点 i=1…N_S
Step 2:训练时网络到底在预测什么?
网络输入的是:这 N_S 个点在 t 时刻的 3D 位置(scene points)机器人未来 H 步的 robot point flows
网络输出的是:P^{t+1,i}, P^{t+2,i}, …, P^_{t+H,i} 👉 第 i 个'初始点'在未来每一步的预测 3D 位置
注意:网络不是在'生成新的点云',而是在做一个 index-preserving 的逐点回归:
输入点 i ──▶ 输出未来的点 i
Step 3:真值是怎么来的?——你说的 2D tracking 正是这里用的
对这 同一批初始点 i,做下面的事:
3.1 在 RGB 中做 2D tracking 用 2D tracker(光流 / 点追踪器)把 (u_i,v_i)t 追踪到:(u_i,v_i){t+1}, (u_i,v_i){t+2}, …, (u_i,v_i){t+H} 如果某一步:遮挡出画面跟丢 👉 标记为 不可见
3.2 把追踪到的像素再变回 3D(这一步你已经说对了)
对每个 可见 的 (u_i,v_i){t+k}:用 t+k 时刻的深度图反投影得到:P{t+k,i}∈R^3 这就是训练用的 真值 3D 位置
Step 4:训练损失为什么能'对得上号'?**
现在你有:网络预测:P^{t+k,i} 真值标签:P{t+k,i}
它们的 i 是 同一个索引,因为:i 来自 t 帧选点tracking 是 **'追这个 i'**网络预测是 '预测这个 i'
所以损失函数里的:|P^{t+k,i} - P{t+k,i}|
在语义上是完全对齐的,不需要任何 matching、Hungarian、ICP 之类的操作。
👉 这正是论文敢说 '无需排列匹配(no permutation matching)' 的真正原因。
Step 5:那'联合点云''点云骨干'在这套里扮演什么角色?
关键澄清一句:点云骨干只是一个函数 f(i),它不会创造点,也不会改变点的身份。
流程是:输入是一个数组:index i : [scene point i , robot points...] PTv3 内部怎么做 attention / pooling 是它的事输出仍然是:index i : feature of point i
MLP 头再对 同一个 i 输出 P^_{t+k,i}
所以:tracking 负责'点的身份在时间上的延续'点云网络负责'在空间中理解谁会被机器人影响'
两者不冲突,分工明确
1)问题(i):大多数点不动 → 直接 L2 会让模型'偷懒'
1.1 直觉:如果 90% 的点都静止,会发生什么?
举个极端例子:桌面上 100 万个点,机器人只碰到盒子上那一小撮点,真正运动的可能只有几千点。
如果你用普通 L2,总损失大部分来自'不动点':对不动点,真值位移≈0 模型只要学会'所有点都预测不动',损失就能很小 结果:模型会倾向于忽视真正运动的少数点
所以论文说'训练信号稀疏':不是没信号,而是'有用信号被海量静止点淹没'。
1.2 他们的解决:给'会动的点'更高权重
核心思想一句话:先根据真值判断哪些点真的在动,然后训练时主要惩罚这些点。
2)他们怎么判断'这个点在第 k 步是不是在动'?——软运动概率 m_{k,i}
2.1 δ_{k,i} 是什么?
δ_{k,i} 是一个数(非负):取点 i 在第 k 步的真实位移向量的长度(范数)位移越大,δ_{k,i} 越大 完全不动时,δ_{k,i}=0
你可以把 δ_{k,i} 理解成:'这个点真的移动了多少'。
2.2 为什么不用硬阈值'动/不动'?而用 Sigmoid 软概率?
如果你用硬阈值,比如:位移>1mm 算动,否则不动。那在阈值附近会很不稳定:一点点噪声就把点从'动'翻成'不动'。
所以他们用 Sigmoid 做'软开关':m_{k,i}=σ(κ(δ_{k,i}-τ))
你这样读它:τ:位移阈值(比如'超过这个量我才认为真的动了')κ:温度/斜率(控制过渡有多陡)σ:Sigmoid,把任何数压到 [0,1]
结果是:若 δ_{k,i}≪τ:m_{k,i}≈0(基本不动)若 δ_{k,i}≫τ:m_{k,i}≈1(明显在动)若 δ_{k,i}接近 τ:m_{k,i} 在 0 到 1 之间('有点动但不确定')
一句话:m_{k,i} 就是'这个点在这一步有多像在动'的分数。
3)权重 w_{k,i}:把训练注意力集中到运动点上
他们把 m_{k,i} 归一化:w_{k,i}=m_{k,i}/∑{k,i}m{k,i}
这一步很多人会卡住,我直接说清楚:归一化后,所有 w_{k,i} 加起来等于 1(像概率分布)如果只有少数点真正在动,那么这些点的 m 接近 1,权重就会很大大量静止点 m 接近 0,权重就很小(几乎不贡献损失)
这就等于告诉训练:别把力气浪费在'本来就不动'的点上,重点盯着'被机器人影响的那部分点'。
4)问题(ii):真实数据有噪声 → 需要让模型对噪声'更稳'
现实世界里,真值并不完美:深度传感器有噪声 2D 追踪器生成伪真值会错 遮挡/反光会让点的位置抖动
如果你还用普通 L2:少量错误点(离群点)会产生巨大梯度 训练会被'假真值'带跑,模型不稳
所以他们加了两层'抗噪声设计':Huber 损失(比 L2 更抗离群点)偶然不确定性(aleatoric uncertainty)正则化(模型自己学会:哪些点本来就很噪,别太自信)
下面把这俩讲透。
5)Huber 损失 ρ_δ:为什么比 L2 稳?
Huber 是'介于 L1 和 L2 之间'的损失,你可以这样记:误差小的时候像 L2:平滑、好优化 误差大的时候像 L1:增长没那么快,不会因为一个离群点把损失炸飞
ρ_δ(r) = { 1/2 r^2, |r|≤δ; δ(|r|-1/2 δ), |r|>δ }
直觉:真实数据里偶尔会有'追踪器错得离谱'的点,Huber 不会让这种点把训练拖垮。
论文说'逐元素 Huber'意思是对 3D 残差的每个坐标分量做 Huber(实现细节),总之核心是'抗离群'。
6)偶然不确定性:s_{k,i}、e^{-s_{k,i}}、+s_{k,i} 到底在干嘛?
'aleatoric uncertainty 正则化'的核心:模型自适应地给每个点、每个时间步分配一个噪声尺度,用来调节损失权重,并用一个项约束它别乱报。
这是这一段最容易卡住的地方,我用一个'很直白的机制'解释:
6.1 模型除了预测位置,还额外预测一个'噪声大小'。也就是说,网络最后不只输出位置/位移,还输出一个额外通道:位置预测:P^{t+k,i}∈R^3 不确定性预测:s{k,i}∈R
对每个点 i、每个时间步 k,模型预测一个标量:s_{k,i}:对数方差(log variance)
你不用怕'对数方差'这四个字,它的作用就是:数越大表示:模型认为这个点这个时刻的真值越不可靠/噪声越大。
6.2 为什么要用 e^{-s_{k,i}} 乘在残差上?
损失里有一项:ρ_δ(P^-P)e^{-s_{k,i}}
你这样理解:如果模型觉得这里噪声大 → s 大 → e^{-s} 小 → **这点的残差惩罚被'削弱'**如果模型觉得这里很可靠 → s 小 → e^{-s} 大 → 这点的残差惩罚更强
这就像老师批作业:有的题本来就印刷模糊,允许你错一点(惩罚小)有的题很清晰,错了就该扣分(惩罚大)
6.3 但如果模型耍赖:把所有 s 都调很大,不就都不用学了吗?
所以损失里还加了:+s_{k,i}
这就是'反作弊条款':你说自己不确定(s 大)可以让残差惩罚变小 但你要付出代价:s 本身会被加进损失里 所以模型不能无限制地把 s 抬高
最终效果是一个平衡:只有当某点的误差确实更像噪声、无法拟合时,模型才'合理地'提高不确定性;否则提高 s 反而得不偿失。
这就是'偶然不确定性正则化'的核心。误差项乘 e^{-s}:噪声越大,误差惩罚越小。加上 +s:噪声越大,自己也要付代价,防止 s→∞的作弊
7)把最终目标函数(式 1)逐块翻译成人话
式 (1) 是:1/2 ∑{k,i}^{H, N_S} w{k,i} ⏟ movement weight ( ρ_δ(P^{t+k,i}-P{t+k,i}) ⏟ Huber loss on 3D residual e^{-s_{k,i}} ⏟ uncertainty weight + s_{k,i} ⏟ uncertainty reg. ) , (1)
你按'外→内'读:
外层:对所有时间步 k=1..H、所有场景点 i=1..N_S 求和
表示:未来每一步、每个点都要管。
w_{k,i}:运动权重
表示:动的点算得多,不动点算得少(解决问题 i)。
括号里第一项:ρ_δ(P^-P)e^{-s}
表示:用 Huber 计算 3D 误差,然后再根据不确定性调整惩罚强度(解决问题 ii 的一半)。
括号里第二项:+s
表示:防止模型把'不确定性'乱报得太大(解决问题 ii 的另一半)。所以整体一句话总结式 (1):重点惩罚真正运动的点;对噪声大的点允许模型降低惩罚,但必须付出'报不确定性'的代价;同时用 Huber 抵抗离群点。