diff --git a/ultralytics/yolo/engine/trainer.py b/ultralytics/yolo/engine/trainer.py index ef46470..4b0ac60 100644 --- a/ultralytics/yolo/engine/trainer.py +++ b/ultralytics/yolo/engine/trainer.py @@ -28,19 +28,16 @@ from ultralytics.yolo.utils import LOGGER, ROOT, TQDM_BAR_FORMAT from ultralytics.yolo.utils.checks import print_args from ultralytics.yolo.utils.files import increment_path, save_yaml from ultralytics.yolo.utils.modeling import get_model -from ultralytics.yolo.utils.torch_utils import ModelEMA, de_parallel, one_cycle, init_seeds +from ultralytics.yolo.utils.torch_utils import ModelEMA, de_parallel, one_cycle DEFAULT_CONFIG = ROOT / "yolo/utils/configs/default.yaml" -RANK = int(os.getenv('RANK', -1)) class BaseTrainer: def __init__(self, config=DEFAULT_CONFIG, overrides={}): - self.args = self._get_config(config, overrides) - - init_seeds(self.args.seed + 1 + RANK, deterministic=True) self.console = LOGGER + self.args = self._get_config(config, overrides) self.validator = None self.model = None self.callbacks = defaultdict(list) diff --git a/ultralytics/yolo/engine/validator.py b/ultralytics/yolo/engine/validator.py index 220041c..24a840e 100644 --- a/ultralytics/yolo/engine/validator.py +++ b/ultralytics/yolo/engine/validator.py @@ -41,6 +41,7 @@ class BaseValidator: else: # TODO: handle this when detectMultiBackend is supported assert model is not None, "Either trainer or model is needed for validation" # model = DetectMultiBacked(model) + # TODO: implement init_model_attributes() model.eval() dt = Profile(), Profile(), Profile(), Profile() diff --git a/ultralytics/yolo/utils/torch_utils.py b/ultralytics/yolo/utils/torch_utils.py index 2adf4a8..b48160d 100644 --- a/ultralytics/yolo/utils/torch_utils.py +++ b/ultralytics/yolo/utils/torch_utils.py @@ -2,12 +2,10 @@ import math import os import platform import time -import random from contextlib import contextmanager from copy import deepcopy from pathlib import Path -import numpy as np import thop import torch import torch.distributed as dist @@ -200,20 +198,6 @@ def one_cycle(y1=0.0, y2=1.0, steps=100): # lambda function for sinusoidal ramp from y1 to y2 https://arxiv.org/pdf/1812.01187.pdf return lambda x: ((1 - math.cos(x * math.pi / steps)) / 2) * (y2 - y1) + y1 -def init_seeds(seed=0, deterministic=False): - # Initialize random number generator (RNG) seeds https://pytorch.org/docs/stable/notes/randomness.html - random.seed(seed) - np.random.seed(seed) - torch.manual_seed(seed) - torch.cuda.manual_seed(seed) - torch.cuda.manual_seed_all(seed) # for Multi-GPU, exception safe - # torch.backends.cudnn.benchmark = True # AutoBatch problem https://github.com/ultralytics/yolov5/issues/9287 - if deterministic and check_version(torch.__version__, '1.12.0'): # https://github.com/ultralytics/yolov5/pull/8213 - torch.use_deterministic_algorithms(True) - torch.backends.cudnn.deterministic = True - os.environ['CUBLAS_WORKSPACE_CONFIG'] = ':4096:8' - os.environ['PYTHONHASHSEED'] = str(seed) - class ModelEMA: """ Updated Exponential Moving Average (EMA) from https://github.com/rwightman/pytorch-image-models