import torch import numpy as np def TubeMaskingGenerator(input_size, mask_ratio, batch, device='cuda'): frames, height, width = input_size num_patches_per_frame = height * width num_masks_per_frame = int(mask_ratio * num_patches_per_frame) mask_list = [] for _ in range(batch): mask_per_frame = np.hstack([ np.zeros(num_patches_per_frame - num_masks_per_frame), np.ones(num_masks_per_frame), ]) np.random.shuffle(mask_per_frame) mask_list.append(np.tile(mask_per_frame, (frames, 1)).flatten()) mask = torch.Tensor(mask_list).to(device, non_blocking=True).to(torch.bool) return mask def RandomMaskingGenerator(input_size, mask_ratio, batch, device='cuda'): frames, height, width = input_size num_patches = frames * height * width # 8x14x14 num_mask = int(mask_ratio * num_patches) mask_list = [] for _ in range(batch): mask = np.hstack([ np.zeros(num_patches - num_mask), np.ones(num_mask), ]) np.random.shuffle(mask) mask_list.append(mask) mask = torch.Tensor(np.array(mask_list)).to(device, non_blocking=True).to(torch.bool) return mask