[Paper Review, KR] Lyra: Generative 3D Scene Reconstruction via Video Diffusion Model Self-distillation
Paper Information
Title: Lyra: Generative 3D Scene Reconstruction via Video Diffusion Model Self-distillation
Authors: Sherwin Bahmani, Tianchang Shen, Jiawei Ren, Jiahui Huang, Yifeng Jiang, Haithem Turki, Andrea Tagliasacchi, David B. Lindell, Zan Gojcic, Sanja Fidler, Huan Ling, Jun Gao, Xuanchi Ren
Venue: ICLR 2026
Link: [Paper], [Project], [Github]
Teaser Image
Introduction
3D scene reconstruction은 NeRF와 3D Gaussian Splatting(3DGS)의 발전으로 높은 품질을 달성했지만, 정확한 camera pose와 multi-view image에 크게 의존한다. Dynamic scene에서는 synchronized multi-camera capture까지 필요해 데이터 수집 부담이 더 크다. 한편 3D generation은 CLIP 및 diffusion prior를 활용한 optimization-based 방식으로 발전했지만, 장면마다 반복적인 최적화가 필요하다는 한계가 있었다.
이후 multi-view diffusion으로 novel view를 생성한 뒤 NeRF나 3DGS로 재구성하는 방식과, image나 text에서 3D representation을 직접 예측하는 feed-forward reconstruction 방식이 등장했다. 그러나 전자는 여전히 per-scene optimization이 필요하고, 후자는 RealEstate10K나 DL3DV와 같은 제한된 multi-view dataset에 의존해 generalization에 한계가 있다.
최근에는 대규모 video diffusion model이 다양한 장면과 camera motion을 학습하면서, camera-conditioned video generation과 multi-view consistency가 빠르게 발전하고 있다. 이에 따라 video diffusion model이 가진 implicit 3D/4D knowledge를 explicit 3D representation과 연결하려는 방향이 중요한 연구 흐름으로 자리잡고 있다.
Method & Technical Details
핵심 아이디어부터 설명하고자 한다.
video diffusion model에 내재된 implicit 3D 지식을 explicit 3DGS decoder에 distill하는 것이 목표.
distillation에서 가장 중요한 2가지, teacher와 student의 경우에는 각각 video diffusion model과 latent space에서 작동하는 3DGS decoder가 된다. 또한 해당 논문은 최근 개발된 camera-conditioned video diffusion model인 GEN3C라는 연구를 기반으로 프레임워크를 구축한다.
Background: Camera-controlled and 3D-Consistent Video Diffusion
해당 연구가 GEN3C라는 연구를 기반으로 진행되었다는 점을 보았을 때 teacher로 사용하는 GEN3C가 어떤 식으로 camera-controlled video를 생성하는 지 어느 정도 알아야 한다고 생각한다.
Spatiotemporal 3D Cache
GEN3C의 경우, 입력 image/video를 그냥 video diffusion model에 넣는 것이 아니라, 먼저 각 frame의 depth를 추정하고 이를 이용해 RGB pixel을 3D colored point cloud로 unprojection한다.
그리고 논문에서는 이를
\[P_{t,v}\]라고 표현한다. 여기서, $t$는 frame index를 의미하고, $v$는 viewpoint를 의미한다. 그러니, $P_{t,v}$는 시간 $t$, viewpoint $v$에서 얻은 colored 3D point cloud라고 생각하면 된다.
RGB image $I_{t,v}$와 이에 대응하는 depth map이 있다면, 각 pixel $(u,v)$에 대해 대략적으로
\[x = D(u,v)K^{-1} \begin{bmatrix} u \\ v \\ 1 \end{bmatrix}\]처럼 depth를 이용해 3D 위치를 복원할 수 있고, 여기에 원래 RGB color를 붙이면 colored point cloud가 된다. 이렇게 만든 point cloud들을 시간과 viewpoint에 따라 저장해 둔 것이 spatiotemporal 3D Cache $P_{t,v}$다. 논문에서는 이를 $L \times V$ 구조로 설명한다:
\[\begin{array}{c|cccc} & v_1 & v_2 & \cdots & v_V \\ \hline t_1 & P_{1,1} & P_{1,2} & \cdots & P_{1,V} \\ t_2 & P_{2,1} & P_{2,2} & \cdots & P_{2,V} \\ \vdots & & & & \\ t_L & P_{L,1} & P_{L,2} & \cdots & P_{L,V} \end{array}\]이는 video diffusion model이 장면 구조를 순전히 기억하도록 맡기는 것이 아니라, 외부에 3D 형태의 scene memory를 만들어 둔 것이라고 이해하면 편하다.
Rendering and structured guidance
point cloud를 사용자가 원하는 camera trajectory에서 다시 렌더링하는 것이 다음 핵심이다.
\[(I^{t,v}, M^{t,v}) = R(P^{t,v}, C^t)\]여기서 $C^t$는 우리가 원하는 target camera pose이고, $R$은 point cloud renderer다. 즉, 이는 기존 시점에서 만든 3D point cloud를 원하는 새로운 camera $C^t$에서 바라본다는 것을 의미한다.
그런데, 여기서 문제가 있다. single-view point cloud의 경우에는 앞에 물체가 있을 경우 물체 뒷면까지 채워넣지 않는다. 그래서 만약 camera view가 달라졌을 때 물체 뒤의 영역이 드러날 경우, 해당 영역이 비워있을 수 있다. 이럴 경우, 우리는 이를 disocclusion이라고 표현한다.
그래서 GEN3C의 renderer는 RGB rendering만 출력하는 것이 아니라 $M^{t,v}$라는 disocclusion mask도 만든다. 그러면 이제 우리에게 3가지 guidance가 있다.
Rendered RGB + Disocclusion mask + Target Camera Trajectory
이를 structured guidance로 video diffusion model에 제공한다. 그러면 video diffusion model은 3D cache로부터 알려진 영역은 최대한 유지하고 M으로 표시된 missing region은 생성해서 채우고, camera trajectory에 맞춰 연속적인 video를 생성한다.
GEN3C가 일반적인 camera-conditioned video diffusion 보다 3D consistency를 유지하기 유리한 이유는 camera pose만 숫자로 알려주는 것이 아니라, 현재 장면의 3D 구조를 직접 rendering해서 visual guidance로 제공하기 때문이라고 볼 수 있다.
Camera Trajectory를
\[C = (C_1, C_2, ... , C_L)\]이라고 하면 각 camera pose마다 위 과정을 수행한다.
그러면 viewpoint $v$에 대해
\[I^V \in \mathbb{R}^{L \times 3 \times H \times W}\]라는 RGB image sequence와
\[M^V \in \mathbb{R}^{L \times 1 \times H \times W}\]라는 mask sequence가 만들어진다.
이 전체 sequence가 video diffusion에 대한 camera-aware guidance가 된다.
Video variational autoencdoer(VAE)
이 부분은 GEN3C의 아이디어를 설명하는게 아닌 Lyra가 이후 어떤 representation을 이용하게 되는지 이해하기 위함이다.
일반적인 video diffusion model은 원본 RGB video에서 직접 diffusion을 하지 않고, VAE encoder를 이용해 압축된 latent에서 동작한다.
RGB video를
\[I \in \mathbb{R}^{L \times 3 \times H \times W}\]라고 하면 VAE encoder $E$가
\[z = E(I)\]로 변환한다. 이때
\[z \in \mathbb{R}^{L' \times C \times h \times w}\]가 된다. GEN3C/Lyra에서는 $C=16$이고 spatio compression factor가 $\sigma = 8$이므로
\[h = \frac{H}{8}, w = \frac{W}{8}\]시간 방향도 $\tau=8$로 압축하여
\[L'=\frac{L-1}{8}+1\]이 된다. 최종적으로 diffusion model 이 latent $z$를 생성하면 pretrained RGB decoder가
\[\hat{I} = D_{rgb}(z)\]를 통해 다시 video로 복원한다. 여기서 $z$가 굉장히 중요한게 Lyra는 GEN3C가 만든 RGB video만 가져다 쓰는 게 아니라, 그 RGB video가 decode되기 직전의 video latent $z$에서 직접 3DGS를 decode하려고 하기 때문이다.
Self-Distillation
이제 본격적으로 GEN3C를 이용해서 3DGS decoder를 어떻게 학습시킬 지 얘기해보고자 한다. 정확히는,
GEN3C가 여러 camera view의 RGB 영상을 만들어주고, Lyra의 3DGS decoder가 그 영상들을 3DGS로 재현하도록 학습한다.
그 전에 우리는 왜 self-distillation을 해야하는 지 알아야 한다.
기존 feed-forward 3D reconstruction은 보통 {multi-view images, camera poses} 라는 데이터가 필요했다. 문제는 이런 real multi-view dataset의 다양성이 제한적이라는 것인데, Lyra는 여기서 실제 multi-view 데이터를 모으지 말고, 이미 엄청나게 다양한 영상 데이터를 보고 학습된 video diffusion model이 multi-view training data를 만들어주게 하자 라는 생각을 한 것이다.
일단, Lyra는 다양한 text prompt를 LLM으로 만든다. 예를 들면, “a living room with a large window”와 같은 프롬프트를 많이 만든 다음 image diffusion model로 image $I$를 생성한다. 그러면 이 $I$ 하나를 GEN3C에 넣고 여러 camera trajectory를 따라 영상을 생성한다. 이는 GEN3C가 synthetic multi-view supervision을 만들어주는 것에 해당한다.
자 일단, 여기서 GEN3C를 $V$라고 표현한다. 그러면 입력 이미지 $I$와 camera trajectory ${C_t}_{t=1}^L$를 GEN3C에 넣는다:
\[z = V(I, \{C_t\}_{t=1}^L)\]이로써 latent $z$가 나오게 되고 이를 두 방향으로 decode 한다:
- RGB decoder
- 3DGS decoder
Teacher로서 GEN3C에 원래 존재하던 pretrained RGB decoder $D_{rgb}(z)$는
\[I_{D_{rgb}(z)} = D_{rgb}(z)\]를 통해 RGB video를 만든다. 이게 teacher의 정답 역할을 수행한다.
Student로서 Lyra의 3DGS decoder의 경우, 동일한 $z$를 새롭게 추가한 3DGS decoder $D_s$에도 넣는다:
\[G = D_s(z)\]여기서 $G$는 3D Gaussians 다. 그러면 결국에는, video latent $z$는 RGB video와 3D Gaussians로 변환된다는 것을 이제 알 수 있다.
문제는 여기서 RGB video와 3DGS는 직접 비교할 수 없으므로 Student 3DGS인 $G$를 렌더링하여 사용한다:
\[I_{D_s} = Render(G, \{C_t\}_{t=1}^L)\]이렇게 하면 teacher와 동일한 camera pose에서 2D image를 얻을 수 있고
\[I_{D_s} \approx I_{D_{rgb}}\]가 되도록 $D_s$를 학습한다.
이렇게 보면, 좀 이상하게 생각되는게 있다. “이게 왜 self-distillation이라는 걸까? 그냥 distillation 아닌가?”라고 말이다. 우리는 앞서 내용들을 보았을 때, 이렇게 생각할 수 있다:
\[\text{Student Render} = \text{Teacher RGB}\]그런데 결국 이것들의 입력은 동일하게 latent $z$로부터 시작되고, 두 decoder가 이를 공유한다는 점이다. 즉, video diffusion model이 latent 안에 가지고 있는 정보를 video latent의 implicit 3D knowledge $\rightarrow$ explicit 3D Gaussians 로 distillation하는 것이다.
추가적으로, Lyra는 input image 하나마다 6개의 camera trajectory를 sampling한다($V=6$). trajectory 하나마다 $L=121$개의 camera pose가 있다. 즉 총 $6 \times 121 = 726$개의 viewpoint에 해당하는 frame을 생성할 수 있는 셈이다.
또한, 6개의 trajectory마다 3DGS를 따로 만드는게 아니다. 단순하게 생각하면
\[\begin{aligned} z^1 \rightarrow G^1 \\ z^2 \rightarrow G^2 \end{aligned}\]이런 식으로 trajectory마다 3DGS를 하나씩 만들 수도 있지만, Lyra는 여섯 trajectory에서 나온 latent들을
\[Z = \{z^1, ... , z^6\}\]함께 받아서 하나의 coherent 3DGS $G$를 만든다. 즉
\[\{z^1, ... , z^6\} \rightarrow D_s \rightarrow G\]이런 식으로 진행하며, 이게 논문이 말하는 multi-view fusion이다. 자 그럼, Gaussian Scene $G$가 만들어졌으니, 여섯 trajectory의 모든 camera에서 rendering이 가능하다. 여기서 렌더링 된 것과 GEN3C teacher가 생성한 corresponding RGB frame과 비교한다.
\[I^{t,v}_{D_s} \approx I^{t,v}_{D_{rgb}}\]결과적으로 student가 만들어낸 하나의 3D scene이 여러 camera trajectory에서 동시에 teacher의 영상을 만족해야 한다.
여기서 학습할 때 업데이트되는 주체가 뭘지도 생각해야한다. architecture figure에 따르면 pretrained video diffusion model, RGB VAE encoder/decoder는 freeze하고, 학습하는 것은 3DGS Decoder인 $D_s$ 뿐이다. 그리고 inference 때는 latent $z$를 만들기 위해서 GEN3C는 전체가 사라지는 것이 아닌 RGB decoder 부분이 필요없어진다.
3DGS Decoder
이제 정확히 Lyra의 contribution이 남겨져 있다고 할 수 있는 3DGS Decoder의 Architecure를 살펴보고자 한다.
먼저, 3DGS decoder에 들어가는 입력에 대해서 생각해보자. 아까 계산 했듯이 RGB 기준으로 생각하면 총 726개의 view가 생기고, 게다가 각 frame의 해상도가 $704 \times 1280$이다. 기존 feed-forward reconstruction model은 보통 이렇게 많은 이미지를 한꺼번에 처리하지 못한다. 가장 큰 문제는 모든 image pixel을 visual token으로 만든 뒤 attention을 수행하면 token 수와 memory/computation이 너무 커진다는 것이다.
따라서, Lyra는 726장의 RGB image를 decoder에 넣지 않고, 이미 video diffusion model이 압축해놓은 latent를 직접 사용한다. 하나의 trajectory의 video latent는 대략
\[z^v \in \mathbb{R}^{L' \times C \times h \times w}\]였다. 6개 trajectory를 모두 모으면
\[Z \in \mathbb{R}^{V \times L' \times C \times h \times w}\]가 된다. Lyra 설정에서는 $V=6, L=121$이고 VAE compression factor가 temporal/spatial 방향으로 모두 8이므로,
\[L' = \frac{121-1}{8}+1= 16, h= \frac{704}{8} = 88, w= \frac{1280}{8} = 160\]이다. 따라서, 원래는 $6 \times 121 \times 704 \times 1280$ 개의 dense image information을 다뤄야 했다면, decoder가 실제로 받는 video latent는 대략
\[Z \in \mathbb{R}^{6 \times 16 \times 16 \times 88 \times 160}\]이다. 즉, 시간과 공간을 VAE로 크게 압축한 다음 reconstruction을 수행하는 것이 Lyra가 말하는 Latent-Based 3D Reconstruction이다.
이렇게 3DGS Decoder에 사용되는 입력 중 하나를 확인했고, 나머지 하나는 camera information을 받아야 한다. 여기서 Plücker embedding 이라는 기법이 나오는데, 이는 리뷰를 작성하는 본인의 이전 게시물들에도 많이 나오는 기법이다.
정확히는 어떤 camera ray에서 관찰된 것인지 나타내는 정보다. 그래서 Plücker embedding $E$를 두 번째 입력으로 사용한다.
\[G = D_s(Z,E)\]로 static decoder를 정의한다.
Plücker embedding을 간단하게 설명하면, camera pose와 intrinsic으로부터 raw Plücker embedding을
\[E_{raw} \in \mathbb{R}^{V \times L \times 6 \times H \times W}\]로 만든다. 따라서 모든 trajectory, 모든 frame, 모든 pixel에 camera ray 정보가 하나씩 존재하는 것이다. 개념적으로는 각 pixel마다 visual feature + 이 feature가 어느 ray에서 관측되었는가를 reconstruction network에 알려주는 셈이다.
그런데 Plücker embedding 은 full resolution인데 $Z$는 latent resolution이다.
\[Z \in \mathbb{R}^{V \times L' \times C \times h \times w} \\ E_{raw} \in \mathbb{R}^{V \times L \times 6 \times H \times W}\]크기가 전혀 다르다. 그래서 Lyra는 pretrained video VAE의 RGB encoder를 Plücker embedding에도 사용한다. Plücker 는 6 channel 인데, RGB encoder는 원래 3 channel 입력을 받는다. 그래서 6차원 Plücker를 두개의 3차원 성분으로 나눈다:
- 3D ray direction
- ray direction 과 ray origin의 cross-product에 해당하는 3D 성분
각각을 따로 VAE encoder에 넣는다. 그리고 나서 concatenate를 진행하면,
\[E_{enc} \in \mathbb{R}^{V \times L' \times 2C \times h \times w}\]가 된다. 이렇게 하면 Plücker latent channel이 $2C$ 가 되는데, 반면 video latent $Z$는 $C$이므로, lightweight MLP를 이용해서 $C$로 줄인다.
결과적으로,
\[E \in \mathbb{R}^{V \times L' \times C \times h \times w}\]이렇게 되며, 이제 $Z,E$의 크기가 서로 같아진다. 그래서 이 둘을 더해서 $X=Z+E$ 각각의 video latent feature에 그 feature 가 어떤 camera ray에 대응하는가라는 geometry 정보를 추가하는 것이라고 생각하면 된다.
여기까지 우리는 $Z,E$를 준비를 했다. 그런데, 이걸 바로 Transformer에 넣지 않고, Patchification이라는 방식을 추가적으로 사용한다. $Z$와 $E$ 각각을 먼저 $2 \times 2$ patchification layer만 사용해서 video latent를 reconstruction network가 처리할 flattened token으로 만든다.
따라서 token 수가 줄어들고, 동시에 각 patch를 reconstruction network의 hidden dimension에 맞는 feature vector로 projection한다. 그리고 나서 결과를 Sum한 뒤 reconstruction block으로 넣는다.
그래서 입력이 되는 것은 Patch(Z) + Patch(E) 가 reconstruction blocks의 입력이 된다. 그러면, 이제 6개 trajectory 정보를 섞어야 한다. 즉, $z^1, z^2, … , z^6$로부터 하나의 coherent 3D scene을 만든 것이 목표다. 이 역학을 수행하는 것이 3DGS decoder architecture 내부에 있는 Multi-view reconstruction blocks다.
Lyra는 Long-LRM의 구조를 따라 이 하나의 block을 1개의 Transformer와 7개의 Mamba-2 로 구성했다고 한다. 그리고 이 block을 2번 반복한다. 그래서 16개 layer이고, hidden dimension은 512이다.
그렇다면, Transformer와 Mamba-2를 섞는 이유가 뭘까?
Transformer의 self-attention은 긴 sequence에서는 계산량과 memory가 매우 커진다. 반면, Mamba-2는 긴 sequence를 훨씬 효율적으로 처리할 수 있다.
Appendix 실험에서도 동일한 설정에서 Transformer-only보다 joint Transformer-Mamba가 훨씬 빠르다고 설명한다. 논문은 이 구조를 Long-LRM에서 가져왔다고 명시한다.
이렇게 Multi-view reconstruction blocks를 거치고 나면 hidden feature가 완성된다. 그리고 마지막에 Transposed 3D Convolution을 사용해서 이것을 다시 spatial/temporal resolution 쪽으로 확장하면서 Gaussian parameter로 decode한다.
그래서 최종 출력은
\[G \in \mathbb{R}^{V \times L \times H \times W \times 14}\]의 per-pixel 3D Gaussian features라고 표현한다. 여기서 왜 14개인지 확인하자면,
-
3D position: \((x, y, z)\)
-
Scale: \((s_x, s_y, s_z)\)
-
Rotation quaternion: \((q_w, q_x, q_y, q_z)\)
-
Opacity: \(\alpha\)
-
RGB color: \((r, g, b)\)
따라서 총 parameter 수는
\[3 + 3 + 4 + 1 + 3 = 14\]그런데, 여기서 per-pixel 3D Gaussian features라는 단어를 보면, 각 픽셀마다 Gaussian을 만드는 것처럼 보이지만, 실제로 Appendix에서는 공간적으로 $8 \times 8$ pixel neighborhood마다 Gaussian 하나만 생성한다고 명시한다. 물론, 총 viewpoint가 적으면 scene에 gaussian이 충분치 않아 비어 보일 수 있지만, viewpoint가 굉장히 많아 괜찮다. 그리고 추가로 opacity pruning을 통해 더 줄인다. 즉, 실제 구현에서는 spatial subsampling을 한다고 생각하면 된다.
Loss Function
3DGS decoder가 예측한 Gaussian들을 teacher인 GEN3C의 결과와 어떻게 맞추는 지 설명한다.
\[L = \lambda_{mse}L_{mse} + \lambda_{lpips}L_{lpips} + \lambda_{depth}L_{depth} + \lambda_{opacity}L_{opacity}\]아까 말했듯이 $G$의 파라미터를 대상으로 loss를 책정하는 방식이 아니라 $G$를 $C$에서 렌더링한 image를 기반으로 loss를 책정한다. MSE loss의 경우에는 pixel 수준에서 RGB를 맞추는 역할을 수행한다. 그러나 MSE는 pixel 값을 직접 맞추는 데 좋지만, 사람이 보는 texture나 perceptual similarity를 충분히 반영하지 못해서 LPIPS loss도 사용한다.
LPIPS는 VGG를 feature extractor로 사용한다고 한다. 그러니 MSE는 pixel과 pixel의 차이를 보는 반면 LPIPS는 visual feature와 visual feature의 차이를 본다고 생각하면 된다.
그런데, 이 2가지만을 사용했을 때 생기는 문제가 있다.
RGB loss 만으로 3DGS decoder를 학습했을 때 flattened geometry가 발생한다.
는 것이다. 그래서, 논문의 저자들은 loss term을 더 추가한다. Lyra는 ViPE라는 off-the-shelf-system을 이용해서 teacher video에 대해 consistent video depth를 추정한다.
\[D_{teacher} = ViPE(I_{teacher})\]에 해당하는 depth supervision을 획득하고, 이를 $D_{student}$와 비교한다. 여기서 단순히 depth MSE가 아니라 Scale-Invariant depth loss를 사용하는데, 이는 Long-LRM의 scale-invariant depth loss를 사용한다고 한다. 그래서, absolute depth scale 자체보다는 상대적인 depth structure를 맞추게 된다. 즉, depth 값을 정확하게 맞추는 것이 아니라 depth 구조를 맞추도록 돕는다.
그리고 필요 없는 Gaussian을 줄이기 위해 Opacity loss를 사용한다. 정확히는 Gaussian의 opacity에 대해 L1 regularization을 적용한다. 그래서 많은 Gaussian의 opacity를 0에 가깝게 만들어서 $\alpha_i \rightarrow 0$인 중요하지 않은 Gaussian들이 생기도록 하는 것이다.
그래서 학습과정에서 opacity를 sparse하게 만들어서 opacity가 가장 낮은 Gaussian의 80%를 제거한다. 그래서 $L_{opacity}$는 pruning과 연결되어 있다.
이렇게 했을 때, ablation에서도 드러나지만 rendering 시간이 줄어드는 것을 볼 수 있다.
그리고, 각 loss 앞에 있는 $\lambda$ 값의 경우에는
\[\lambda_{mse} = 1.0, \; \lambda_{lpips} = 0.5, \; \lambda_{depth} = 0.05, \; \lambda_{opacity} = 0.1\]이다.
Extension to Dynamic 3D Scenes
앞서 우리는 static Lyra 즉, 정적인 장면에서의 Scene을 잘 만들어내는 Architecture를 구성했다. 그리고 이제 이 Architecture를 Dynamic Scene까지 확장하려고 한다.
Static Lyra에서는 입력이 한 장의 $I$ 였다. 그런데, 이제는
\[I_1, I_2, ... , I_L\]이라는 monocular video다. 그러면 우리가 이제 원하는 것은 $G$가 아닌 시간에 따라 달라지는 3D scene인
\[G_t\]가 된다. 일단, 기본적인 self-distillation 구조는 static과 거의 동일하다.
먼저, GEN3C는 입력 video를 가지고 동일한 motion을 유지하면서 다른 camera viewpoint의 video를 생성한다. 즉, 같은 motion을 여러 viewpoint에서 관찰한 synthetic multi-view video를 만드는 것이다.
학습용 video 역시 실제 synchronized multi-camera data를 수집하는 것이 아닌, LLM으로 prompt를 만들고 Cosmos나 Wan 같은 video diffusion model로 video를 생성한 뒤 ViPE로 camera pose와 depth를 annotation한다.
static Lyra에서는
\[G = D_s(Z,E)\]였지만, Dynamic 에서는
\[G = D_d(Z,E,T_{src}, T_{tgt})\]두 개의 time condition이 추가된다. 각각 입력 video frame이 어느 시간의 motion state인지, 그리고 지금 생성하려는 3DGS가 어느 시간의 scene이어야 하는 지에 대한 정보를 담는다.
즉, $T_{src}$의 경우에는 각 frame이 어느 시간에 해당하는 지 알려주는 것이고, $T_{tgt}$의 경우에는 몇 번째 시간의 3D scene을 만들라고 Dynamic decoder에게 알려주는 값이다.
그러면 $G_{T_{tgt}}$ 라는 3DGS를 생성한다. 그런데, Time을 그냥 scalar time value로 그냥 넘겨주는 것이 아니라 video latent와 같은 크기로 encoding하여 넘겨준다.
원래 source time은
\[T_{src, raw} \in \mathbb{R}^{V \times L \times 1 \times H \times W}\]이다. Target time은 하나의 target timestep 이므로
\[T_{tgt, raw} \in \mathbb{R}^{V \times 1 \times 1 \times H \times W}\]그런데, RGB VAE encoder는 3-channel input을 기대한다. 그래서 time scalar 1개에 2-dimensional sinusoidal embedding을 붙여 3 channel로 만든다.
즉 대략
\[t \rightarrow [t, sin(\cdot), cos(\cdot)]\]같은 방식의 3-channel 표현이라고 이해하면 된다. 이걸 pretrained RGB encoder에 넣으면
\[T_{src}, T_{tgt} \in \mathbb{R}^{V \times L' \times C \times h \times w}\]로 video latent와 동일한 형태가 된다. Target time은 latent temporal dimension $L’$ 전체에 repeat 된다. 3DGS decoder architecture figure를 보면 바로 이해할 수 있다.
그리고, dynamic decoder는 처음부터 새로 학습하지 않으며, static에서 이미 학습된 $D_s$를 가져와서 $D_d$로 fine-tuning한다. 이때 $T_{src}, T_{tgt}$를 위한 patchification layer는 zero initialization을 하여 static network의 동작을 망가뜨리지 않고, $Z+E$ 위주로 시작한다. 이 상태에서 training을 하면서 조금씩 time conditioning을 배우게 하는 것이다.
Dynamic decoder를 학습할 때는 매번 L개의 모든 시간에 대한 3DGS를 한 번에 supervision하는 것이 아니라 target timestep 하나를 random sampling하여 진행한다고 설명한다. 그리고 그 frame에서 Gaussian Scene의 여러 camera에서 rendering한 결과를 해당 시간에 해당하는 teacher frame들과 비교한다.
그런데, 이것 때문에 viewpoint coverage가 불균형해질 수 있다. static 파이프라인의 경우에는 $G$ 하나에 대해 모든 timestamp를 사용할 수 있기 때문에 near view와 far view 모두 supervision을 수행할 수 있지만, random sampling된 시간대에서 특정 시간대에 해당하는 frame들로만 학습해야 하니까, near view나 far view만 볼 수도 있다. 아래의 figure의 w/o data augmentation이 그 문제를 바로 보여준다.
이는 Lyra의 opacity regularization에 의해서 해당 view에서 거의 기여하지 않는 Gaussian들을 pruning해버리기 때문에 일어나는 문제기도 하다.
그래서 Lyra는 특수한 augmentation 방법을 사용한다. input video가 $I_1, … , I_L$이라면 이를 뒤집어서 $I_{L}, … , I_1$ 이 reversed video를 GEN3C에 다시 넣는다. 그러면 내가 특정 시간을 고르더라도 원래 시간흐름에서의 해당 시간에 대한 여러 view point를 제공하고, 반대 시간흐름에서의 해당 시간에 대한 여러 view point를 제공한다. 그래서 GEN3C는 뒤집은 흐름에 대해서도 6개의 outward camera trajectory를 만든다. 이렇게 되면 각 시간마다 Near과 Far view가 생기게 되고, 특정 시간대의 $G$이 있다고 한다면, 6 near view 와 6 far view 를 동시에 사용할 수 있다.
그러면 최종적으로 12 supervision view per timestep이 가능해진다. 그 효과가 위의 figure 5의 Ours에 있다. 추가적으로, 이 augmentation은 training에서만 사용한다.
Experiments
Setup
model을 학습하기 위해 multi-view dataset을 사용하지 않았다. 대신, Lyra dataset을 스스로 구축하여서 3DGS decoder를 학습시켰다. 모든 데이터는 다양한 text prompts, indoor와 outdoor 환경, humans, animals, realistic 이거나 imaginative content 모두를 포함한다.
평가의 경우 RealEstate10K, DL3DV, Tanks and Temples와 같은 벤치마크를 사용하고, 평가 프로토콜을 wonderland와 같은 방식으로 진행하였다.
Main Results
Lyra는 많은 실험을 진행했다. Lyra는 세 benchmark에서 PSNR, SSIM, LPIPS 지표에서 가장 좋은 성능을 보인다. Qualitative result에서도 생성된 3DGS를 여러 novel viewpoint에서 rendering했을 때 input image와의 consistency를 유지하면서 입력에서 보이지 않았던 영역을 생성할 수 있다고 보고한다.
그리고 저자들은
reconstruction network 자체의 성능뿐 아니라 teacher인 video generation model의 성능이 향상되면 Lyra의 reconstruction quality 역시 함께 좋아질 수 있다.
라고 해석한다.
Ablation Study
먼저, self-distillation 필요성을 확인하기 위해 multi-view data(RealEstate 10K, DL3DV)만 사용했을 때 성능을 측정하면 성능이 떨어지는 것을 위의 table에서 확인이 가능하다. 즉, 저자들의 주장은
real multi-view dataset보다 video diffusion으로 생성한 synthetic supervision이 훨씬 다양한 scene을 제공해 OOD generalization에 유리하다.
는 것이다. 흥미롭게도, self-distillation와 real data를 함께 사용해도 full model보다 좋아지지 않는 것을 볼 수 있다. 저자들은 이를 synthetic self-distillation supervision 자체가 충분히 다양하고 consistent하다는 근거로 해석하는 것 같다.
그리고 loss 쪽에서는 w/o depth loss에서는 geometry가 flat해지는 문제가 발생하고, w/o LPIPS loss에서는 성능이 상당히 떨어지는데, 논문은 LPIPS가 input inconsistency에 대한 robustness와 high-frequency detail 보존에 도움이 된다고 설명한다.
Opacity pruning을 제거하면 성능도 약간 떨어지지만, 특히 rendering 시간이 줄어드는 것을 볼 수 있다.
Architecture 쪽에서는 multi-view fusion의 역할이 중요하게 보인다. 즉, trajectory마다 독립적으로 Gaussian을 만든 뒤 마지막에 point cloud를 합치는 것보다, latent 단계에서 여러 trajectory 정보를 함께 fusion하는 것이 중요하다는 결과를 보여준다.
그리고 Mamba-2를 제거하고 Transformer-only로 만들면 quality 감소는 크지 않지만 속도가 느려지고, pixel-space에서 3DGS reconstruction을 수행하려 하면 입력 frame수가 너무 많아서 OOM이 발생한다.
Lyra는 실험을 많이해서 appendix를 추가로 보고 참고하면 좋을 것이다.
Contributions
- multi-view dataset 필요없이 학습하는 self-distillation framework를 구축했다.
- dynamic scene까지 확장 가능한 framework를 구축했다.
- 다양한 scene에서 그리고 single-image to 3D scene genration, single-image to 4D scene generation 에서 SOTA 결과를 달성했다.
Limitations & Future works
Lyra가 합성해내는 3D 및 4D 장면의 규모(scale)와 기하학적 일관성(consistency)은 기저의 교사(Teacher) 모델 역할을 하는 카메라 제어 비디오 확산 모델의 자체 역량에 의해 직접적으로 제한(bounded)을 받는다. 즉, 생성 파이프라인의 완성도가 전적으로 백본 비디오 디퓨전 모델의 수준에 종속된다는 물리적인 한계가 존재한다.
향후 연구 방향으로는
- 더 강력한 video diffusion model을 framework에 접목시키는 것
- framework에 auto-regressive 기법을 접목하고 적응시키는 연구
- reconstruction network 내부에서 motion 및 frame tracking 정보를 직접 정밀하게 모델링하는 기법을 연구
라고 명시한다.