HAYEUP

R2D2 : Repeatable and Reliable Detector and Descriptor 본문

논문

R2D2 : Repeatable and Reliable Detector and Descriptor

hayup 2020. 6. 4. 22:38

저번 포스팅에서 언급했듯이 이번 포스팅에는 NAVER LABS에서 2019년 NeurIPS에 발표한 R2D2: Repeatable and Reliable Detector and Descriptor라는 제목의 논문을 리뷰하겠습니다.


Abstract

저자들은 현재 computer vision 분야의 interest point detection과 local feature description에 사용되는 신경망 모델들은 repeatable saliency maps과 descriptors를 학습하는 것에 중점이 맞춰져 있는데 repeatable region이 무조건적으로 차별성을 가지는 것은 아니기 때문에 차선책이 되는 keypoints를 학습하게 된다고 주장합니다. 따라서 local descriptor의 predictor와 keypoint detection and description을 동시에 학습하는 모델을 제안합니다. 제안한 모델은 sparse, repeatable, reliable 한 특성을 모두 가지는 keypoints를 출력하고 최신 detectors와 descriptors보다 좋은 성능을 보여줍니다.


Introduction

여러 이미지들 사이에서 유사한 포인트(keypoints)를 찾는 것은 많은 computer vision 분야에서 매우 중요합니다. 그리고 이러한 keypoints들은 memory를 최대한 적게 사용하면서 matching의 정확도는 최대화해야 하기 때문에 sparse, repeatable, discriminative 한 특성을 가져야 합니다. 그런데 현재 널리 사용되는 detector와 descriptor들은 repeatability에만 중점을 두고 keypoints를 찾거나 모델을 학습하기 때문에 논문에서는 repeatability와 함께 reliability를 사용하여 keypoints를 detection 하고 description 하는 모델을 제안합니다. (repeatability는 다양한 영상 변화에서도 동일한 특징점이 반복되어 검출되는 정도를 뜻하고 sparse는 희소성을 뜻합니다)

 

difference between repeatability and reliability

그림은 repeatability와 reliability의 차이를 보여줌으로 keypoints detection, description에서 repeatability뿐만 아니라 reliability의 역할의 중요성을 나타냅니다. 왼쪽 이미지의 삼각형 주위 부분은 repeatable 하면서도 reliable 한 특성을 모두 가지지만 오른쪽 이미지의 경우 격자무늬가 repeatable 한 특성은 가지지만 패턴 자체의 반복성 때문에 reliable 한 특성을 가지지는 않습니다. 즉 Abstract에서 언급했듯이 repeatability만을 고려해서 keypoint를 detection 하는 것은 차선책이고 reliability까지 고려해서 keypoint를 찾는 것이 optimal 한 방법이라는 것입니다.

 

논문에서 제안하는 모델은 두 특성에 대해 각각의 신뢰도를 추정하여 repeatability와 reliability가 모두 높은 point만을 keypoint로 판단하고 동시에 이미지의 모든 픽셀에 대해 local descriptor를 출력합니다. 그리고 모델의 repeatability 학습을 위한 unsupervised loss 그리고 reliability 학습을 위한 differentiable Average Precision을 기반으로 하는 listwise ranking loss를 제안합니다.


Related work

related work에서는 학습 방법에 집중하여 descriptor 학습, detector 학습, descriptor&detector 동시 학습 관점으로 이전에 이루어졌던 연구들을 비교합니다.

 

먼저 descriptor입니다. 이전 포스팅들에서 다루었던 triplet ranking loss와 differentiable approximation Average Precision을 언급하면서 논문에서 제안한 listwise ranking loss의 차이점을 소개합니다.

 

  1. 논문에서 제안한 descriptor는 detector와 동시에 학습하면서 sparse handcrafted keypoint detector의 단점을 보완합니다.
  2. 논문에서 제안한 descriptor는 fully convolutional 한 형태를 가지고  입력 이미지의 모든 픽셀에 대해 descriptor를 출력합니다.
  3. 논문에서 제안하는 AP 기반 loss는 patch descriptor와 그것의 reliability를 같이 학습하면서 네트워크가 차별성이 없는 지역(undistinctive regions)에 대해서 학습하는 것을 방지합니다.

두 번째는 detector입니다.

 

  1. 기존의 keypoint detector들은 handcraft방식 혹은 그것에 기반한 방법을 사용하지만 논문에서 제안한 모델은 end-to-end학습방법을 사용합니다.
  2. saliency map을 사용하여 keypoint를 detection 하는 방식들도 있지만 논문에서 제안하는 방식은 지역적인 saliency map의 유사성을 학습하는 unsupervised 방식을 사용합니다.

saliency map이란 사람이 이미지를 봤을 때 집중해서 보게 되는 영역을 뜻합니다. 뒤에서 자세히 살펴보겠지만 제안한 모델의 convolution layer가 이미지의 patch를 학습하기 때문에 지역적인 saliency map을 학습한다는 표현을 사용한 것으로 이해됩니다.  다음 그림은 원본 이미지와 이미지의 saliency map의 예시입니다.

 

마지막으로 동시 학습입니다.

 

  1. detector를 먼저 학습한 후 학습된 detector를 이용해 descriptor를 학습하는 순차적인 학습방법과는 다르게 논문에서 제안하는 방법은 인위적인 조정 없이 처음부터 detector와 descriptor를 동시에 학습합니다.
  2. 많은 양의 데이터에 classification label을 일일이 부여하여 학습하지 않고 상대적으로 적은 양의 데이터를 unsupervised 방식을 통해 학습합니다.
  3.  가장 중요한 부분으로 최초로 repeatability와 reliability를 분리된 특성으로 간주하여 학습하며 reliability가 descriptor 학습을 보완하면서 학습을 진행한다는 차이점이 있습니다.

Joint Learning reliable and repeatable detectors and descriptors

논문에서 제안하는 신경망 모델을 그림을 통해서 파악하고 각각의 descriptor와 detector가 어떤 식으로 학습되는지 수식을 통해서 살펴보겠습니다.

 

R2D2는 이미지 사이의 local feature를 matching 하기 위한 repeatable 하고 reliable 한 keypoint의 위치를 찾는 것이 목적입니다. 따라서 저자들은 $H \times W$ 크기의 이미지 $I$에서 총 3개의 출력을 추론하는 FCN(fully-convolutional network)를 제안합니다. 각각의 출력은 다음과 같습니다

 

  1. 이미지의 각각의 픽셀에 해당하는 $D$차원의 descriptors에 해당하는 3D tensor $ X \in \mathbb{R}^{H \times W \times D}$
  2. sparse 하면서 repeatable 한 keypoint들의 위치를 나타내는 heatmap $S \in [0, 1]^{H \times W}$
  3. 첫 번째 출력 descriptor $X_ij$의 reliability를 나타내는 reliability map $R \in [0,1]^{H \times W}$

Overview of network for jointly learning repeatable and reliable matches

그림은 논문에서 제안하는 모델을 도식화하여 나타냅니다. L2 네트워크를 수정하여 backbone 네트워크로 채용하고 L2 네트워크의 128 channel 결과물은 $\ell_2$ layer와 $x^2$ layer의 입력이 됩니다.

 

학습을 위해 신경망의 출력을 통해 어떻게 loss를 계산하는지 수식을 통해 살펴보겠습니다.


Repeatability

supervised 학습방법을 사용하여 repeatability를 학습할 경우 supervised 학습방법의 특성상 잠재적으로 더 나은 keypoints를 학습하지 않고 기존의 detector를 모방하여 학습이 진행됩니다. 따라서 논문에서는 네트워크가 repeatability heatmap $S$에서 지역 최대점(local maxima) 포인트들이 시점이나 조광의 변화에 따라 공변(covariant)하도록 학습합니다. 수식으로 정의하여 의미를 알아보겠습니다.

 

이미지 $I$와 $I'$는 같은 장소를 촬영한 다른 이미지이고 $U \in \mathbb{B}^{H \times W \times 2}$는 이 두 개의 이미지 사이의 변환입니다. 다시 말해 첫 번째 이미지 $I$의 $(i, j)$에 해당하는 픽셀은 $U_{ij} = (i', j')$를 통해 이미지 $I'$의 $(i', j')$와 matching 됩니다. $S$와 $S'$은 각각 이미지 $I$와 $I'$의 repeatability map이고 $S'_U$는 $S'$를 $U$로 변환한 것입니다.

 

궁극적으로 학습하고자 하는 목표는 $S$에서의 모든 local maxima가 $S'_U$의 모든 local maxima와 부합하도록 하는 것입니다. 그리고 이것을 $S$와 $S'_U$의 코사인 유사도(cosine similarity)를 계산하여 달성합니다. 코사인 유사도가 최대가 될 때 두 개의 heatmap이 완전히 동일 해지며 local maxima가 일치되지만 local occlusion, warp artifacts 혹은 border effects와 같은 한계로 heatmap 전체에 대해서 수행할 수가 없습니다. 따라서 논문에서는 지역적으로(locally) heatmap의 코사인 유사도를 계산하여 문제를 해결합니다.

 

heatmap의 코사인 유사도를 지역적으로 계산한다는 것은 heatmap의 특정 위치에서 $N \times N$의 크기를 추출해 이를 patch $p$라고 정의하고 $S$와 $'_U$ 전체를 비교하는 것이 아닌 patch 간의 비교를 통해서 코사인 유사도를 계산한다는 의미입니다. 새롭게 정의한 patch $p$에 따라 코사인 유사도의 loss를 다음과 같이 정의합니다.

 

$\mathcal{L}_{cosim} (I, I', U) = 1 - {{1} \over {\vert \mathcal{P} \vert}} \sum_{p \in \mathcal{P}} cosim ( S[p], S'_U[p])$   

 

$S[p] \in \mathbb{R}^{N^2}$는 $S$에서 추출한 $N \times N$크기의 patch $p$를 벡터화(flatten) 시킨 것을 의미합니다. 하지만 단순히 $\mathcal{L}_{cosim}$만을 최소화한다면 $S [p]$와 $S'_U[p]$가 유사하도록 신경망을 학습할 순 있지만 repeatability map $S$이 repeatability가 높은 point의 값은 1에 가깝게 나타내고 repeatability가 낮은 point는 0에 가깝게 나타내야 하는 목표를 달성할 수 없습니다. 따라서 이를 해결하기 위해 두 번째 loss function을 추가하고 다음과 같이 수식으로 정의합니다. 논문에서는 이를 local peakiness를 최대화(maximize)한다고 표현합니다.

 

$\mathcal{L}_{peaky} (I) = 1 - {1 \over {\vert \mathcal{P} \vert}} \sum_{p \in \mathcal{P}} \Big(\, \underset{(i,j) \in p}{max} \, S_{ij} - \underset{(i,j) \in p}{mean} \, S_{ij} \Big)$

 

최종적으로 두 가지 loss를 종합하여 repeatability의 전체 loss를 다음과 같이 정의합니다.

 

$\mathcal{L}_{rep} ( I, I', U ) = \mathcal{L}_{cosim} ( I, I', U ) + {1 \over 2} ( \mathcal{L}_{peaky}(I) + \mathcal{L}_{peaky}(I'))$

 

$\mathcal{L}_{peaky}$ loss에 대해서 조금 더 생각해보겠습니다. 해당 수식은 heatmap $S$에서 subset을 나타내는 $N \times N$크기의 patch $p$가 가지는 $N \times N$개의 repeatability 값들에 대해서 계산합니다. 예를 들어 $S$의 patch $p$가 $max  \, p = 0.7$, $mean \, p = 0.4$라고 가정하면 $\mathcal{L}_{peaky}$ loss에 의해 $max \, p$와 $mean \, p$의 차이가 더 커지도록 신경망이 학습됩니다. 그에따라 patch $p$내에서 repeatability가 가장 높은 point의 repeatability는 더 높은 값을 갖게되고 repeatability가 낮은 point들은 더 낮은 값을 갖게됩니다. 하지만 학습이 되지 않은 신경망은 실제(ground truth)로는 repeatability값이 낮은 point의 repeatability를 높은 값으로 출력할수 있습니다. 추상적으로 생각해볼때 신경망의 초기조건에 의해 실제로는 repeatability값이 낮은 point가 repeatability값이 높게 출력돼 local maxima가 될수있고 $\mathcal{L}_{peaky}$의 정의에 의해 다른 point들과 값의 차이가 더욱 벌어질수있습니다. 다시말해 $\mathcal{L}_{peaky}$ loss에는 repeatability값을 ground truth에 따라 조절하는 요소가 없다고 생각할 수 있습니다. 하지만 descriptor, reliability와 함께 backbone 네트워크를 공유하여 학습하기 때문에 ground turth repeatability와 전혀 다른 양상으로 학습이 되지는 않겠지만 이와 관련해 논문에서 더 자세한 설명이 없어 완벽하게 파악하지는 못했습니다.

 

논문을 구현한 프로젝트 혹은 다른 분이 작성한 설명을 통해 새롭게 작성할 내용이 생기면 추가로 보완하도록 하겠습니다.


Reliability

제안한 모델의 네트워크는 local descriptor $X$를 출력하고 각각의 local descriptor $X_{ij} \in \mathbb{R}^D$에 따라 그것의 신뢰도 값 $R_{ij} \in [0,1]$을 예측합니다. 이 네트워크의 목표를 논문에서는 다음과 같이 설명합니다.

 

The goal is to let the network learn to choose between making descriptors as discriminative as possible as with a high confidence, or a low confidence in which case the loss will have low impact on the descriptor, such as for regions that cannot be made discriminative enough.

 

즉 네트워크의 학습 목표는 descriptor를 높은 신뢰도로 가능한 한 discriminative 하게 만드는 것 혹은 정의한 loss가 descriptor에 영향을 거의 끼치지 못하는 경우는 낮은 신뢰도로 가능한 한 discriminatvie 하게 만드는 것입니다.

 

descriptor matching 문제는 저번 포스팅에서 다뤘던 QAP(quantized Average Precision)을 이용한 metric learning 문제로 정의할 수 있습니다. 수식으로는 다음과 같이 나타냅니다.

 

$\mathcal{L}_{AP} = {1 \over B} \sum_{q=1}^B L_{AP} (q), \, \, \, \, L_{AP}(q) = 1 - AP(q) $

 

논문에서 제안한 모델의 경우 첫 번째 이미지의 각각의 픽셀 $(i, j)$는 $M$크기의 patch로 정의할 수 있고 두 번째 이미지의 모든 patch와 비교하여 첫 번째 이미지의 patch를 기준으로 두 번째 이미지의 모든 patch의 순위를 결정할 수 있습니다. 이미지들 사이의 ground truth 변환 $U$를 통해서 AP를 계산하여 patch의 descriptor를 평가하여 학습합니다.

 

하지만 모든 patch descriptor가 같은 중요도를 갖는 것은 아닙니다. 위의 그림에서 봤듯이 나뭇잎들이나 바다와 같은 규칙성이 있는 부분(uniform region) 혹은 1차원적인 패턴을 가지는 부분은 feature matching을 수행하기에 차별성이 떨어집니다. 그래서 모든 patch descriptor를 학습하는 것은 성능을 저하할 수 있습니다. 따라서 논문에서는 차별성이 떨어지는 지역에 대해서 네트워크의 effort를 아낄 수 있는 loss를 제안합니다. 수식으로 나타내면 다음과 같습니다.

 

$\mathcal{L}_{AP_k} (i, j) = 1 - \big[AP(i,j)R_{ij} + k(1- R_{ij})\big]$

 

$k$는 batch당 AP의 최저 예상치를 나타내는 hyperparameter입니다. 논문의 실험에서는 0.5로 설정하는 것이 가장 좋은 결과를 보였습니다. 수식을 보면 알 수 있듯이 $\mathcal{L}_{AP_k} (i, j)$를 최소화하기 위해서는 $AP(i, j) < k$ 일 때는 네트워크가 $R_{ij} = 0$을 출력해야 하고 $AP(i,j) > k$ 일 때는 네트워크가 $R_{ij} = 1$을 출력해야 합니다.

 

마찬가지로 수식의 의미를 살펴보겠습니다. 위에서 설명했듯이 $\mathcal{L}_{AP_k}(i,j)$가 최소가 되기 위해서는 $AP(i, j)$가 $k$보다 작을 때 $R_{ij}$는 0이고 반대의 경우 1이 돼야 합니다. 즉 k가 0.5일 때 이미지에서 중심이 $(i, j)$인 patch descriptor의 AP값이 0.5보다 크면 reliability map의 $(i,j)$ 값이 1이 되도록 학습되고 반대의 경우 0이 되도록 학습됩니다. 다시 말해 성능이 좋은 descriptor의 신뢰도는 1에 가깝게 학습하고 그렇지 못한 descriptor는 0에 가깝게 학습된다는 의미입니다. 그리고 descriptor 또한 reliability map과 동시에 학습이 되기 때문에 $AP(i,j)$의 관점으로 수식을 보면 $R_{ij}$값과는 무관하게 $AP(i, j)$값이 최대가 될수록 $\mathcal {L}_{AP_k}(i, j)$의 값이 최소가 됩니다. 즉 모든 $(i, j)$에 대해서 $AP(i, j)$가 1이 되는 방향으로 descriptor가 학습됩니다. 하지만 위의 식을 $AP(i, j)$로 미분하면 $-R_{ij}$가 되는 것을 알 수 있습니다. 즉 $AP(i, j)$의 학습 방향( $(i, j)$에서 $AP(i, j)$가 1에 가깝게 출력돼야 하는지 0에 가깝게 출력돼야 하는지)은 $R_{ij}$에 영향을 받지 않지만 $R_{ij}$에 따라 $AP(i,j)$가 학습이 되는 속도( $AP(i, j)$를 결정하는 parameter가 변경되는 정도)가 달라집니다.

 

정리하자면 descriptor와 reliability의 학습이 서로에게 영향을 주기 때문에 각각의 기준으로 학습의 의미를 생각해보면 repeatability와 마찬가지로 ground truth에 따라 학습 방향이 결정되지는 않는 것 같지만 backbone 네트워크를 공유하면서 학습이 진행되기 때문에 descriptor를 학습하는 과정도 reliability에 영향을 끼치고 reliability를 학습하는 과정도 descriptor에 영향을 끼쳐 예상되는 최악의 시나리오로 학습이 되는 경우는 없다고 볼 수 있습니다. descriptor와 reliability의 학습도 추가적으로 보완사항이 생기면 기술하도록 하겠습니다.

 

여기까지 repeatability를 학습하기 위한 $\mathcal{L}_{rep}$ loss와 descriptor와 repeatability를 동시에 학습하기 위한 $\mathcal{L}_{AP_k}$ loss를 수식으로 정의하고 의미를 알아봤습니다.

 

논문에서는 이후에 데이터셋 구성 방법, 학습 평가방법, patch의 크기, parameter의 조정 등 학습의 세부 디테일과 그에 따른 성능의 비교와 결과를 집중적으로 서술하고 있지만 논문의 메인 아이디어와 제안하는 모델, 모델을 학습하기 위한 loss를 어떻게 정의했는지 살펴보기 위한 리뷰이기 때문에 간단히 결과를 몇 가지 소개하고 마무리하도록 하겠습니다.


Experimental Result

Sample repeatability heatmap with different patch size N

그림은 $\mathcal {L}_{rep}$의 patch 크기 $N$을 달리해서 계산한 repeatability map을 나타냅니다. $N$이 작을 때는 하늘과 같은 비어있는 공간(empty region)도 repeatability가 높게 학습되지만 $N$이 클 때는 그렇지 않은 것을 볼 수 있습니다. 즉 $N$이 클 때 계산한 repeatability map이 훨씬 높은 성능을 보여줍니다.

 

표는 reliability와 repeatability를 따로 학습했을 때의 결과입니다. M-score는 ground truth와 계산된 feature의 비율을 나타냅니다. MMA는 이미지 쌍에서 정확하게 매칭 된 비율의 평균값을 나타냅니다. 두 지표 모두 reliability와 repeatability를 같이 학습했을 때 reliability를 제외한 결과보다 조금 더 좋은 결과를 보이지만 repeatability를 제외하고 학습했을 때는 굉장히 큰 차이를 보입니다. 이는 repeatability가 descriptor reliability와는 관련이 없음을 보여줍니다.

 

가운데 그림은 repeatability heatmap을 나타내고 마지막 그림은 reliability heatmap을 나타냅니다. 맨 위의 그림은 두 개의 heatmap을 모두 고려하여 repeatability와 reliability값이 모두 높은 point를 표시하였습니다. 그림에서 볼 수 있듯이 repeatability heatmap을 계산할 때 작은 크기의 patch를 사용해도 reliability heatmap의 보완으로 인해 하늘이나 강과 같은 empty region과 다리 밑과 같은 1차원적인 패턴을 가지는 match 하기 어려운 point가 제거됨을 알 수 있습니다.

 

다음 표는 다른 방법론들과 논문에서 제안한 모델과의 차이를 보여줍니다.

 

다음 그림은 reciprocal nearest matching을 통해 제안한 모델에서 추출한 keypoints의 matching 결과를 보여줍니다. 초록점은 matching이 된 keypoints이고 빨간색 X는 matching이 되지 않은 keypoints입니다. 첫 번째와 두 번째 사진은 시점의 변화에 따른 matching, 세 번째와 네 번째 사진은 조광의 변화에 따른 matching을 보여줍니다. 거의 모든 keypoint에서 matching이 성공적으로 이루어짐을 알 수 있습니다.

 

이것으로 포스팅을 마치겠습니다.

 

[참고자료]

[1] J.Revaud, P.Weinzaepful, C.Souza and M.Humenberger. R2D2: Repeatable and Reliable Detector and Descriptor. In Proc. NeurIPS, 2019.

[2] www.github.com/naver/r2d2

[3] 영상 특징점(keypoint) 추출 방법 - 다크프로그래머

[4] What are saliency maps in deep learning?

Comments