|
import os |
|
|
|
import torch |
|
|
|
from lydorn_utils import python_utils |
|
from lydorn_utils import print_utils |
|
|
|
from backbone import get_backbone |
|
from dataset_folds import get_folds |
|
|
|
|
|
def train_process(gpu, config, shared_dict, barrier): |
|
from frame_field_learning.train import train |
|
|
|
print_utils.print_info("GPU {} -> Ready. There are {} GPU(s) available on this node.".format(gpu, torch.cuda.device_count())) |
|
|
|
torch.manual_seed(0) |
|
|
|
root_dir_candidates = [os.path.join(data_dirpath, config["dataset_params"]["root_dirname"]) for data_dirpath in config["data_dir_candidates"]] |
|
root_dir, paths_tried = python_utils.choose_first_existing_path(root_dir_candidates, return_tried_paths=True) |
|
if root_dir is None: |
|
print_utils.print_error("GPU {} -> ERROR: Data root directory amongst \"{}\" not found!".format(gpu, paths_tried)) |
|
exit() |
|
print_utils.print_info("GPU {} -> Using data from {}".format(gpu, root_dir)) |
|
|
|
|
|
|
|
|
|
fold = set(config["fold"]) |
|
if fold == {"train"}: |
|
|
|
train_ds, val_ds = get_folds(config, root_dir, folds=["train", "val"]) |
|
elif fold == {"train", "val"}: |
|
|
|
train_ds, = get_folds(config, root_dir, folds=["train_val"]) |
|
val_ds = None |
|
else: |
|
|
|
print_utils.print_error("ERROR: specified folds not recognized!") |
|
raise NotImplementedError |
|
|
|
|
|
if config["backbone_params"]["name"] in ["deeplab50", "deeplab101"]: |
|
assert 1 < config["optim_params"]["batch_size"], \ |
|
"When using backbone {}, batch_size has to be at least 2 for the batchnorm of the ASPPPooling to work."\ |
|
.format(config["backbone_params"]["name"]) |
|
backbone = get_backbone(config["backbone_params"]) |
|
|
|
|
|
train(gpu, config, shared_dict, barrier, train_ds, val_ds, backbone) |
|
|
|
|
|
def eval_process(gpu, config, shared_dict, barrier): |
|
from frame_field_learning.evaluate import evaluate |
|
|
|
torch.manual_seed(0) |
|
|
|
root_dir_candidates = [os.path.join(data_dirpath, config["dataset_params"]["root_dirname"]) for data_dirpath in |
|
config["data_dir_candidates"]] |
|
root_dir, paths_tried = python_utils.choose_first_existing_path(root_dir_candidates, return_tried_paths=True) |
|
if root_dir is None: |
|
print_utils.print_error( |
|
"GPU {} -> ERROR: Data root directory amongst \"{}\" not found!".format(gpu, paths_tried)) |
|
raise NotADirectoryError(f"Couldn't find a directory in {paths_tried} (gpu:{gpu})") |
|
print_utils.print_info("GPU {} -> Using data from {}".format(gpu, root_dir)) |
|
config["data_root_dir"] = root_dir |
|
|
|
|
|
|
|
eval_ds, = get_folds(config, root_dir, folds=config["fold"]) |
|
|
|
|
|
backbone = get_backbone(config["backbone_params"]) |
|
|
|
evaluate(gpu, config, shared_dict, barrier, eval_ds, backbone) |
|
|
|
|