Vincentqyw
update: features and matchers
404d2af
raw
history blame
1.51 kB
import torch
import torch.distributed as dist
import numpy as np
import cv2
def parse_pair_seq(pair_num_list):
#generate pair_seq_list: [#pair_num]:seq
# accu_pair_num: dict{seq_name:accumulated_pair}
pair_num=int(pair_num_list[0,1])
pair_num_list=pair_num_list[1:]
pair_seq_list=[]
cursor=0
accu_pair_num={}
for line in pair_num_list:
seq,seq_pair_num=line[0],int(line[1])
for _ in range(seq_pair_num):
pair_seq_list.append(seq)
accu_pair_num[seq]=cursor
cursor+=seq_pair_num
assert pair_num==cursor
return pair_seq_list,accu_pair_num
def tocuda(data):
# convert tensor data in dictionary to cuda when it is a tensor
for key in data.keys():
if type(data[key]) == torch.Tensor:
data[key] = data[key].cuda()
return data
def reduce_tensor(tensor,op='mean'):
rt = tensor.detach()
dist.all_reduce(rt, op=dist.ReduceOp.SUM)
if op=='mean':
rt /= dist.get_world_size()
return rt
def get_rnd_homography(batch_size, pert_ratio=0.25):
corners = np.array([[-1, 1], [1, 1], [-1, -1], [1, -1]], dtype=np.float32)
homo_tower = []
for _ in range(batch_size):
rnd_pert = np.random.uniform(-2 * pert_ratio, 2 * pert_ratio, (4, 2)).astype(np.float32)
pert_corners = corners + rnd_pert
M = cv2.getPerspectiveTransform(corners, pert_corners)
homo_tower.append(M)
homo_tower = np.stack(homo_tower, axis=0)
return homo_tower