안녕하세요, 이번에는 CVPR 2024 highlight인 FoundationPose를 리뷰해보았습니다. 해당 링크에 들어가보시면 어떤 테스크인지 감이 오실 것 같습니다. Model-free 기반으로 하기 때문에 inference 할 때 3D 모델이 주어지지 않으므로 NeRF와 관련된 내용들을 사용하여 reference 이미지를 통해 3D 모델을 생성 후 pose를 추정하는 방법론입니다.
리뷰 시작하겠습니다.
Introduction
물체에서 카메라로의 Rigid 6D transformation을 물체에 대한 자세 추정이라고 합니다. 이를 계산하는 것은 로봇 조작, MR(Mixed Reality)과 같은 다양한 어플리케이션 측면에서 매우 중요한 역할을 하고 있습니다. 기존의 방법론들은 학습 시점에 결정된 특정 물체 인스턴스에 대해서만 작동하기 때문에 이를 intance-level에서의 pose estimation이라고 정의를 하였습니다. 이러한 방법론들은 학습 데이터를 생성하기 위해 텍스처가 있는 3D CAD 모델이 필수적으로 필요합니다. 그리고 inference 할 때에는 새로운 물체에 대해서는 적용할 수가 없는 한계가 있었죠. category-level은 위와 같은 문제가 어느정도 해소되었지만 사전에 정의된 카테고리 내 물체로 제한됩니다.
이러한 한계를 해결하기 위해 최근 제안되는 방법론들은 novel object pose estimation 관련된 연구들이 활발히 진행되고 있습니다. 해당 테스크는 inference할 때 model-base/model-free 2가지로 나뉘게 됩니다. 이는 적용하고자 하는 어플리케이션에 따라 달라지므로 서로 다른 측면이라고 해석될 수 있습니다.
FoundationPose의 contribution은 다음과 같습니다.
- model-base/model-free에 구애 받지 않고, 새로운 물체에 대해 pose 추정이 가능한 프레임워크 제안
- LLM + Diffusion 모델을 활용하여 합성 데이터를 생성하는 파이프라인 제안
- Transformer-base 네트워크 아키텍처와 contrastive learning를 통해 생성한 대규모의 합성 데이터로 학습하였을 때 강력한 일반화를 가능하게 함
- 공개 데이터셋에서 model-base/model-free 방법론들 보다 뛰어난 성능을 보여줌
Approach
FoundationPose의 전체적인 오버뷰는 그림(2)와 같습니다. 세부적으로 한 번 살펴보도록 하겠습니다.
1. Language-aided Data Generation at Scale
유명한 Foundation 모델들을 보면 결국 높은 일반화를 만족하기 위해 대용량의 데이터셋을 사용하는 것을 다양한 테스크들을 통해 알 수 있는데요. 이번 FoundationPose에서도 이러한 측면에서 다양한 물체/장면에 대해 합성 데이터를 생성합니다. 이때, 대규모 3D model DB, LLM, Diffusion 모델 등을 사용하여 학습을 위해 사용되는 합성 데이터를 생성하는 파이프라인을 개발하였다고 합니다. real-world에서 데이터를 취득하고 어노테이션 하는 것은 시간과 비용이 많이 들기 때문에 합성 데이터를 생성하여 사용하는 경우가 많은데요. 하지만 이러한 합성 데이터에도 3D 모델에 대한 asset의 크기나 다양성이 부족한 경우가 많다고 합니다.
3D assets
3D 모델에 대한 asset에 대한 문제를 해결하기 위해 Objaverse, GSO(Google Scanned Objects)에서 사용되는 물체들을 포함하고 있는 대규모의 asset을 확보합니다. Objaverse의 일부 서브셋인 LVIS는 40만개의 물체들로 구성되어 있다고 합니다. 또한, 각 물체마다 해당 카테고리를 설명하는 태그가 달려있어 다음으로 설명할 LLM를 이용한 texture augmentation 과정에서 프롬프트를 자동으로 생성하는 것에 도움이 되었다고 하네요.
LLM-aided Texture Augmentation
대부분의 물체들은 양질의 모양의 가지고 있거나 텍스처에 대한 형태도 상당히 다양하게 나타납니다. 위 그림(3)의 상단은 이전 연구인 FS6D[1]에서 ImageNet, MS-COCO의 이미지를 무작위로 3D 모델의 텍스처에 넣어 물체에 대한 다양한 텍스처를 주고자 제안되었는데요. 하지만 이러한 방법은 무작위 UV 맵핑으로 인한 결과를 메쉬로 봤을 때 이음새와 같은 아티팩트가 발생하게 된다고 합니다. 또한, 아무래도 그런 이미지 자체를 물체에 적용하면 비현실적인 형태로 생겼을 것 같습니다. 이러한 문제점을 해결하기 위해 저자는 LLM 모델과 더불어 diffusion 모델을 같이 사용한 자동화된 texture augmentation을 구현하였다고 합니다.
해당 과정은 텍스트 프롬프트와 물체의 모양, 랜덤한 노이즈 텍스처를 TexFusion[2] 모델의 입력으로 주게 되면 텍스처가 augmentation된 3D 모델을 생성할 수 있게 됩니다. 하지만 이러한 과정이 수동으로 진행되면 다양한 프롬프트 guidance가 다양한 형태의 수많은 물체들에 대해 augmentation을 하는 경우 확장성이 아무래도 떨어지게 되겠죠. 그래서 추가적으로 2단계로 계층적 프롬프트 strategy을 사용하게 됩니다. 그림(2)의 파란 영역의 제일 좌측 그림과 같이 먼저 ChatGPT를 통해 물체의 가능한 모양을 설명하도록 요청을 합니다. 해당 프롬프트에는 물체와 페어가 되는 태그만 교체하면 되도록 템플릿이 지정되어 있다고 하네요. 이렇게 ChatGPT부터 답변을 받으면 텍스처의 합성을 위해 diffusion 모델의 입력으로 넣을 수 있는 텍스트 프롬프트를 생성할 수 있게 됩니다. 그림(3)의 아래를 보시면 동일한 물체에 대한 다양한 텍스처를 포함하도록 프롬프트를 주는 것을 확인할 수 있습니다.
이후 이미지 형태로 된 합성데이터의 생성은 high-fidelity를 가지는 photo-realistic 렌더링을 위해 NVIDIA Isaac SIM을 통해 진행되었다고 합니다.
[1] Yisheng He, Yao Wang, Haoqiang Fan, Jian Sun, and Qifeng Chen. FS6D: Few-shot 6D pose estimation of novel objects. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR), pages 6814–6824, 2022. [2] Tianshi Cao, Karsten Kreis, Sanja Fidler, Nicholas Sharp, and Kangxue Yin. TexFusion: Synthesizing 3D textures with text-guided image diffusion models. In Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV), pages 4169–4181, 2023.
2. Neural Object Modeling
시작부터 언급을 하였지만, 이번 FoundationPose는 model-free기반의 방법론입니다. 따라서, 3D CAD 모델을 사용할 수 없다는 제약조건이 있습니다. 이때 해결해야 하는 문제는 다운스트림 모듈에서 사용하기에 충분한 퀄리티를 가지도록 이미지로부터 렌더링을 통해 효과적으로 물체를 표현하는 것입니다.
이때 사용되는 개념은 Neural Implicit representation이 됩니다. NeRF와 같이 Novel View Synthesis를 위한 효과적인 표현 방식으로, 이후 pose estimation을 위해 여러 pose hypothesis를 렌더링 할 때 높은 계산 효율성까지 보였다고 합니다. FoundationPose에서는 선행 연구들로부터 다양한 representation에 대해 영감을 받아 object-centric neural field representation을 제안합니다.
Field Representation
위 그림(2)의 Neural Object Modeling 파트를 보시면, Field representation에는 두 가지의 함수로 물체를 표현하게 되는 것을 확인할 수 있습니다.
Geometry Network \Omega는 3차원 상의 점(x)를 입력으로 받아 SDV(Singed Distance Value, s)를 출력으로 하며, Appearance Network \Phi는 geometry Network의 중간 feature로부터 point normal n, view direction d를 입력으로 받아 color 정보 c를 출력으로 나타냅니다. 전체적인 컨셉은 NeRF와 거의 흡사한 것을 볼 수 있습니다. 이를 통해 implicit object surface는 SDF(Signed Distance Field)로부터 얻게 됩니다. 이는 NeRF에 비교해보았을 때, density에 대한 threshold를 수동으로 선택할 필요도 없을 뿐만 아니라 더 좋은 품질의 렌더링된 depth를 얻을 수 있는 장점이 있다고 합니다.
Field Learning
앞선 섹션에서는 물체에 대한 Field representation에 대해 살펴보았는데요. 다음으로 텍스처에 대한 학습은truncate된 표면 근처 영역에 대한 volumetric rendering을 따르게 됩니다.
c(r)은 NeRF에서 사용하는 식과 흡사해 보이는데요. \Phi() 안에 들어가는 인자들은 geometry function로부터 얻은 정보들이고 이후 appearance function과 w를 곱하게 됩니다. 여기서 w(x_{i})는 점으로부터 implicit된 물체에 대한 표면까지의 SDV에 다라 달라지는 bell-shape을 가지는 PDF(Probability Density Function)입니다. 식(2)에 있는 \alpha는 분포에 대한 smoothing을 조정하는 하이퍼파라미터입니다. 식(1)에서 z(r)은 depth 이미지로부터 ray의 depth 값을 의미하게 되는데, depth 이미지의 특정 픽셀에서 나오는 ray r이 물체의 표면과 교차하는 지점까지의 거리를 나타냅니다. 이를 통해 3차원 상에서 표면 위치를 결정할 수 있게 되겠네요. \lambda는 truncation distance로, 효율적인 학습을 위해 표면에서 \lambda 이상 떨어진 빈 공간은 제외하고 0.5\lambda 까지의 관통되는 거리까지만 고려하여 self-occlusion을 모델링 하기 위한 적분 범위를 제한하는 방식입니다.
학습 과정 중 color에 대한 supervision을 주기 위해 해당 color에 대한 수치(양)를 GT RGB와 비교하면서 학습이 진행되게 됩니다. c(r)은 ray가 통과하는 color 값을 의미하며 \bar c(r)가 GT입니다.
다음으로 기하학적인 요소를 학습하기 위해 2개의 영역으로 나누어 SDF를 학습하는 hybrid SDF 모델을 적용하여 빈 공간 에 대한 \mathcal L_{e}와 표면 근처에 대한 \mathcal L_{s}를 계산합니다. 추가적으로 표면 근처에 대한 eikonal regularization[3] \mathcal L_{eik}을 적용하였다고 합니다. 여기서 x는 분할된 공간에서 ray를 따라 샘플링된 3D 포인트를 나타내고, d_{x}는 ray의 원점으로부터 샘플링된 점까지의 거리, d_{D}는 ray의 원점으로부터 depth 이미지의 점까지의 거리입니다. 최종적인 loss function는 (7)을 사용하게 됩니다. 학습은 사전학습 없이 객체별로 최적화되며, 몇 초 내에 효율적으로 수행할 수 있다고 합니다. 또한, 신경망은 새로운 물체에 대해서도 한 번만 학습하면 된다고 하네요.
[3] Amos Gropp, Lior Yariv, Niv Haim, Matan Atzmon, and Yaron Lipman. Implicit geometric regularization for learning shapes. In International Conference on Machine Learning (ICML), pages 3789–3799, 2020.
Rendering
학습이 완료되면 렌더링을 해야합니다. 원래 NeRF와 같은 컬러 렌더링 외에도 RGB-D 기반의 pose estimation/tracking을 위해서라면 depth에 대한 렌더링도 필요하죠. 저자는 효율적인 렌더링을 위해 marcing cube를 통해 SDF로부터 텍스처 메쉬를 추출하고 컬러값을 투영시킨 메쉬를 사용하게 됩니다. 해당 과정은 각 물체에 대해 한 번만 수행하고 inference 과정에서는 물체에 대한 pose가 주어지면 rasterization을 통해 RGB-D 이미지를 렌더링 하는 식으로 진행됩니다.
3. Pose Hypothesis Generation
Pose Initialization
이전까지 3D 모델을 만드는 과정을 진행했었으니 이제 해당 모델로부터 RGB-D 이미지가 주어지면 pose estimation을 수행하게 됩니다. RGB-D 이미지로부터 기성 모델(Mask R-CNN, CNOS)을 사용하여 물체를 찾습니다. 이를 통해 2D 바운딩 박스 내 센터점을 기준으로 동일한 depth 위치에 대한 3D 점을 찾아 init translation을 적용할 수 있습니다. rotation은 카메라가 중앙을 향하도록 물체를 중심으로 한 icosphere에서 N개의 뷰인트에 대해 균일한 분포를 가지도록 샘플링을 합니다. 해당 샘플링 된 뷰포인트 개수는 42, 162, … 이렇게 선행 연구로부터 얻을 수 있었죠.
Pose Refinement
앞서 pose initialization 과정은 coarse한 pose를 estimation한 과정입니다. 이러한 pose를 만으로는 끝낼 수 없죠. refinement를 통해 좀 더 개선된 pose들의 리스트를 얻어 가장 적절한 pose를 찾아 사용하게 됩니다. FoundationPose에서는 이러한 refinement를 수행하기 위해 여러 viewpoint에 대한 렌더링 과정을 거친 MegaPose와 다르게, refinement에는 coarse pose에 해당하는 single-view 렌더링으로도 충분하다는 것을 확인했다고 합니다. crop이 되는 기준은 coarse pose에 따라 다르게 변하게 되는데, 네트워크에서 crop 결과가 viewpoint 이미지와 일치하도록 translation을 업데이트 하도록 유도합니다. 이러한 refinement 과정은 latest로 업데이트 된 pose를 inference의 입력으로 넣는식으로 반복적으로 수행하게 됩니다.
refinement 모듈의 아키텍처 구조는 위 그림과 같이 구성되어 있습니다. 렌더링된 3D 모델과, RGB-D를 각각 입력으로 받는 2개의 branch로 시작됩니다. encoder로부터 feature를 추출하여 두 개의 feature를 concate하고 ConvResBlock 이후 postition embedding을 통해 패치 형태로 분리되어 토큰화가 되어 transformer encoder의 입력으로 들어가게 됩니다. 이후 간단히 MLP를 태워 rotation과 translation을 예측하게 됩니다.
tracking이니 다음 프레임에서의 pose가 현재 구한 pose 값이 들어가게 되겠죠. + 기호는 다음 프레임에서의 업데이트 되는 pose 정보라고 보시면 되겠습니다.
식(10)을 통해 refinement 모듈이 학습이 되는데요. 간단히 L_{2} loss로 진행됩니다. bar 형태로 되어있는 게 GT입니다. w_{1}, w_{2}는 loss에 대한 balancing 파라미터이나, 1로 설정하였다고 합니다.
4. Pose Selection
FoundationPose의 방법론 마지막 과정입니다.
이전에 refinement pose 과정을 통해 pose 리스트를 얻었을텐데요. 이를 refined pose hypotheses라고 합니다. 이러한 pose 리스트의 score를 매기기 위해 추가적인 네트워크 아키텍처를 사용합니다. 해당 아키텍처를 통해 가장 높은 score를 받은 pose가 최종적인 pose로 사용 되게 됩니다.
Hierarchical Comparison
저자는 score를 측정하는 아키텍처에 2-level로 비교하는 strategy를 사용합니다. 입력부터 살펴보면, 각 pose hypothesis에 대해 이전에 crop을 위해 사용된 pose를 이용하여 렌더링된 이미지(위)와 입력으로 들어가는 crop 이미지와 비교를 합니다. 해당 encoder는 refinement 아키텍처와 동일한 과정으로 수행하고 글로벌한 이미지에 대한 컨텍스트를 더 잘 활용할 수 있도록 토큰화가 되어 multi-head로 구성된 self-attention 모듈에 태우는 것을 볼 수 있습니다. Pose Ranking Encoder는 AvgPooling을 통해 렌더링된 이미지와 crop 이미지 간의 align 정도를 설명하는 feature embedding을 출력으로 주게 됩니다. 하지만 이런 과정으로 하게 되면 다른 pose hypothesis들이 무시되어 네트워크가 학습되기 어려운 절대적인 점수로 할당이 되는 경향이 있었다고 합니다.
이러한 문제를 해결하기 위해 모든 pose hypothesis들의 전체적인 context를 활용하여 보다 정확한 정보를 바탕으로 score를 측정하기 위해 모든 K개의 pose hypothesis 간의 2-level로 비교하는 strategy를 도입합니다. 모든 pose의 align 정보를 임베딩 하는 Feature \mathbf F를 포함하는 concat 되는 feature에 대해 multi-head self-attention이 수행되죠. 여기서 사용되는 이 \mathbf F를 시퀀스로 취급하여 다양한 길이를 가지는 K로 자연스럽게 일반화시킬 수 있었다고 합니다. 해당 과정의 효과는 그림(4)와 같이 계층적 비교를 수행하지 않은 결과는 좋은 결과가 2번째에 있는 반면 계층적 비교를 수행했을 때 가장 ranking이 높을수록 좋은 pose를 유의미하게 얻을 수 있었다고 합니다.
Contrast Validation
저자는 Pose ranking 네트워크를 학습하기 위해 pose-conditioned triplet loss인 식(11)을 제안하게 됩니다. \alpha는 contrastive margin을 의미하고 i^{+}, i^{-}는 각각 positive, negative 샘플들을 의미하게 됩니다. GT를 이용하여 ADD metric을 통해 결정됩니다. pose hypothesis에 대한 리스트들의 각 페어에 대해 해당 loss를 사용할 수는 있으나, 두 pose 둘 다 GT보다 먼 경우는 비교가 모호해집니다. 따라서, 비교를 의미 있게 만들 수 있을만큼 GT에 충분히 가까운 viewpoint의 positive sample만 사용합니다. R_{i}는 rotation에 대한 hypothesis, \bar R는 GT rotation, D(\cdot)는 distance를 계산하는 식이고 d는 threshold 입니다. 최종적으로 식(14)를 사용하여 앞서 언급한 triplet loss의 summation을 사용하게 됩니다.
Experiments
1. Dataset and setup
평가 데이터셋으로는 LM, LM-O, YCB-V, T-LESS, YCBInEOAT 총 5개의 데이터셋을 사용하여 성능을 리포팅하였습니다. YCBInEOAT는 tracking을 위해 첫 번째 저자가 제안한 벤치마크 데이터셋으로 보입니다. 셋업으로는 model-based, model-free 둘 다 수행합니다.
2. Metric
- AUC
- Recall(ADD)
- AR(VSD + MSSD + MSPD)
3. Pose Estimation Comparision
Model-free
먼저 model-free 실험은 LM, YCB-V로 실험을 진행하였는데요. 해당 논문의 비교대상인 FS6D 같은 경우 데이터셋에 대한 미세 조정이 필요하지만 FoundationPose의 경우에는 따로 미세조정도 할 필요도 없고, ICP 없이도 두 데이터셋에서 우수한 성능을 보여주고 있습니다.
Model-based
Model-based에 대한 실험은 BOP 챌린지의 코어 데이터셋인 LM-O, T-LESS, YCB-V에서 진행하게 됩니다. 2D detection은 모두 Mask R-CNN을 사용하였다고 합니다. 아무래도 supervision Detector를 사용하였기 때문에 기존 모델들은 novel object pose estimation 모델로, 기존의 방법론들보다 성능이 차이가 많이 나네요.
Pose Tracking Comparison
이제 tracking에 대한 비교인데요. YCBInEOAT 데이터셋에는 급격한 평면 외 회전(out-of-plane rotation), dynamic external occlusion 및 camera motion의 문제를 종합적으로 비교하기 위해 동적 로봇 조작 비디오가 포함된 YCBInEOAT 데이터셋에서 pose tracking 성능을 평가하게 됩니다. 표(4) 결과적으로는 모든 클래스에 대해서 우수한 성능을 달성한 결과를 보이고 있으며 FoundationPose는 end-to-end pose 추정 뿐만 아니라 tracking 까지 가능한 대단한 모델이네요. 표(5)는 YCB-V에서의 결과를 보여주고 있습니다. 기존의 방법론들은 동일한 인스턴스에 대해 동일한 CAD 모델이 있어도 model-free의 성능이 훨씬 뛰어난 모습을 보여주고 있습니다.
Ablation Study
마지막으로, 방법론 각각을 적용하였을 때에 대한 성능 비교입니다. 저자가 사용한 reference 이미지로는 그림(6)과 같이 실험을 통해 16장을 사용하였다고 합니다. 총 16개의 실험을 보여주는 표 체크 형태로 나타내지 않아 어떤 게 유의미한지 분석하기가 쉽지는 않네요. 모든 걸 다 쓰니까 성능이 좋다는 걸 본문에서도 영양가 없게 말하네요.. 마지막 행은InfoNCE와 Triplet를 비교한 것이고, 결과적으로 Triplet에서 좀 더 성능 향상에 효과가 있음을 의미합니다.
Conclusion
이번에는 FoundationPose라는 model-free 기반의 pose estimator를 살펴보았습니다. 이름에 걸맞게 대규모의 데이터셋을 생성하여 이를 기반으로 Neural Object Modeling을 통해 물체에 대한 렌더링이 가능하도록 representation을 학습하는 모델을 통해 3D 모델을 얻을 수 있었습니다. 이러한 3D 모델과 입력되는 이미지를 통해 coarse pose를 얻어 이후 refinement 네트워크를 통해 가장 적절한 pose를 추정하도록 학습을 시키는 모듈까지 제안하였습니다. 아쉬운 점은 detector가 SAM과 같은 foundation 모델이 아니라는 점이 아쉽네요. 생각해보면 SAM을 통해 나온 마스크들로부터 3D 모델과 매칭하는 과정에서 오래걸리긴 할 것 같네요. tracking에서는 그렇게 적절해 보이지는 않는 것 같습니다. 저자가 말하는 이번 논문의 한계로도 novel object detection을 수행하지 못한 걸 언급하긴 하네요.
이상으로 리뷰 마치도록 하겠습니다.
감사합니다.
안녕하세요 ! 좋은 리뷰 감사합니다.
Appearance Network의 입력으로 들어가는 geometry network의 중간 feature로부터 얻는 view direction d는 어떤 값으로 구성되어 있나요 ? direction이라고 함은 방향 벡터일까요 .. ?
그리고 NeRF 때 부터 이 ray라는 개념이 굉장히 헷갈리는데 depth 이미지의 특성 픽셀에서 나오는 ray r과 물체의 표면은 같은 공간 상에 존재할 수 있기 때문에 교차하는 지점을 구할 수 있는건가요 ??
3차원 공간의 표면과 depth 이미지의 픽셀로부터 나오는 ray는 어떤 메트릭을 통해 연결되는건지 궁금합니다.
감사합니다.
안녕하세요, 리뷰 읽어주셔서 감사합니다.
d는 특정 뷰포인트에서 바라보는 방향(viewing direction)으로 알고 있습니다. 방향 벡터로도 혼동될 수 있으나, 특정 방향을 나타내는 각(θ, φ)을 의미합니다.
NeRF에서 사용하는 ray에서도 intersection point에서 얻어지는 정보는 color로 정의되고, depth는 고려되지 않습니다. 여기서 color를 측정하는 기준은 denstity에 따라 달라졌었습니다. 이번 논문에서는 물체에 대한 surface를 SDF로 정의하여 이를 Neural Object Field에 대한 표현을 위해 NeRF에서 사용하는 개념을 이용하여 문제를 풀어나간다고 보시면 되겠습니다.
ray는 특정 픽셀에서 물체 표면까지의 선분이므로 어떻게 보면 점과 점사이의 거리를 구할 수 있겠죠. 이는 depth 자체가 카메라와 특정 픽셀까지의 거리를 나타내므로 동치로 볼 수 있겠습니다.
감사합니다.