Divyanshu Tak
Initial commit of BrainIAC Docker application
f5288df
import yaml
import os
import torch
import random
import numpy as np
class BaseConfig:
def __init__(self):
config_path = os.path.join(os.path.dirname(__file__), 'config.yml')
with open(config_path, 'r') as file:
self.config = yaml.safe_load(file)
self.setup_environment()
def setup_environment(self):
seed = 42
random.seed(seed)
np.random.seed(seed)
torch.manual_seed(seed)
os.environ['CUDA_VISIBLE_DEVICES'] = self.config["gpu"]["visible_device"]
self.device = torch.device(self.config["gpu"]["device"]) #torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
if torch.cuda.is_available():
torch.cuda.manual_seed_all(seed)
torch.set_float32_matmul_precision("medium")
def custom_collate(self, batch):
"""Handles variable size of the scans and pads the sequence dimension."""
images = [item['image'] for item in batch]
labels = [item['label'] for item in batch]
max_len = self.config["data"]["collate"] # Single scan input
padded_images = []
for img in images:
pad_size = max_len - img.shape[0]
if pad_size > 0:
padding = torch.zeros((pad_size,) + img.shape[1:])
img_padded = torch.cat([img, padding], dim=0)
padded_images.append(img_padded)
else:
padded_images.append(img)
return {"image": torch.stack(padded_images, dim=0), "label": torch.stack(labels)}
def get_config(self):
return self.config