TL;DR: LoFTR can extract high-quality semi-dense matches even in indistinctive regions with low-textures, motion blur, or repetitive patterns.
Introduction
보통 다른 이미지 2개를 매칭하는 과정은 아래의 과정을 따라서 진행됩니다.
- feature detection → key point detection
- feature description → 주위 정보를 반영하여 feature extraction
- feature matching → point to point correspondence를 구함
key point detection 의 경우, search space를 줄여준다는 장점이 있지만 매우 중요한 key point를 놓치는 경우에 성능에 막대한 저하를 불러일으킵니다. 기존에는 CNN을 이용하여 key point detection을 없애는 논문도 존재하지만, CNN의 경우 receptive field 측면에서 한계가 있었다고 저자들은 주장합니다.
저자들은 low-texture regions도 edge들의 상대적인 위치를 활용한다면, 주요한 특징점으로 활용할수 있다고 주장합니다. 그렇기 때문에 앞선 논문들에서 활용한 CNN보다 넓은 receptive field를 가지는 네트워크 구조인 transformer를 활용하였습니다.
Proposed Method
저자들은 detector free design method를 제안했습니다. 입력은 다른 image로 구성된 image pair , 입니다.
1. Local Feature Extraction
일단 feature extraction을 위해서 FPN을 사용합니다. FPN의 사이즈가 다른 output들을 만들어내게되는데, 입력 이미지 크기의 1/8배 되는 feature는 , 로 표기하였고, 입력 이미지 크기의 1/2배 되는 feature는 , 로 표기합니다.
2. Local Feature Transformer (LoFTR) Module
, 를 입력으로 넣어주게 되고, LoFTR module을 통해 transformed feature를 , 로 표기합니다.
LoFTR 에서 연산되는 연산들은 다음과 같다
- positional encoding
- DETR에서의 방법을 따름
- Self attention & Cross attention
- Self attention 인 경우, 와 가 같은 vector를 사용 (key, value, query 가 모두 같은 vector로 부터 나옴)
- Cross attention인 경우, 와 가 다른 vector로 주어지게 됩니다. 가 로 부터 나온 경우에는 는 를 사용합니다.
3. Establish Coarse-level matches
LoFTR에서 attention 을 통해 구해진 feature , 를 통해 상대적으로 사이즈가 작은 (입력 이미지 크기의 1/8) feature map에 대해서 match 되는 point들을 구합니다. 2개의 output feature에 대한 score matrix 는 다음과 같이 정의 됩니다.
해당 score matrix를 통해 의 i 번째 픽셀과 의 j번째 픽셀이 매치될 확률은 아래처럼 구합니다.
해당 확률값을 통해, (i, j) tuple이 match되는 pixel 관계인지 결정하게 됩니다.
의 i 번째 픽셀 입장에서도 의 j 번째 픽셀이 가장 매치되는 pixel이고, 의 j 번째 픽셀 입장에서도 의 i 번째 픽셀이 가장 매치되는 pixel인 경우에 match 되는 pixel로 정의합니다.
4. Coarse-to-Fine Module
3에서 구한 match는 원 이미지의 1/8배 사이즈인 feature에서 구했기 때문에, 해당 match에서 (i, j)는 사실 입력 이미지상에서는 8 x 8 size의 사각형안에 존재하는 점 중 어떤 점에 해당하는지 알 수 없습니다. 그래서 위에서 구한 match를 활용하여 사이즈가 더 큰 feature인 , 상에서 match를 구하게 됩니다.
3에서 구한 pixel들의 중점에 해당하는 좌표에서 window 만큼 feature를 자르고 자른 feature를 small LoFTR에 넣어서 transformed feature를 구해줍니다.
에서는 center pixel index로 고정해둔채로, 에서의 모든 vector와 matching score를 구해줍니다. 해당 스코어를 확률 분포로 만들어주고 평균 위치를 최종 아웃풋 좌표로 사용합니다.
5. Loss function
( total_loss = Coarse-level loss + Fine-level loss)
두 이미지에서 pixel간의 매치 여부를 GT camera pose, depth를 통해 계산을 할 수 있다고하며, 계산을 한 매치 여부를 GT로 사용합니다.
Coarse-level loss의 경우, negative log-likelihood를 loss로 직접 활용합니다.
Fine-level supervision의 경우, MSE를 loss로 활용합니다.
Experiment
- Implementation details
- converges after 24 hours of training on 64 GTX 1080ti GPUs
- ResNet-18 backbone
- Metric
- Recall, Precision을 정의
- Recall : # of tp matches / # of gt matches
- Precision : # of tp matches / # of predicted matches
- Threshold : 몇 pixel까지 틀려도 true-positive로 볼것이냐
- Homography Estimation
- Relative Pose Estimation
- Evaluation results on ScanNet
- † means the model trained on MegaDepth
- ScanNet : indoor, MegaDepth : outdoor
- domain adaptation이 잘됨
- OT : Optimal transport
- DS : Dual softmax
- Ablation studies
Conclusions
Share article