YannisK commited on
Commit
ea2b2ef
1 Parent(s): 7022373
Files changed (1) hide show
  1. app.py +25 -1
app.py CHANGED
@@ -58,7 +58,25 @@ transform = transforms.Compose([
58
 
59
  # ---------------------------------------
60
 
61
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
 
63
  # sf_idx_ = [55, 14, 5, 4, 52, 57, 40, 9]
64
 
@@ -97,6 +115,12 @@ def generate_matching_superfeatures(im1, im2, scale_id=6, threshold=50, sf_ids='
97
  feats2 = output2[0][0]
98
  attns2 = output2[1][0]
99
  strenghts2 = output2[2][0]
 
 
 
 
 
 
100
  # outputs = []
101
  # for im_tensor in loader:
102
  # outputs.append(net.get_superfeatures(im_tensor.to(device), scales=[scales[scale_id]]))
 
58
 
59
  # ---------------------------------------
60
 
61
+ def match(query_feat, pos_feat, LoweRatioTh=0.9):
62
+ # first perform reciprocal nn
63
+ dist = torch.cdist(query_feat, pos_feat)
64
+ best1 = torch.argmin(dist, dim=1)
65
+ best2 = torch.argmin(dist, dim=0)
66
+ arange = torch.arange(best2.size(0), device=best2.device)
67
+ reciprocal = best1[best2]==arange
68
+ # check Lowe ratio test
69
+ dist2 = dist.clone()
70
+ dist2[best2,arange] = float('Inf')
71
+ dist2_second2 = torch.argmin(dist2, dim=0)
72
+ ratio1to2 = dist[best2,arange] / dist2_second2
73
+ valid = torch.logical_and(reciprocal, ratio1to2<=LoweRatioTh)
74
+ pindices = torch.where(valid)[0]
75
+ qindices = best2[pindices]
76
+ # keep only the ones with same indices
77
+ valid = pindices==qindices
78
+ return pindices[valid]
79
+
80
 
81
  # sf_idx_ = [55, 14, 5, 4, 52, 57, 40, 9]
82
 
 
115
  feats2 = output2[0][0]
116
  attns2 = output2[1][0]
117
  strenghts2 = output2[2][0]
118
+
119
+ feats1n = F.normalize(feats1, dim=1)
120
+ feats2n = F.normalize(feats2, dim=1)
121
+ ind_match = match(feats1n, feats2n)
122
+ print('ind', ind_match)
123
+ print('ind.shape', ind_match.shape)
124
  # outputs = []
125
  # for im_tensor in loader:
126
  # outputs.append(net.get_superfeatures(im_tensor.to(device), scales=[scales[scale_id]]))