
안녕하세요 PVNet, PVN3D에 이어서 FFB6D 논문으로 찾아왔습니다. 세 논문 모두 6자유도를 갖는 3차원 물체의 자세를 추정하기 위한 방법을 다룬 논문들입니다.
6자유도를 갖는 3차원 물체의 자세를 추정한다는 것은 모델 좌표계에서의 물체를 카메라 좌표계에서의 물체로 변환하는 회전 행렬과 평행이동 행렬을 구하는 것입니다. 로봇 제어나 증강현실을 구현할 때 2차원으로 입력 받는 영상에서 3차원 물체의 정확한 방향과 위치를 알고 이를 positioning 시킬 수 있는 것은 중요합니다.
RGBD 센서를 저렴하게 사용할 수 있게 되면서 3차원 물체의 자세를 추정할 때 깊이 정보를 가지고 2차원 RGB 이미지를 3차원 영상으로 재구성해서 자세 추정을 제안하는 연구가 많았는데요 (PVN3D도 그런 연구 중에 포함되겠습니다.) 본 연구는 기존의 RGB 이미지와 Depth 이미지를 어떻게 통합해야 더 정확도를 높일 수 있을지를 주안점으로 두고 제안된 논문입니다. 그럼 리뷰 시작하도록 하겠습니다.
Related Works
3차원 물체의 자세를 추정하는 연구들이 이전에도 여럿 존재했습니다. 앞선 연구들을 방법의 차이로 크게 나누자면 1) RBG 이미지만을 가지고 추정하는 방법 한 가지, 2) 포인트 클라우드를 구성해 추정하는 방법, 3) RGB이미지와 Depth 이미지를 함께 사용하는 방법으로 나눠볼 수 있겠습니다.
1. Pose Estimation with RGB Data
RGB 이미지로 부터 Hand-crafted features를 기반으로 학습한 후 직접적으로 자세를 추정하는 연구가 초기에 있었습니다. 딥러닝이 등장하고 부터는 CNN을 사용해서 이미지로 부터 특징을 추출한 후 이를 가지고 자세를 추정하기도 했습니다. 하지만 이러한 방법들은 조도 차이나 occlusion의 정도와 같은 여러 변화에 강인하지 못했고 따라서 일반화 되기에는 한계가 있었습니다. 그러다가 PVNet에서 제안됐던 것과 같이 RGB 이미지에서 물체의 키포인트를 추정한 다음 매칭되는 3차원 mesh model의 키포인트와의 회전, 이동 변환 관계를 추정하는 2D keypoint based 방법이 제안됐었고 이전 방법론보다 occlusion과 trucation같은 상황에서도 강인하며 더 정확하게 추정이 가능했습니다. 하지만 2D keypoint based 방법의 경우 사영하는 과정에서 정보 손실이 발생하기 때문에 2차원상의 오류를 3차원상으로 가져오게 되면 작았던 것도 3차원 공간에서는 큰 차이를 갖게 되므로 정확한 자세 추정을 하는데에 한계가 있었습니다. 그리하여 이후 연구는 RGB이미지를 3차원으로 재구성하려는 시도가 늘었습니다.
2. Pose Estimation with Point Clouds
깊이 정보를 토대로 포인트 클라우드를 구성한 다음 3차원 물체의 자세를 추정하는 방법도 제안됐었습니다. 간단하게 방법을 설명하자면 point cloud network로 point cloud의 특징을 추출한 후 3차원 물체의 바운딩 박스를 추정하는 식이었습니다. 포인트 클라우드란 3차원 센서를 가지고 촬영한 주변을 포인트의 집합으로 나타낸 것인데 point cloud를 구성하는 point들이 sparse하다는 점에서 일부 정보가 생략되게 나타나 객체의 형태를 정확하게 구현하지 못해 성능을 개선시키는 데 한계가 있었습니다.
3. Pose Estimation with RGB-D Data
본 연구에서 제안하는 FFB6D도 해당 방법론에 속한다고 할 수 있습니다. 해당 방법에서 앞선 연구로는 어떤 것이 있었느지 살펴보겠습니다. RGB 이미지를 가지고 자세를 추정한 다음 포인트 클라우드를 만들어 ICP나 MCN의 방법으로 자세를 조정해서 정확도를 올리는 방법이 있었습니다. 하지만 추가적인 시간이 소요된다는 점과 end-to-end 하지 않다는 단점을 가집니다. 또 다른 연구로는 RGB, Depth 이미지에서 각각 특징을 따로 추출한 후 특징 추출이 완료되면 자세 추정을 위해 퓨전하는 방법이 있었습니다. PVN3D도 이러한 방법으로 제안된 연구입니다. 이 경우 두 네트워크 간의 정보 교환이 특징을 추출하는 과정에서 일어나지 않기 때문에 자세 추정의 정확도를 향상시키는데에는 한계가 있었습니다. 본 연구에서는 특히 두 가지 RGB, Depth 이미지를 독립적으로 특징 추출한 것을 단순하게 통합해서 사용하는 방법의 한계를 지적하며 이를 개선할 방법을 제안합니다.
Proposed Method
우선 다음은 저자가 RGB 이미지와 Depth 이미지의 특징을 독립적으로 추출해서 물체의 자세를 추정한 방법이 갖는다고 한 한계입니다. RGB 이미지에서 특징 추출을 할 때 생김새가 비슷한 물체 간의 뚜렷한 차이를 알기 어렵기 때문에 구분이 쉽지 않다는 단점이 있습니다. 반대로 Depth 이미지에서의 특징 추출을 할 떄면 빛을 반사하는 표면을 가진 물체에 대해서 해당 영역이 담겨지지 않아 물체의 정확한 형상이 잡히지 않을 수 있단 문제가 있습니다. 두 이미지를 각각 따로 특징 추출을 하고 최종 레이어에서만 퓨전하는 방법은 이러한 이유로 두 이미지를 함께 사용한다고 해도 정확도를 더 개선시키는 데에 한계가 있었습니다.
논문 저자는 이를 개선하는 방향으로 두 이미지에서 추출되는 특징의 특성을 파악해 둘 간 보완이 되도록 두 네트워크 간 정보를 교환하는 방법인 Full Flow Bidirectional Fusion Network를 새롭게 제안합니다.
다음은 기존의 퓨전 방법과 저자가 새롭게 제안한 퓨전 방법을 비교하기 위한 figure입니다. 그림을 보시면 둘 간의 차이를 명확히 알 수 있습니다.

Overview of Full Flow Bidirectional Fusion Network
1. FFB6D
본 논문은 RGB, Depth 이미지에서 추출된 정보를 서로 보완할 수 있도록 정보를 두 모듈 간 정보를 공유하는 프레임워크를 제안합니다. RGB, Depth 이미지는 각각 CNN, PCN (Point Cloud Network)로 부터 특징 추출이 이뤄집니다. (여기서 Depth 이미지가 직접 PCN에 입력으로 들어가지는 않고 Depth 이미지를 가지고 만든 Point Cloud를 입력으로 전달합니다) 이때 각 모듈에서의 각 인코더, 디코더 레이어마다 출력 특징맵을 퓨전한 후 다음 입력으로 전달하는 방식으로 설계하였습니다. 이때 퓨전이 RGB에서 Point Cloud 한 방향으로만 이뤄지는 것이 아닌 point cloud에서 RGB로도 이뤄지기 때문에 Bidirectional 하다고 합니다. 또한 양방향의 퓨전이 각 네트워크에서 전 레이어 (인코더와 디코더 모두에) 일어나기 때문에 Full Flow하다고도 표현됩니다. RGB 이미지에서는 외관에 보여지는 appearance features를 Depth 이미지와 이로부터 구성한 포인트 클라우드로 부터는 geometry features를 얻을 수 있습니다. 본 연구의 취지는 각 네트워크에서 추출되는 서로 다른 특성의 특징들을 서로 이용해 각자에서의 풍부하고 정확한 특징을 추출을 하게 한다는 것에 있습니다. 이로써 추후 키포인트를 추정할 때도 보다 정확하게 추출할 수 있게 하는 것이 해당 연구의 목표입니다. 두 이미지의 특징을 퓨전한 다음 3차원 키포인트를 검출하고 이를 이용해서 최종적인 물체의 자세를 추정하는 과정은 PVN3D와 동일합니다.
2. SIFT + FPS
FPS는 PVNet에서 제일 먼저 제안되었던 방법으로 mesh 모델에서 키포인트를 선정하기 위한 방법이었습니다. 이미지에서 물체의 키포인트와 mesh model 간의 키포인트를 대응시켜 점간의 변환 관계를 추정하면 결국 물체의 자세를 추정하게 되는 셈이었습니다. 그렇게 하기 위해서는 사전에 mesh model의 키포인트는 GT로 주어져야 합니다. PVNet 이전 연구에서는 mesh model의 바운딩 박스의 8 꼭지점을 키포인트로 설정하고 이미지에서도 이와 대응되는 8개의 키포인트를 추정했었습니다. 하지만 바운딩박스의 꼭지점 같은 경우는 물체 자체의 특징을 가지고 추정되는 점이 아니라 배경 이미지에서 추정되는 점이라 cluttered 배경에서와 같은 환경에서 정확히 추정하는데 어려움이 있습니다. FPS(Farthest Point Sampling)는 물체 표면상의 키포인트들 중 제일 고르게 분포하도록 비슷한 거리 간격으로 떨어져있는 점들을 키포인트로 취하는 방식입니다. 간단하게 방법을 설명 드리자면 우선 model의 중앙점에 대해서 제일 거리가 먼 (model 표면상에 있는 점들 중) 포인트를 선택해 키포인트 집합에 추가합니다. 총 원하는 개수의 키포인트에 도달할 때 까지 키포인트 집합 내부의 점들과 제일 거리가 먼 점을 선택해 추가해 나갑니다. 이 방법을 사용했을 때 키포인트 모두가 물체 표면상에 고르게 분포하기 때문에 물체의 형상을 보다 정확하게 파악할 수 있다는 장점이 있었습니다. 이 방법도 한계가 있었는데요 키포인트를 선정할 때 키포인트들 간의 거리를 구해 가장 먼 점을 취하는데 키포인트가 편평한 면 위의 점이라면 주변 포인트들과 구분이 어려워 정확하게 키포인트의 위치를 알기가 어렵다고 합니다. 그래서 FPS 적용하기 전에 2차원 이미지에서 SIFT로 특징점을 추출한 다음 이를 3차원 영상으로 lift up해 특징점들 가운데에서 FPS로 키포인트를 선택하는 방법을 제안했습니다.
본 연구에서 제안하는 FFB6D의 학습 pipeline은 다음과 같습니다. 그림과 같이 총 3단계로 퓨전 네트워크를 진행하는 1) Feature Extaction module, 2) Keypoint Detection module (키포인트 검출과 동시에 Semantic Segmenation과 center point detection이 함께 진행됩니다. 앞서 다뤘던 PVN3D에서 Segmenation을 키포인트 추정 과정에서 함께 진행하면 각 포인트가 속하는 Instance 정보를 가지고 두 물체를 더 잘 구분할 수 있고 더 정확하게 키포인트를 추정할 수 있다고 설명했었습니다. ), 3) 6D Pose Estimation module로 나눠볼 수 있습니다. 각 모듈에 대해서 자세하게 설명을 드리도록 하겠습니다.

1) Feature Extraction Module
해당 모듈은 각 RGB 이미지와 Depth 이미지로 부터 구성한 포인트 클라우드에서 각 영상의 특징을 추출하는 단계입니다. RGB 이미지는 CNN에서 appearance 특징으로 구성된 RGB map이 추출되고 포인트 클라우드에서는 geometry 특징들로 구성된 point cloud feature map이 추출됩니다. 이때 저자가 제안하는 Full Flow Bidirectional Fusion의 방법으로 각 영상에서 추출된 특징이 퓨전돼서 다음 레이어의 인풋으로 전달됩니다. RGB map의 특징을 point cloud feature map에 퓨전하는 모듈을 pixel-to-point라고 지칭하고 반대로 point cloud map의 특징을 RGB map에 퓨전하는 것을 point-to-pixel 모듈이라고 지칭합니다. 그리고 단순히 두 네트워크에서의 도출되는 피처맵을 concatenate 하는 것이 아니고 새로운 방식을 제안했다는 것이 특징입니다.
각 퓨전 모듈에서의 퓨전 과정을 자세하게 살펴보겠습니다. 아래의 figure를 참고하시면 이해가 쉽습니다.

pixel-to-point fusion
다음은 RGB map의 특징을 Point Cloud map에 퓨전하는 pixel-to-point 퓨전에 대해 내용입니다. 우선 각 네트워크의 한 레이어 (인코더 또는 디코더)를 통과하고 나온 RGB map과 Point Cloud Featue map은 각각 3차원 좌표를 갖는 XYZ map과 point cloud로 구성됩니다. 둘 간의 포인트들은 서로 대응되게 됩니다. 다음으로 point cloud의 각 포인트에 대응되는 점들 (K_r2p nearest neighbors)을 XYZ map에서 찾습니다. 그리고 각 K_r2p neighbor이 되는 XYZ map 상의 점들에 대한 feature를 RGB map에서 가져와 max pooling의 방법과 MLP에 통과시키는 방법으로 통합해 Integrated feature map을 생성합니다. (이는 point cloud의 모든 point에 대해서 동시에 이뤄집니다. ) 그렇게 얻게된 Integrated feature map을 기존의 point cloud feature map과 concatenate해 이를 PCN의 다음 입력으로 전달합니다.


point-to-pixel fusion
point-to-pixel의 방법도 nearest neigbor를 XYZ map이 아닌 point cloud에서 찾는다는 점 그리고 그리고 point cloud feature map의 특징이 max pooling을 통해 통합되고 RGB map에 concatenate 된다는 점 즉 퓨전되는 방향만 반대고 전체적인 과정은 동일합니다.

저자는 이런 과정으로 퓨전했을 때 각 map에서 서로의 appearace feature, geometry feature를 사용해 특징 추출 과정에서 보완이 된다고 설명합니다.
2) 3D Keypoint Detection module
CNN, PCN을 통과하고 나온 각 feature map을 concatenate 한 후 point cloud로 3차원상에 재구성해 키포인트 예측 모듈과 세그멘테이션 모듈에 전달해 3차원 상의 키포인트를 예측합니다. keypoint detection 방법은 PVNet, PVN3D에서와 동일하게 각 포인트에서 추출된 features를 가지고 각 포인트가 키포인트를 가리키는 방향을 나타내는 유닛 벡터를 가지고 랜덤하게 샘플링된 두 포인트에서의 벡터 교점을 가설로 세우고 각 가설에 대한 점수를 매긴 후 (해당 가설(키포인트 후보가)이 얼마나 다른 포인트에 대해서 만족되는가를 확인합니다) 모든 가설을 각 점수로 가중하는 식으로 키포인트의 분포를 계산해 최종적인 키포인트 위치를 결정합니다. Featue Extraction module에서 인코더를 통해 semantic한 특징을 추출하며 feature map의 크기가 작아지고 여러 레이어의 디코더를 통과해 다시 원래의 이미지 크기로 복원이 되기 때문에 피처맵의 각 픽셀이 원래 RGB 이미지에서의 픽셀들과 그대로 대응된다고 볼 수 있습니다. FPS8의 경우 한 물체에 대해서 8개의 키포인트를 두겠다는 의미이고 이런 경우 해당 voting 과정을 8번 반복한다고 보면되겠습니다.
그리고 PVN3D에서와 동일하게 point cloud에서 추정한 키포인트와 mesh model에서 결정된 키포인트를 GT 자세 (GT R, t)로 변환한 키포인트들 간의 오프셋을 loss로 두어 이를 줄이도록 학습이 됩니다.
3) 6D Pose Estimation
논문에서 새롭게 제안한 SIFT + FPS로 mesh model의 키포인트를 결정하고 least-squares fitting 의 방법으로 point cloud 상의 3차원 키포인트 간의 변화 관계 (R, t 변환 행렬의 파라미터들) 를 추정합니다. p_i는 mesh model에서의 GT 키포인트이고 p_i^*는 모델이 예측한 키포인트입니다.

Experiments & Ablation Studies
저자는 제안한 방법론의 성능 평가를 위해 YCB-V, LINEMOD, Occlusion LINEMOD 세가지 데이터셋에 대해서 성능을 평가했습니다 하나씩 살펴보도록 하겠습니다. 우선 각 데이터셋에 대해서 설명을 하고 넘어가겠습니다.
- YCB-V 데이터셋은 21개의 물체가 촬영된 92개의 동영상으로 구성된 데이터셋으로 일부 물체가 occlusion 되어서 나타납니다.
- LineMOD는 6D 자세 추정 task에서 성능 확인하기 위해서 늘 사용되는 대표되는 데이터셋입니다. 텍스처 정보가 적은 13개의 물체를 촬영한 13개의 영상으로 구성돼 있고 이 데이터셋은 하나의 영상에서 하나의 물체만을 조명하기 때문에 occlusion 상황은 배제돼 있습니다.
- Occlusion LineMOD는 LineMOD 데이터셋에서 한 영상에 여러 물체를 함께 조명해 heavily하게 occlusion된 상황을 만들어 자세 추정이 쉽지 않은 데이터셋입니다.
평가 지표는 PVNet과 동일합니다. LineMOD, Occlusion LineMOD에 대해서는 ADD(-S)를 YCB-V 데이터셋에 대해서는 ADDS AUC를 평가지표로 사용합니다. 예측 R, t와 GT R, t로 mesh model에 변환을 적용하고 변환된 (회전하고 평행이동한) model에서의 점간의 거리의 평균을 가지고 계산한 ADD(-S)에 대해서 해당 거리가 물체의 지름의 10% 보다 작다면 정답 예측이라고 판단합니다. (symmetric한 물체는 한 점에 대해 대응되는 점이 하나로 특정지어지지 않을 수 있는데 이 때 점간의 거리가 제일 짧은 것에 대해서 판단합니다.) 그리고 YCB-V 데이터셋에 대해서는 이전 모델들에서 해당 데이터셋에 대한 평가지표로 사용했던 ADD(-S)를 가지고 구한 AUC를 그대로 사용합니다.


다음은 이전 모델과 본 연구에서 제안하는 FFB6D의 자세 추정 정확도를 평가한 실험 결과를 살펴보겠습니다.

해당 결과는 YCB-V 데이터셋에 대해서 이전 모델들과 성능을 비교한 결과입니다. 이전 모델보다 높은 성능을 보였습니다.

최종적인 자세를 조정하는 과정을(ICP) 추가해주어도 FFB6D가 더 정확했습니다.
다음은 YCB-V 데이터셋에 대해서 occlusion의 정도를 늘리면서 성능 하락 추이를 확인할 수 있는 표입니다. 이 표는 PVN3D에서도 동일하게 실험 결과로 제시됐었습니다. PVN3D가 기존 모델 보다 성능 하락 폭이 크지 않았었는데 FFB6D가 그 보다 훨씬 더 작다는 것을 확인할 수 있었습니다. PVN3D과 FFB6D 모두 3차원 상에서 키포인트를 예측해 이를 가지고 물체의 자세를 추정한다는 것과 3차원 키포인트 추정 단계에서 키포인트 검출 뿐만 아니라 Semantic Segmenation과 Center point 검출도 함께 하도록 설계되었다는 점에서 상당히 유사하지만 둘은 RGB 이미지와 Depth 이미지를 퓨전하는 방법이 달랐었습니다. 그리고 아래의 지표로 알아볼 수 있듯 본 연구에서 제안한 Full Flow Bidirectional Fusion 방법이 occlusion 상황에서도 PVN3D 보다 더 높은 정확도를 유지함을 확인할 수 있습니다.

다음은 LineMOD와 Occlusion LineMOD에 대해서 기존 연구들과 성능을 비교한 결과입니다.


해당 데이터셋에 대한 실험에서도 대체적으로 앞선 모델보다 성능이 좋았습니다.
다음은 Ablation Study에 대한 실험 결과입니다. Ablation Study를 통해 저자는 본 연구에서 제안한 방법론 두가지가 실제로 성능 향상에 영향을 준 것인지를 확인하였습니다.

우선 Full Flow Fusion의 효과를 확인하기 위해서 Fusion하는 영역을 달리한 여러 Fusion Stage에 대해서 실험 결과를 비교해보았습니다. Fusion 하지 않은 경우, 인코더에서만 혹은 디코더에서만 퓨전을 적용한 경우, DenseFusion으로 최종 레이어의 출력맵만을 퓨전한 경우에 대해서 실험을 따로 진행했었습니다. 실험 결과 위 방법 중에서는 인코더에 대해서만 퓨전을 적용했을 때가 제일 성능이 좋았습니다. 여기서 더 나아가 인코더와 디코더에서 둘 다 퓨전을 했을 때가 제일 높은 성능을 냈습니다. 이를 통해 인코더와 디코더 둘 다 퓨전을 하는 Full Flow Fusion 방법이 자세 추정의 정확도를 높이는 데 크게 영향을 주었음을 결론 낼 수 있었습니다. 여기에 Dense Fusion까지 적용해도 큰 효과는 없어서 논문 저자는 인코더와 디코더에만 퓨전을 적용하는 방법을 선택하였습니다.

다음으로는 Bidirectional 하게 퓨전한 것이 성능 향상에 도움이 되었는지를 확인하기 위한 실험입니다. 실험한 결과, 퓨전을 아예 하지 않은 것보단 단 방향으로라도 퓨전한 것이 더 좋은 결과를 보였지만 두 방향으로 퓨전을 동시에 진행한 방식이 모든 것 중 제일 성능이 좋았습니다.

다음 실험은 SIFT+FPS에 대해 화인하기 위한 실험입니다. PVNet과 PVN3D에서 사용하던 FPS8 보다 정확도가 높게 나왔음을 확인할 수 있습니다. 키포인트를 12개 선택하는 S-F12 방법도 함께 평가가 됐었는데 S-F8와 성능 차이가 크지 않고 오히려 조금 낮아 연산하는데 복잡도를 줄이기 위해 8개를 최적 개수로 정한 것 같습니다.
정리하자면 앞선 연구로 실험한 결과 FFB6D 가 3차원 물체의 자세 추정 태스크에서 SOTA 성능을 달성했음을 확인하였습니다. 그리고 이어지는 Ablation study로 본 연구에서 제안하는 퓨전 네트워크와 , SIFT+FPS가 성능 향상에 영향을 주었음을 확인할 수 있었습니다.
Conclusion
RGBD 센서에 대한 접근성이 확대되면서 2차원 이미지에서 키포인트를 추출하던 것을 3차원상으로 옮겨와 진행했습니다. 하지만 기존 연구같은 경우 두 이미지간의 특징을 적절히 서로 활용하지 못한다는 한계를 가졌었습니다. 그리하여 논문 저자는 RGB 이미지와 depth 이미지를 퓨전하는 방법으로 Full Flow Bidirectional Fusion Network와 GT 키포인트를 추정하기 위한 방법으로 SIFT-FPS를 제안했습니다. 실험 결과 기존 연구에서 제안한 것들보다 성능이 좋다는 것을 확인하였습니다. 그래서 본 연구에서 제안한 방법이 3차원 물체의 자세를 추정의 정확도를 향상시키는 방법으로 결론 지어볼 수 있을 것 같습니다.