2D-3D matching 기술 및 광고판/간판 검출 기술 연구 - 연구과정(2)

yujin399 21.08.30
377 2 0

1. 2D-3D matching model

연구의 필요성

본 연구에서 개발하는 기술은 실내 로봇(로봇청소기, 서비스 로봇, 드론 등), 자율 주행 자동차, 실내 보행자 길 안내 서비스, AR 기반 Smart glass 위치 실시간 추정 및 메타버스 등에 활용될 수 있는 미래 지향적인 기술입니다.

스크린샷 2021-08-25 오후 9.02.17.png

또한 해당 기술은 카메라 pose 추정 과정에서 matching 단계의 효율성을 위해 필요합니다. matching 단계는 서버로 전달된 이미지의 2D 특징점DB 이미지의 3D 특징점의 pair을 만들어 주는 단계입니다.

기존 특징점 matching 모델은 2D-2D matching 이후, 2D image 내 특징점과 일치하는 3D 특징점 정보를 활용하여 matching을 해주는 단계를 거치는데, DB 내 2D 이미지들이 상당 부분 겹쳐 있어 특징점이 중복되어있기 때문에 비효율적인 연산이 발생합니다.

저희 팀은 2D-2D matching을 생략하여 실시간 처리 및 DB 효율성 증대를 기대할 수 있는 2D-3D 특징점 matching model을 개발하는 것을 목표하고 있습니다.

 

Data

스크린샷 2021-08-25 오후 9.06.13.png

  • Query : 2d point좌표 (u,v) / 2d point descriptor vector(256d)
  • DB : 3d point좌표 (x,y,z) / 3d point descriptor vector(256d)
  • Match : query image의 2d points와 DB image의 3d points의 matching 정보

 

Model

  • base model : SuperGlue

SuperGlue는 Image-to-Image matching model로, 같은 공간 내 다른 위치에서 찍은 두 이미지의 특징점을 서로 매칭해주는 모델입니다.

스크린샷 2021-08-25 오후 10.11.09.png

SuperGlue에서는 특징점을 node로 정의하고, 모든 node를 연결한 edge를 가진 graph를 구성하여 Graph Neural Network을 통해 학습합니다.

Untitled

SuperGlue는 각 이미지에서 추출된 특징점 좌표(location) 및 descriptor을 입력으로 받고, 두 이미지의 각 특징점이 서로 matching될 확률 값을 반환합니다.

➡️ 본 연구에서는 이러한 기존 모델을 2D image to 3D point cloud matching task에 맞춰 수정했습니다.

 

  • 3D Point Preprocessing

    DB에 있는 3D 좌표값은 GPS에서 사용하는 WGS84(World Geodetic System 1984)을 사용합니다.

    따라서 데이터마다 좌표 값의 범위가 달라 scaling과 reference 좌표 정의가 필요합니다.

    이를 위해 본 연구에서 다음과 같은 3D 특징점 좌표값의 전처리 방법을 사용합니다.

    ➡️ 각 데이터의 reference 좌표를 x,y,z의 평균으로 정의하고, reference 좌표로부터 +-10 을 boundary로 지정하여 filtering. (아래 그림의 초록색 박스 영역)

    ➡️ filtering된 3D 특징점들의 좌표값을 10으로 나누어 +-1 범위로 normalize.

    Untitled

    상기 이미지는 3D 특징점들을 (z좌표를 제외하고) 2D 평면에 시각화한 그림입니다.

    boundary 안에 ground truth 특징점들이 대다수 포함되어있음을 확인할 수 있습니다.

 

  • Keypoint Encoder

    Keypoint Encoder은 특징점의 location과 descriptor의 정보를 결합하는 단계입니다.

    ✅ 기존 SuperGlue의 Keypoint Encoder은 두 이미지 동일하게 특징점의 location 정보(x,y,confidence)를 MLP로 embedding 한 후 descriptor와 합치는 encoder을 사용하였습니다.

    Untitled

    ✅ 본 연구에서 변경한 Keypoint Encoder은 confidence를 input으로 넣는 대신 특징점들을 사전에 지정한 threshold값을 사용하여 filtering하였습니다. 또한 2D 특징점의 (x,y)를 embedding하는 encoder와 3D 특징점의 (x,y,z)를 embedding하는 encoder를 각각 사용하였습니다.

    3C68CD1D-F7D2-4DCB-9BB5-95C0DE262196.jpeg

 

Output

✅ 실험환경

  • GPU : Tesla K80

9FD15ABC-3346-4B39-97D2-7C523D569DB0.jpeg

본 연구의 evaluation metric인 precision과 recall은 1에 가까운 좋은 성능을 냈습니다.

 

Future Works

  • Clustering 단계 추가

    3D point normalization 방법을 적용했을 때 일부 데이터에서 지정한 boundary 안에 특징점이 적게 포함되는 문제가 발생했습니다.

    Untitled

    이는 query 이미지의 2D 특징점과 매칭될 3D 특징점 후보군을 추출하는 단계에서, 적절하지 못한 특징점들이 후보군에 포함된 경우 발생합니다.

    특징점들의 cluster을 추출하는 단계를 추가하여 cluster 내에서 3D point normalization을 진행한다면, 정확한 boundary를 지정할 수 있습니다.

    Untitled

 

  • Inference 시간 및 메모리 축소

현재까지 연구한 model로 실험했을 때 inference 시간과 메모리는 다음과 같습니다.

2DF5E324-E932-4EBC-8468-514FD6D376B3.jpeg

본 연구는 실시간 서비스를 위해 사용되는 Memory와 Processing time을 최대한 줄이려합니다.

기존 SuperGlue model은 모든 특징점들을 연결한 edge에 대해 aggregation을 진행하기 때문에 연산량이 많습니다. 향후 연구에서 저희는 가까운 특징점들의 edge를 sampling하고, sampling된 edge에 대해 aggregation을 하여 연산량을 줄일 예정입니다.

 

 

2. Panel Detection

연구의 필요성

광고판 이미지의 영향으로 다른 장소의 사진임에도 불구하고 이미지 후보군으로 추출되는 문제가 발생합니다. 비슷한 광고판이 여러 장소에 존재하여, 다른 장소임에도 비슷한 장소로 인지되고, 결국 다른 장소에 해당하는 image가 후보군에 포함됩니다.

Untitled

이러한 문제를 해결하기 위해, detection 모델로 이미지 내 광고판을 detect하여 해당 영역 제거 후 image 후보군을 추출할 예정입니다.

Untitled

 

앞서 보았던 그림에서 Panel Detection 연구의 필요성을 확인할 수 있습니다.

Query Image가 Input으로 들어왔을 때, 이와 비슷한 이미지 후보군을 DB에서 추출하는 과정이 선행됩니다.

Untitled

비슷한 광고판/간판으로 인해 DB이미지의 후보군이 적절하지 않게 추출되었을 때, 오른쪽 상단에 있는 3D 특징점 클러스터와 같이 적절하지 않은 특징점들이 포함됩니다. 이러한 문제를 막기 위해 Panel Detection이 선행되어야 하는 것이며, 이는 곧 저희가 개발 중인 연구의 성능을 높이기 위한 필수적인 사전 처리과정이 될 것입니다.

 

Model

Panel Detection Model의 Base Model은 YOLOv4입니다.

YOLOv4는 One-Stage Detector 중 대표적인 모델로, 이미지 내 탐지하고자 하는 물체에 Bounding Box를 그립니다. 속도가 빠르고 정확해 detection 분야에서 좋은 성능을 보이고 있습니다.

 

Data

  • panel dataset

    ✅ 512*512 size의 5884장으로 구성되어, 올바른 형태의 광고판 외에도 비스듬하거나 가려진 광고판이나 야경의 광고판 등 다양한 형태의 광고판이 포함되어 있습니다.

    ✅ ground-truth : panel의 영역을 표시하는 point좌표가 포함되어 있는데, 다른 물체에 의해 가려진 부분은 제외한 영역에 대한 좌표입니다.

스크린샷 2021-08-27 오후 8.45.58.png

 

  • synthetic data

    총 세 종류의 데이터 생성

    스크린샷 2021-08-27 오후 9.02.25.png

    ✅ 배경이미지 + 광고판(panel dataset)

    ✅ 배경이미지+ 광고 느낌의 이미지

    ✅ 단색배경 + 광고판(panel dataset)

    모두 광고판/광고이미지를 배경 이미지에 삽입할 때 랜덤하게 [위치,크기,회전,시점] 변화를 주었습니다.

 

Output

스크린샷 2021-08-27 오후 9.06.20.png

👍🏻 간판 테두리가 선명한 이미지의 경우, 간판이 기울어져 있어 detect하기 어려운 이미지에서도 잘 detect되었지만, 간판이 매우 작거나, 배경과 비슷하여 구분이 제대로 되지 않을 경우, 또는 간판이 너무 커 간판의 경계가 이미지 안에 다 들어가지 않는 경우에는 detect되지 않았습니다.

 

Future Works

  • Class 제거

    panel만 detect하면 되기 때문에 클래스의 개수가 하나라고 할 수 있습니다. 따라서 detect된 물체가 패널인지 아닌지를 굳이 따질 필요 없이 objectiveness에만 의존하여 물체(결국, panel을 뜻합니다.) 유무만의 고려하여 학습을 진행할 수 있을 것입니다. 이는 2 stage detector에서 첫번째 stage(regional proposal)만 이용한 것과 비슷한 의미를 가집니다.

    스크린샷 2021-08-28 오전 12.47.13.png

 

  • Bounding Box 재정의 (x, y, w, h) → (x, y, u1, v1, u2, v2, u3, v3)

    ✅ bounding box를 이용하여 detect하는 기존 모델의 경우 좌측 상단 좌표(x,y)와 가로,세로 길이(w,h)를 라벨로 두고 학습하여 직사각형 형태의 bounding box가 생성되었습니다. 이때, 아래와 같이 비스듬한 간판을 detect하여 bounding box 영역을 처리한 후 2D-3D matching에서 query이미지에 대한 후보군 이미지를 탐색하면 panel 외 다른 영역도 제거되어 후보군 탐색에 영향을 끼칠 수 있기 때문에 정확히 panel의 영역만 detect하여 제거하는 작업이 필요합니다.

    ✅ 좌측상단 좌표(x,y)와 나머지 3개의 꼭짓점을 향하는 벡터 (u1-3, v1-3)를 label로 지정하여 학습 후 panel을 detect하면 정확하게 panel의 영역만 detect되어 올바르게 제거할 수 있을 것입니다.

    스크린샷 2021-08-28 오전 12.50.56.png

 

  • Loss Function 변경 (BCE Loss → Focal Loss)

    ✅ One-Stage Detector에서는 Class Imbalance 문제가 자주 발생합니다. Class Imbalance란, detector 학습에서 foreground와 background의 class가 극단적으로 imbalance한 경우를 뜻합니다. 아래와 같은 상황이 class imbalance한 상황으로, 학습 중에 발생 시 모델이 제대로 학습되지 않습니다.

    스크린샷 2021-08-28 오전 1.04.03.png

    ✅ Focal Loss는 Easy Sample에는 작은 가중치를 부여하고, Hard Sample에는 큰 가중치를 부여하여 Easy Negative가 학습의 Loss에 주는 영향을 줄입니다. panel detection model을 train하는데 사용한 dataset의 경우 background와 panel 비중에 차이가 있어 해당 loss를 적용하기 적합합니다.

    스크린샷 2021-08-28 오전 1.10.41.png

 

 

연구 과정에서 다양한 시행착오를 겪어보면서 많이 배우고 성장한 것 같습니다!

주신 피드백 참고하여 최종점검때는 더 좋은 결과 보여드리도록 하겠습니다😁

yujin399 님의 최신 블로그

더보기

관련 블로그