From 486bc494142744e9d90f0483b611a785381401a7 Mon Sep 17 00:00:00 2001 From: ayush chaurasia Date: Fri, 25 Nov 2022 01:11:55 +0530 Subject: [PATCH] update --- ultralytics/yolo/engine/trainer.py | 7 +++++-- ultralytics/yolo/engine/validator.py | 1 - ultralytics/yolo/utils/torch_utils.py | 16 ++++++++++++++++ 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/ultralytics/yolo/engine/trainer.py b/ultralytics/yolo/engine/trainer.py index 4b0ac60..ef46470 100644 --- a/ultralytics/yolo/engine/trainer.py +++ b/ultralytics/yolo/engine/trainer.py @@ -28,16 +28,19 @@ 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 +from ultralytics.yolo.utils.torch_utils import ModelEMA, de_parallel, one_cycle, init_seeds DEFAULT_CONFIG = ROOT / "yolo/utils/configs/default.yaml" +RANK = int(os.getenv('RANK', -1)) class BaseTrainer: def __init__(self, config=DEFAULT_CONFIG, overrides={}): - self.console = LOGGER self.args = self._get_config(config, overrides) + + init_seeds(self.args.seed + 1 + RANK, deterministic=True) + self.console = LOGGER 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 24a840e..220041c 100644 --- a/ultralytics/yolo/engine/validator.py +++ b/ultralytics/yolo/engine/validator.py @@ -41,7 +41,6 @@ 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 b48160d..2adf4a8 100644 --- a/ultralytics/yolo/utils/torch_utils.py +++ b/ultralytics/yolo/utils/torch_utils.py @@ -2,10 +2,12 @@ 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 @@ -198,6 +200,20 @@ 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