对,我把 Instant-NuRec 的 Dynamic Gaussian / Motion Head 重新仔细看了一遍之后,感觉你的方向其实**比直接改 PointForward 更自然地适合 Instant-NuRec**。 而且这里有一个很重要的判断: > **Instant-NuRec 并不是“数学上不能表达 non-rigid”,而是它的 motion supervision、temporal bandwidth 和 correspondence 设计让它实际上很难学到真正的 non-rigid motion。** 所以我不建议简单做成“Instant-NuRec + Track4World”。更有意思的方向是把它现在的 **local per-query motion regression** 改造成一个: [ \boxed{\text{Track-Aligned Dynamic Gaussian Head}} ] 然后让 Track4World 提供的 tracking 思想解决 **persistent correspondence**,再用我们前面讨论的 structured deformation 解决 **non-rigid coherence**。 ------ # 1. 先把 Instant-NuRec 的 Dynamic Gaussian Head 准确拆开 严格地说,论文没有单独叫一个 “Dynamic Gaussian Head”。 它实际上是两个 head 配合: [ \boxed{ \text{3DGS Decoder} + \text{Motion Decoder} } ] 共享同一批 query: [ \mathcal Q={q_i}. ] 这些 query 是由 predicted depth 从 image pixel lift 到 3D world space 得到的,然后去 cross-attend shared encoder feature (F)。3DGS decoder 负责 scale、rotation、opacity 等 Gaussian 属性;motion decoder 则负责动态位置。([arXiv](https://arxiv.org/html/2607.14203v1)) ------ ## 1.1 一个 Dynamic Gaussian 到底是什么? 静态 Gaussian: [ g_i= (\mu_i,s_i,q_i,\alpha_i,c_i,n_i,\ell_i). ] 动态 Gaussian 的其他参数**完全一样**,只把: [ \mu_i ] 换成时间轨迹: [ \boxed{ \mu_i(t) } ] 而且它不是 arbitrary deformation function,而是只有三个 knots: [ { (t_1,\mu_1), (t_2,\mu_2), (t_3,\mu_3) }. ] 两个 knot 之间做线性插值: # [ \mu(t) (1-\lambda)\mu_k+\lambda\mu_{k+1}. ] 因此: ```text μ1 -------- μ2 -------- μ3 t- t0 t+ ``` 就是一个极其简单的 piecewise-linear 3D trajectory。([arXiv](https://arxiv.org/html/2607.14203v1)) ------ # 2. Motion Decoder 实际在干什么? 对于 source timestamp: [ t_s ] 的 query: [ q_i,\qquad \mu_i ] Motion Decoder 预测两个 displacement: [ \boxed{ (\Delta_i^{-},\Delta_i^{+}) } ] 分别去: - 同一 camera 的 immediately previous timestamp; - immediately next timestamp。 然后: # [ \mu_i^{-} \mu_i+\Delta_i^{-} ] [ \mu_i^0=\mu_i ] # [ \mu_i^{+} \mu_i+\Delta_i^{+}. ] 所以一个 dynamic Gaussian 实际就是: # [ \boxed{ \mu_i(t) \operatorname{Interp} { \mu_i+\Delta_i^-, \mu_i, \mu_i+\Delta_i^+ } } ] Motion Decoder 本身是一个 shallow Transformer: [ F \rightarrow \text{Transformer} \rightarrow (\Delta_-,\Delta_+), ] source time (t_{\rm src}) 进入 feature,而 target time (t_{\rm tgt}) 用 AdaLN condition 告诉网络“我要预测从这个时间到哪个时间的 motion”。([arXiv](https://arxiv.org/html/2607.14203v1)) 这张原文 Figure 2 很清楚: ------ # 3. Movable mask 只是决定哪些 Gaussian 真正使用 motion Instant-NuRec 并不是先把 dynamic query 独立提出来。 它: [ \boxed{\text{同一套 Q 同时进 GS Head 和 Motion Head}} ] 然后 semantic head 输出: - road - movable - sky - ego car 最终: [ q_i\in \text{movable} \Rightarrow g_i\in\mathcal G^d. ] 否则进入 static layer。([arXiv](https://arxiv.org/html/2607.14203v1)) 所以现在架构本质是: ```text Query Q / \ / \ GS Decoder Motion Decoder | | shape/appearance Δ-, Δ+ \ / \ / semantic mask | static / dynamic ``` ------ # 4. 一个非常重要的发现:它其实“理论上已经支持 non-rigid” 这点和 PointForward 不一样。 PointForward 强制: [ p_{i,t}=T_o(t)x_i, ] 同一个 object 的所有 points 共用 rigid (SE(3))。 但是 Instant-NuRec 是: # [ \boxed{ p_{i,t} p_i+\Delta_i(t) } ] 每个 query (i) 都有自己的: [ \Delta_i. ] 因此: ### 车身点 [ \Delta_1(t)\approx\Delta_2(t) ] 可以一起移动。 ### 行人的手和脚 完全可以: [ \Delta_{\rm hand}(t) \neq \Delta_{\rm foot}(t). ] 所以它**不是 rigid motion model**。 甚至从 representation capacity 来说,它比 PointForward 更适合 non-rigid。 ------ # 5. 那为什么作者还明确说 pedestrian articulation 是 limitation? 作者在 Discussion 里直接写: > 三关键帧 piecewise-linear trajectories 无法表示 sub-second non-rigid motion,例如 pedestrian articulation;更密集的 keyframes 可能解决。([arXiv](https://arxiv.org/html/2607.14203v1)) 但我觉得仅仅说: [ 3\text{ knots} \rightarrow more\ knots ] 其实只解释了一半。 真正的问题至少有 **四层**。 ------ # 6. 第一个问题:时间分辨率太低 Instant-NuRec 输入 temporal frames 是: [ 2\sim4\text{ Hz}. ] 训练时一个 clip 用: [ T\in{8,12,18} ] 个 temporal frames。([arXiv](https://arxiv.org/html/2607.14203v1)) 也就是说大概: [ 250\sim500\text{ ms} ] 才采一帧。 对于: - 汽车 translation; - 车辆转弯; 可能够。 但是: ```text pedestrian t0 t0+100ms t0+200ms t0+300ms O O O O /|\ /| |\ /| / \ / \ / \ / \ ``` 很多 articulation 是 sub-second 的。 因此: [ \boxed{ 3\ knots + 2\sim4Hz } ] 天然 bandwidth 不够。 ------ # 7. 第二个问题更严重:它的 Motion GT 本身就是 cuboid-derived Instant-NuRec 的: [ \mathcal L_{\rm motion} ] 由 forward/backward 3D flow supervision 构成。 而 foreground 的 3D scene flow 来自: [ \boxed{\text{cuboid tracks}} ] 训练数据里的 3D boxes 又来自 LiDAR cuboid auto-labeler + tracker。([arXiv](https://arxiv.org/html/2607.14203v1)) 这就出现了一个非常关键的问题。 假设一个 pedestrian: ```text box t1 box t2 ┌─────┐ ┌─────┐ │ O │ │ O │ │ /|\ │ --> │ |\/ │ │ / \ │ │ / \ │ └─────┘ └─────┘ ``` Cuboid track 能告诉你: [ T_{\rm box}(t_1\rightarrow t_2) ] 但是它不知道: [ \text{hand moved 20cm forward}. ] 所以 cuboid-derived foreground scene flow 本质更接近: # [ \boxed{ p_{i,t} T_{\rm box}(t)p_{i,0} } ] 也就是 rigid pseudo-flow。 于是出现一个很有意思的矛盾: [ \underbrace{\text{Network capacity}}_{\text{per-query, non-rigid capable}} ] 是够的, 但是: [ \underbrace{\text{training target}}_{\text{cuboid rigid flow}} ] 却在告诉 network: > 手和身体应该一起 rigid 地走。 所以我觉得 **Instant-NuRec 对 non-rigid 的最大 bottleneck 很可能不只是 3 knots,而是 motion supervision 本身。** ------ # 8. 第三个问题:它只是“短 tracklet”,不是 persistent track 现在一个 query: [ q_i@t ] 只预测: [ t^- \leftarrow t\rightarrow t^+. ] 也就是: ```text q_i / \ t- t+ ``` 它并没有定义: [ \boxed{ q_i(t_0) \leftrightarrow q_j(t_1) \leftrightarrow q_k(t_2) } ] 是同一个 physical point。 例如行人手上的同一个点: ```text Image t0 Image t1 Image t2 q17 q83 q41 ●----------------●---------------● same physical point ``` Instant-NuRec 没有显式的: [ q_{17}=q_{83}=q_{41} ] identity。 它只是让每一个 query 自己预测一小段: [ \Delta_-, \Delta_+. ] 所以我会把它叫做: [ \boxed{\text{local motion tracklets}} ] 而不是: [ \boxed{\text{persistent tracking}} ] ------ # 9. 第四个问题:只有 Gaussian center 随时间变 这个我觉得论文自己没有强调,但对于 non-rigid 很重要。 Dynamic layer 与 static layer 相比,论文说: > attributes 相同,**except position (\mu_i)** 被 trajectory (\mu(t)) 替代。([arXiv](https://arxiv.org/html/2607.14203v1)) 所以: [ s_i=\text{constant} ] [ q_i=\text{constant} ] [ n_i=\text{constant}. ] 但想一下手臂旋转: ```text t0 t1 ────● | ● ``` 一个 anisotropic Gaussian 原来: [ \Sigma_i ] 水平放置。 手臂转 90° 后,它的局部 surface orientation 应该也转。 只改变: [ \mu_i(t) ] 而保持: [ R_i,s_i,n_i ] 不变,并不是真正完整的 non-rigid Gaussian deformation。 所以这里实际上还有: [ \boxed{ \text{trajectory} \neq \text{full deformation} } ] 的问题。 ------ # 10. 这时候 Track4World 为什么刚好特别合适? 因为 Track4World 的核心恰好是 Instant-NuRec 最缺的那个东西: [ \boxed{\text{persistent physical correspondence}} ] Track4World 不局限于 adjacent frame,它能够预测 arbitrary frame pairs 的 dense 2D/3D flow,然后把 pairwise flows 组合成 world-centric dense 3D tracks。([arXiv](https://arxiv.org/html/2603.02573v2)) 所以: [ q_i@t_0 ] 可以拥有: # [ \boxed{ \tau_i { p_i(t_0), p_i(t_1), \dots, p_i(t_K) } } ] 这一下就把 Instant-NuRec 的: [ \text{local 3-point trajectory} ] 升级成: [ \boxed{ \text{persistent 3D track} } ] ------ # 11. 更巧的是:Track4World 论文其实直接批评了 Instant-NuRec 现在这种 Motion Head 范式 Track4World 在 Introduction 里面专门说: > 一个 straightforward solution 是在 geometry backbone 后面直接接一个 motion decoding head 去回归 3D scene flow;但这种 implicit regression 往往 data-hungry,而且难捕获 fine-grained motion。([arXiv](https://arxiv.org/html/2603.02573v2)) 你回头看 Instant-NuRec: [ F \rightarrow \text{shallow Transformer} \rightarrow \Delta_{3D} ] 基本就是这个范式。 而 Track4World 的解决方案是: [ \boxed{ \text{explicit correlation} + \text{iterative flow refinement} } ] 而不是单纯 implicit regression。([arXiv](https://arxiv.org/html/2603.02573v2)) 所以这两个工作接起来其实非常顺。 ------ # 12. 但我不建议最简单地: [ \boxed{ \Delta_{\rm InstantNuRec} \leftarrow \Delta_{\rm Track4World} } ] 这太直接了。 它会变成: > “我用了一个更好的 3D tracker 给 Gaussian motion。” 工程上有效,但 method contribution 会比较弱。 我更建议: # **Track-Aligned Dynamic Gaussian Head** 核心思想是: > **Track4World 不负责生成 Gaussian motion,而负责定义跨时间的 physical correspondence;Gaussian Head 再基于这些 persistent tracks 构建 structured 4D representation。** ------ # 13. 第一层修改:把 Motion Decoder 变成 Track Decoder 现在: [ H_{\rm motion} (q_i,F,t_{\rm tgt}) \rightarrow (\Delta_i^-,\Delta_i^+). ] 改成: [ \boxed{ H_{\rm track} (q_i,F,{t_k}) \rightarrow { \hat p_i(t_k), v_{i,k}, c_{i,k} }_{k=1}^{K} } ] 其中: - (\hat p_i(t_k)):world-space tracked position; - (v_{i,k}):visibility; - (c_{i,k}):track confidence。 Track4World 本身就预测 visibility 和独立的 track-confidence signal。([arXiv](https://arxiv.org/html/2603.02573v2)) 而且不要再只预测: [ t^-,t^+ ] 而是: [ t_1,\dots,t_K. ] 于是: ```text Original ● / \ / \ ● ● t- t0 t+ Track-Aligned ●────●────●────●────●────● t0 t1 t2 t3 t4 t5 one physical track ``` ------ # 14. 而且我甚至不建议真的完整跑一个独立 Track4World network 这里有一个非常好的 architecture compatibility。 Instant-NuRec backbone 基于: [ \text{Depth Anything 3} ] 的 alternating-attention ViT。([arXiv](https://arxiv.org/html/2607.14203v1)) Track4World 本身也建立在 VGGT/Pi3/DA3 这一类 global geometry encoder 上,它的 scene-flow decoder直接消费: - geometry features; - pointmaps; - camera poses。([arXiv](https://arxiv.org/html/2603.02573v2)) 所以最自然的办法是: [ \boxed{ \text{共享 Instant-NuRec Encoder} } ] 然后把现在 shallow regression Motion Decoder 替换成: [ \boxed{ \text{Track4World-style correlation Motion Head} } ] 即: ```text Shared DA3 Encoder F | +------------+-------------+ | | 3DGS Head Track Head | 2D-3D correlation | world-centric 3D tracks ``` 这样就不需要: ```text InstantNuRec backbone + Track4World backbone ``` 跑两遍。 ------ # 15. 我甚至会进一步:只对 Dynamic Queries 做 correlation Track4World 做: [ \text{all-pixel tracking}. ] 但 Instant-NuRec 已经有 semantic head: [ \text{movable / static}. ] 所以: # [ Q_d {q_i|\ell_i=\text{movable}}. ] 只有: [ Q_d ] 进入 expensive tracking head: [ Q_d \rightarrow H_{\rm track}. ] 道路、建筑完全不用。 这非常适合 driving。 计算量会变成: [ \boxed{ O(N_{\rm dynamic}) \ll O(HW) } ] 尤其 dynamic actor 在大多数 driving image 里只占一小部分。 ------ # 16. 接下来是我认为真正能成为方法核心的一步:Track-Aligned Feature Fusion 这是目前 Instant-NuRec 没有做的。 假设 Track Head 告诉我们: [ q_i ] 在不同时间对应: [ p_i(t_1),p_i(t_2),p_i(t_3). ] 投影回 image: # [ u_i(t_k) \pi_k(p_i(t_k)). ] 于是可以从每个 frame 的 encoder feature 中取: # [ f_{i,k} F_k(u_i(t_k)). ] 然后: # [ \boxed{ \bar f_i \frac{ \sum_k w_{i,k} f_{i,k} }{ \sum_k w_{i,k} } } ] 其中: # [ w_{i,k} v_{i,k}c_{i,k}. ] 于是: ```text frame t0 feature ──┐ frame t1 feature ──┤ frame t2 feature ──┼──→ Track Feature f_i frame t3 feature ──┤ frame t4 feature ──┘ ``` 这时候: [ \boxed{ \text{一个 physical point} \rightarrow \text{一个 persistent feature} } ] 而不是: [ \text{每个 frame 都重新产生一个 query/Gaussian}. ] ------ # 17. 这才是我觉得你这个想法最有意思的地方 Instant-NuRec 当前是: [ \boxed{ \text{Query-Aligned} } ] 但是 query 仍然属于某一 source image/time。 你可以把它变成: [ \boxed{ \textbf{Track-Aligned} } ] 一个 dynamic Gaussian 不再对应: > 某个时间的某个 pixel query 而对应: > **跨时间存在的一个 physical track。** 所以: [ \boxed{ \text{Pixel} \rightarrow \text{Query} \rightarrow \textbf{Track} \rightarrow \text{Gaussian} } ] 这和单纯“增加 motion accuracy”已经不是一个层面的改进了。 ------ # 18. 但如果做到这里,仍然有一个问题:Track4World track 是 noisy per-point flow 如果直接: [ \mu_i(t)=\hat p_i^{T4W}(t) ] 那么: - hand 一个 track; - elbow 一个 track; - torso 一个 track; 全部自己运动。 虽然 non-rigid 能表达了,但容易: [ \boxed{\text{loss of structural coherence}} ] 所以这里正好可以接上我们上一轮讨论的数学 formulation。 ------ # 19. 我建议把 Motion 分成: [ \boxed{ \text{Coarse Motion} + \text{Non-Rigid Residual} } ] 这个特别适合 Instant-NuRec,因为它训练时本来就有 cuboid flow。 定义: [ \Delta_{i,t}^{\rm coarse} ] 继续由原 Instant-NuRec Motion Decoder 负责。 它学习的是: [ \boxed{\text{actor-level / low-frequency motion}} ] 例如: - pedestrian 整体向前走; - car 往前开。 然后新增 Track Residual Head: [ r_{i,t}. ] 最终: # [ \boxed{ \mu_i(t) \mu_i + \Delta_{i,t}^{\rm coarse} + r_{i,t} } ] ------ # 20. 训练时可以得到一个非常干净的监督 Instant-NuRec 原本 cuboid target: [ p_{i,t}^{box}. ] Track4World 给: [ p_{i,t}^{track}. ] 那么 non-rigid residual pseudo-GT 就定义为: # [ \boxed{ r_{i,t}^{*} ## p_{i,t}^{track} p_{i,t}^{box} } ] 这太合适了。 ------ 对于车辆: [ p_{track}\approx p_{box} ] 所以: [ r^*\approx0. ] 自然退化成 Instant-NuRec。 ------ 对于 pedestrian: # [ p_{track} p_{box} + \text{articulation}. ] 所以: [ \boxed{ r^* \approx \text{articulation} } ] 例如: ```text Track motion ↓ ● hand @ t1 / / r_hand / rigid box ● prediction ``` 这样 Track4World 不需要承担全部 trajectory。 它只负责: [ \boxed{\text{what cuboid cannot explain}} ] 这会比直接相信 Track4World 的 absolute trajectory 稳定很多。 ------ # 21. 数学上,这就是我们之前说的 formulation 更结构化写: # [ \boxed{ p_{i,t} T_o(t) \left[ x_i+\delta_i(t) \right] } ] Instant-NuRec / Cuboid 负责: [ T_o(t) ] Track branch 负责: [ \delta_i(t). ] 更进一步: # [ \boxed{ \delta_i(t) B_i z_{o,t} } ] 于是: # [ \boxed{ p_{i,t} T_o(t) \left[ x_i+B_i z_{o,t} \right] } ] 这就是我之前最推荐你的 low-rank non-rigid formulation。 但现在它不是凭空来的了。 ------ # 22. Track4World 正好提供 (B_i z_t) 的监督 我们观察: [ \hat p_{i,t}^{track}. ] 去掉 global rigid motion: # [ \boxed{ \hat r_{i,t} ## T_o(t)^{-1} \hat p_{i,t}^{track} x_i. } ] 希望: [ \hat r_{i,t} \approx B_i z_{o,t}. ] 所以训练: # [ \boxed{ \mathcal L_{\rm nr} ## \sum_{i,t} w_{i,t} \left| B_i z_{o,t} \hat r_{i,t} \right|_1 } ] 其中: [ w_{i,t}=v_{i,t}c_{i,t}. ] 这就很漂亮了: ```text Actor deformation token z_o,t | +-------------+-------------+ | | | B_hand B_body B_leg | | | residual residual residual ``` motion 不再是完全独立: [ r_1,r_2,r_3,\ldots ] 而共享: [ \boxed{z_{o,t}}. ] ------ # 23. 那 actor (o) 怎么来? 这是这里唯一一个新的难点。 Instant-NuRec semantic head 只有: [ \text{movable} ] 没有论文里明确描述的 instance ID。 所以如果要: [ z_{o,t} ] 成为 actor-level token,需要 grouping。 我觉得有两个路线。 ### 简单 baseline 训练时直接用 cuboid instance ID: [ q_i\in box_o \Rightarrow i\in o. ] 推理时如果 optional cuboid tracks 存在,就继续用它们。 没有 cuboid 时,可以根据: - 3D proximity; - semantic mask; - track motion similarity; 做 dynamic-track clustering。 ------ ### 更有 research value 增加: [ \boxed{\text{Dynamic Actor Tokens}} ] 让 (M) 个 actor tokens cross-attend: [ Q_d. ] 然后每个 dynamic query 有 assignment: [ a_{io}. ] 类似: [ z_o \leftrightarrow \text{a coherent group of tracks}. ] 这样整套系统真正变成: [ \boxed{ \text{Track} \rightarrow \text{Actor Token} \rightarrow \text{Structured Dynamic GS} } ] 这和你一直想走的 token-aligned 路线会非常契合。 ------ # 24. 还有一个我强烈建议补的:不要只 track Gaussian Mean 刚才提到: Instant-NuRec 只有: [ \mu_i(t) ] 在动。 但 non-rigid 时: [ \Sigma_i(t) ] 也应该变化。 这里 tracking 恰好可以给出一个非常优雅的数学办法。 ------ # 25. 用邻居 tracks 估计 Local Deformation Gradient canonical frame 下,一个 Gaussian (i) 周围有邻居: [ j\in\mathcal N(i). ] canonical relative coordinates: # [ d_{ij}^{0} x_j-x_i. ] 时间 (t): # [ d_{ij}^{t} p_j(t)-p_i(t). ] 寻找局部 affine deformation: # [ \boxed{ A_i(t) ## \arg\min_A \sum_{j\in\mathcal N(i)} w_{ij,t} | d_{ij}^{t} A d_{ij}^{0} |_2^2 } ] 这是一个很简单的 weighted least squares。 ------ # 26. 然后直接 deform Gaussian covariance canonical Gaussian: [ \Sigma_i^0. ] 时间 (t): # [ \boxed{ \Sigma_i(t) A_i(t) \Sigma_i^0 A_i(t)^\top } ] 这非常漂亮。 因为: ### rigid rotation 如果: [ A=R, ] 那么: [ \Sigma(t)=R\Sigma^0R^\top. ] Gaussian 跟着手臂旋转。 ### local stretch 如果: [ A=RS, ] scale 也可以跟着局部 deformation 改。 ------ Normal 同样: # [ \boxed{ n_i(t) \frac{ A_i(t)^{-T} n_i^0 }{ |A_i(t)^{-T} n_i^0| } } ] 这样你得到的才是真正: [ \boxed{\text{non-rigid dynamic Gaussian}} ] 而不仅仅: [ \boxed{\text{moving Gaussian centers}}. ] 我觉得这个点甚至有可能成为你方法里一个很漂亮的小 contribution。 ------ # 27. 最终整个 Dynamic Gaussian 可以重新定义成 原 Instant-NuRec: # [ g_i(t) ( \mu_i(t), s_i, q_i, \alpha_i, c_i, n_i ). ] 你的版本: # [ \boxed{ g_i(t) \left( D_t(x_i), \Sigma_i(t), \alpha_i, c_i, n_i(t) \right) } ] 其中: # [ D_t(x_i) T_o(t) \left[ x_i+B_i z_{o,t} \right] ] 以及: # [ \Sigma_i(t) J_i(t) \Sigma_i^0 J_i(t)^\top. ] 如果不想显式求: [ J_i=\partial D/\partial x, ] 就使用前面 KNN tracks 算出来的: [ A_i(t) ] 近似: [ J_i(t). ] ------ # 28. 我会把最终架构设计成这样 ```text Multi-camera Video | v Instant-NuRec Encoder F +-------------+--------------+ | | | Depth Semantic GS features | | | Movable Mask | | +-------> Dynamic Queries Q_d | v Track Correlation Head (Track4World-style) | +-------------+-------------+ | | 3D Tracks Confidence / τ_i(t_1:T) Visibility | +-------------------------------+ | | v v Track-Aligned Feature Fusion Motion Decomposition | | | +--------+--------+ | | | | Coarse Motion Non-rigid | T_o(t) B_i z_o,t | | | | +--------+--------+ | | | v | μ_i(t) | | +--------------+----------------+ | v Canonical Gaussian Decoder | v Local Track Deformation | Σ_i(t), n_i(t) | v Dynamic 4D Gaussians ``` ------ # 29. 训练阶段我也不建议把 Instant-NuRec 全推翻 它现在的三阶段 training 其实挺合理的: [ L= L_{\rm context} + L_{\rm motion} + L_{\rm render}. ] Stage 2 先把 geometry/motion 学稳定,Stage 3 freeze encoder 再学 GS rendering。([arXiv](https://arxiv.org/html/2607.14203v1)) 可以基本保留。 ------ ## Stage 1 不动: [ \text{DA3 geometry pretraining}. ] ------ ## Stage 2:改 Motion Training 原: # [ \mathcal L_{\rm motion} L_{\rm cuboid-flow}. ] 改成: # [ \boxed{ L_{\rm motion} L_{\rm coarse} + \lambda_{\rm nr}L_{\rm track} + \lambda_{\rm local}L_{\rm local} + \lambda_{\rm temp}L_{\rm temp} } ] 其中: ### coarse motion 继续: # [ L_{\rm coarse} ## | \Delta^{coarse} \Delta^{cuboid} |. ] 保留车辆等 rigid object 的稳定性。 ### Track supervision # [ L_{\rm track} ## \sum_{i,t} v_{i,t}c_{i,t} \rho \left( p_{i,t} \hat p_{i,t}^{T4W} \right). ] ### non-rigid residual 更推荐: # [ \boxed{ L_{\rm nr} ## \sum_{i,t} v_{i,t}c_{i,t} | B_i z_{o,t} r_{i,t}^{T4W} |_1. } ] ------ # 30. Local rigidity 也正好和 Track4World 的思想一致 Track4World 自己就使用 scene-flow smoothness 来防止相邻 points 出现 erratic flows,并把它解释成 local rigidity constraint。([arXiv](https://arxiv.org/html/2603.02573v2)) 你这里也可以加: # [ \boxed{ L_{\rm ARAP} ## \sum_{(i,j),t} \left( |p_i(t)-p_j(t)| |x_i-x_j| \right)^2 } ] 但是对人体不能太强,因为肢体确实会 articulation。 所以最好: [ \lambda_{\rm ARAP}^{vehicle} > \lambda_{\rm ARAP}^{pedestrian}. ] ------ # 31. Temporal loss 我反而更建议用 acceleration,而不是 velocity 前面我给过: [ |z_t-z_{t-1}|^2. ] 但仔细想,运动本身有 velocity。 如果惩罚 velocity,会倾向让人不动。 这里更自然: # [ \boxed{ L_{\rm acc} ## \sum_t | z_{t+1} 2z_t + z_{t-1} |^2 } ] 也就是: > motion 可以持续,但不要突然 jitter。 更适合 tracking。 ------ # 32. Stage 3:GS Rendering 继续 freeze geometry encoder。 但是我会: - freeze Track Head; - train Gaussian Head; - train local deformation/covariance branch; - 用 novel-time rendering supervision。 特别需要增加: [ \boxed{\text{held-out timestamp rendering}} ] 而不仅仅 novel-view。 因为要验证: [ \mu(t) ] 真的学到 temporal articulation。 ------ # 33. 还有一个现实问题:2–4 Hz 输入是不够的 这个不能靠更复杂的模型绕过去。 Instant-NuRec 的原始 driving logs 实际上有: [ 30\text{ Hz} ] 视频,只是模型抽样到 2–4 Hz。([arXiv](https://arxiv.org/html/2607.14203v1)) 如果: [ t_0 ] 和: [ t_1 ] 相差 500 ms, 而人的手中间: ```text t0 ????????? t1 | | O O /|\ |\ ``` 发生了一整次 swing, 你只看两端,不能凭空知道中间真实 motion。 所以真正要解决作者说的: [ \text{sub-second articulation} ] 我建议一个: [ \boxed{\text{Dual-Rate Architecture}} ] ------ # 34. Geometry / Appearance 仍然低频 保持 Instant-NuRec: [ 2\sim4Hz ] 给 heavy DA3 encoder。 因为: - buildings; - roads; - car geometry; 没有必要 30Hz 重算。 ------ # 35. Motion branch 用高频 原始 video 中额外采样: [ 10\sim15Hz ] 甚至 30Hz, 但只对: [ \boxed{\text{movable ROIs}} ] 做轻量 tracking。 于是: # [ \mathcal I_{\rm geo} 2\sim4Hz ] # [ \mathcal I_{\rm motion} 10\sim30Hz. ] 这就非常合理: ```text Heavy reconstruction: t0 -------- t1 -------- t2 -------- t3 | | | | Light motion tracking: t0--●--●--●--t1--●--●--●--t2--●--●... ``` 这样才是真的解决 sub-second dynamics,而不是简单: [ 3\ knots\rightarrow7\ knots ] 但 7 个 knots 仍然从稀疏帧瞎猜。 ------ # 36. Track4World 在这里我其实最推荐作为 **Teacher + Architecture Inspiration** 有三个方案,我会这样排序: | 方案 | 方法 | 优点 | 问题 | | ----- | ------------------------------------------------------- | -------------------------------------- | ---------------------- | | A | inference 时直接跑 Track4World | 最简单,motion 可能最好 | 慢、系统拼装感强 | | B | Track4World pseudo-track supervision | Instant-NuRec inference 不增加 tracker | 需要离线生成 pseudo GT | | **C** | **Track4World teacher + correlation head distillation** | **最完整,仍然 single feed-forward** | 实现工作最大 | 我最推荐: [ \boxed{\textbf{C}} ] 即: ### training Track4World 提供: [ \text{dense long-term 3D tracks} ] 作为 privileged teacher。 ### inference 不需要 Track4World。 Instant-NuRec 自己的: [ H_{\rm track} ] 已经学会 correlation-based dynamic tracking。 ------ # 37. 这甚至能让你的 story 比“解决 non-rigid”更大一点 原 Instant-NuRec 的逻辑: [ \boxed{ \text{Query} \rightarrow \text{Independent Motion Regression} \rightarrow 3\text{-knot Gaussian} } ] 你可以改成: [ \boxed{ \text{Query} \rightarrow \textbf{Persistent 3D Track} \rightarrow \textbf{Track-Aligned Gaussian} } ] 然后 non-rigid 只是它自然得到的能力: [ \text{rigid car} \Rightarrow r\approx0 ] [ \text{pedestrian} \Rightarrow r=Bz. ] 这比单纯说: > “We improve pedestrian motion.” 要强不少。 ------ # 38. 我认为最小能跑起来的 Version 1 如果你现在真的准备做,我反而建议**不要一开始把所有东西都实现**。 第一版就做: # [ \boxed{ \mu_i(t) \mu_i + \Delta^{INR}_i(t) + r_i(t) } ] 其中: - (\Delta^{INR}):原 Instant-NuRec motion head; - (r_i):新增 Track Residual Head。 训练: # [ \boxed{ r_i^*(t) ## p_i^{T4W}(t) p_i^{cuboid}(t) } ] 然后把 3 keyframes 改成例如: [ K=7 ] 或者: [ K=9. ] 先什么: - actor token; - low-rank basis; - covariance deformation; 都不加。 如果 pedestrian dynamic PSNR / tracking metric 明显上升,就证明核心 hypothesis: [ \boxed{ \text{cuboid-flow supervision suppresses non-rigid motion} } ] 是成立的。 ------ # 39. Version 2 再做 Track-Aligned 把: [ q_i@t ] 和其他 timestamp 的对应点聚合成: [ \bar f_i. ] 证明: [ \boxed{ \text{persistent correspondence} > \text{independent local motion} } ] ------ # 40. Version 3 再加 Structured Non-Rigid # [ r_{i,t} B_i z_{o,t}. ] 证明: [ \boxed{ \text{structured shared deformation} > \text{independent per-Gaussian residual} } ] ------ # 41. Version 4 最后加 covariance deformation # [ \Sigma_i(t) A_i(t)\Sigma_i^0A_i(t)^\top. ] 这样就形成完整的方法。 ------ # 42. Ablation 也会非常清楚 我会设计: [ \begin{array}{l} \text{Instant-NuRec}\ +\text{Dense Knots}\ +\text{Track Supervision}\ +\text{Track Alignment}\ +\text{Structured Residual}\ +\text{Local Gaussian Deformation} \end{array} ] 这比把很多东西一次堆进去好讲太多。 ------ # 43. 最后,我现在对这个方向的核心判断 我觉得你最开始说: > Instant-NuRec “已经有一点这个感觉” 这个判断是很准确的,但要再精确一点: **Instant-NuRec 已经从 rigid actor motion 走到了 per-query dynamic trajectories;它缺的是 persistent correspondence。** 所以: PointForward 的问题是: [ \boxed{ \text{too rigid} } ] Instant-NuRec 的问题则更像: [ \boxed{ \text{too local and too independent} } ] 而 Track4World 给的是: [ \boxed{ \text{persistent correspondence} } ] 所以三者关系其实特别清楚: [ \text{PointForward} : \quad \text{Object-aligned rigid motion} ] [ \downarrow ] [ \text{Instant-NuRec} : \quad \text{Per-query local trajectories} ] [ \downarrow ] [ \boxed{ \textbf{Your Direction} : \quad \textbf{Track-aligned structured non-rigid trajectories} } ] 我觉得真正值得作为论文核心公式的,已经不是之前单独的 [ p_t=T_t(x+B(x)z_t) ] 了,而是: [ \boxed{ \underbrace{\hat\tau_i(t)}*{\text{persistent track observation}} ;\Rightarrow; \underbrace{ p_i(t)=T_o(t)\big[x_i+B_i z*{o,t}\big] }_{\text{structured dynamic Gaussian}} } ] 这里 **Track 是 correspondence,(T_o) 是 coarse motion,(B_i z_{o,t}) 是 non-rigid residual,Gaussian 是最终 renderable representation**。 这条链我觉得已经形成一个相当完整的 research story。 另外有一个实际情况要提醒你:NVIDIA 当前公开的 Instant-NuRec standalone repo 明确写了**只导出 static scene Gaussians,完整 research model 的 dynamic layer 并没有完整公开在这个 standalone CLI 中**。所以如果你后面真想基于代码快速验证,可能需要从公开 checkpoint/architecture 里确认 Motion Decoder 是否可直接拿到;否则最现实的第一步可能是**复刻论文里的 Motion Head,而不是直接 patch 官方 dynamic code**。([github.com](https://github.com/NVIDIA/instant-nurec?utm_source=chatgpt.com)) Loading... 对,我把 Instant-NuRec 的 Dynamic Gaussian / Motion Head 重新仔细看了一遍之后,感觉你的方向其实**比直接改 PointForward 更自然地适合 Instant-NuRec**。 而且这里有一个很重要的判断: > **Instant-NuRec 并不是“数学上不能表达 non-rigid”,而是它的 motion supervision、temporal bandwidth 和 correspondence 设计让它实际上很难学到真正的 non-rigid motion。** 所以我不建议简单做成“Instant-NuRec + Track4World”。更有意思的方向是把它现在的 **local per-query motion regression** 改造成一个: [ \boxed{\text{Track-Aligned Dynamic Gaussian Head}} ] 然后让 Track4World 提供的 tracking 思想解决 **persistent correspondence**,再用我们前面讨论的 structured deformation 解决 **non-rigid coherence**。 ------ # 1. 先把 Instant-NuRec 的 Dynamic Gaussian Head 准确拆开 严格地说,论文没有单独叫一个 “Dynamic Gaussian Head”。 它实际上是两个 head 配合: [ \boxed{ \text{3DGS Decoder} + \text{Motion Decoder} } ] 共享同一批 query: [ \mathcal Q={q_i}. ] 这些 query 是由 predicted depth 从 image pixel lift 到 3D world space 得到的,然后去 cross-attend shared encoder feature (F)。3DGS decoder 负责 scale、rotation、opacity 等 Gaussian 属性;motion decoder 则负责动态位置。([arXiv](https://arxiv.org/html/2607.14203v1)) ------ ## 1.1 一个 Dynamic Gaussian 到底是什么? 静态 Gaussian: [ g_i= (\mu_i,s_i,q_i,\alpha_i,c_i,n_i,\ell_i). ] 动态 Gaussian 的其他参数**完全一样**,只把: [ \mu_i ] 换成时间轨迹: [ \boxed{ \mu_i(t) } ] 而且它不是 arbitrary deformation function,而是只有三个 knots: [ { (t_1,\mu_1), (t_2,\mu_2), (t_3,\mu_3) }. ] 两个 knot 之间做线性插值: # [ \mu(t) (1-\lambda)\mu_k+\lambda\mu_{k+1}. ] 因此: ```text μ1 -------- μ2 -------- μ3 t- t0 t+ ``` 就是一个极其简单的 piecewise-linear 3D trajectory。([arXiv](https://arxiv.org/html/2607.14203v1)) ------ # 2. Motion Decoder 实际在干什么? 对于 source timestamp: [ t_s ] 的 query: [ q_i,\qquad \mu_i ] Motion Decoder 预测两个 displacement: [ \boxed{ (\Delta_i^{-},\Delta_i^{+}) } ] 分别去: - 同一 camera 的 immediately previous timestamp; - immediately next timestamp。 然后: # [ \mu_i^{-} \mu_i+\Delta_i^{-} ] [ \mu_i^0=\mu_i ] # [ \mu_i^{+} \mu_i+\Delta_i^{+}. ] 所以一个 dynamic Gaussian 实际就是: # [ \boxed{ \mu_i(t) \operatorname{Interp} { \mu_i+\Delta_i^-, \mu_i, \mu_i+\Delta_i^+ } } ] Motion Decoder 本身是一个 shallow Transformer: [ F \rightarrow \text{Transformer} \rightarrow (\Delta_-,\Delta_+), ] source time (t_{\rm src}) 进入 feature,而 target time (t_{\rm tgt}) 用 AdaLN condition 告诉网络“我要预测从这个时间到哪个时间的 motion”。([arXiv](https://arxiv.org/html/2607.14203v1)) 这张原文 Figure 2 很清楚: ------ # 3. Movable mask 只是决定哪些 Gaussian 真正使用 motion Instant-NuRec 并不是先把 dynamic query 独立提出来。 它: [ \boxed{\text{同一套 Q 同时进 GS Head 和 Motion Head}} ] 然后 semantic head 输出: - road - movable - sky - ego car 最终: [ q_i\in \text{movable} \Rightarrow g_i\in\mathcal G^d. ] 否则进入 static layer。([arXiv](https://arxiv.org/html/2607.14203v1)) 所以现在架构本质是: ```text Query Q / \ / \ GS Decoder Motion Decoder | | shape/appearance Δ-, Δ+ \ / \ / semantic mask | static / dynamic ``` ------ # 4. 一个非常重要的发现:它其实“理论上已经支持 non-rigid” 这点和 PointForward 不一样。 PointForward 强制: [ p_{i,t}=T_o(t)x_i, ] 同一个 object 的所有 points 共用 rigid (SE(3))。 但是 Instant-NuRec 是: # [ \boxed{ p_{i,t} p_i+\Delta_i(t) } ] 每个 query (i) 都有自己的: [ \Delta_i. ] 因此: ### 车身点 [ \Delta_1(t)\approx\Delta_2(t) ] 可以一起移动。 ### 行人的手和脚 完全可以: [ \Delta_{\rm hand}(t) \neq \Delta_{\rm foot}(t). ] 所以它**不是 rigid motion model**。 甚至从 representation capacity 来说,它比 PointForward 更适合 non-rigid。 ------ # 5. 那为什么作者还明确说 pedestrian articulation 是 limitation? 作者在 Discussion 里直接写: > 三关键帧 piecewise-linear trajectories 无法表示 sub-second non-rigid motion,例如 pedestrian articulation;更密集的 keyframes 可能解决。([arXiv](https://arxiv.org/html/2607.14203v1)) 但我觉得仅仅说: [ 3\text{ knots} \rightarrow more\ knots ] 其实只解释了一半。 真正的问题至少有 **四层**。 ------ # 6. 第一个问题:时间分辨率太低 Instant-NuRec 输入 temporal frames 是: [ 2\sim4\text{ Hz}. ] 训练时一个 clip 用: [ T\in{8,12,18} ] 个 temporal frames。([arXiv](https://arxiv.org/html/2607.14203v1)) 也就是说大概: [ 250\sim500\text{ ms} ] 才采一帧。 对于: - 汽车 translation; - 车辆转弯; 可能够。 但是: ```text pedestrian t0 t0+100ms t0+200ms t0+300ms O O O O /|\ /| |\ /| / \ / \ / \ / \ ``` 很多 articulation 是 sub-second 的。 因此: [ \boxed{ 3\ knots + 2\sim4Hz } ] 天然 bandwidth 不够。 ------ # 7. 第二个问题更严重:它的 Motion GT 本身就是 cuboid-derived Instant-NuRec 的: [ \mathcal L_{\rm motion} ] 由 forward/backward 3D flow supervision 构成。 而 foreground 的 3D scene flow 来自: [ \boxed{\text{cuboid tracks}} ] 训练数据里的 3D boxes 又来自 LiDAR cuboid auto-labeler + tracker。([arXiv](https://arxiv.org/html/2607.14203v1)) 这就出现了一个非常关键的问题。 假设一个 pedestrian: ```text box t1 box t2 ┌─────┐ ┌─────┐ │ O │ │ O │ │ /|\ │ --> │ |\/ │ │ / \ │ │ / \ │ └─────┘ └─────┘ ``` Cuboid track 能告诉你: [ T_{\rm box}(t_1\rightarrow t_2) ] 但是它不知道: [ \text{hand moved 20cm forward}. ] 所以 cuboid-derived foreground scene flow 本质更接近: # [ \boxed{ p_{i,t} T_{\rm box}(t)p_{i,0} } ] 也就是 rigid pseudo-flow。 于是出现一个很有意思的矛盾: [ \underbrace{\text{Network capacity}}_{\text{per-query, non-rigid capable}} ] 是够的, 但是: [ \underbrace{\text{training target}}_{\text{cuboid rigid flow}} ] 却在告诉 network: > 手和身体应该一起 rigid 地走。 所以我觉得 **Instant-NuRec 对 non-rigid 的最大 bottleneck 很可能不只是 3 knots,而是 motion supervision 本身。** ------ # 8. 第三个问题:它只是“短 tracklet”,不是 persistent track 现在一个 query: [ q_i@t ] 只预测: [ t^- \leftarrow t\rightarrow t^+. ] 也就是: ```text q_i / \ t- t+ ``` 它并没有定义: [ \boxed{ q_i(t_0) \leftrightarrow q_j(t_1) \leftrightarrow q_k(t_2) } ] 是同一个 physical point。 例如行人手上的同一个点: ```text Image t0 Image t1 Image t2 q17 q83 q41 ●----------------●---------------● same physical point ``` Instant-NuRec 没有显式的: [ q_{17}=q_{83}=q_{41} ] identity。 它只是让每一个 query 自己预测一小段: [ \Delta_-, \Delta_+. ] 所以我会把它叫做: [ \boxed{\text{local motion tracklets}} ] 而不是: [ \boxed{\text{persistent tracking}} ] ------ # 9. 第四个问题:只有 Gaussian center 随时间变 这个我觉得论文自己没有强调,但对于 non-rigid 很重要。 Dynamic layer 与 static layer 相比,论文说: > attributes 相同,**except position (\mu_i)** 被 trajectory (\mu(t)) 替代。([arXiv](https://arxiv.org/html/2607.14203v1)) 所以: [ s_i=\text{constant} ] [ q_i=\text{constant} ] [ n_i=\text{constant}. ] 但想一下手臂旋转: ```text t0 t1 ────● | ● ``` 一个 anisotropic Gaussian 原来: [ \Sigma_i ] 水平放置。 手臂转 90° 后,它的局部 surface orientation 应该也转。 只改变: [ \mu_i(t) ] 而保持: [ R_i,s_i,n_i ] 不变,并不是真正完整的 non-rigid Gaussian deformation。 所以这里实际上还有: [ \boxed{ \text{trajectory} \neq \text{full deformation} } ] 的问题。 ------ # 10. 这时候 Track4World 为什么刚好特别合适? 因为 Track4World 的核心恰好是 Instant-NuRec 最缺的那个东西: [ \boxed{\text{persistent physical correspondence}} ] Track4World 不局限于 adjacent frame,它能够预测 arbitrary frame pairs 的 dense 2D/3D flow,然后把 pairwise flows 组合成 world-centric dense 3D tracks。([arXiv](https://arxiv.org/html/2603.02573v2)) 所以: [ q_i@t_0 ] 可以拥有: # [ \boxed{ \tau_i { p_i(t_0), p_i(t_1), \dots, p_i(t_K) } } ] 这一下就把 Instant-NuRec 的: [ \text{local 3-point trajectory} ] 升级成: [ \boxed{ \text{persistent 3D track} } ] ------ # 11. 更巧的是:Track4World 论文其实直接批评了 Instant-NuRec 现在这种 Motion Head 范式 Track4World 在 Introduction 里面专门说: > 一个 straightforward solution 是在 geometry backbone 后面直接接一个 motion decoding head 去回归 3D scene flow;但这种 implicit regression 往往 data-hungry,而且难捕获 fine-grained motion。([arXiv](https://arxiv.org/html/2603.02573v2)) 你回头看 Instant-NuRec: [ F \rightarrow \text{shallow Transformer} \rightarrow \Delta_{3D} ] 基本就是这个范式。 而 Track4World 的解决方案是: [ \boxed{ \text{explicit correlation} + \text{iterative flow refinement} } ] 而不是单纯 implicit regression。([arXiv](https://arxiv.org/html/2603.02573v2)) 所以这两个工作接起来其实非常顺。 ------ # 12. 但我不建议最简单地: [ \boxed{ \Delta_{\rm InstantNuRec} \leftarrow \Delta_{\rm Track4World} } ] 这太直接了。 它会变成: > “我用了一个更好的 3D tracker 给 Gaussian motion。” 工程上有效,但 method contribution 会比较弱。 我更建议: # **Track-Aligned Dynamic Gaussian Head** 核心思想是: > **Track4World 不负责生成 Gaussian motion,而负责定义跨时间的 physical correspondence;Gaussian Head 再基于这些 persistent tracks 构建 structured 4D representation。** ------ # 13. 第一层修改:把 Motion Decoder 变成 Track Decoder 现在: [ H_{\rm motion} (q_i,F,t_{\rm tgt}) \rightarrow (\Delta_i^-,\Delta_i^+). ] 改成: [ \boxed{ H_{\rm track} (q_i,F,{t_k}) \rightarrow { \hat p_i(t_k), v_{i,k}, c_{i,k} }_{k=1}^{K} } ] 其中: - (\hat p_i(t_k)):world-space tracked position; - (v_{i,k}):visibility; - (c_{i,k}):track confidence。 Track4World 本身就预测 visibility 和独立的 track-confidence signal。([arXiv](https://arxiv.org/html/2603.02573v2)) 而且不要再只预测: [ t^-,t^+ ] 而是: [ t_1,\dots,t_K. ] 于是: ```text Original ● / \ / \ ● ● t- t0 t+ Track-Aligned ●────●────●────●────●────● t0 t1 t2 t3 t4 t5 one physical track ``` ------ # 14. 而且我甚至不建议真的完整跑一个独立 Track4World network 这里有一个非常好的 architecture compatibility。 Instant-NuRec backbone 基于: [ \text{Depth Anything 3} ] 的 alternating-attention ViT。([arXiv](https://arxiv.org/html/2607.14203v1)) Track4World 本身也建立在 VGGT/Pi3/DA3 这一类 global geometry encoder 上,它的 scene-flow decoder直接消费: - geometry features; - pointmaps; - camera poses。([arXiv](https://arxiv.org/html/2603.02573v2)) 所以最自然的办法是: [ \boxed{ \text{共享 Instant-NuRec Encoder} } ] 然后把现在 shallow regression Motion Decoder 替换成: [ \boxed{ \text{Track4World-style correlation Motion Head} } ] 即: ```text Shared DA3 Encoder F | +------------+-------------+ | | 3DGS Head Track Head | 2D-3D correlation | world-centric 3D tracks ``` 这样就不需要: ```text InstantNuRec backbone + Track4World backbone ``` 跑两遍。 ------ # 15. 我甚至会进一步:只对 Dynamic Queries 做 correlation Track4World 做: [ \text{all-pixel tracking}. ] 但 Instant-NuRec 已经有 semantic head: [ \text{movable / static}. ] 所以: # [ Q_d {q_i|\ell_i=\text{movable}}. ] 只有: [ Q_d ] 进入 expensive tracking head: [ Q_d \rightarrow H_{\rm track}. ] 道路、建筑完全不用。 这非常适合 driving。 计算量会变成: [ \boxed{ O(N_{\rm dynamic}) \ll O(HW) } ] 尤其 dynamic actor 在大多数 driving image 里只占一小部分。 ------ # 16. 接下来是我认为真正能成为方法核心的一步:Track-Aligned Feature Fusion 这是目前 Instant-NuRec 没有做的。 假设 Track Head 告诉我们: [ q_i ] 在不同时间对应: [ p_i(t_1),p_i(t_2),p_i(t_3). ] 投影回 image: # [ u_i(t_k) \pi_k(p_i(t_k)). ] 于是可以从每个 frame 的 encoder feature 中取: # [ f_{i,k} F_k(u_i(t_k)). ] 然后: # [ \boxed{ \bar f_i \frac{ \sum_k w_{i,k} f_{i,k} }{ \sum_k w_{i,k} } } ] 其中: # [ w_{i,k} v_{i,k}c_{i,k}. ] 于是: ```text frame t0 feature ──┐ frame t1 feature ──┤ frame t2 feature ──┼──→ Track Feature f_i frame t3 feature ──┤ frame t4 feature ──┘ ``` 这时候: [ \boxed{ \text{一个 physical point} \rightarrow \text{一个 persistent feature} } ] 而不是: [ \text{每个 frame 都重新产生一个 query/Gaussian}. ] ------ # 17. 这才是我觉得你这个想法最有意思的地方 Instant-NuRec 当前是: [ \boxed{ \text{Query-Aligned} } ] 但是 query 仍然属于某一 source image/time。 你可以把它变成: [ \boxed{ \textbf{Track-Aligned} } ] 一个 dynamic Gaussian 不再对应: > 某个时间的某个 pixel query 而对应: > **跨时间存在的一个 physical track。** 所以: [ \boxed{ \text{Pixel} \rightarrow \text{Query} \rightarrow \textbf{Track} \rightarrow \text{Gaussian} } ] 这和单纯“增加 motion accuracy”已经不是一个层面的改进了。 ------ # 18. 但如果做到这里,仍然有一个问题:Track4World track 是 noisy per-point flow 如果直接: [ \mu_i(t)=\hat p_i^{T4W}(t) ] 那么: - hand 一个 track; - elbow 一个 track; - torso 一个 track; 全部自己运动。 虽然 non-rigid 能表达了,但容易: [ \boxed{\text{loss of structural coherence}} ] 所以这里正好可以接上我们上一轮讨论的数学 formulation。 ------ # 19. 我建议把 Motion 分成: [ \boxed{ \text{Coarse Motion} + \text{Non-Rigid Residual} } ] 这个特别适合 Instant-NuRec,因为它训练时本来就有 cuboid flow。 定义: [ \Delta_{i,t}^{\rm coarse} ] 继续由原 Instant-NuRec Motion Decoder 负责。 它学习的是: [ \boxed{\text{actor-level / low-frequency motion}} ] 例如: - pedestrian 整体向前走; - car 往前开。 然后新增 Track Residual Head: [ r_{i,t}. ] 最终: # [ \boxed{ \mu_i(t) \mu_i + \Delta_{i,t}^{\rm coarse} + r_{i,t} } ] ------ # 20. 训练时可以得到一个非常干净的监督 Instant-NuRec 原本 cuboid target: [ p_{i,t}^{box}. ] Track4World 给: [ p_{i,t}^{track}. ] 那么 non-rigid residual pseudo-GT 就定义为: # [ \boxed{ r_{i,t}^{*} ## p_{i,t}^{track} p_{i,t}^{box} } ] 这太合适了。 ------ 对于车辆: [ p_{track}\approx p_{box} ] 所以: [ r^*\approx0. ] 自然退化成 Instant-NuRec。 ------ 对于 pedestrian: # [ p_{track} p_{box} + \text{articulation}. ] 所以: [ \boxed{ r^* \approx \text{articulation} } ] 例如: ```text Track motion ↓ ● hand @ t1 / / r_hand / rigid box ● prediction ``` 这样 Track4World 不需要承担全部 trajectory。 它只负责: [ \boxed{\text{what cuboid cannot explain}} ] 这会比直接相信 Track4World 的 absolute trajectory 稳定很多。 ------ # 21. 数学上,这就是我们之前说的 formulation 更结构化写: # [ \boxed{ p_{i,t} T_o(t) \left[ x_i+\delta_i(t) \right] } ] Instant-NuRec / Cuboid 负责: [ T_o(t) ] Track branch 负责: [ \delta_i(t). ] 更进一步: # [ \boxed{ \delta_i(t) B_i z_{o,t} } ] 于是: # [ \boxed{ p_{i,t} T_o(t) \left[ x_i+B_i z_{o,t} \right] } ] 这就是我之前最推荐你的 low-rank non-rigid formulation。 但现在它不是凭空来的了。 ------ # 22. Track4World 正好提供 (B_i z_t) 的监督 我们观察: [ \hat p_{i,t}^{track}. ] 去掉 global rigid motion: # [ \boxed{ \hat r_{i,t} ## T_o(t)^{-1} \hat p_{i,t}^{track} x_i. } ] 希望: [ \hat r_{i,t} \approx B_i z_{o,t}. ] 所以训练: # [ \boxed{ \mathcal L_{\rm nr} ## \sum_{i,t} w_{i,t} \left| B_i z_{o,t} \hat r_{i,t} \right|_1 } ] 其中: [ w_{i,t}=v_{i,t}c_{i,t}. ] 这就很漂亮了: ```text Actor deformation token z_o,t | +-------------+-------------+ | | | B_hand B_body B_leg | | | residual residual residual ``` motion 不再是完全独立: [ r_1,r_2,r_3,\ldots ] 而共享: [ \boxed{z_{o,t}}. ] ------ # 23. 那 actor (o) 怎么来? 这是这里唯一一个新的难点。 Instant-NuRec semantic head 只有: [ \text{movable} ] 没有论文里明确描述的 instance ID。 所以如果要: [ z_{o,t} ] 成为 actor-level token,需要 grouping。 我觉得有两个路线。 ### 简单 baseline 训练时直接用 cuboid instance ID: [ q_i\in box_o \Rightarrow i\in o. ] 推理时如果 optional cuboid tracks 存在,就继续用它们。 没有 cuboid 时,可以根据: - 3D proximity; - semantic mask; - track motion similarity; 做 dynamic-track clustering。 ------ ### 更有 research value 增加: [ \boxed{\text{Dynamic Actor Tokens}} ] 让 (M) 个 actor tokens cross-attend: [ Q_d. ] 然后每个 dynamic query 有 assignment: [ a_{io}. ] 类似: [ z_o \leftrightarrow \text{a coherent group of tracks}. ] 这样整套系统真正变成: [ \boxed{ \text{Track} \rightarrow \text{Actor Token} \rightarrow \text{Structured Dynamic GS} } ] 这和你一直想走的 token-aligned 路线会非常契合。 ------ # 24. 还有一个我强烈建议补的:不要只 track Gaussian Mean 刚才提到: Instant-NuRec 只有: [ \mu_i(t) ] 在动。 但 non-rigid 时: [ \Sigma_i(t) ] 也应该变化。 这里 tracking 恰好可以给出一个非常优雅的数学办法。 ------ # 25. 用邻居 tracks 估计 Local Deformation Gradient canonical frame 下,一个 Gaussian (i) 周围有邻居: [ j\in\mathcal N(i). ] canonical relative coordinates: # [ d_{ij}^{0} x_j-x_i. ] 时间 (t): # [ d_{ij}^{t} p_j(t)-p_i(t). ] 寻找局部 affine deformation: # [ \boxed{ A_i(t) ## \arg\min_A \sum_{j\in\mathcal N(i)} w_{ij,t} | d_{ij}^{t} A d_{ij}^{0} |_2^2 } ] 这是一个很简单的 weighted least squares。 ------ # 26. 然后直接 deform Gaussian covariance canonical Gaussian: [ \Sigma_i^0. ] 时间 (t): # [ \boxed{ \Sigma_i(t) A_i(t) \Sigma_i^0 A_i(t)^\top } ] 这非常漂亮。 因为: ### rigid rotation 如果: [ A=R, ] 那么: [ \Sigma(t)=R\Sigma^0R^\top. ] Gaussian 跟着手臂旋转。 ### local stretch 如果: [ A=RS, ] scale 也可以跟着局部 deformation 改。 ------ Normal 同样: # [ \boxed{ n_i(t) \frac{ A_i(t)^{-T} n_i^0 }{ |A_i(t)^{-T} n_i^0| } } ] 这样你得到的才是真正: [ \boxed{\text{non-rigid dynamic Gaussian}} ] 而不仅仅: [ \boxed{\text{moving Gaussian centers}}. ] 我觉得这个点甚至有可能成为你方法里一个很漂亮的小 contribution。 ------ # 27. 最终整个 Dynamic Gaussian 可以重新定义成 原 Instant-NuRec: # [ g_i(t) ( \mu_i(t), s_i, q_i, \alpha_i, c_i, n_i ). ] 你的版本: # [ \boxed{ g_i(t) \left( D_t(x_i), \Sigma_i(t), \alpha_i, c_i, n_i(t) \right) } ] 其中: # [ D_t(x_i) T_o(t) \left[ x_i+B_i z_{o,t} \right] ] 以及: # [ \Sigma_i(t) J_i(t) \Sigma_i^0 J_i(t)^\top. ] 如果不想显式求: [ J_i=\partial D/\partial x, ] 就使用前面 KNN tracks 算出来的: [ A_i(t) ] 近似: [ J_i(t). ] ------ # 28. 我会把最终架构设计成这样 ```text Multi-camera Video | v Instant-NuRec Encoder F +-------------+--------------+ | | | Depth Semantic GS features | | | Movable Mask | | +-------> Dynamic Queries Q_d | v Track Correlation Head (Track4World-style) | +-------------+-------------+ | | 3D Tracks Confidence / τ_i(t_1:T) Visibility | +-------------------------------+ | | v v Track-Aligned Feature Fusion Motion Decomposition | | | +--------+--------+ | | | | Coarse Motion Non-rigid | T_o(t) B_i z_o,t | | | | +--------+--------+ | | | v | μ_i(t) | | +--------------+----------------+ | v Canonical Gaussian Decoder | v Local Track Deformation | Σ_i(t), n_i(t) | v Dynamic 4D Gaussians ``` ------ # 29. 训练阶段我也不建议把 Instant-NuRec 全推翻 它现在的三阶段 training 其实挺合理的: [ L= L_{\rm context} + L_{\rm motion} + L_{\rm render}. ] Stage 2 先把 geometry/motion 学稳定,Stage 3 freeze encoder 再学 GS rendering。([arXiv](https://arxiv.org/html/2607.14203v1)) 可以基本保留。 ------ ## Stage 1 不动: [ \text{DA3 geometry pretraining}. ] ------ ## Stage 2:改 Motion Training 原: # [ \mathcal L_{\rm motion} L_{\rm cuboid-flow}. ] 改成: # [ \boxed{ L_{\rm motion} L_{\rm coarse} + \lambda_{\rm nr}L_{\rm track} + \lambda_{\rm local}L_{\rm local} + \lambda_{\rm temp}L_{\rm temp} } ] 其中: ### coarse motion 继续: # [ L_{\rm coarse} ## | \Delta^{coarse} \Delta^{cuboid} |. ] 保留车辆等 rigid object 的稳定性。 ### Track supervision # [ L_{\rm track} ## \sum_{i,t} v_{i,t}c_{i,t} \rho \left( p_{i,t} \hat p_{i,t}^{T4W} \right). ] ### non-rigid residual 更推荐: # [ \boxed{ L_{\rm nr} ## \sum_{i,t} v_{i,t}c_{i,t} | B_i z_{o,t} r_{i,t}^{T4W} |_1. } ] ------ # 30. Local rigidity 也正好和 Track4World 的思想一致 Track4World 自己就使用 scene-flow smoothness 来防止相邻 points 出现 erratic flows,并把它解释成 local rigidity constraint。([arXiv](https://arxiv.org/html/2603.02573v2)) 你这里也可以加: # [ \boxed{ L_{\rm ARAP} ## \sum_{(i,j),t} \left( |p_i(t)-p_j(t)| |x_i-x_j| \right)^2 } ] 但是对人体不能太强,因为肢体确实会 articulation。 所以最好: [ \lambda_{\rm ARAP}^{vehicle} > \lambda_{\rm ARAP}^{pedestrian}. ] ------ # 31. Temporal loss 我反而更建议用 acceleration,而不是 velocity 前面我给过: [ |z_t-z_{t-1}|^2. ] 但仔细想,运动本身有 velocity。 如果惩罚 velocity,会倾向让人不动。 这里更自然: # [ \boxed{ L_{\rm acc} ## \sum_t | z_{t+1} 2z_t + z_{t-1} |^2 } ] 也就是: > motion 可以持续,但不要突然 jitter。 更适合 tracking。 ------ # 32. Stage 3:GS Rendering 继续 freeze geometry encoder。 但是我会: - freeze Track Head; - train Gaussian Head; - train local deformation/covariance branch; - 用 novel-time rendering supervision。 特别需要增加: [ \boxed{\text{held-out timestamp rendering}} ] 而不仅仅 novel-view。 因为要验证: [ \mu(t) ] 真的学到 temporal articulation。 ------ # 33. 还有一个现实问题:2–4 Hz 输入是不够的 这个不能靠更复杂的模型绕过去。 Instant-NuRec 的原始 driving logs 实际上有: [ 30\text{ Hz} ] 视频,只是模型抽样到 2–4 Hz。([arXiv](https://arxiv.org/html/2607.14203v1)) 如果: [ t_0 ] 和: [ t_1 ] 相差 500 ms, 而人的手中间: ```text t0 ????????? t1 | | O O /|\ |\ ``` 发生了一整次 swing, 你只看两端,不能凭空知道中间真实 motion。 所以真正要解决作者说的: [ \text{sub-second articulation} ] 我建议一个: [ \boxed{\text{Dual-Rate Architecture}} ] ------ # 34. Geometry / Appearance 仍然低频 保持 Instant-NuRec: [ 2\sim4Hz ] 给 heavy DA3 encoder。 因为: - buildings; - roads; - car geometry; 没有必要 30Hz 重算。 ------ # 35. Motion branch 用高频 原始 video 中额外采样: [ 10\sim15Hz ] 甚至 30Hz, 但只对: [ \boxed{\text{movable ROIs}} ] 做轻量 tracking。 于是: # [ \mathcal I_{\rm geo} 2\sim4Hz ] # [ \mathcal I_{\rm motion} 10\sim30Hz. ] 这就非常合理: ```text Heavy reconstruction: t0 -------- t1 -------- t2 -------- t3 | | | | Light motion tracking: t0--●--●--●--t1--●--●--●--t2--●--●... ``` 这样才是真的解决 sub-second dynamics,而不是简单: [ 3\ knots\rightarrow7\ knots ] 但 7 个 knots 仍然从稀疏帧瞎猜。 ------ # 36. Track4World 在这里我其实最推荐作为 **Teacher + Architecture Inspiration** 有三个方案,我会这样排序: | 方案 | 方法 | 优点 | 问题 | | ----- | ------------------------------------------------------- | -------------------------------------- | ---------------------- | | A | inference 时直接跑 Track4World | 最简单,motion 可能最好 | 慢、系统拼装感强 | | B | Track4World pseudo-track supervision | Instant-NuRec inference 不增加 tracker | 需要离线生成 pseudo GT | | **C** | **Track4World teacher + correlation head distillation** | **最完整,仍然 single feed-forward** | 实现工作最大 | 我最推荐: [ \boxed{\textbf{C}} ] 即: ### training Track4World 提供: [ \text{dense long-term 3D tracks} ] 作为 privileged teacher。 ### inference 不需要 Track4World。 Instant-NuRec 自己的: [ H_{\rm track} ] 已经学会 correlation-based dynamic tracking。 ------ # 37. 这甚至能让你的 story 比“解决 non-rigid”更大一点 原 Instant-NuRec 的逻辑: [ \boxed{ \text{Query} \rightarrow \text{Independent Motion Regression} \rightarrow 3\text{-knot Gaussian} } ] 你可以改成: [ \boxed{ \text{Query} \rightarrow \textbf{Persistent 3D Track} \rightarrow \textbf{Track-Aligned Gaussian} } ] 然后 non-rigid 只是它自然得到的能力: [ \text{rigid car} \Rightarrow r\approx0 ] [ \text{pedestrian} \Rightarrow r=Bz. ] 这比单纯说: > “We improve pedestrian motion.” 要强不少。 ------ # 38. 我认为最小能跑起来的 Version 1 如果你现在真的准备做,我反而建议**不要一开始把所有东西都实现**。 第一版就做: # [ \boxed{ \mu_i(t) \mu_i + \Delta^{INR}_i(t) + r_i(t) } ] 其中: - (\Delta^{INR}):原 Instant-NuRec motion head; - (r_i):新增 Track Residual Head。 训练: # [ \boxed{ r_i^*(t) ## p_i^{T4W}(t) p_i^{cuboid}(t) } ] 然后把 3 keyframes 改成例如: [ K=7 ] 或者: [ K=9. ] 先什么: - actor token; - low-rank basis; - covariance deformation; 都不加。 如果 pedestrian dynamic PSNR / tracking metric 明显上升,就证明核心 hypothesis: [ \boxed{ \text{cuboid-flow supervision suppresses non-rigid motion} } ] 是成立的。 ------ # 39. Version 2 再做 Track-Aligned 把: [ q_i@t ] 和其他 timestamp 的对应点聚合成: [ \bar f_i. ] 证明: [ \boxed{ \text{persistent correspondence} > \text{independent local motion} } ] ------ # 40. Version 3 再加 Structured Non-Rigid # [ r_{i,t} B_i z_{o,t}. ] 证明: [ \boxed{ \text{structured shared deformation} > \text{independent per-Gaussian residual} } ] ------ # 41. Version 4 最后加 covariance deformation # [ \Sigma_i(t) A_i(t)\Sigma_i^0A_i(t)^\top. ] 这样就形成完整的方法。 ------ # 42. Ablation 也会非常清楚 我会设计: [ \begin{array}{l} \text{Instant-NuRec}\ +\text{Dense Knots}\ +\text{Track Supervision}\ +\text{Track Alignment}\ +\text{Structured Residual}\ +\text{Local Gaussian Deformation} \end{array} ] 这比把很多东西一次堆进去好讲太多。 ------ # 43. 最后,我现在对这个方向的核心判断 我觉得你最开始说: > Instant-NuRec “已经有一点这个感觉” 这个判断是很准确的,但要再精确一点: **Instant-NuRec 已经从 rigid actor motion 走到了 per-query dynamic trajectories;它缺的是 persistent correspondence。** 所以: PointForward 的问题是: [ \boxed{ \text{too rigid} } ] Instant-NuRec 的问题则更像: [ \boxed{ \text{too local and too independent} } ] 而 Track4World 给的是: [ \boxed{ \text{persistent correspondence} } ] 所以三者关系其实特别清楚: [ \text{PointForward} : \quad \text{Object-aligned rigid motion} ] [ \downarrow ] [ \text{Instant-NuRec} : \quad \text{Per-query local trajectories} ] [ \downarrow ] [ \boxed{ \textbf{Your Direction} : \quad \textbf{Track-aligned structured non-rigid trajectories} } ] 我觉得真正值得作为论文核心公式的,已经不是之前单独的 [ p_t=T_t(x+B(x)z_t) ] 了,而是: [ \boxed{ \underbrace{\hat\tau_i(t)}*{\text{persistent track observation}} ;\Rightarrow; \underbrace{ p_i(t)=T_o(t)\big[x_i+B_i z*{o,t}\big] }_{\text{structured dynamic Gaussian}} } ] 这里 **Track 是 correspondence,(T_o) 是 coarse motion,(B_i z_{o,t}) 是 non-rigid residual,Gaussian 是最终 renderable representation**。 这条链我觉得已经形成一个相当完整的 research story。 另外有一个实际情况要提醒你:NVIDIA 当前公开的 Instant-NuRec standalone repo 明确写了**只导出 static scene Gaussians,完整 research model 的 dynamic layer 并没有完整公开在这个 standalone CLI 中**。所以如果你后面真想基于代码快速验证,可能需要从公开 checkpoint/architecture 里确认 Motion Decoder 是否可直接拿到;否则最现实的第一步可能是**复刻论文里的 Motion Head,而不是直接 patch 官方 dynamic code**。([github.com](https://github.com/NVIDIA/instant-nurec?utm_source=chatgpt.com)) 最后修改:2026 年 08 月 21 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏