Spaces:
Runtime error
Runtime error
| 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 | |