From 41321fa97e13d2c8cf15a786204a82ba49097873 Mon Sep 17 00:00:00 2001 From: Maximilian Strobel Date: Tue, 5 Apr 2022 15:48:45 +0200 Subject: [PATCH 1/6] fix: disable usage of root logger `logging.basicConfig` configures Python's root logger. This prohibits fine control of logging, overwrites logging configuration done outside the package, and is not best practice. Instead, the used logger is now configured directly, and the root logger is untouched. Example: If yolov5 is used as part of another project with some sophisticated logging, the internal `logging.basicConfig` call overwrites all the external configuration. --- utils/general.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/utils/general.py b/utils/general.py index 65dd9326797e..739c6a2808bb 100755 --- a/utils/general.py +++ b/utils/general.py @@ -82,8 +82,15 @@ def set_logging(name=None, verbose=VERBOSE): for h in logging.root.handlers: logging.root.removeHandler(h) # remove all handlers associated with the root logger object rank = int(os.getenv('RANK', -1)) # rank in world for Multi-GPU trainings - logging.basicConfig(format="%(message)s", level=logging.INFO if (verbose and rank in (-1, 0)) else logging.WARNING) - return logging.getLogger(name) + + log_level = logging.INFO if (verbose and rank in (-1, 0)) else logging.WARNING + log = logging.getLogger(name) + log.setLevel(log_level) + stream_handler = logging.StreamHandler() + stream_handler.setFormatter(logging.Formatter("%(message)s")) + stream_handler.setLevel(log_level) + log.addHandler(stream_handler) + return log LOGGER = set_logging('yolov5') # define globally (used in train.py, val.py, detect.py, etc.) From 3a5546ea244618a810b9e6f853d94281045c405f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 5 Apr 2022 14:25:30 +0000 Subject: [PATCH 2/6] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- data/Objects365.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/Objects365.yaml b/data/Objects365.yaml index 82b42a120d40..114bee2b159c 100644 --- a/data/Objects365.yaml +++ b/data/Objects365.yaml @@ -61,9 +61,9 @@ names: ['Person', 'Sneakers', 'Chair', 'Other Shoes', 'Hat', 'Car', 'Lamp', 'Gla # Download script/URL (optional) --------------------------------------------------------------------------------------- download: | from tqdm import tqdm - + from utils.general import Path, check_requirements, download, np, xyxy2xywhn - + check_requirements(('pycocotools>=2.0',)) from pycocotools.coco import COCO From 665bf323215135cc621260136ef76f9e7c256acc Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Tue, 5 Apr 2022 16:32:13 +0200 Subject: [PATCH 3/6] Update general.py --- utils/general.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/utils/general.py b/utils/general.py index 739c6a2808bb..728f1e5eac6e 100755 --- a/utils/general.py +++ b/utils/general.py @@ -82,14 +82,13 @@ def set_logging(name=None, verbose=VERBOSE): for h in logging.root.handlers: logging.root.removeHandler(h) # remove all handlers associated with the root logger object rank = int(os.getenv('RANK', -1)) # rank in world for Multi-GPU trainings - - log_level = logging.INFO if (verbose and rank in (-1, 0)) else logging.WARNING + level = logging.INFO if (verbose and rank in (-1, 0)) else logging.WARNING log = logging.getLogger(name) - log.setLevel(log_level) - stream_handler = logging.StreamHandler() - stream_handler.setFormatter(logging.Formatter("%(message)s")) - stream_handler.setLevel(log_level) - log.addHandler(stream_handler) + log.setLevel(level) + handler = logging.StreamHandler() + handler.setFormatter(logging.Formatter("%(message)s")) + handler.setLevel(level) + log.addHandler(handler) return log From d4e93b16147120a021443173dbd9826c36b738e0 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Tue, 5 Apr 2022 17:18:31 +0200 Subject: [PATCH 4/6] Update general.py --- utils/general.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/general.py b/utils/general.py index 728f1e5eac6e..5316f504871a 100755 --- a/utils/general.py +++ b/utils/general.py @@ -89,10 +89,10 @@ def set_logging(name=None, verbose=VERBOSE): handler.setFormatter(logging.Formatter("%(message)s")) handler.setLevel(level) log.addHandler(handler) - return log -LOGGER = set_logging('yolov5') # define globally (used in train.py, val.py, detect.py, etc.) +set_logging() # run before defining LOGGER +LOGGER = logging.getLogger("yolov5") # define globally (used in train.py, val.py, detect.py, etc.) def user_config_dir(dir='Ultralytics', env_var='YOLOV5_CONFIG_DIR'): From a5f896979f1c35119b51d079a08535a7678cbdc1 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Tue, 5 Apr 2022 17:26:12 +0200 Subject: [PATCH 5/6] Comment kaggle --- utils/general.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/utils/general.py b/utils/general.py index 5316f504871a..f0ad5a2d9e6d 100755 --- a/utils/general.py +++ b/utils/general.py @@ -78,9 +78,9 @@ def is_writeable(dir, test=False): def set_logging(name=None, verbose=VERBOSE): # Sets level and returns logger - if is_kaggle(): - for h in logging.root.handlers: - logging.root.removeHandler(h) # remove all handlers associated with the root logger object + # if is_kaggle(): + # for h in logging.root.handlers: + # logging.root.removeHandler(h) # remove all handlers associated with the root logger object rank = int(os.getenv('RANK', -1)) # rank in world for Multi-GPU trainings level = logging.INFO if (verbose and rank in (-1, 0)) else logging.WARNING log = logging.getLogger(name) From 7f31712b1b4de87723f48297e1aea00e52eabb5f Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Tue, 5 Apr 2022 17:28:06 +0200 Subject: [PATCH 6/6] Uncomment kaggle --- utils/general.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/utils/general.py b/utils/general.py index f0ad5a2d9e6d..5316f504871a 100755 --- a/utils/general.py +++ b/utils/general.py @@ -78,9 +78,9 @@ def is_writeable(dir, test=False): def set_logging(name=None, verbose=VERBOSE): # Sets level and returns logger - # if is_kaggle(): - # for h in logging.root.handlers: - # logging.root.removeHandler(h) # remove all handlers associated with the root logger object + if is_kaggle(): + for h in logging.root.handlers: + logging.root.removeHandler(h) # remove all handlers associated with the root logger object rank = int(os.getenv('RANK', -1)) # rank in world for Multi-GPU trainings level = logging.INFO if (verbose and rank in (-1, 0)) else logging.WARNING log = logging.getLogger(name)