Introduction
![썸네일용](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252F84761c67-a309-40fd-be0c-604e6cf71f76%252FUntitled.png%3Ftable%3Dblock%26id%3D2310b05e-a425-4512-8371-034a53b2b477%26cache%3Dv2&w=1200&q=75)
Interest points란 같은 장면, 또는 물체를 다른 각도와 환경에서 촬영한 서로 다른 이미지에서 반복되는 점들을 말합니다. 이미지로부터 interest points를 뽑아내는 기술은 Simultaneous Localization and Mapping (SLAM), Structure-from-Motion (SfM), 카메라 calibration, 그리고 image matching까지 여러 필드에서 사용되는 첫번째 단계입니다.
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252Fbcc78eb2-f1f6-4920-b89e-08849f89a61b%252FUntitled.png%3Ftable%3Dblock%26id%3D885db856-2149-44d0-baad-4b426ead33f8%26cache%3Dv2&w=1080&q=75)
Human pose estimation과 같은 문제는 많은 양의 이미지에서 사람 관절의 위치를 라벨링하여 데이터를 구축한 후 supervised learning으로 해결할 수 있었습니다. 하지만 위에서 설명한 일반 이미지의 interest points를 찾는 것은 사실 ill-defined 문제일뿐 아니라 라벨링하기에도 너무 많기 때문에, supervised learning으로 직접적으로 해결하기 어렵습니다.
기존에도 이 문제를 neural net을 사용하여 해결하고자 하는 시도는 있었지만, interest point와 descriptor 둘 중 하나에 제한적이거나, 다른 알고리즘으로부터 만들어진 GT로 supervision이 필요하거나, 전체 이미지에 convolutional 하지 않고 patch-based인 한계 등이 여전히 남아있었습니다.
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252F2190f101-29ea-4ef0-af43-3ddf54c6ec37%252FUntitled.png%3Ftable%3Dblock%26id%3D9896769c-ec38-41f0-9f12-cf2a77984e78%26cache%3Dv2&w=1920&q=75)
본 논문에서는 이러한 문제를 해결하기 위하여 self-supervised learning 기법을 도입하였습니다.
(a) 각종 도형들과 기하학적인 패턴으로 만들어진 합성 데이터셋으로부터 corner를 검출하는 interest point pre-training 단계로 base detector를 만듭니다.
(b) MS COCO와 같은 일반 이미지로 unlabeled image에 base detector를 적용하여 pseudo-GT를 만드는데, 이 pseudo-GT의 recall을 높이기 위하여 같은 이미지에 여러번 random homography를 적용한 결과를 조합합니다.
(c) 만들어진 pseudo-GT를 사용하여 interest point loss를, 그리고 같은 이미지를 warping한 이미지와의 매칭을 사용한 descriptor loss를 사용하여 최종적인 SuperPoint를 학습시킵니다.
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252F682469e2-8245-4b2c-976b-77e5da2309ca%252FUntitled.png%3Ftable%3Dblock%26id%3D58847283-0ba4-49be-8f40-c73b20554792%26cache%3Dv2&w=3840&q=75)
Proposed Method
- SuperPoint Architecture
- Shared Encoder: 3개의 non-overlapping max-pooling을 가지는 VGG-style 인코더를 사용하여 spatial 크기를 /8로 낮춥니다. Encoder의 결과물인 feature map의 각각의 위치를 cell 이라고 부르겠습니다. 각각의 cell은 8x8 pixel에 대응합니다.
- Interest Point Decoder: 이 부분은 크기의 feature map을 reshape하여 크기의 결과물로 만듭니다. Reshape은 pixel shuffle 방식을 사용합니다. Feature map 채널의 수가 8x8=64 가 아니라 65인 이유는 "no interest point"을 의미하는 dustbin 채널을 하나 추가하였기 때문입니다.
- Descriptor Decoder: 연산량을 줄이기 위해 /8 크기에서 계산을 하고, bi-cubic interpolation을 통해 크기를 키웁니다. Description의 normalization을 위해 L2-normalization을 합니다.
- Loss Functions
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252Fb4ac7f72-4d38-4704-8e50-770601dd5285%252FUntitled.png%3Ftable%3Dblock%26id%3D4be9caf6-7f8a-4854-85cf-a5e82429001b%26cache%3Dv2&w=1920&q=75)
구조는 Mask R-CNN과 유사하게 shared encoder (feature extractor)와 interest point decoder 및 descriptor decoder의 두 multi-head 구조로 이루어졌습니다.
Loss function은 interest point에 대한 loss와 descriptor에 대한 loss의 합으로 이루어집니다.
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252F925db992-79a1-4695-812a-b3395b25a783%252FUntitled.png%3Ftable%3Dblock%26id%3Df36f11a8-a72a-4990-8a50-b444ded49d50%26cache%3Dv2&w=1200&q=75)
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252Fc4ea7fe6-75b2-4cc4-92ad-35d3ccb33399%252FUntitled.png%3Ftable%3Dblock%26id%3D176823f0-b551-4fea-95b8-b005c4702f9f%26cache%3Dv2&w=1200&q=75)
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252F1060d566-dddb-4137-bd02-44499a4118ea%252FUntitled.png%3Ftable%3Dblock%26id%3D4d39ff31-273d-4253-8475-12686b1b273a%26cache%3Dv2&w=1080&q=75)
는 cell의 중심점을 의미합니다. 즉 은 homography 관계의 두 feature map 각각의 cell들의 correspondence를 의미합니다.
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252Fa901c5cd-e594-4ab6-aa47-2c8cc52bc737%252FUntitled.png%3Ftable%3Dblock%26id%3D81960713-50a3-4764-8dc2-76c52de06375%26cache%3Dv2&w=1200&q=75)
- Synthetic Pre-Training
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252F304d49ad-c765-4ab8-8660-ba39915687be%252FUntitled.png%3Ftable%3Dblock%26id%3Db88fda99-8e02-4819-a85c-da045ddbb99f%26cache%3Dv2&w=3840&q=75)
Interest point를 라벨링한 대규모 데이터셋은 없기 때문에, 학습을 위하여 우선 합성 데이터셋으로 모델을 pre-training합니다. 이 데이터셋의 이미지들은 사각형, 삼각형, 직선, 그리고 타원들로 이루어져있습니다. 이 기하학적인 도형들의 Y-junctions, L-junctions, T-junctions, 작은 타원의 중점, 선분의 끝점들로 interest point를 정의하여 label ambiguity를 제거할수 있었습니다. 데이터셋이 만들어진 뒤에는 또 homographic warp를 하여 학습 샘플을 만들었습니다.
SuperPoint의 detector 부분만을 이 합성 데이터셋에 학습시켰습니다. 결과는 아래와 같습니다.
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252Fb4ace274-3886-4c2b-a932-fe012f30efb3%252FUntitled.png%3Ftable%3Dblock%26id%3D37d69975-94ab-417b-b5f4-98c589bfb7f7%26cache%3Dv2&w=1080&q=75)
- Homographic Adaptation
합성 데이터셋에 학습된 base detector를 실제 이미지에 적응시키기 위해 self-supervised learning을 사용합니다.
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252F27cde471-e75a-478d-af63-9f4fa271571a%252FUntitled.png%3Ftable%3Dblock%26id%3Dca9d6b7b-3599-4b68-9244-55d476ad878a%26cache%3Dv2&w=2048&q=75)
단일 base detector로 의미있는 pseudo-GT를 만들기 위하여, 하나의 unlabeled image에 여러번 homography를 적용한 뒤 나온 결과를 다시 inverse homography를 적용하여 원래 이미지 축에서 결과를 평균합니다.
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252Fc323a725-f5f0-47d6-8eb1-b4c84f9f9f15%252FUntitled.png%3Ftable%3Dblock%26id%3D87b8e16e-87de-4cd2-b157-d7267a98d87e%26cache%3Dv2&w=1080&q=75)
Random homography를 만들때에는 현실적인 카메라의 움직임을 모방하기 위하여 완전히 랜덤한 homography 대신 일정한 translation, scale, rotation, symmetric distort를 조합하였습니다.
적용하는 homography의 갯수는 hyperparameter인데, 100개 이후에는 늘려도 큰 향상이 없어서 100개로 사용했습니다.
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252F75ca0586-b7e9-4924-8b1c-24e1421f5ee9%252FUntitled.png%3Ftable%3Dblock%26id%3Dbfb553a1-aa3a-4702-a5d2-420a268a1674%26cache%3Dv2&w=1080&q=75)
위 과정은 반복되어 self-supervision 자체의 성능을 높일수 있습니다. 이를 Iterative Homographic Adaptation이라고 부르겠습니다.
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252F4da4c249-3578-4df4-89b8-1f7a11288402%252FUntitled.png%3Ftable%3Dblock%26id%3Db794f3fc-9490-4556-99a2-83f577480865%26cache%3Dv2&w=1080&q=75)
Experiment
학습에는 MS-COCO 2014 데이터셋을 사용하였습니다. 80,000장의 training 셋을 240x320으로 리사이즈한 뒤 흑백으로 바꿨습니다.
Descriptor size는 D=256 loss에서 을 사용하였습니다.
Hinge loss에서 를 사용했습니다.
실험을 위해 PyTorch, Adam, batchsizae=32를 사용했습니다.
테스트를 위해 HPatches 데이터셋을 사용했습니다. 이 데이터셋은 57개의 큰 조도 변화와 59개의 큰 시각 변화 scene을 포함합니다. 결과는 아래와 같습니다.
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252F2984fc92-63df-400c-bcaf-6ad463cf4163%252FUntitled.png%3Ftable%3Dblock%26id%3D82580d5e-cce7-48ea-a8a0-fef2228ece68%26cache%3Dv2&w=750&q=75)
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252F52fd1e62-8773-4623-b72e-c4b22b032396%252FUntitled.png%3Ftable%3Dblock%26id%3D827057af-2ef1-4af5-a8f2-9d20465c8e7f%26cache%3Dv2&w=1080&q=75)
위 표에서 은 correct distance를 의미합니다.
Matching에는 descriptor 값으로부터 nearest neighbor 방식의 matching과 RANSAC을 사용했습니다.
정성적인 결과는 아래와 같습니다.
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252F4bf2b999-b0ae-40f3-a070-b313d983a33f%252FUntitled.png%3Ftable%3Dblock%26id%3Dc9a0b92e-79b7-4a54-87f2-306cde56887d%26cache%3Dv2&w=2048&q=75)
Conclusions
Optional subsections (Heading 3)
Share article