Spaces:
Running
Running
| import os | |
| import torch | |
| import torchvision.transforms as transforms | |
| from functools import lru_cache | |
| def meshgrid(B, H, W, dtype, device, normalized=False): | |
| """ | |
| Create mesh-grid given batch size, height and width dimensions. From https://github.com/TRI-ML/KP2D. | |
| Parameters | |
| ---------- | |
| B: int | |
| Batch size | |
| H: int | |
| Grid Height | |
| W: int | |
| Batch size | |
| dtype: torch.dtype | |
| Tensor dtype | |
| device: str | |
| Tensor device | |
| normalized: bool | |
| Normalized image coordinates or integer-grid. | |
| Returns | |
| ------- | |
| xs: torch.Tensor | |
| Batched mesh-grid x-coordinates (BHW). | |
| ys: torch.Tensor | |
| Batched mesh-grid y-coordinates (BHW). | |
| """ | |
| if normalized: | |
| xs = torch.linspace(-1, 1, W, device=device, dtype=dtype) | |
| ys = torch.linspace(-1, 1, H, device=device, dtype=dtype) | |
| else: | |
| xs = torch.linspace(0, W - 1, W, device=device, dtype=dtype) | |
| ys = torch.linspace(0, H - 1, H, device=device, dtype=dtype) | |
| ys, xs = torch.meshgrid([ys, xs]) | |
| return xs.repeat([B, 1, 1]), ys.repeat([B, 1, 1]) | |
| def image_grid(B, H, W, dtype, device, ones=True, normalized=False): | |
| """ | |
| Create an image mesh grid with shape B3HW given image shape BHW. From https://github.com/TRI-ML/KP2D. | |
| Parameters | |
| ---------- | |
| B: int | |
| Batch size | |
| H: int | |
| Grid Height | |
| W: int | |
| Batch size | |
| dtype: str | |
| Tensor dtype | |
| device: str | |
| Tensor device | |
| ones : bool | |
| Use (x, y, 1) coordinates | |
| normalized: bool | |
| Normalized image coordinates or integer-grid. | |
| Returns | |
| ------- | |
| grid: torch.Tensor | |
| Mesh-grid for the corresponding image shape (B3HW) | |
| """ | |
| xs, ys = meshgrid(B, H, W, dtype, device, normalized=normalized) | |
| coords = [xs, ys] | |
| if ones: | |
| coords.append(torch.ones_like(xs)) # BHW | |
| grid = torch.stack(coords, dim=1) # B3HW | |
| return grid | |
| def to_tensor_sample(sample, tensor_type="torch.FloatTensor"): | |
| """ | |
| Casts the keys of sample to tensors. From https://github.com/TRI-ML/KP2D. | |
| Parameters | |
| ---------- | |
| sample : dict | |
| Input sample | |
| tensor_type : str | |
| Type of tensor we are casting to | |
| Returns | |
| ------- | |
| sample : dict | |
| Sample with keys cast as tensors | |
| """ | |
| transform = transforms.ToTensor() | |
| sample["image"] = transform(sample["image"]).type(tensor_type) | |
| return sample | |
| def prepare_dirs(config): | |
| for path in [config.ckpt_dir]: | |
| if not os.path.exists(path): | |
| os.makedirs(path) | |