Spaces:
Runtime error
Runtime error
| import torch | |
| import torch.nn.functional as F | |
| import numpy as np | |
| def fast_kde(x, std=0.1, kernel_size=9, dilation=3, padding=9 // 2, stride=1): | |
| raise NotImplementedError("WIP, use at your own risk.") | |
| # Note: when doing symmetric matching this might not be very exact, since we only check neighbours on the grid | |
| x = x.permute(0, 3, 1, 2) | |
| B, C, H, W = x.shape | |
| K = kernel_size**2 | |
| unfolded_x = F.unfold( | |
| x, kernel_size=kernel_size, dilation=dilation, padding=padding, stride=stride | |
| ).reshape(B, C, K, H, W) | |
| scores = (-(unfolded_x - x[:, :, None]).sum(dim=1) ** 2 / (2 * std**2)).exp() | |
| density = scores.sum(dim=1) | |
| return density | |
| def kde(x, std=0.1, device=None): | |
| if device is None: | |
| device = torch.device("cuda" if torch.cuda.is_available() else "cpu") | |
| if isinstance(x, np.ndarray): | |
| x = torch.from_numpy(x) | |
| # use a gaussian kernel to estimate density | |
| x = x.to(device) | |
| scores = (-torch.cdist(x, x) ** 2 / (2 * std**2)).exp() | |
| density = scores.sum(dim=-1) | |
| return density | |