Spaces:
No application file
No application file
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) | |