Download applications/avoiding/avoiding_baselines/DiRecT/utils/arrays.py from GlobalMotionPlanning/GlobMP: direct link, hf CLI and curl.
- Browser
- Download file 2.71 kB
-
https://huggingface.co/GlobalMotionPlanning/GlobMP/resolve/main/applications/avoiding/avoiding_baselines/DiRecT/utils/arrays.py
- Command line
-
hf download hf://GlobalMotionPlanning/GlobMP/applications/avoiding/avoiding_baselines/DiRecT/utils/arrays.py
-
curl -L -o arrays.py https://huggingface.co/GlobalMotionPlanning/GlobMP/resolve/main/applications/avoiding/avoiding_baselines/DiRecT/utils/arrays.py
2.71 kB
| import numpy as np | |
| import torch | |
| DTYPE = torch.float | |
| DEVICE = "cuda:0" | |
| def to_np(x): | |
| if torch.is_tensor(x): | |
| x = x.detach().cpu().numpy() | |
| return x | |
| def to_torch(x, dtype=None, device=None): | |
| dtype = dtype or DTYPE | |
| device = device or DEVICE | |
| if type(x) is dict: | |
| return {k: to_torch(v, dtype, device) for k, v in x.items()} | |
| elif torch.is_tensor(x): | |
| return x.to(device).type(dtype) | |
| return torch.tensor(x, dtype=dtype, device=device) | |
| def to_device(x, device=DEVICE): | |
| if torch.is_tensor(x): | |
| return x.to(device) | |
| elif type(x) is dict: | |
| return {k: to_device(v, device) for k, v in x.items()} | |
| else: | |
| raise RuntimeError(f"Unrecognized type in `to_device`: {type(x)}") | |
| def batchify(batch): | |
| fn = lambda x: to_torch(x[None]) | |
| batched_vals = [] | |
| for field in batch._fields: | |
| val = getattr(batch, field) | |
| val = apply_dict(fn, val) if type(val) is dict else fn(val) | |
| batched_vals.append(val) | |
| return type(batch)(*batched_vals) | |
| def apply_dict(fn, d, *args, **kwargs): | |
| return {k: fn(v, *args, **kwargs) for k, v in d.items()} | |
| def normalize(x): | |
| x = x - x.min() | |
| x = x / x.max() | |
| return x | |
| def to_img(x): | |
| normalized = normalize(x) | |
| array = to_np(normalized) | |
| array = np.transpose(array, (1, 2, 0)) | |
| return (array * 255).astype(np.uint8) | |
| def set_device(device): | |
| DEVICE = device | |
| if "cuda" in device: | |
| torch.set_default_tensor_type(torch.cuda.FloatTensor) | |
| def batch_to_device(batch, device="cuda:0"): | |
| vals = [to_device(getattr(batch, field), device) for field in batch._fields] | |
| return type(batch)(*vals) | |
| def _to_str(num): | |
| if num >= 1e6: | |
| return f"{(num/1e6):.2f} M" | |
| else: | |
| return f"{(num/1e3):.2f} k" | |
| def param_to_module(param): | |
| module_name = param[::-1].split(".", maxsplit=1)[-1][::-1] | |
| return module_name | |
| def report_parameters(model, topk=10): | |
| counts = {k: p.numel() for k, p in model.named_parameters()} | |
| n_parameters = sum(counts.values()) | |
| print(f"[ utils/arrays ] Total parameters: {_to_str(n_parameters)}") | |
| modules = dict(model.named_modules()) | |
| sorted_keys = sorted(counts, key=lambda x: -counts[x]) | |
| max_length = max([len(k) for k in sorted_keys]) | |
| for i in range(topk): | |
| key = sorted_keys[i] | |
| count = counts[key] | |
| module = param_to_module(key) | |
| print(" " * 8, f"{key:10}: {_to_str(count)} | {modules[module]}") | |
| remaining_parameters = sum([counts[k] for k in sorted_keys[topk:]]) | |
| print( | |
| " " * 8, | |
| f"... and {len(counts)-topk} others accounting for {_to_str(remaining_parameters)} parameters", | |
| ) | |
| return n_parameters | |