본문 바로가기
Study/Paper Review

[paper review] LLaVa-3D : A Simple yet Effective Pathway to EmpoweringLMMs with 3D Capabilities 논문리뷰

by Hoony-Daddy 2025. 4. 20.
728x90

이번 포스팅할 논문은 LLaVa-3D입니다. 최근에 LLM이 발전하면서 2D understanding task 또한 엄청난 속도도 성능이 발전하고 있습니다. 하지만 3D 쪽의 LLM task들은 large-scale 3D vision-language dataset의 부족과 새로운 3D encoder 스탠다드의 부재로 성능이 많이 부족합니다. 

기존의 방법들은 대게 2D가 large scale vision-language dataset을 이용해서 학습하는 것도 유사하게 3D에서는 pointcloud로 부터 encoding된 3D feature를 language과 연결하는 식으로 접근하였는데 여기서 데이터 부족문제가 발목을 잡고있고 CLIP, ViT와 같은 강력한 Pretrained model이 없는 것 또한 문제입니다.

위의 논문은 이런 문제를 해결하기 위해 기존의 2D LLaVa모델을 확장해서 3D world scene understanding을 할 수 있도록한 모델입니다.

*참고
LLM은 GPT, BERT, LLaMA등과 같이 텍스트 기반의 large language model을 의미하여 위에서 언급한 LLM으로 image를 같이 처리할수 있는 모델들을 보통 VLM(vision-language model)이라고 합니다. LLM백본을 사용하면서 vision encoder(i.e. ViT)를 결합하는 경우가 많습니다. LLaVa-3D는 3D-VLM으로 볼 수 있겠습니다.

 

 

3D Patch(==token)

2D의 경우 CLIP을 통해 input image(3xWxH) -> 2D patch feature (cxwxh)를 추출한 후에 projection layer(i.e. mlp)를 통해 LLM space로 정렬됩니다. 우리는 3D patch를 어떻게 구할거냐가 중요한데 논문은 pointcloud를 이용해서 3D patch를 얻는것이 아니라 multi-view image를 통해서는 3D world를 이해할수있기에 3D patch를 multi-view를 통해 얻는 방법을 제안합니다.

multi-view image에서 2D patch feature (v,c.w.h) 를 추출하고 - v는 view index로 추정됨, 각 image의 3D pose 정보를 patch화 시키고 (상세 구현은 ODIN방식을 참고했다고 합니다. https://arxiv.org/abs/2401.02416 ) projection layer를 거쳐서 (2-layers) 앞서 추출한 2D patch feature에 pose embedding을 element-wise로 더합니다.

*element wise

A vector = [1,2,3] , B vector = [10,20,30] -> element wise summation -> [11,22,33]

 

3D Patch Pooling

3D patch의 경우는 input image가 linear하계 증가하기에 computation cost가 지속적으로 증가합니다. 실제로 3D scene understanding을 위해서는 다양하고 많은 시점의 image가 필요합니다. 이를 위해 3D-aware pooling기법을 제안해서 3D patch 개수를 줄이는 것을 제안합니다. 일반적으로 2D or Video에서는 2D spatial, temporal dimension에서 pooling을 수행해서 token개수를 줄이고 의미있는 정보만을 취하지만 3D에서는 장면 전체 구조를 최대한 보존하는 것이 중요하기에 두가지 방법을 제안하였습니다.

첫번째로는 voxelization pooling으로 앞서 3D patch을 구할때 pose 정보는 이미 알고있다고 가정하였습니다. 그럼 voxel based lidar detection에서 처럼 3D world map을 voxelization하고 voxel안에 3D patch들을 average pooling을 합니다. 두번째로는 이것도 pointbased lidar detection에서 (pointnet++) 나오는 개념인데 FPS pooling을 합니다. (Farthest Point Sampling) 가장 먼 거리의 포인트를 선택해 대표점을 추출하는 것입니다.

 

3D-aware Position Encoding & Decoding

이제 LLM은 3D scene, text prompt, 3D pose 정보를 multi-modal input으로 받아서 text나 3D bbox같은 출력으로 생성하는 부분을 설명하는 부분입니다.

위의 그림과 같이 3D patch를 projection(mlp)통과시키고 토큰화, 3D pose를 토큰화, text prompt를 토큰화 한걸 concat하여 LLM에 입력으로 들어가게됩니다. [3D Patch Tokens + 3D coor Tokens + Text Tokens]

3D coor는 prompt안에 포함된 정보를 parsing해서 얻는것으로 추측됩니다. 

 

Decoder에서 3D bbox를 직접 예측하는건 여전히 쉽지않는 task라고 합니다. 그래서 저자는 Grounding Decoder를 도입하였는데 그림에서처럼 FPS를 통해 3D patch에서 샘플링된 instance query, LLM을 통해 나온 location tokens를 Ground Decoder layer에서 cross attention + self attention을 거친후에 MLP태우고 3D bbox을 prediction하게 됩니다.

Training

우선 pretrained LLaVA 1.5를 기반으로 학습합니다. 또한 학습할때 모듈을 분리해서 학습합니다.  첫번째에서는 3D patch(CLIP + 3D 위치)가 어떤 문장과 잘 align되는지 학습합니다. 예를 들면 입력으로 multi-view 이미지가들어오면 3D patch화 하고 출력으로 LLM이 캡션을 생성하게 하거나 CLS like 토큰을 통해 similarity를 측정해서 contrastive loss를 줍니다.

두번째 스테이지는 LLM이 프롬프트를 받고 정답(3D bbox)를 생성하는 부분입니다. LLM output이 GT와 얼마나 다른지 계산하고 LLM은 일반적인 language model loss를 사용하고 3D bbox loss를 사용합니다.(구체적으로는 확인이 안되는것같습니다. 얼마나 많은 GPU를 사용하였는지도 기술되어있지 않습니다.)

 

 

단계목적사용 데이터 & 태스크학습 / Freeze 모듈손실(Loss) 구상특징

Stage 1 – 3D Patch Language Alignment 3D 패치가 LLM 공간에서 올바른 언어 의미를 갖도록 “위치‑의미 정렬” Region‑level / Scene‑level 캡션 데이터 → 물체 간 3D 공간 관계를 서술한 문장 + 다중 뷰 이미지 시퀀스 🔹 CLIP 인코더 ❄️ Freeze 🔹 LLM (Vicuna‑7B) ❄️ Freeze 🔹 3D Pos‑Embedding MLP ✅ 🔹 Projection Layer (CLIP→LLM) ✅ Cross‑Entropy LM Loss (텍스트 생성) – 패치‑텍스트 정렬 중심 • 3D 패치가 언어 공간에 빨리 적응 → 수렴 속도↑
Stage 2 – Task Instruction Tuning 다양한 3D V&L 태스크를 동시에 수행하면서, 기존 2D 능력 유지 LLaVA‑3D‑Instruct‑1M (2D + 3D 1 M 쌍)  ‣ 3D QA, Dense Caption, Grounding, Coord‑QA 등  ‣ 기존 LLaVA‑1.5 2D instruction 데이터 🔹 CLIP 인코더 ❄️ 계속 Freeze 🔹 3D Pos‑Embedding MLP ✅ 🔹 Projection Layer ✅ 🔹 LLM Fine‑tune ✅ 🔹 Grounding Decoder / Coord Token MLP ✅ (3D 박스가 필요한 태스크에서만) - LM Loss (언어)  + L1 / IoU Loss (3D BBox)  + Task‑specific Loss (QA 정확도 등) • 2D 경로와 3D 경로가 동일 아키텍처를 공유  • 모듈 공유 덕분에 2D 성능 하락 없음

 

experiments

LLaVA-3D-intruct라는 1M개의 데이터셋을 기반으로 학습을 진행하였고 다양한 벤치마크에서 평가를 진행하였습니다.(2D+3D dataest)

3D QA(질문응답) : ScanQA, SQA3D, MMSCan QA, OpenEQA

3D captioning : Scan2Cap, MMSCan Captioning

 

 

 

 

 

 

 

 

3D scene에서 객체를 인식하고 text로 표현하는 능력의 bench mark