LRM: Large Reconstruction Model for Single Image to 3D

LRM 3d paper review
김호진's avatar
Aug 08, 2024
LRM: Large Reconstruction Model for Single Image to 3D
읽은 이유
multiple images to 3d reconstruction 논문을 찾고싶었는데 single image 논문이 많아 우선 이걸 읽었다. 연관은 있을테니까. Stable Fast 3D 모델의 근간이 된 모델의 근간이 된 논문.
 
감상평
3DGS를 읽을 때도 좋은 3d prior를 가지는 대형 모델을 만들 수 있을까가 궁금했는데, 비슷한 주제로 접근한 논문이다(3DGS와는 무관하지만). 여전히 3d data가 적은 것이 문제인데 그렇다고 앞으로 고퀄리티 데이터가 폭발적으로 증가하는 것도 힘들테니 high-quality가 아닌 다양한 data를 사용해서 좋은 prior network를 만드는걸 목표로 해야하지 않나? image/video diffusion model을 잘 활용하는 구조를 가져가거나(근데 이미 대부분 이 방향으로 연구가 일어나고있구나)
 
Abstract
우리는 처음으로 한장의 이미지로부터 5초안에 3d model을 예측하는 Large Reconstruction Model을 제안한다. 제한된 작은 데이터만을 사용한 이전 연구들과는 다르게 LRM은 scalable한 트랜스포머 기반 아키텍쳐(500M)를 사용해서 한장의 이미지로부터 바로 NeRF를 예측하도록 했다.
우리는 end-to-end 방식으로 1M개 물체의 대량의 멀티뷰 데이터를 학습했다.
모델과 데이터를 잘 선택 조합해서 성능을 높였다. https://yiconghong.me/LRM/
 
대량의 데이터, 큰 모델을 선택해서 발전하는게 현재 흐름인데 3d는 데이터가 적어서 그런지 특정 category안에서만 학습하는 모델이 많아서 여기서는 흐름에 맞게 데이터를 최대한 대량으로, 모델은 scalable한 구조(트랜스포머)를 적용해서 빌딩하려고 했다.
given sufficient 3D data and a large-scale training framework, is it possible to learn a generic 3D prior for reconstructing an object from a single image?
 
간단 설명
LRM은 큰 transformer-based 인코더-디코더 구조로 object의 3D representation을 배운다.
이미지를 입력으로 받아 triplane representation의 형태로 NeRF를 regression한다.
LRM은 pre-trained visual transformer DINO를 이미지 인코더로 활용하고(image to patch-wise feature tokens)
image-to-triplane transformer decoder를 학습해서 2d image feature를 3d triplane으로 매핑한다(by cross attention).
그리고 공간적 정보를 가진 triplane token간의 관계를 self-attention을 통해서 모델링한다.
decoder의 출력 토큰들은 reshape되고 upsample되어서 final triplane feature map이 된다.
이후에, 임의의 시점에서의 이미지를 그 triplane feature를 사용해서 렌더링하고 추가적인 MLP로 color, density를 예측해서 volume 렌더링을 수행한다.
 
학습은 렌더링된 이미지와 GT image간의 차이로만 일어난다.
 
 
 
Method
notion image
 
일련의 과정이 꽤 길게 있다.
RGB image를 입력으로 받아,
  • semantic한 representation을 얻는 것보다 디테일한 스트럭쳐와 텍스쳐 정보를 갖는 image feature를 뽑는게 더 중요해서 DINO를 사용
  • image and camera features → learnable spatial positional embeddings → triplane representations
    • 이 디코더가 prior network.
  • 각 plane은 64 x 64 x d_T, 64는 spatial res and d_T는 channel(위에서 80)
 
= 3 x 32 x 32 x d_D 를 초깃값으로 사용해서 각 decoder 레이어마다 image feature, camera feature를 사용하여 업데이트 시킨다.
  • camera feature로 modulation하는 방법은 DiT의 adaLN에서 참고했다.
    • notion image
      카메라 정보가 이미지와 함께 cross attention에 들어가는게 아니라 사이사이의 normalization 과정에 사용된다,, 카메라는 전체적인 방향과 왜곡을 컨트롤하는 요소라서 그렇다고 하는데
  • image features는 크로스 어텐션을 통해서 현재의 feature sequence(이게 최종적으로 learnable deconv를 거쳐 upsamle되고, reshape되어 final triplane rep이 됨.)에 반영된다.
    • 이때 공간적 정보를 명시적으로 주고 align시키지 않는다.
      MLP layer는 기존 트랜스포머의 FFN과 같음(입력과 출력 dim이 같다).
final triplane을 가지고 원하는 시점의 이미지를 만들어내는 방법은 이전 연구와 같다(position → projection → MLP 태워서 color, density → volumetric rendering).
 
학습 방법 : recon loss
simgle image로 랜덤하게 여러 시점을 선택한다. 그 시점에서의 이미지를 렌더링하고 GT 이미지와 비교함.
notion image
normalized pixel-wise L2 loss와 perceptual loss를 weighted sum해서 최종 reconstruction loss를 얻는다.
 
데이터를 모을 때 오히려 multi-view는 있는데 정확한 camera value가 없는게 더 많을 것 같다. 이런건 어떻게 하지?
notion image
 
notion image
 
implementation details
notion image
 
A100 128대로 3일 학습.
 
큰 개선이 일어난걸로 보이긴 하지만,, 디테일이 많이 부족하고(blurry하다) light와의 상호작용, texture 표현도 여전히 부족해보이긴 한다.
 
future directions
  1. 모델과 데이터를 키우고, triplane rep의 resolution도 키우면 나아질 수 있다.
    1. 현재는 멀티뷰 데이터가 있는 3d data만 사용했는데 이미지, 비디오, 다양한 3d 데이터를 통합하여 활용할 수 있는 구조가 되면 좋겠다!
  1. 현재는 text를 기반으로 multi-view 2d image를 생성한 후 이걸로 3d를 만드는 방식인데 앞으로는 직접 바로 3d model을 만들 수 있지 않을까?(latent diffusion으로 향후 연구 예정이라고 함)
 
 
Share article
Subscribe to our newsletter
RSSPowered by inblog